src/HOL/Lambda/Eta.ML
changeset 6301 08245f5a436d
parent 6141 a6922171b396
child 6307 fdf236c98914
equal deleted inserted replaced
6300:3815b5b095cb 6301:08245f5a436d
    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);