bags [T: TYPE] : THEORY %------------------------------------------------------------------------ % % Fundamental definitions and properties of bags. % % Authors: Rick Butler NASA Langley % Lee Pike NASA Langley %------------------------------------------------------------------------
BEGIN
x,y,t: VAR T
bag: TYPE = [T -> nat]
a,b,c: VAR bag
n: VAR nat
count(x,b): nat = b(x)
emptybag : bag = (LAMBDA t: 0)
singleton_bag(t) : bag = (LAMBDA (x: T): IF x = t THEN 1 ELSE 0 ENDIF)
insert(x,b) : bag = (LAMBDA t: IF x = t THEN b(t) + 1 ELSE b(t) ENDIF)
purge(x,b) : bag = (LAMBDA t: IF x = t THEN 0 ELSE b(t) ENDIF)
delete(x,b,n) : bag = (LAMBDA t: IF x = t THEN IF b(t) >= n THEN b(t) - n ELSE 0 ENDIF ELSE b(t) ENDIF)
extract(x,b) : bag = (LAMBDA t: IF x = t THEN b(t) ELSE 0 ENDIF)
plus(a,b) : bag = (LAMBDA t: a(t) + b(t))
union(a,b) : bag = (LAMBDA t: max(a(t),b(t)))
intersection(a,b): bag = (LAMBDA t: min(a(t),b(t)))
% --------- some predicates over bags ------------
delete_insert : LEMMA n > 0 IMPLIES
(delete(x,insert(x,b),n) = delete(x,b,n-1))
insert_delete : LEMMA b(x) > 0 IMPLIES insert(x,delete(x,b,1)) = b
delete_insert_diff : LEMMA x /= y IMPLIES
(delete(x,insert(y,b),n) = insert(y,delete(x,b,n)))
decomposition : LEMMANOT empty?(b) IMPLIES
(EXISTS a,x: b = insert(x,a))
bag_equality : LEMMA a = b IFF (FORALL x: eqmult(x,a,b))
subbag_empty : LEMMA subbag?(emptybag,a)
subbag_equality : LEMMA a = b IFF subbag?(a,b) AND subbag?(b,a)
subbag_trans : LEMMA subbag?(a,b) AND subbag?(b,c) IMPLIES subbag?(a,c)
% because of empty types the following is not provable -- look into it later % proper_subbag_rew : LEMMA proper_subbag?(a,b) IMPLIES subbag?(a,b) AND a /= b
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.