src/HOL/Proofs/Lambda/WeakNorm.thy
changeset 50241 8b0fdeeefef7
parent 45169 4baa475a51e6
child 50336 1d9a31b58053
equal deleted inserted replaced
50240:019d642d422d 50241:8b0fdeeefef7
    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)