src/HOL/W0/W.ML
changeset 5519 54e313ed22ba
parent 5348 5f6416d64a94
child 5655 afd75136b236
equal deleted inserted replaced
5518:654ead0ba4f7 5519:54e313ed22ba
    42 
    42 
    43 (* the resulting type variable is always greater or equal than the given one *)
    43 (* 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";
    44 Goal "!a n s t m. W e a n  = Ok (s,t,m) --> n<=m";
    45 by (induct_tac "e" 1);
    45 by (induct_tac "e" 1);
    46 (* case Var(n) *)
    46 (* case Var(n) *)
    47 by (fast_tac (HOL_cs addss simpset()) 1);
    47 by (Clarsimp_tac 1);
    48 (* case Abs e *)
    48 (* case Abs e *)
    49 by (simp_tac (simpset() addsplits [split_bind]) 1);
    49 by (simp_tac (simpset() addsplits [split_bind]) 1);
    50 by (fast_tac (HOL_cs addDs [Suc_leD]) 1);
    50 by (fast_tac (HOL_cs addDs [Suc_leD]) 1);
    51 (* case App e1 e2 *)
    51 (* case App e1 e2 *)
    52 by (simp_tac (simpset() addsplits [split_bind]) 1);
    52 by (simp_tac (simpset() addsplits [split_bind]) 1);
    85 (* resulting type variable is new *)
    85 (* resulting type variable is new *)
    86 Goal "!n a s t m. new_tv n a --> W e a n = Ok (s,t,m) -->    \
    86 Goal "!n a s t m. new_tv n a --> W e a n = Ok (s,t,m) -->    \
    87 \                 new_tv m s & new_tv m t";
    87 \                 new_tv m s & new_tv m t";
    88 by (induct_tac "e" 1);
    88 by (induct_tac "e" 1);
    89 (* case Var n *)
    89 (* case Var n *)
    90 by (fast_tac (HOL_cs addDs [list_all_nth] addss (simpset() 
    90   by (Clarsimp_tac 1);
    91         addsimps [id_subst_def,new_tv_list,new_tv_subst])) 1);
    91   by (force_tac (claset() addEs [list_ball_nth],
    92 (* case Abs e *)
    92 		simpset() addsimps [id_subst_def,new_tv_list,new_tv_subst])1);
    93 by (simp_tac (simpset() addsimps [new_tv_subst,new_tv_Suc_list] 
    93 (* case Abs e *)
       
    94  by (simp_tac (simpset() addsimps [new_tv_subst,new_tv_Suc_list] 
    94     addsplits [split_bind]) 1);
    95     addsplits [split_bind]) 1);
    95 by (strip_tac 1);
    96  by (strip_tac 1);
    96 by (eres_inst_tac [("x","Suc n")] allE 1);
    97  by (eres_inst_tac [("x","Suc n")] allE 1);
    97 by (eres_inst_tac [("x","(TVar n)#a")] allE 1);
    98  by (eres_inst_tac [("x","(TVar n)#a")] allE 1);
    98 by (fast_tac (HOL_cs addss (simpset()
    99  by (fast_tac (HOL_cs addss (simpset()
    99               addsimps [new_tv_subst,new_tv_Suc_list])) 1);
   100               addsimps [new_tv_subst,new_tv_Suc_list])) 1);
   100 
   101 
   101 (* case App e1 e2 *)
   102 (* case App e1 e2 *)
   102 by (simp_tac (simpset() addsplits [split_bind]) 1);
   103 by (simp_tac (simpset() addsplits [split_bind]) 1);
   103 by (strip_tac 1);
   104 by (strip_tac 1);
   151 
   152 
   152 Goal "!n a s t m v. W e a n = Ok (s,t,m) -->            \
   153 Goal "!n a s t m v. W e a n = Ok (s,t,m) -->            \
   153 \         (v:free_tv s | v:free_tv t) --> v<n --> v:free_tv a";
   154 \         (v:free_tv s | v:free_tv t) --> v<n --> v:free_tv a";
   154 by (induct_tac "e" 1);
   155 by (induct_tac "e" 1);
   155 (* case Var n *)
   156 (* case Var n *)
   156 by (fast_tac (HOL_cs addIs [nth_mem,subsetD,ftv_mem_sub_ftv_list] 
   157 by (Clarsimp_tac 1);
   157     addss simpset()) 1);
   158 by (fast_tac (HOL_cs addIs [nth_mem,subsetD,ftv_mem_sub_ftv_list])1);
   158 
   159 
   159 (* case Abs e *)
   160 (* case Abs e *)
   160 by (asm_full_simp_tac (simpset() addsimps
   161 by (asm_full_simp_tac (simpset() addsimps
   161     [free_tv_subst] addsplits [split_bind]) 1);
   162     [free_tv_subst] addsplits [split_bind]) 1);
   162 by (strip_tac 1);
   163 by (strip_tac 1);
   165 by (eres_inst_tac [("x","TVar n # a")] allE 1);
   166 by (eres_inst_tac [("x","TVar n # a")] allE 1);
   166 by (eres_inst_tac [("x","s")] allE 1);
   167 by (eres_inst_tac [("x","s")] allE 1);
   167 by (eres_inst_tac [("x","t")] allE 1);
   168 by (eres_inst_tac [("x","t")] allE 1);
   168 by (eres_inst_tac [("x","na")] allE 1);
   169 by (eres_inst_tac [("x","na")] allE 1);
   169 by (eres_inst_tac [("x","v")] allE 1);
   170 by (eres_inst_tac [("x","v")] allE 1);
   170 by (fast_tac (HOL_cs addSEs [allE]
   171 by (force_tac (claset() addSEs [allE] addIs [cod_app_subst],
   171                      addIs [cod_app_subst]
   172                      simpset() addsimps [less_Suc_eq]) 1);
   172                      addss (simpset() addsimps [less_Suc_eq])) 1);
   173 (** LEVEL 13 **)
   173 (** LEVEL 12 **)
       
   174 (* case App e1 e2 *)
   174 (* case App e1 e2 *)
   175 by (simp_tac (simpset() addsplits [split_bind]) 1);
   175 by (simp_tac (simpset() addsplits [split_bind]) 1);
   176 by (strip_tac 1); 
   176 by (strip_tac 1); 
   177 by (rename_tac "s t na sa ta nb sb sc tb m v" 1);
   177 by (rename_tac "s t na sa ta nb sb sc tb m v" 1);
   178 by (eres_inst_tac [("x","n")] allE 1);
   178 by (eres_inst_tac [("x","n")] allE 1);
   180 by (eres_inst_tac [("x","s")] allE 1);
   180 by (eres_inst_tac [("x","s")] allE 1);
   181 by (eres_inst_tac [("x","t")] allE 1);
   181 by (eres_inst_tac [("x","t")] allE 1);
   182 by (eres_inst_tac [("x","na")] allE 1);
   182 by (eres_inst_tac [("x","na")] allE 1);
   183 by (eres_inst_tac [("x","na")] allE 1);
   183 by (eres_inst_tac [("x","na")] allE 1);
   184 by (eres_inst_tac [("x","v")] allE 1);
   184 by (eres_inst_tac [("x","v")] allE 1);
   185 (** LEVEL 22 **)
   185 (** LEVEL 23 **)
   186 (* second case *)
   186 (* second case *)
   187 by (eres_inst_tac [("x","$ s a")] allE 1);
   187 by (eres_inst_tac [("x","$ s a")] allE 1);
   188 by (eres_inst_tac [("x","sa")] allE 1);
   188 by (eres_inst_tac [("x","sa")] allE 1);
   189 by (eres_inst_tac [("x","ta")] allE 1);
   189 by (eres_inst_tac [("x","ta")] allE 1);
   190 by (eres_inst_tac [("x","nb")] allE 1);
   190 by (eres_inst_tac [("x","nb")] allE 1);
   192 by (safe_tac (empty_cs addSIs [conjI,impI] addSEs [conjE]) ); 
   192 by (safe_tac (empty_cs addSIs [conjI,impI] addSEs [conjE]) ); 
   193 by (asm_full_simp_tac (simpset() addsimps [rotate_Ok,o_def]) 1);
   193 by (asm_full_simp_tac (simpset() addsimps [rotate_Ok,o_def]) 1);
   194 by (dtac W_var_geD 1);
   194 by (dtac W_var_geD 1);
   195 by (dtac W_var_geD 1);
   195 by (dtac W_var_geD 1);
   196 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) );
   196 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) );
   197 (** LEVEL 32 **)
   197 (** LEVEL 33 **)
   198 by (fast_tac (HOL_cs addDs [free_tv_comp_subst RS subsetD,sym RS mgu_free, 
   198 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,
   199     codD,free_tv_app_subst_te RS subsetD,free_tv_app_subst_tel RS subsetD,
   200     less_le_trans,less_not_refl2,subsetD]
   200     less_le_trans,less_not_refl2,subsetD]
   201   addEs [UnE] 
   201   addEs [UnE] 
   202   addss simpset()) 1);
   202   addss simpset()) 1);