Nominal/Ex/Beta.thy
changeset 3066 da60dc911055
parent 3064 ade2f8fcf8e8
child 3077 df1055004f52
equal deleted inserted replaced
3065:51ef8a3cb6ef 3066:da60dc911055
   143 apply(rotate_tac 4)
   143 apply(rotate_tac 4)
   144 apply(erule equ2.cases)
   144 apply(erule equ2.cases)
   145 apply(auto)
   145 apply(auto)
   146 oops
   146 oops
   147 
   147 
   148 
   148 lemma "a \<noteq> x \<Longrightarrow> x \<noteq> y \<Longrightarrow> y \<noteq> a \<Longrightarrow> y \<noteq> b \<Longrightarrow> (App (App (Lam[x]. Lam[y]. (App (Var y) (Var x))) (Var a)) (Var b) \<approx> App (Var b) (Var a))"
   149 
   149   apply (rule equ_trans)
   150 
   150   apply (rule equ_App1)
       
   151   apply (rule equ_beta)
       
   152   apply (simp add: lam.fresh fresh_at_base)
       
   153   apply (subst subst.simps)
       
   154   apply (simp add: lam.fresh fresh_at_base)+
       
   155   apply (rule equ_trans)
       
   156   apply (rule equ_beta)
       
   157   apply (simp add: lam.fresh fresh_at_base)
       
   158   apply (simp add: equ_refl)
       
   159   done
       
   160 
       
   161 lemma "\<not> (Var b \<approx>2 Var a) \<Longrightarrow> \<not> (App (App (Lam[x]. Lam[y]. (App (Var y) (Var x))) (Var a)) (Var b) \<approx>2 App (Var b) (Var a))"
       
   162   apply rule
       
   163   apply (erule equ2.cases)
       
   164   apply auto
       
   165   done
   151 
   166 
   152 lemma [quot_respect]:
   167 lemma [quot_respect]:
   153   shows "(op = ===> equ) Var Var"
   168   shows "(op = ===> equ) Var Var"
   154   and   "(equ ===> equ ===> equ) App App"
   169   and   "(equ ===> equ ===> equ) App App"
   155   and   "(op = ===> equ ===> equ) Beta.Lam Beta.Lam"
   170   and   "(op = ===> equ ===> equ) Beta.Lam Beta.Lam"