src/HOL/W0/W.ML
changeset 6066 f4f0d637747c
parent 5655 afd75136b236
child 6141 a6922171b396
equal deleted inserted replaced
6065:3b4a29166f26 6066:f4f0d637747c
    37 qed_spec_mp "W_correct";
    37 qed_spec_mp "W_correct";
    38 
    38 
    39 val has_type_casesE = map(has_type.mk_cases expr.simps)
    39 val has_type_casesE = map(has_type.mk_cases expr.simps)
    40         [" s |- Var n :: t"," s |- Abs e :: t","s |- App e1 e2 ::t"];
    40         [" s |- Var n :: t"," s |- Abs e :: t","s |- App e1 e2 ::t"];
    41 
    41 
    42 
       
    43 (* the resulting type variable is always greater or equal than the given one *)
    42 (* the resulting type variable is always greater or equal than the given one *)
    44 Goal "!a n s t m. W e a n  = Ok (s,t,m) --> n<=m";
    43 Goal "!a n s t m. W e a n  = Ok (s,t,m) --> n<=m";
    45 by (induct_tac "e" 1);
    44 by (induct_tac "e" 1);
    46 (* case Var(n) *)
    45 (* case Var(n) *)
    47 by (Clarsimp_tac 1);
    46 by (Clarsimp_tac 1);
    62 by (asm_full_simp_tac (simpset() addsimps [eq_sym_conv]) 1);
    61 by (asm_full_simp_tac (simpset() addsimps [eq_sym_conv]) 1);
    63 by (etac conjE 1);
    62 by (etac conjE 1);
    64 by (eres_inst_tac [("x","sa")] allE 1);
    63 by (eres_inst_tac [("x","sa")] allE 1);
    65 by (eres_inst_tac [("x","ta")] allE 1);
    64 by (eres_inst_tac [("x","ta")] allE 1);
    66 by (eres_inst_tac [("x","nb")] allE 1);
    65 by (eres_inst_tac [("x","nb")] allE 1);
    67 by (res_inst_tac [("j","na")] le_trans 1); 
    66 by (Asm_full_simp_tac 1);
    68 by (Asm_simp_tac 1);
       
    69 by (Asm_simp_tac 1);
       
    70 qed_spec_mp "W_var_ge";
    67 qed_spec_mp "W_var_ge";
    71 
    68 
    72 Addsimps [W_var_ge];
    69 Addsimps [W_var_ge];
    73 
    70 
    74 Goal "Ok (s,t,m) = W e a n ==> n<=m";
    71 Goal "Ok (s,t,m) = W e a n ==> n<=m";
   166 by (eres_inst_tac [("x","TVar n # a")] allE 1);
   163 by (eres_inst_tac [("x","TVar n # a")] allE 1);
   167 by (eres_inst_tac [("x","s")] allE 1);
   164 by (eres_inst_tac [("x","s")] allE 1);
   168 by (eres_inst_tac [("x","t")] allE 1);
   165 by (eres_inst_tac [("x","t")] allE 1);
   169 by (eres_inst_tac [("x","na")] allE 1);
   166 by (eres_inst_tac [("x","na")] allE 1);
   170 by (eres_inst_tac [("x","v")] allE 1);
   167 by (eres_inst_tac [("x","v")] allE 1);
   171 by (force_tac (claset() addSEs [allE] addIs [cod_app_subst],
   168 by (force_tac (claset() addSEs [allE] addIs [cod_app_subst], simpset()) 1);
   172                      simpset() addsimps [less_Suc_eq]) 1);
       
   173 (** LEVEL 13 **)
   169 (** LEVEL 13 **)
   174 (* case App e1 e2 *)
   170 (* case App e1 e2 *)
   175 by (simp_tac (simpset() addsplits [split_bind]) 1);
   171 by (simp_tac (simpset() addsplits [split_bind]) 1);
   176 by (strip_tac 1); 
   172 by (strip_tac 1); 
   177 by (rename_tac "s t na sa ta nb sb sc tb m v" 1);
   173 by (rename_tac "s t na sa ta nb sb sc tb m v" 1);
   195 by (dtac W_var_geD 1);
   191 by (dtac W_var_geD 1);
   196 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) );
   192 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) );
   197 (** LEVEL 33 **)
   193 (** LEVEL 33 **)
   198 by (fast_tac (HOL_cs addDs [free_tv_comp_subst RS subsetD,sym RS mgu_free, 
   194 by (fast_tac (HOL_cs addDs [free_tv_comp_subst RS subsetD,sym RS mgu_free, 
   199     codD,free_tv_app_subst_te RS subsetD,free_tv_app_subst_tel RS subsetD,
   195     codD,free_tv_app_subst_te RS subsetD,free_tv_app_subst_tel RS subsetD,
   200     less_le_trans,less_not_refl2,subsetD]
   196     subsetD]
   201   addEs [UnE] 
   197   addEs [UnE] 
   202   addss simpset()) 1);
   198   addss simpset()) 1);
   203 by (Asm_full_simp_tac 1); 
   199 by (Asm_full_simp_tac 1); 
   204 by (dtac (sym RS W_var_geD) 1);
   200 by (dtac (sym RS W_var_geD) 1);
   205 by (dtac (sym RS W_var_geD) 1);
   201 by (dtac (sym RS W_var_geD) 1);