library Basic/StructuredDatatypes
version 0.3
%% authors: M.Roggenbach, T.Mossakowski
%% date: 1.11.99
| FinSet[Elem]::= | {} | set(Elem) | |
| __ u __ (FinSet[Elem];FinSet[Elem]) |
| __ u __: | FinSet[Elem] ×FinSet[Elem] -> FinSet[Elem], |
| assoc, comm, idem, unit {} |
| __ elemOf __: | Elem ×FinSet[Elem]; |
| __ c __: | FinSet[Elem] ×FinSet[Elem] |
| __ + __ : | Elem ×FinSet[Elem] -> FinSet[Elem]; |
| __ + __, | |
| __ - __ : | FinSet[Elem] ×Elem -> FinSet[Elem]; |
| __ n __, | |
| __ - __, | |
| __ symmDiff __: | FinSet[Elem] ×FinSet[Elem] -> FinSet[Elem]; |
| #__: | FinSet[Elem] -> Nat; |
| __ n __: | FinSet[Elem] ×FinSet[Elem] -> FinSet[Elem], |
| assoc, comm, idem; | |
| __ symmDiff __ : | FinSet[Elem] ×FinSet[Elem] -> FinSet[Elem], |
| comm; |
| FinitePowerSet[X]= | { Y: FinSet[Elem] . Y c X }; |
| Elem[X] = | {x : Elem . x elemOf X } |
| __ elemOf __ : | Elem[X] ×FinitePowerSet[X]; |
| __ c __: | FinitePowerSet[X] ×FinitePowerSet[X] |
| {}: | FinitePowerSet[X]; |
| set : | Elem[X] -> FinitePowerSet[X]; |
| add: | Elem[X] × FinitePowerSet[X] -> FinitePowerSet[X]; |
| __ u __, | |
| __ n __, | |
| __ - __, | |
| __ symmDiff __: | FinitePowerSet[X] ×FinitePowerSet[X] |
| -> FinitePowerSet[X] |
| 0 |-> {}, |
| 1 |-> X, |
| __ |¯| __ |-> __ n __, |
| __ |_| __ |-> __ u __ |
| List[Elem] | ::= | nil | sort NeList[Elem]; |
| NeList[Elem] | ::= | __ :: __ (first : Elem; rest : List[Elem]) |
| first, last: | List[Elem] ->? Elem; |
| first, last: | NeList[Elem] -> Elem; |
| #__: | List[Elem] -> Nat; |
| __ + + __ : | List[Elem] × List[Elem] -> List[Elem]; |
| __ + + __ : | NeList[Elem] × List[Elem] -> NeList[Elem]; |
| __ + + __ : | List[Elem] × NeList[Elem] -> NeList[Elem]; |
| reverse: | List[Elem] -> List[Elem]; |
| take,drop: | Nat × List[Elem] ->? List[Elem] |
| 0 |-> Nil, |
| __+__ |-> __ + + __ |
| sorts | List[Char] |-> String, |
| NeList[Char] |-> NonEmptyString |
| quotient(K)=quotient(L) <=> forall x: Elem . count(x,K) = count(x,L) |
| __ elemOf __: | Elem ×Bag[Elem]; |
| __ c __: | Bag[Elem] ×Bag[Elem] |
| empty: | Bag[Elem]; |
| count : | Elem × Bag[Elem] -> Nat; |
| __ + __ : | Elem × Bag[Elem] -> Bag[Elem]; |
| __ + __, __- __: | Bag[Elem] × Elem -> Bag[Elem]; |
| __ u __, __ n __: | Bag[Elem] ×Bag[Elem] -> Bag[Elem] |
| x + B = C <=> | ||||
|
| ( B - x = C <=> | ||||
| ||||
| ) if count(x,B)>0 |
| sorts | Pair[S,T], |
| ops | pair, first, second |
| FiniteMap = { | F : FinSet[Pair[S,T]] . forall g,h: Pair[S,T] . |
| (g elemOf F /\ h elemOf F /\ first(g)=first(h)) | |
| => second(g)=second(h) } |
| isEmpty: | FiniteMap; |
| __elemOf__: | Pair[S,T] × FiniteMap; |
| __canBeAddedTo __: | Pair[S,T] × FiniteMap; |
| emptyMap: | FiniteMap; |
| add: | Pair[S,T] × FiniteMap ->? FiniteMap; |
| remove: | Pair[S,T] × FiniteMap -> FiniteMap; |
| evaluate: | S × FiniteMap ->? T; |
| defadd(p,F) <=> forall q : Pair[S,T] . |
| (q elemOf F /\ first(p)=first(q)) => second(p)=second(q) |
| FiniteMap [sort Index] [Elem] | ||||||||
reveal
|
| init: | Array[Elem] -> Array[Elem]; |
| __!__: | Array[Elem] × Index ->? Elem; |
| __!__:=__ : | Array[Elem] × Index × Elem -> Array[Elem]; |
| sort | Array[Elem], |
| ops | emptyArray, init, __!__, __!__:=__ |