equal
deleted
inserted
replaced
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) |