equal
deleted
inserted
replaced
74 assume "NF t" |
74 assume "NF t" |
75 thus "\<And>e T' u i. PROP ?Q t e T' u i T" |
75 thus "\<And>e T' u i. PROP ?Q t e T' u i T" |
76 proof induct |
76 proof induct |
77 fix e T' u i assume uNF: "NF u" and uT: "e \<turnstile> u : T" |
77 fix e T' u i assume uNF: "NF u" and uT: "e \<turnstile> u : T" |
78 { |
78 { |
79 case (App ts x e_ T'_ u_ i_) |
79 case (App ts x e1 T'1 u1 i1) |
80 assume "e\<langle>i:T\<rangle> \<turnstile> Var x \<degree>\<degree> ts : T'" |
80 assume "e\<langle>i:T\<rangle> \<turnstile> Var x \<degree>\<degree> ts : T'" |
81 then obtain Us |
81 then obtain Us |
82 where varT: "e\<langle>i:T\<rangle> \<turnstile> Var x : Us \<Rrightarrow> T'" |
82 where varT: "e\<langle>i:T\<rangle> \<turnstile> Var x : Us \<Rrightarrow> T'" |
83 and argsT: "e\<langle>i:T\<rangle> \<tturnstile> ts : Us" |
83 and argsT: "e\<langle>i:T\<rangle> \<tturnstile> ts : Us" |
84 by (rule var_app_typesE) |
84 by (rule var_app_typesE) |
185 assume "\<not> (i < x)" |
185 assume "\<not> (i < x)" |
186 with NF neq show ?thesis by (simp add: subst_Var) iprover |
186 with NF neq show ?thesis by (simp add: subst_Var) iprover |
187 qed |
187 qed |
188 qed |
188 qed |
189 next |
189 next |
190 case (Abs r e_ T'_ u_ i_) |
190 case (Abs r e1 T'1 u1 i1) |
191 assume absT: "e\<langle>i:T\<rangle> \<turnstile> Abs r : T'" |
191 assume absT: "e\<langle>i:T\<rangle> \<turnstile> Abs r : T'" |
192 then obtain R S where "e\<langle>0:R\<rangle>\<langle>Suc i:T\<rangle> \<turnstile> r : S" by (rule abs_typeE) simp |
192 then obtain R S where "e\<langle>0:R\<rangle>\<langle>Suc i:T\<rangle> \<turnstile> r : S" by (rule abs_typeE) simp |
193 moreover have "NF (lift u 0)" using `NF u` by (rule lift_NF) |
193 moreover have "NF (lift u 0)" using `NF u` by (rule lift_NF) |
194 moreover have "e\<langle>0:R\<rangle> \<turnstile> lift u 0 : T" using uT by (rule lift_type) |
194 moreover have "e\<langle>0:R\<rangle> \<turnstile> lift u 0 : T" using uT by (rule lift_type) |
195 ultimately have "\<exists>t'. r[lift u 0/Suc i] \<rightarrow>\<^sub>\<beta>\<^sup>* t' \<and> NF t'" by (rule Abs) |
195 ultimately have "\<exists>t'. r[lift u 0/Suc i] \<rightarrow>\<^sub>\<beta>\<^sup>* t' \<and> NF t'" by (rule Abs) |