17 |
17 |
18 Goal "(F Join G) : Always invFG"; |
18 Goal "(F Join G) : Always invFG"; |
19 by (rtac AlwaysI 1); |
19 by (rtac AlwaysI 1); |
20 by (Force_tac 1); |
20 by (Force_tac 1); |
21 by (rtac (constrains_imp_Constrains RS StableI) 1); |
21 by (rtac (constrains_imp_Constrains RS StableI) 1); |
22 by (auto_tac (claset(), simpset() addsimps [constrains_Join])); |
22 by (auto_tac (claset(), simpset() addsimps [Join_constrains])); |
23 by (constrains_tac 2); |
23 by (constrains_tac 2); |
24 by (auto_tac (claset() addIs [order_antisym] addSEs [le_SucE], simpset())); |
24 by (auto_tac (claset() addIs [order_antisym] addSEs [le_SucE], simpset())); |
25 by (constrains_tac 1); |
25 by (constrains_tac 1); |
26 qed "invFG"; |
26 qed "invFG"; |
27 |
27 |
28 Goal "(F Join G) : ({s. NF s = k} - {s. BB s}) LeadsTo \ |
28 Goal "(F Join G) : ({s. NF s = k} - {s. BB s}) LeadsTo \ |
29 \ ({s. NF s = k} Int {s. BB s})"; |
29 \ ({s. NF s = k} Int {s. BB s})"; |
30 by (rtac (ensures_stable_Join1 RS leadsTo_Basis RS leadsTo_imp_LeadsTo) 1); |
30 by (rtac (stable_Join_ensures1 RS leadsTo_Basis RS leadsTo_imp_LeadsTo) 1); |
31 by (ensures_tac "cmdG" 2); |
31 by (ensures_tac "cmdG" 2); |
32 by (constrains_tac 1); |
32 by (constrains_tac 1); |
33 qed "lemma2_1"; |
33 qed "lemma2_1"; |
34 |
34 |
35 Goal "(F Join G) : ({s. NF s = k} Int {s. BB s}) LeadsTo {s. k < NF s}"; |
35 Goal "(F Join G) : ({s. NF s = k} Int {s. BB s}) LeadsTo {s. k < NF s}"; |
36 by (rtac (ensures_stable_Join2 RS leadsTo_Basis RS leadsTo_imp_LeadsTo) 1); |
36 by (rtac (stable_Join_ensures2 RS leadsTo_Basis RS leadsTo_imp_LeadsTo) 1); |
37 by (constrains_tac 2); |
37 by (constrains_tac 2); |
38 by (ensures_tac "cmdF" 1); |
38 by (ensures_tac "cmdF" 1); |
39 qed "lemma2_2"; |
39 qed "lemma2_2"; |
40 |
|
41 |
40 |
42 Goal "(F Join G) : UNIV LeadsTo {s. m < NF s}"; |
41 Goal "(F Join G) : UNIV LeadsTo {s. m < NF s}"; |
43 by (rtac LeadsTo_weaken_R 1); |
42 by (rtac LeadsTo_weaken_R 1); |
44 by (res_inst_tac [("f", "NF"), ("l","Suc m"), ("B","{}")] |
43 by (res_inst_tac [("f", "NF"), ("l","Suc m"), ("B","{}")] |
45 GreaterThan_bounded_induct 1); |
44 GreaterThan_bounded_induct 1); |