src/HOL/Nominal/Examples/Fsub.thy
changeset 18660 9968dc816cda
parent 18655 73cebafb9a89
child 18747 7dd9aa160b6c
equal deleted inserted replaced
18659:2ff0ae57431d 18660:9968dc816cda
   453 lemma subtype_reflexivity:
   453 lemma subtype_reflexivity:
   454   assumes a: "\<turnstile> \<Gamma> ok"
   454   assumes a: "\<turnstile> \<Gamma> ok"
   455   and b: "T closed_in \<Gamma>"
   455   and b: "T closed_in \<Gamma>"
   456   shows "\<Gamma> \<turnstile> T <: T"
   456   shows "\<Gamma> \<turnstile> T <: T"
   457 using a b
   457 using a b
   458 proof(nominal_induct T avoiding: \<Gamma> rule: ty.induct_unsafe)
   458 proof(nominal_induct T avoiding: \<Gamma> rule: ty.induct)
   459   case (Forall X T\<^isub>1 T\<^isub>2)
   459   case (Forall X T\<^isub>1 T\<^isub>2)
   460   have ih_T\<^isub>1: "\<And>\<Gamma>. \<turnstile> \<Gamma> ok \<Longrightarrow> T\<^isub>1 closed_in \<Gamma> \<Longrightarrow> \<Gamma> \<turnstile> T\<^isub>1 <: T\<^isub>1" by fact 
   460   have ih_T\<^isub>1: "\<And>\<Gamma>. \<turnstile> \<Gamma> ok \<Longrightarrow> T\<^isub>1 closed_in \<Gamma> \<Longrightarrow> \<Gamma> \<turnstile> T\<^isub>1 <: T\<^isub>1" by fact 
   461   have ih_T\<^isub>2: "\<And>\<Gamma>. \<turnstile> \<Gamma> ok \<Longrightarrow> T\<^isub>2 closed_in \<Gamma> \<Longrightarrow> \<Gamma> \<turnstile> T\<^isub>2 <: T\<^isub>2" by fact
   461   have ih_T\<^isub>2: "\<And>\<Gamma>. \<turnstile> \<Gamma> ok \<Longrightarrow> T\<^isub>2 closed_in \<Gamma> \<Longrightarrow> \<Gamma> \<turnstile> T\<^isub>2 <: T\<^isub>2" by fact
   462   have fresh_cond: "X\<sharp>\<Gamma>" by fact
   462   have fresh_cond: "X\<sharp>\<Gamma>" by fact
   463   hence fresh_domain: "X\<sharp>(domain \<Gamma>)" by (simp add: fresh_domain)
   463   hence fresh_domain: "X\<sharp>(domain \<Gamma>)" by (simp add: fresh_domain)
   476 lemma subtype_reflexivity_semiautomated:
   476 lemma subtype_reflexivity_semiautomated:
   477   assumes a: "\<turnstile> \<Gamma> ok"
   477   assumes a: "\<turnstile> \<Gamma> ok"
   478   and     b: "T closed_in \<Gamma>"
   478   and     b: "T closed_in \<Gamma>"
   479   shows "\<Gamma> \<turnstile> T <: T"
   479   shows "\<Gamma> \<turnstile> T <: T"
   480 using a b
   480 using a b
   481 apply(nominal_induct T avoiding: \<Gamma> rule: ty.induct_unsafe)
   481 apply(nominal_induct T avoiding: \<Gamma> rule: ty.induct)
   482 apply(auto simp add: ty.supp abs_supp closed_in_def supp_atm)
   482 apply(auto simp add: ty.supp abs_supp closed_in_def supp_atm)
   483   --{* Too bad that this instantiation cannot be found automatically by
   483   --{* Too bad that this instantiation cannot be found automatically by
   484   \isakeyword{auto}; \isakeyword{blast} would find it if we had not used 
   484   \isakeyword{auto}; \isakeyword{blast} would find it if we had not used 
   485   an explicit definition for @{text "closed_in_def"}. *}
   485   an explicit definition for @{text "closed_in_def"}. *}
   486 apply(drule_tac x="(tyvrs, ty2)#\<Gamma>" in meta_spec)
   486 apply(drule_tac x="(tyvrs, ty2)#\<Gamma>" in meta_spec)