equal
deleted
inserted
replaced
35 EmptyI "({},0) : cardR" |
35 EmptyI "({},0) : cardR" |
36 InsertI "[| (A,n) : cardR; a ~: A |] ==> (insert a A, Suc n) : cardR" |
36 InsertI "[| (A,n) : cardR; a ~: A |] ==> (insert a A, Suc n) : cardR" |
37 |
37 |
38 constdefs |
38 constdefs |
39 card :: 'a set => nat |
39 card :: 'a set => nat |
40 "card A == @n. (A,n) : cardR" |
40 "card A == THE n. (A,n) : cardR" |
41 |
41 |
42 (* |
42 (* |
43 A "fold" functional for finite sets. For n non-negative we have |
43 A "fold" functional for finite sets. For n non-negative we have |
44 fold f e {x1,...,xn} = f x1 (... (f xn e)) |
44 fold f e {x1,...,xn} = f x1 (... (f xn e)) |
45 where f is at least left-commutative. |
45 where f is at least left-commutative. |
54 insertI "[| x ~: A; (A,y) : foldSet f e |] |
54 insertI "[| x ~: A; (A,y) : foldSet f e |] |
55 ==> (insert x A, f x y) : foldSet f e" |
55 ==> (insert x A, f x y) : foldSet f e" |
56 |
56 |
57 constdefs |
57 constdefs |
58 fold :: "[['b,'a] => 'a, 'a, 'b set] => 'a" |
58 fold :: "[['b,'a] => 'a, 'a, 'b set] => 'a" |
59 "fold f e A == @x. (A,x) : foldSet f e" |
59 "fold f e A == THE x. (A,x) : foldSet f e" |
60 |
60 |
61 setsum :: "('a => 'b) => 'a set => ('b::{plus, zero})" |
61 setsum :: "('a => 'b) => 'a set => ('b::{plus, zero})" |
62 "setsum f A == if finite A then fold (op+ o f) 0 A else 0" |
62 "setsum f A == if finite A then fold (op+ o f) 0 A else 0" |
63 |
63 |
64 locale LC = |
64 locale LC = |