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