src/HOL/Nominal/Examples/Class.thy
changeset 19477 a95176d0f0dd
parent 19326 72e149c9caeb
child 19500 188d4e44c1a6
equal deleted inserted replaced
19476:816f519f8b72 19477:a95176d0f0dd
   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)"