54 (* NotR *) |
55 (* NotR *) |
55 apply(rule_tac f="fresh_fun" in arg_cong) |
56 apply(rule_tac f="fresh_fun" in arg_cong) |
56 apply(simp add: expand_fun_eq) |
57 apply(simp add: expand_fun_eq) |
57 apply(rule allI) |
58 apply(rule allI) |
58 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
59 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
59 apply(simp_all) |
60 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
61 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
60 apply(drule meta_spec)+ |
62 apply(drule meta_spec)+ |
61 apply(drule meta_mp, erule_tac [2] meta_mp) |
63 apply(drule meta_mp, erule_tac [2] meta_mp) |
62 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
64 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
63 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
64 (* NotL *) |
65 (* NotL *) |
65 apply(rule_tac f="fresh_fun" in arg_cong) |
66 apply(rule_tac f="fresh_fun" in arg_cong) |
66 apply(simp add: expand_fun_eq) |
67 apply(simp add: expand_fun_eq) |
67 apply(rule allI) |
68 apply(rule allI) |
68 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
69 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
69 apply(simp_all) |
70 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
71 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
70 apply(drule meta_spec)+ |
72 apply(drule meta_spec)+ |
71 apply(drule meta_mp, erule_tac [2] meta_mp) |
73 apply(drule meta_mp, erule_tac [2] meta_mp) |
72 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
74 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
73 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
74 (* AndR *) |
75 (* AndR *) |
75 apply(rule_tac f="fresh_fun" in arg_cong) |
76 apply(rule_tac f="fresh_fun" in arg_cong) |
76 apply(simp add: expand_fun_eq) |
77 apply(simp add: expand_fun_eq) |
77 apply(rule allI) |
78 apply(rule allI) |
78 apply(rule_tac f="fresh_fun" in arg_cong) |
79 apply(rule_tac f="fresh_fun" in arg_cong) |
79 apply(simp add: expand_fun_eq) |
80 apply(simp add: expand_fun_eq) |
80 apply(rule allI) |
81 apply(rule allI) |
81 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
82 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
82 apply(simp_all) |
83 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
84 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
83 apply(drule meta_spec)+ |
85 apply(drule meta_spec)+ |
84 apply(drule meta_mp, erule_tac [2] meta_mp) |
86 apply(drule meta_mp, erule_tac [2] meta_mp) |
85 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
87 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
86 apply(drule meta_spec)+ |
88 apply(drule meta_spec)+ |
87 apply(drule meta_mp, erule_tac [2] meta_mp) |
89 apply(drule meta_mp, erule_tac [2] meta_mp) |
88 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
90 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
89 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
90 (* AndL1 *) |
91 (* AndL1 *) |
91 apply(rule_tac f="fresh_fun" in arg_cong) |
92 apply(rule_tac f="fresh_fun" in arg_cong) |
92 apply(simp add: expand_fun_eq) |
93 apply(simp add: expand_fun_eq) |
93 apply(rule allI) |
94 apply(rule allI) |
94 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
95 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
95 apply(simp_all) |
96 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
97 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
96 apply(drule meta_spec)+ |
98 apply(drule meta_spec)+ |
97 apply(drule meta_mp, erule_tac [2] meta_mp) |
99 apply(drule meta_mp, erule_tac [2] meta_mp) |
98 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
100 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
99 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
100 (* AndL1 *) |
101 (* AndL1 *) |
101 apply(rule_tac f="fresh_fun" in arg_cong) |
102 apply(rule_tac f="fresh_fun" in arg_cong) |
102 apply(simp add: expand_fun_eq) |
103 apply(simp add: expand_fun_eq) |
103 apply(rule allI) |
104 apply(rule allI) |
104 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
105 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
105 apply(simp_all) |
106 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
107 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
106 apply(drule meta_spec)+ |
108 apply(drule meta_spec)+ |
107 apply(drule meta_mp, erule_tac [2] meta_mp) |
109 apply(drule meta_mp, erule_tac [2] meta_mp) |
108 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
110 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
109 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
110 (* OrR1 *) |
111 (* OrR1 *) |
111 apply(rule_tac f="fresh_fun" in arg_cong) |
112 apply(rule_tac f="fresh_fun" in arg_cong) |
112 apply(simp add: expand_fun_eq) |
113 apply(simp add: expand_fun_eq) |
113 apply(rule allI) |
114 apply(rule allI) |
114 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
115 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
115 apply(simp_all) |
116 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
117 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
116 apply(drule meta_spec)+ |
118 apply(drule meta_spec)+ |
117 apply(drule meta_mp, erule_tac [2] meta_mp) |
119 apply(drule meta_mp, erule_tac [2] meta_mp) |
118 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
120 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
119 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
120 (* OrR2 *) |
121 (* OrR2 *) |
121 apply(rule_tac f="fresh_fun" in arg_cong) |
122 apply(rule_tac f="fresh_fun" in arg_cong) |
122 apply(simp add: expand_fun_eq) |
123 apply(simp add: expand_fun_eq) |
123 apply(rule allI) |
124 apply(rule allI) |
124 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
125 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
125 apply(simp_all) |
126 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
127 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
126 apply(drule meta_spec)+ |
128 apply(drule meta_spec)+ |
127 apply(drule meta_mp, erule_tac [2] meta_mp) |
129 apply(drule meta_mp, erule_tac [2] meta_mp) |
128 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
130 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
129 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
130 (* OrL *) |
131 (* OrL *) |
131 apply(rule_tac f="fresh_fun" in arg_cong) |
132 apply(rule_tac f="fresh_fun" in arg_cong) |
132 apply(simp add: expand_fun_eq) |
133 apply(simp add: expand_fun_eq) |
133 apply(rule allI) |
134 apply(rule allI) |
134 apply(rule_tac f="fresh_fun" in arg_cong) |
135 apply(rule_tac f="fresh_fun" in arg_cong) |
135 apply(simp add: expand_fun_eq) |
136 apply(simp add: expand_fun_eq) |
136 apply(rule allI) |
137 apply(rule allI) |
137 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
138 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
138 apply(simp_all) |
139 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
140 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
139 apply(drule meta_spec)+ |
141 apply(drule meta_spec)+ |
140 apply(drule meta_mp, erule_tac [2] meta_mp) |
142 apply(drule meta_mp, erule_tac [2] meta_mp) |
141 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
143 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
142 apply(drule meta_spec)+ |
144 apply(drule meta_spec)+ |
143 apply(drule meta_mp, erule_tac [2] meta_mp) |
145 apply(drule meta_mp, erule_tac [2] meta_mp) |
144 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
146 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
145 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
146 (* ImpR *) |
147 (* ImpR *) |
147 apply(rule_tac f="fresh_fun" in arg_cong) |
148 apply(rule_tac f="fresh_fun" in arg_cong) |
148 apply(simp add: expand_fun_eq) |
149 apply(simp add: expand_fun_eq) |
149 apply(rule allI) |
150 apply(rule allI) |
150 apply(rule_tac f="fresh_fun" in arg_cong) |
151 apply(rule_tac f="fresh_fun" in arg_cong) |
151 apply(simp add: expand_fun_eq) |
152 apply(simp add: expand_fun_eq) |
152 apply(rule allI) |
153 apply(rule allI) |
153 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
154 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
154 apply(simp_all) |
155 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
156 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
155 apply(drule meta_spec)+ |
157 apply(drule meta_spec)+ |
156 apply(drule meta_mp, erule_tac [2] meta_mp) |
158 apply(drule meta_mp, erule_tac [2] meta_mp) |
157 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption) |
159 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption) |
158 apply(rule at_prm_eq_append'[OF at_name_inst], assumption) |
160 apply(rule at_prm_eq_append'[OF at_name_inst], assumption) |
159 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
160 (* ImpL *) |
161 (* ImpL *) |
161 apply(rule_tac f="fresh_fun" in arg_cong) |
162 apply(rule_tac f="fresh_fun" in arg_cong) |
162 apply(simp add: expand_fun_eq) |
163 apply(simp add: expand_fun_eq) |
163 apply(rule allI) |
164 apply(rule allI) |
164 apply(rule_tac f="fresh_fun" in arg_cong) |
165 apply(rule_tac f="fresh_fun" in arg_cong) |
165 apply(simp add: expand_fun_eq) |
166 apply(simp add: expand_fun_eq) |
166 apply(rule allI) |
167 apply(rule allI) |
167 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
168 apply(tactic {* DatatypeAux.cong_tac 1 *})+ |
168 apply(simp_all) |
169 apply(simp_all add: pt2[OF pt_name_inst] pt2[OF pt_coname_inst] |
|
170 pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
169 apply(drule meta_spec)+ |
171 apply(drule meta_spec)+ |
170 apply(drule meta_mp, erule_tac [2] meta_mp) |
172 apply(drule meta_mp, erule_tac [2] meta_mp) |
171 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
173 apply(rule at_prm_eq_append'[OF at_coname_inst], assumption, assumption) |
172 apply(drule meta_spec)+ |
174 apply(drule meta_spec)+ |
173 apply(drule meta_mp, erule_tac [2] meta_mp) |
175 apply(drule meta_mp, erule_tac [2] meta_mp) |
174 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
176 apply(assumption, rule at_prm_eq_append'[OF at_name_inst], assumption) |
175 apply(simp add: pt3[OF pt_name_inst] pt3[OF pt_coname_inst]) |
|
176 done |
177 done |
177 |
178 |
178 text {* Induction principles *} |
179 text {* Induction principles *} |
179 |
180 |
180 thm trm.induct_weak --"weak" |
181 thm trm.induct_weak --"weak" |