equal
deleted
inserted
replaced
6 Composition |
6 Composition |
7 |
7 |
8 From Chandy and Sanders, "Reasoning About Program Composition" |
8 From Chandy and Sanders, "Reasoning About Program Composition" |
9 *) |
9 *) |
10 |
10 |
11 (*split_all_tac causes a big blow-up*) |
|
12 claset_ref() := claset() delSWrapper record_split_name; |
|
13 |
|
14 Delsimps [split_paired_All]; |
|
15 |
|
16 |
|
17 (*** component ***) |
11 (*** component ***) |
18 |
12 |
19 Goalw [component_def] "SKIP component F"; |
13 Goalw [component_def] "SKIP component F"; |
20 by (force_tac (claset() addIs [Join_SKIP_left], simpset()) 1); |
14 by (force_tac (claset() addIs [Join_SKIP_left], simpset()) 1); |
21 qed "component_SKIP"; |
15 qed "component_SKIP"; |
52 qed "component_Init"; |
46 qed "component_Init"; |
53 |
47 |
54 Goal "[| F component G; G component F |] ==> F=G"; |
48 Goal "[| F component G; G component F |] ==> F=G"; |
55 by (blast_tac (claset() addSIs [program_equalityI, |
49 by (blast_tac (claset() addSIs [program_equalityI, |
56 component_Init, component_Acts]) 1); |
50 component_Init, component_Acts]) 1); |
57 qed "component_anti_sym"; |
51 qed "component_antisym"; |
58 |
52 |
59 Goalw [component_def] |
53 Goalw [component_def] |
60 "F component H = (EX G. F Join G = H & Disjoint F G)"; |
54 "F component H = (EX G. F Join G = H & Disjoint F G)"; |
61 by (blast_tac (claset() addSIs [Diff_Disjoint, Join_Diff2]) 1); |
55 by (blast_tac (claset() addSIs [Diff_Disjoint, Join_Diff2]) 1); |
62 qed "component_eq"; |
56 qed "component_eq"; |