src/HOL/Proofs/Lambda/StrongNorm.thy
changeset 50241 8b0fdeeefef7
parent 44890 22f665a2e91c
child 50336 1d9a31b58053
equal deleted inserted replaced
50240:019d642d422d 50241:8b0fdeeefef7
   100   proof induct
   100   proof induct
   101     fix e T' u i
   101     fix e T' u i
   102     assume uIT: "IT u"
   102     assume uIT: "IT u"
   103     assume uT: "e \<turnstile> u : T"
   103     assume uT: "e \<turnstile> u : T"
   104     {
   104     {
   105       case (Var rs n e_ T'_ u_ i_)
   105       case (Var rs n e1 T'1 u1 i1)
   106       assume nT: "e\<langle>i:T\<rangle> \<turnstile> Var n \<degree>\<degree> rs : T'"
   106       assume nT: "e\<langle>i:T\<rangle> \<turnstile> Var n \<degree>\<degree> rs : T'"
   107       let ?ty = "\<lambda>t. \<exists>T'. e\<langle>i:T\<rangle> \<turnstile> t : T'"
   107       let ?ty = "\<lambda>t. \<exists>T'. e\<langle>i:T\<rangle> \<turnstile> t : T'"
   108       let ?R = "\<lambda>t. \<forall>e T' u i.
   108       let ?R = "\<lambda>t. \<forall>e T' u i.
   109         e\<langle>i:T\<rangle> \<turnstile> t : T' \<longrightarrow> IT u \<longrightarrow> e \<turnstile> u : T \<longrightarrow> IT (t[u/i])"
   109         e\<langle>i:T\<rangle> \<turnstile> t : T' \<longrightarrow> IT u \<longrightarrow> e \<turnstile> u : T \<longrightarrow> IT (t[u/i])"
   110       show "IT ((Var n \<degree>\<degree> rs)[u/i])"
   110       show "IT ((Var n \<degree>\<degree> rs)[u/i])"
   208           thus ?case by simp
   208           thus ?case by simp
   209         qed
   209         qed
   210         with False show ?thesis by (auto simp add: subst_Var)
   210         with False show ?thesis by (auto simp add: subst_Var)
   211       qed
   211       qed
   212     next
   212     next
   213       case (Lambda r e_ T'_ u_ i_)
   213       case (Lambda r e1 T'1 u1 i1)
   214       assume "e\<langle>i:T\<rangle> \<turnstile> Abs r : T'"
   214       assume "e\<langle>i:T\<rangle> \<turnstile> Abs r : T'"
   215         and "\<And>e T' u i. PROP ?Q r e T' u i T"
   215         and "\<And>e T' u i. PROP ?Q r e T' u i T"
   216       with uIT uT show "IT (Abs r[u/i])"
   216       with uIT uT show "IT (Abs r[u/i])"
   217         by fastforce
   217         by fastforce
   218     next
   218     next
   219       case (Beta r a as e_ T'_ u_ i_)
   219       case (Beta r a as e1 T'1 u1 i1)
   220       assume T: "e\<langle>i:T\<rangle> \<turnstile> Abs r \<degree> a \<degree>\<degree> as : T'"
   220       assume T: "e\<langle>i:T\<rangle> \<turnstile> Abs r \<degree> a \<degree>\<degree> as : T'"
   221       assume SI1: "\<And>e T' u i. PROP ?Q (r[a/0] \<degree>\<degree> as) e T' u i T"
   221       assume SI1: "\<And>e T' u i. PROP ?Q (r[a/0] \<degree>\<degree> as) e T' u i T"
   222       assume SI2: "\<And>e T' u i. PROP ?Q a e T' u i T"
   222       assume SI2: "\<And>e T' u i. PROP ?Q a e T' u i T"
   223       have "IT (Abs (r[lift u 0/Suc i]) \<degree> a[u/i] \<degree>\<degree> map (\<lambda>t. t[u/i]) as)"
   223       have "IT (Abs (r[lift u 0/Suc i]) \<degree> a[u/i] \<degree>\<degree> map (\<lambda>t. t[u/i]) as)"
   224       proof (rule IT.Beta)
   224       proof (rule IT.Beta)