equal
deleted
inserted
replaced
26 Addsimps [subst_not_free RS eqTrueI]; |
26 Addsimps [subst_not_free RS eqTrueI]; |
27 |
27 |
28 Goal "!i k. free (lift t k) i = (i < k & free t i | k < i & free t (i-1))"; |
28 Goal "!i k. free (lift t k) i = (i < k & free t i | k < i & free t (i-1))"; |
29 by (induct_tac "t" 1); |
29 by (induct_tac "t" 1); |
30 by (ALLGOALS(asm_full_simp_tac (addsplit (simpset()) addcongs [conj_cong]))); |
30 by (ALLGOALS(asm_full_simp_tac (addsplit (simpset()) addcongs [conj_cong]))); |
31 by(arith_tac 1); |
31 by (arith_tac 1); |
32 by(Auto_tac); |
32 by (Auto_tac); |
33 qed "free_lift"; |
33 qed "free_lift"; |
34 Addsimps [free_lift]; |
34 Addsimps [free_lift]; |
35 |
35 |
36 Goal "!i k t. free (s[t/k]) i = \ |
36 Goal "!i k t. free (s[t/k]) i = \ |
37 \ (free s k & free t i | free s (if i<k then i else Suc i))"; |
37 \ (free s k & free t i | free s (if i<k then i else Suc i))"; |
113 qed_spec_mp "beta_subst"; |
113 qed_spec_mp "beta_subst"; |
114 AddIs [beta_subst]; |
114 AddIs [beta_subst]; |
115 |
115 |
116 Goal "!i. t[Var i/i] = t[Var(i)/Suc i]"; |
116 Goal "!i. t[Var i/i] = t[Var(i)/Suc i]"; |
117 by (induct_tac "t" 1); |
117 by (induct_tac "t" 1); |
118 by(auto_tac (claset() addSEs [linorder_neqE], addsplit (simpset()))); |
118 by (auto_tac (claset() addSEs [linorder_neqE], addsplit (simpset()))); |
119 qed_spec_mp "subst_Var_Suc"; |
119 qed_spec_mp "subst_Var_Suc"; |
120 Addsimps [subst_Var_Suc]; |
120 Addsimps [subst_Var_Suc]; |
121 |
121 |
122 Goal "s -e> t ==> (!i. lift s i -e> lift t i)"; |
122 Goal "s -e> t ==> (!i. lift s i -e> lift t i)"; |
123 by (etac eta.induct 1); |
123 by (etac eta.induct 1); |