174 apply(drule meta_spec)+ |
174 apply(drule meta_spec)+ |
175 apply(drule meta_mp, erule_tac [2] meta_mp) |
175 apply(drule meta_mp, erule_tac [2] meta_mp) |
176 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) |
177 done |
177 done |
178 |
178 |
|
179 lemma rec_fin_supp: |
|
180 assumes f: "finite ((supp (f1,f2,f3,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12))::name set)" |
|
181 and c: "\<exists>(a::name). a\<sharp>f3 \<and> (\<forall>t (r::'a::pt_name). a\<sharp>f3 a t r)" |
|
182 and a: "(t,r) \<in> trm_rec_set f1 f2 f3" |
|
183 shows "finite ((supp r)::name set)" |
|
184 using a |
|
185 proof (induct) |
|
186 case goal1 thus ?case using f by (finite_guess add: supp_prod fs_name1) |
|
187 next |
|
188 case goal2 thus ?case using f by (finite_guess add: supp_prod fs_name1) |
|
189 next |
|
190 case (goal3 c t r) |
|
191 have ih: "finite ((supp r)::name set)" by fact |
|
192 let ?g' = "\<lambda>pi a'. f3 a' ((pi@[(c,a')])\<bullet>t) (r (pi@[(c,a')]))" --"helper function" |
|
193 have fact1: "\<forall>pi. finite ((supp (?g' pi))::name set)" using f ih |
|
194 by (rule_tac allI, finite_guess add: perm_append supp_prod fs_name1) |
|
195 have fact2: "\<forall>pi. \<exists>(a''::name). a''\<sharp>(?g' pi) \<and> a''\<sharp>((?g' pi) a'')" |
|
196 proof |
|
197 fix pi::"name prm" |
|
198 show "\<exists>(a''::name). a''\<sharp>(?g' pi) \<and> a''\<sharp>((?g' pi) a'')" using f c ih |
|
199 by (rule_tac f3_freshness_conditions_simple, simp_all add: supp_prod) |
|
200 qed |
|
201 show ?case using fact1 fact2 ih f by (finite_guess add: fresh_fun_eqvt perm_append supp_prod fs_name1) |
|
202 qed |
|
203 |
179 text {* Induction principles *} |
204 text {* Induction principles *} |
180 |
205 |
181 thm trm.induct_weak --"weak" |
206 thm trm.induct_weak --"weak" |
182 thm trm.induct --"strong" |
207 thm trm.induct --"strong" |
183 thm trm.induct' --"strong with explicit context (rarely needed)" |
208 thm trm.induct' --"strong with explicit context (rarely needed)" |