11 by (Asm_simp_tac 1); |
11 by (Asm_simp_tac 1); |
12 qed "map_of_Cons2"; |
12 qed "map_of_Cons2"; |
13 Delsimps[map_of_Cons]; (* sic! *) |
13 Delsimps[map_of_Cons]; (* sic! *) |
14 Addsimps[map_of_Cons1, map_of_Cons2]; |
14 Addsimps[map_of_Cons1, map_of_Cons2]; |
15 |
15 |
16 Goalw [ObjectC_def] "class tprg Object = Some (arbitrary, [], [])"; |
16 Goalw [ObjectC_def,class_def] "class tprg Object = Some (arbitrary, [], [])"; |
17 by (Simp_tac 1); |
17 by (Simp_tac 1); |
18 qed "class_tprg_Object"; |
18 qed "class_tprg_Object"; |
19 |
19 |
20 Goalw [ObjectC_def, BaseC_def, ExtC_def] "class tprg Base = Some (Object, \ |
20 Goalw [ObjectC_def, BaseC_def, ExtC_def, class_def] |
|
21 "class tprg Base = Some (Object, \ |
21 \ [(vee, PrimT Boolean)], \ |
22 \ [(vee, PrimT Boolean)], \ |
22 \ [((foo, [Class Base]), Class Base, foo_Base)])"; |
23 \ [((foo, [Class Base]), Class Base, foo_Base)])"; |
23 by (Simp_tac 1); |
24 by (Simp_tac 1); |
24 qed "class_tprg_Base"; |
25 qed "class_tprg_Base"; |
25 |
26 |
26 Goalw [ObjectC_def, BaseC_def, ExtC_def] "class tprg Ext = Some (Base, \ |
27 Goalw [ObjectC_def, BaseC_def, ExtC_def, class_def] |
|
28 "class tprg Ext = Some (Base, \ |
27 \ [(vee, PrimT Integer)], \ |
29 \ [(vee, PrimT Integer)], \ |
28 \ [((foo, [Class Base]), Class Ext, foo_Ext)])"; |
30 \ [((foo, [Class Base]), Class Ext, foo_Ext)])"; |
29 by (Simp_tac 1); |
31 by (Simp_tac 1); |
30 qed "class_tprg_Ext"; |
32 qed "class_tprg_Ext"; |
31 |
33 |
47 Goal "(Base, Ext) \\<in> (subcls1 tprg)^+ ==> R"; |
49 Goal "(Base, Ext) \\<in> (subcls1 tprg)^+ ==> R"; |
48 by (auto_tac (claset() addSDs [tranclD,subcls1D],simpset())); |
50 by (auto_tac (claset() addSDs [tranclD,subcls1D],simpset())); |
49 qed "not_Base_subcls_Ext"; |
51 qed "not_Base_subcls_Ext"; |
50 AddSEs [not_Base_subcls_Ext]; |
52 AddSEs [not_Base_subcls_Ext]; |
51 |
53 |
52 Goalw [ObjectC_def, BaseC_def, ExtC_def] "class tprg C = Some z ==> C=Object \\<or> C=Base \\<or> C=Ext"; |
54 Goalw [ObjectC_def, BaseC_def, ExtC_def, class_def] |
|
55 "class tprg C = Some z ==> C=Object \\<or> C=Base \\<or> C=Ext"; |
53 by (auto_tac (claset(),simpset()addsplits[split_if_asm]addsimps[map_of_Cons])); |
56 by (auto_tac (claset(),simpset()addsplits[split_if_asm]addsimps[map_of_Cons])); |
54 qed "class_tprgD"; |
57 qed "class_tprgD"; |
55 |
58 |
56 Goal "(C,C) \\<in> (subcls1 tprg)^+ ==> R"; |
59 Goal "(C,C) \\<in> (subcls1 tprg)^+ ==> R"; |
57 by (auto_tac (claset() addSDs [tranclD,subcls1D],simpset())); |
60 by (auto_tac (claset() addSDs [tranclD,subcls1D],simpset())); |
96 Goal "fields (tprg, Object) = []"; |
99 Goal "fields (tprg, Object) = []"; |
97 by (stac fields_rec_ 1); |
100 by (stac fields_rec_ 1); |
98 by Auto_tac; |
101 by Auto_tac; |
99 qed "fields_Object"; |
102 qed "fields_Object"; |
100 Addsimps [fields_Object]; |
103 Addsimps [fields_Object]; |
|
104 |
|
105 Addsimps [is_class_def]; |
101 |
106 |
102 Goal "fields (tprg,Base) = [((vee, Base), PrimT Boolean)]"; |
107 Goal "fields (tprg,Base) = [((vee, Base), PrimT Boolean)]"; |
103 by (stac fields_rec_ 1); |
108 by (stac fields_rec_ 1); |
104 by Auto_tac; |
109 by Auto_tac; |
105 qed "fields_Base"; |
110 qed "fields_Base"; |