src/HOL/Nominal/Examples/Fsub.thy
changeset 18417 149cc4126997
parent 18416 32833aae901f
child 18424 a37f06555c07
equal deleted inserted replaced
18416:32833aae901f 18417:149cc4126997
   729       have lh_drv_prem1: "\<turnstile> \<Gamma>1 ok" by fact
   729       have lh_drv_prem1: "\<turnstile> \<Gamma>1 ok" by fact
   730       have lh_drv_prem2: "S1 closed_in \<Gamma>1" by fact
   730       have lh_drv_prem2: "S1 closed_in \<Gamma>1" by fact
   731       have Q_inst: "Top=Q" by fact
   731       have Q_inst: "Top=Q" by fact
   732       have rh_drv: "\<Gamma>1 \<turnstile> Q <: T" --"rh drv." by fact
   732       have rh_drv: "\<Gamma>1 \<turnstile> Q <: T" --"rh drv." by fact
   733       hence "T = Top" using Q_inst by (simp add: S_TopE)
   733       hence "T = Top" using Q_inst by (simp add: S_TopE)
   734       thus "\<Gamma>1 \<turnstile> S1 <: T" using top_case[of "\<Gamma>1" "S1" "False" "T"] lh_drv_prem1 lh_drv_prem2 by simp
   734       thus "\<Gamma>1 \<turnstile> S1 <: T" using top_case[of "\<Gamma>1" "S1" "False" "T"] lh_drv_prem1 lh_drv_prem2 by blast
   735     next
   735     next
   736       case (S_Var \<Gamma>1 X1 S1 T1) --{* lh drv.: @{term "\<Gamma> \<turnstile> S <: Q \<equiv> \<Gamma>1 \<turnstile> TVar(X1) <: S1"} *}
   736       case (S_Var \<Gamma>1 X1 S1 T1) --{* lh drv.: @{term "\<Gamma> \<turnstile> S <: Q \<equiv> \<Gamma>1 \<turnstile> TVar(X1) <: S1"} *}
   737       have lh_drv_prem1: "\<turnstile> \<Gamma>1 ok" by fact
   737       have lh_drv_prem1: "\<turnstile> \<Gamma>1 ok" by fact
   738       have lh_drv_prem2: "(X1,S1)\<in>set \<Gamma>1" by fact
   738       have lh_drv_prem2: "(X1,S1)\<in>set \<Gamma>1" by fact
   739       have IH_inner: "\<And>T. \<Gamma>1 \<turnstile> Q <: T \<Longrightarrow> T1=Q \<Longrightarrow> \<Gamma>1 \<turnstile> S1 <: T" by fact
   739       have IH_inner: "\<And>T. \<Gamma>1 \<turnstile> Q <: T \<Longrightarrow> T1=Q \<Longrightarrow> \<Gamma>1 \<turnstile> S1 <: T" by fact