14052
|
1 |
(* Title: ZF/UNITY/MultusetSum.thy
|
|
2 |
ID: $Id$
|
|
3 |
Author: Sidi O Ehmety
|
|
4 |
|
|
5 |
Setsum for multisets.
|
|
6 |
*)
|
|
7 |
|
|
8 |
MultisetSum = Multiset +
|
|
9 |
constdefs
|
|
10 |
|
|
11 |
lcomm :: "[i, i, [i,i]=>i]=>o"
|
|
12 |
"lcomm(A, B, f) ==
|
|
13 |
(ALL x:A. ALL y:A. ALL z:B. f(x, f(y, z))= f(y, f(x, z))) &
|
|
14 |
(ALL x:A. ALL y:B. f(x, y):B)"
|
|
15 |
|
|
16 |
general_setsum :: "[i,i,i, [i,i]=>i, i=>i] =>i"
|
|
17 |
"general_setsum(C, B, e, f, g) ==
|
|
18 |
if Finite(C) then fold[cons(e, B)](%x y. f(g(x), y), e, C) else e"
|
|
19 |
|
|
20 |
msetsum :: "[i=>i, i, i]=>i"
|
|
21 |
"msetsum(g, C, B) == normalize(general_setsum(C, Mult(B), 0, op +#, g))"
|
|
22 |
|
|
23 |
(* sum for naturals *)
|
|
24 |
nsetsum :: "[i=>i, i] =>i"
|
|
25 |
"nsetsum(g, C) == general_setsum(C, nat, 0, op #+, g)"
|
|
26 |
end |