src/ZF/Resid/Substitution.thy
changeset 46823 57bf0cecb366
parent 32960 69916a850301
child 61398 6794de675568
equal deleted inserted replaced
46822:95f1e700b712 46823:57bf0cecb366
    52 (* ------------------------------------------------------------------------- *)
    52 (* ------------------------------------------------------------------------- *)
    53 
    53 
    54 lemma gt_not_eq: "p < n ==> n\<noteq>p"
    54 lemma gt_not_eq: "p < n ==> n\<noteq>p"
    55 by blast
    55 by blast
    56 
    56 
    57 lemma succ_pred [rule_format, simp]: "j \<in> nat ==> i < j --> succ(j #- 1) = j"
    57 lemma succ_pred [rule_format, simp]: "j \<in> nat ==> i < j \<longrightarrow> succ(j #- 1) = j"
    58 by (induct_tac "j", auto)
    58 by (induct_tac "j", auto)
    59 
    59 
    60 lemma lt_pred: "[|succ(x)<n; n \<in> nat|] ==> x < n #- 1 "
    60 lemma lt_pred: "[|succ(x)<n; n \<in> nat|] ==> x < n #- 1 "
    61 apply (rule succ_leE)
    61 apply (rule succ_leE)
    62 apply (simp add: succ_pred)
    62 apply (simp add: succ_pred)
   146 (* ------------------------------------------------------------------------- *)
   146 (* ------------------------------------------------------------------------- *)
   147 
   147 
   148 (*The i\<in>nat is redundant*)
   148 (*The i\<in>nat is redundant*)
   149 lemma lift_lift_rec [rule_format]:
   149 lemma lift_lift_rec [rule_format]:
   150      "u \<in> redexes
   150      "u \<in> redexes
   151       ==> \<forall>n \<in> nat. \<forall>i \<in> nat. i\<le>n -->
   151       ==> \<forall>n \<in> nat. \<forall>i \<in> nat. i\<le>n \<longrightarrow>
   152            (lift_rec(lift_rec(u,i),succ(n)) = lift_rec(lift_rec(u,n),i))"
   152            (lift_rec(lift_rec(u,i),succ(n)) = lift_rec(lift_rec(u,n),i))"
   153 apply (erule redexes.induct, auto)
   153 apply (erule redexes.induct, auto)
   154 apply (case_tac "n < i")
   154 apply (case_tac "n < i")
   155 apply (frule lt_trans2, assumption)
   155 apply (frule lt_trans2, assumption)
   156 apply (simp_all add: lift_rec_Var leI)
   156 apply (simp_all add: lift_rec_Var leI)
   164 lemma lt_not_m1_lt: "\<lbrakk>m < n; n \<in> nat; m \<in> nat\<rbrakk>\<Longrightarrow> ~ n #- 1 < m"
   164 lemma lt_not_m1_lt: "\<lbrakk>m < n; n \<in> nat; m \<in> nat\<rbrakk>\<Longrightarrow> ~ n #- 1 < m"
   165 by (erule natE, auto)
   165 by (erule natE, auto)
   166 
   166 
   167 lemma lift_rec_subst_rec [rule_format]:
   167 lemma lift_rec_subst_rec [rule_format]:
   168      "v \<in> redexes ==>
   168      "v \<in> redexes ==>
   169        \<forall>n \<in> nat. \<forall>m \<in> nat. \<forall>u \<in> redexes. n\<le>m-->
   169        \<forall>n \<in> nat. \<forall>m \<in> nat. \<forall>u \<in> redexes. n\<le>m\<longrightarrow>
   170           lift_rec(subst_rec(u,v,n),m) =
   170           lift_rec(subst_rec(u,v,n),m) =
   171                subst_rec(lift_rec(u,m),lift_rec(v,succ(m)),n)"
   171                subst_rec(lift_rec(u,m),lift_rec(v,succ(m)),n)"
   172 apply (erule redexes.induct, simp_all (no_asm_simp) add: lift_lift)
   172 apply (erule redexes.induct, simp_all (no_asm_simp) add: lift_lift)
   173 apply safe
   173 apply safe
   174 apply (rename_tac n n' m u)
   174 apply (rename_tac n n' m u)
   186 by (simp add: lift_rec_subst_rec)
   186 by (simp add: lift_rec_subst_rec)
   187 
   187 
   188 
   188 
   189 lemma lift_rec_subst_rec_lt [rule_format]:
   189 lemma lift_rec_subst_rec_lt [rule_format]:
   190      "v \<in> redexes ==>
   190      "v \<in> redexes ==>
   191        \<forall>n \<in> nat. \<forall>m \<in> nat. \<forall>u \<in> redexes. m\<le>n-->
   191        \<forall>n \<in> nat. \<forall>m \<in> nat. \<forall>u \<in> redexes. m\<le>n\<longrightarrow>
   192           lift_rec(subst_rec(u,v,n),m) =
   192           lift_rec(subst_rec(u,v,n),m) =
   193                subst_rec(lift_rec(u,m),lift_rec(v,m),succ(n))"
   193                subst_rec(lift_rec(u,m),lift_rec(v,m),succ(n))"
   194 apply (erule redexes.induct, simp_all (no_asm_simp) add: lift_lift)
   194 apply (erule redexes.induct, simp_all (no_asm_simp) add: lift_lift)
   195 apply safe
   195 apply safe
   196 apply (rename_tac n n' m u)
   196 apply (rename_tac n n' m u)
   210 apply (case_tac "n < na", auto)
   210 apply (case_tac "n < na", auto)
   211 done
   211 done
   212 
   212 
   213 lemma subst_rec_subst_rec [rule_format]:
   213 lemma subst_rec_subst_rec [rule_format]:
   214      "v \<in> redexes ==>
   214      "v \<in> redexes ==>
   215         \<forall>m \<in> nat. \<forall>n \<in> nat. \<forall>u \<in> redexes. \<forall>w \<in> redexes. m\<le>n -->
   215         \<forall>m \<in> nat. \<forall>n \<in> nat. \<forall>u \<in> redexes. \<forall>w \<in> redexes. m\<le>n \<longrightarrow>
   216           subst_rec(subst_rec(w,u,n),subst_rec(lift_rec(w,m),v,succ(n)),m) =
   216           subst_rec(subst_rec(w,u,n),subst_rec(lift_rec(w,m),v,succ(n)),m) =
   217           subst_rec(w,subst_rec(u,v,m),n)"
   217           subst_rec(w,subst_rec(u,v,m),n)"
   218 apply (erule redexes.induct)
   218 apply (erule redexes.induct)
   219 apply (simp_all add: lift_lift [symmetric] lift_rec_subst_rec_lt, safe)
   219 apply (simp_all add: lift_lift [symmetric] lift_rec_subst_rec_lt, safe)
   220 apply (rename_tac n' u w)
   220 apply (rename_tac n' u w)
   252      "u ~ v ==> \<forall>m \<in> nat. lift_rec(u,m) ~ lift_rec(v,m)"
   252      "u ~ v ==> \<forall>m \<in> nat. lift_rec(u,m) ~ lift_rec(v,m)"
   253 by (erule Scomp.induct, simp_all add: comp_refl)
   253 by (erule Scomp.induct, simp_all add: comp_refl)
   254 
   254 
   255 lemma subst_rec_preserve_comp [rule_format, simp]:
   255 lemma subst_rec_preserve_comp [rule_format, simp]:
   256      "u2 ~ v2 ==> \<forall>m \<in> nat. \<forall>u1 \<in> redexes. \<forall>v1 \<in> redexes.
   256      "u2 ~ v2 ==> \<forall>m \<in> nat. \<forall>u1 \<in> redexes. \<forall>v1 \<in> redexes.
   257                   u1 ~ v1--> subst_rec(u1,u2,m) ~ subst_rec(v1,v2,m)"
   257                   u1 ~ v1\<longrightarrow> subst_rec(u1,u2,m) ~ subst_rec(v1,v2,m)"
   258 by (erule Scomp.induct,
   258 by (erule Scomp.induct,
   259     simp_all add: subst_Var lift_rec_preserve_comp comp_refl)
   259     simp_all add: subst_Var lift_rec_preserve_comp comp_refl)
   260 
   260 
   261 lemma lift_rec_preserve_reg [simp]:
   261 lemma lift_rec_preserve_reg [simp]:
   262      "regular(u) ==> \<forall>m \<in> nat. regular(lift_rec(u,m))"
   262      "regular(u) ==> \<forall>m \<in> nat. regular(lift_rec(u,m))"
   263 by (erule Sreg.induct, simp_all add: lift_rec_Var)
   263 by (erule Sreg.induct, simp_all add: lift_rec_Var)
   264 
   264 
   265 lemma subst_rec_preserve_reg [simp]:
   265 lemma subst_rec_preserve_reg [simp]:
   266      "regular(v) ==>
   266      "regular(v) ==>
   267         \<forall>m \<in> nat. \<forall>u \<in> redexes. regular(u)-->regular(subst_rec(u,v,m))"
   267         \<forall>m \<in> nat. \<forall>u \<in> redexes. regular(u)\<longrightarrow>regular(subst_rec(u,v,m))"
   268 by (erule Sreg.induct, simp_all add: subst_Var lift_rec_preserve_reg)
   268 by (erule Sreg.induct, simp_all add: subst_Var lift_rec_preserve_reg)
   269 
   269 
   270 end
   270 end