19 |
19 |
20 consts |
20 consts |
21 C :: "state=>int" |
21 C :: "state=>int" |
22 c :: "state=>nat=>int" |
22 c :: "state=>nat=>int" |
23 |
23 |
24 consts |
24 primrec sum :: "[nat,state]=>int" where |
25 sum :: "[nat,state]=>int" |
25 (* sum I s = sigma_{i<I}. c s i *) |
26 sumj :: "[nat, nat, state]=>int" |
26 "sum 0 s = 0" |
|
27 | "sum (Suc i) s = (c s) i + sum i s" |
27 |
28 |
28 primrec (* sum I s = sigma_{i<I}. c s i *) |
29 primrec sumj :: "[nat, nat, state]=>int" where |
29 "sum 0 s = 0" |
|
30 "sum (Suc i) s = (c s) i + sum i s" |
|
31 |
|
32 primrec |
|
33 "sumj 0 i s = 0" |
30 "sumj 0 i s = 0" |
34 "sumj (Suc n) i s = (if n=i then sum n s else (c s) n + sumj n i s)" |
31 | "sumj (Suc n) i s = (if n=i then sum n s else (c s) n + sumj n i s)" |
35 |
32 |
36 types command = "(state*state)set" |
33 types command = "(state*state)set" |
37 |
34 |
38 constdefs |
35 definition a :: "nat=>command" where |
39 a :: "nat=>command" |
|
40 "a i == {(s, s'). (c s') i = (c s) i + 1 & (C s') = (C s) + 1}" |
36 "a i == {(s, s'). (c s') i = (c s) i + 1 & (C s') = (C s) + 1}" |
41 |
37 |
42 Component :: "nat => state program" |
38 definition Component :: "nat => state program" where |
43 "Component i == mk_total_program({s. C s = 0 & (c s) i = 0}, |
39 "Component i == mk_total_program({s. C s = 0 & (c s) i = 0}, |
44 {a i}, |
40 {a i}, |
45 \<Union>G \<in> preserves (%s. (c s) i). Acts G)" |
41 \<Union>G \<in> preserves (%s. (c s) i). Acts G)" |
46 |
42 |
47 |
43 |