src/HOL/Finite.thy
changeset 11451 8abfb4f7bd02
parent 11092 69c1abb9a129
child 11786 51ce34ef5113
equal deleted inserted replaced
11450:1b02a6c4032f 11451:8abfb4f7bd02
    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 =