src/HOL/W0/W.ML
changeset 6540 eaf90f6806df
parent 6141 a6922171b396
child 7322 d16d7ddcc842
equal deleted inserted replaced
6539:2e7d2fba9f6c 6540:eaf90f6806df
    28 by (res_inst_tac [("t2.0","$ sc tb")] has_type.AppI 1);
    28 by (res_inst_tac [("t2.0","$ sc tb")] has_type.AppI 1);
    29 by (res_inst_tac [("s1","sc")] (app_subst_TVar RS subst) 1);
    29 by (res_inst_tac [("s1","sc")] (app_subst_TVar RS subst) 1);
    30 by (rtac (app_subst_Fun RS subst) 1);
    30 by (rtac (app_subst_Fun RS subst) 1);
    31 by (res_inst_tac [("t","$sc(tb -> (TVar nb))"),("s","$sc($sb ta)")] subst 1);
    31 by (res_inst_tac [("t","$sc(tb -> (TVar nb))"),("s","$sc($sb ta)")] subst 1);
    32 by (Asm_full_simp_tac 1);
    32 by (Asm_full_simp_tac 1);
    33 by (simp_tac (HOL_ss addsimps [subst_comp_tel RS sym]) 1);
    33 by (simp_tac (HOL_ss addsimps [subst_comp_tel RS sym,o_def]) 1);
    34 by ( (rtac has_type_cl_sub 1) THEN (rtac has_type_cl_sub 1));
    34 by ( (rtac has_type_cl_sub 1) THEN (rtac has_type_cl_sub 1));
    35 by (asm_full_simp_tac (simpset() addsimps [eq_sym_conv]) 1);
    35 by (asm_full_simp_tac (simpset() addsimps [eq_sym_conv]) 1);
    36 by (asm_full_simp_tac (simpset() addsimps [subst_comp_tel RS sym,o_def,has_type_cl_sub,eq_sym_conv]) 1);
    36 by (asm_full_simp_tac (simpset() addsimps [subst_comp_tel RS sym,o_def,has_type_cl_sub,eq_sym_conv]) 1);
    37 qed_spec_mp "W_correct";
    37 qed_spec_mp "W_correct";
    38 
    38 
   220 by (eresolve_tac has_type_casesE 1); 
   220 by (eresolve_tac has_type_casesE 1); 
   221 by (asm_full_simp_tac (simpset() addsimps [eq_sym_conv,app_subst_list]) 1);
   221 by (asm_full_simp_tac (simpset() addsimps [eq_sym_conv,app_subst_list]) 1);
   222 by (res_inst_tac [("x","s'")] exI 1);
   222 by (res_inst_tac [("x","s'")] exI 1);
   223 by (Asm_simp_tac 1);
   223 by (Asm_simp_tac 1);
   224 
   224 
   225 (** LEVEL 10 **)
   225 (** LEVEL 7 **)
   226 (* case Abs e *)
   226 (* case Abs e *)
   227 by (strip_tac 1);
   227 by (strip_tac 1);
   228 by (eresolve_tac has_type_casesE 1);
   228 by (eresolve_tac has_type_casesE 1);
   229 by (eres_inst_tac [("x","%x. if x=n then t1 else (s' x)")] allE 1);
   229 by (eres_inst_tac [("x","%x. if x=n then t1 else (s' x)")] allE 1);
   230 by (eres_inst_tac [("x","(TVar n)#a")] allE 1);
   230 by (eres_inst_tac [("x","(TVar n)#a")] allE 1);
   231 by (eres_inst_tac [("x","t2")] allE 1);
   231 by (eres_inst_tac [("x","t2")] allE 1);
   232 by (eres_inst_tac [("x","Suc n")] allE 1);
   232 by (eres_inst_tac [("x","Suc n")] allE 1);
   233 by (fast_tac (HOL_cs addss (simpset() addcongs [conj_cong]
   233 by (fast_tac (HOL_cs addss (simpset() addcongs [conj_cong]
   234                             addsplits [split_bind])) 1);
   234                             addsplits [split_bind])) 1);
   235 
   235 
   236 (** LEVEL 17 **)
   236 (** LEVEL 14 **)
   237 (* case App e1 e2 *)
   237 (* case App e1 e2 *)
   238 by (strip_tac 1);
   238 by (strip_tac 1);
   239 by (eresolve_tac has_type_casesE 1);
   239 by (eresolve_tac has_type_casesE 1);
   240 by (eres_inst_tac [("x","s'")] allE 1);
   240 by (eres_inst_tac [("x","s'")] allE 1);
   241 by (eres_inst_tac [("x","a")] allE 1);
   241 by (eres_inst_tac [("x","a")] allE 1);
   249 by (Asm_full_simp_tac 1);
   249 by (Asm_full_simp_tac 1);
   250 by (safe_tac HOL_cs);
   250 by (safe_tac HOL_cs);
   251 by (fast_tac (HOL_cs addIs [sym RS W_var_geD,new_tv_W RS
   251 by (fast_tac (HOL_cs addIs [sym RS W_var_geD,new_tv_W RS
   252                             conjunct1,new_tv_list_le,new_tv_subst_tel]) 1);
   252                             conjunct1,new_tv_list_le,new_tv_subst_tel]) 1);
   253 
   253 
   254 (** LEVEL 35 **)
   254 (** LEVEL 28 **)
   255 by (subgoal_tac
   255 by (subgoal_tac
   256   "$ (%x. if x=ma then t' else (if x:(free_tv t - free_tv sa) then r x \
   256   "$ (%x. if x=ma then t' else (if x:(free_tv t - free_tv sa) then r x \
   257 \        else ra x)) ($ sa t) = \
   257 \        else ra x)) ($ sa t) = \
   258 \  $ (%x. if x=ma then t' else (if x:(free_tv t - free_tv sa) then r x \
   258 \  $ (%x. if x=ma then t' else (if x:(free_tv t - free_tv sa) then r x \
   259 \        else ra x)) (ta -> (TVar ma))" 1);
   259 \        else ra x)) (ta -> (TVar ma))" 1);
   264 by (rtac eq_free_eq_subst_te 2);  
   264 by (rtac eq_free_eq_subst_te 2);  
   265 by (strip_tac 2);
   265 by (strip_tac 2);
   266 by (subgoal_tac "na ~=ma" 2);
   266 by (subgoal_tac "na ~=ma" 2);
   267 by (fast_tac (HOL_cs addDs [new_tv_W,sym RS W_var_geD,
   267 by (fast_tac (HOL_cs addDs [new_tv_W,sym RS W_var_geD,
   268                             new_tv_not_free_tv,new_tv_le]) 3);
   268                             new_tv_not_free_tv,new_tv_le]) 3);
   269 (** LEVEL 42 **)
   269 (** LEVEL 35 **)
   270 by (case_tac "na:free_tv sa" 2);
   270 by (case_tac "na:free_tv sa" 2);
   271 (* na ~: free_tv sa *)
   271 (* na ~: free_tv sa *)
   272 by (forward_tac [not_free_impl_id] 3);
   272 by (forward_tac [not_free_impl_id] 3);
   273 by (Asm_simp_tac 3);
   273 by (Asm_simp_tac 3);
   274 (* na : free_tv sa *)
   274 (* na : free_tv sa *)
   276 by (dtac eq_subst_tel_eq_free 2);
   276 by (dtac eq_subst_tel_eq_free 2);
   277 by (fast_tac (HOL_cs addIs [free_tv_W,free_tv_le_new_tv] addDs [new_tv_W]) 2);
   277 by (fast_tac (HOL_cs addIs [free_tv_W,free_tv_le_new_tv] addDs [new_tv_W]) 2);
   278 by (Asm_simp_tac 2); 
   278 by (Asm_simp_tac 2); 
   279 by (case_tac "na:dom sa" 2);
   279 by (case_tac "na:dom sa" 2);
   280 (* na ~: dom sa *)
   280 (* na ~: dom sa *)
   281 (** LEVEL 50 **)
   281 (** LEVEL 43 **)
   282 by (asm_full_simp_tac (simpset() addsimps [dom_def]) 3);
   282 by (asm_full_simp_tac (simpset() addsimps [dom_def]) 3);
   283 (* na : dom sa *)
   283 (* na : dom sa *)
   284 by (rtac eq_free_eq_subst_te 2);
   284 by (rtac eq_free_eq_subst_te 2);
   285 by (strip_tac 2);
   285 by (strip_tac 2);
   286 by (subgoal_tac "nb ~= ma" 2);
   286 by (subgoal_tac "nb ~= ma" 2);
   290 by (fast_tac (HOL_cs addIs [new_tv_list_le] addDs [sym RS W_var_geD]) 3);
   290 by (fast_tac (HOL_cs addIs [new_tv_list_le] addDs [sym RS W_var_geD]) 3);
   291 by (fast_tac (set_cs addDs [new_tv_W,new_tv_not_free_tv] addss 
   291 by (fast_tac (set_cs addDs [new_tv_W,new_tv_not_free_tv] addss 
   292               (simpset() addsimps [cod_def,free_tv_subst])) 3);
   292               (simpset() addsimps [cod_def,free_tv_subst])) 3);
   293 by (fast_tac (set_cs addss (simpset() addsimps [cod_def,free_tv_subst])) 2);
   293 by (fast_tac (set_cs addss (simpset() addsimps [cod_def,free_tv_subst])) 2);
   294 
   294 
   295 (** LEVEL 60 **)
   295 (** LEVEL 53 **)
   296 by (Simp_tac 2);  
   296 by (Simp_tac 2);  
   297 by (rtac eq_free_eq_subst_te 2);
   297 by (rtac eq_free_eq_subst_te 2);
   298 by (strip_tac 2 );
   298 by (strip_tac 2 );
   299 by (subgoal_tac "na ~= ma" 2);
   299 by (subgoal_tac "na ~= ma" 2);
   300 by ((forward_tac [new_tv_W] 3) THEN (atac 3));
   300 by ((forward_tac [new_tv_W] 3) THEN (atac 3));
   301 by (etac conjE 3);
   301 by (etac conjE 3);
   302 by (dtac (sym RS W_var_geD) 3);
   302 by (dtac (sym RS W_var_geD) 3);
   303 by (fast_tac (HOL_cs addDs [new_tv_list_le,new_tv_subst_tel,new_tv_W,new_tv_not_free_tv]) 3);
   303 by (fast_tac (HOL_cs addDs [new_tv_list_le,new_tv_subst_tel,new_tv_W,new_tv_not_free_tv]) 3);
   304 by (case_tac "na: free_tv t - free_tv sa" 2);
   304 by (case_tac "na: free_tv t - free_tv sa" 2);
   305 (** LEVEL 69 **)
   305 (** LEVEL 62 **)
   306 (* case na ~: free_tv t - free_tv sa *)
   306 (* case na ~: free_tv t - free_tv sa *)
   307 by (Asm_full_simp_tac 3);
   307 by (Asm_full_simp_tac 3);
   308 (* case na : free_tv t - free_tv sa *)
   308 (* case na : free_tv t - free_tv sa *)
   309 by (Asm_full_simp_tac 2);
   309 by (Asm_full_simp_tac 2);
   310 by (dres_inst_tac [("ts1","$ s a")] (subst_comp_tel RSN (2,trans)) 2);
   310 by (dres_inst_tac [("ts1","$ s a")] (subst_comp_tel RSN (2,trans)) 2);
   311 by (dtac eq_subst_tel_eq_free 2);
   311 by (dtac eq_subst_tel_eq_free 2);
   312 by (fast_tac (HOL_cs addIs [free_tv_W,free_tv_le_new_tv] addDs [new_tv_W]) 2);
   312 by (fast_tac (HOL_cs addIs [free_tv_W,free_tv_le_new_tv] addDs [new_tv_W]) 2);
   313 by (asm_full_simp_tac (simpset() addsimps [free_tv_subst,dom_def]) 2);
   313 by (asm_full_simp_tac (simpset() addsimps [free_tv_subst,dom_def]) 2);
   314 by (Fast_tac 2);
   314 by (Fast_tac 2);
   315 (** LEVEL 76 **)
   315 (** LEVEL 69 **)
   316 by (asm_simp_tac (simpset() addsplits [split_bind]) 1);
   316 by (asm_simp_tac (simpset() addsplits [split_bind]) 1);
   317 by (safe_tac HOL_cs);
   317 by (safe_tac HOL_cs);
   318 by (dtac mgu_Ok 1);
   318 by (dtac mgu_Ok 1);
   319 by ( fast_tac (HOL_cs addss simpset()) 1);
   319 by ( fast_tac (HOL_cs addss simpset()) 1);
   320 by ((dtac mgu_mg 1) THEN (atac 1));
   320 by ((dtac mgu_mg 1) THEN (atac 1));
   322 by (res_inst_tac [("x","rb")] exI 1);
   322 by (res_inst_tac [("x","rb")] exI 1);
   323 by (rtac conjI 1);
   323 by (rtac conjI 1);
   324 by (dres_inst_tac [("x","ma")] fun_cong 2);
   324 by (dres_inst_tac [("x","ma")] fun_cong 2);
   325 by ( asm_full_simp_tac (simpset() addsimps [eq_sym_conv]) 2);
   325 by ( asm_full_simp_tac (simpset() addsimps [eq_sym_conv]) 2);
   326 by (simp_tac (simpset() addsimps [o_def,subst_comp_tel RS sym]) 1);
   326 by (simp_tac (simpset() addsimps [o_def,subst_comp_tel RS sym]) 1);
   327 (** LEVEL 90 **)
   327 (** LEVEL 80 **)
   328 by (rtac ((subst_comp_tel RS sym) RSN (2,trans)) 1);
   328 by (rtac ((subst_comp_tel RS sym) RSN (2,trans)) 1);
   329 by ( asm_full_simp_tac (simpset() addsimps [o_def,eq_sym_conv]) 1);
   329 by ( asm_full_simp_tac (simpset() addsimps [o_def,eq_sym_conv]) 1);
       
   330 by(dres_inst_tac [("s","Ok ?X")] sym 1);
   330 by (rtac eq_free_eq_subst_tel 1);
   331 by (rtac eq_free_eq_subst_tel 1);
   331 by ( safe_tac HOL_cs );
   332 by ( safe_tac HOL_cs );
   332 by (subgoal_tac "ma ~= na" 1);
   333 by (subgoal_tac "ma ~= na" 1);
   333 by ((forward_tac [new_tv_W] 2) THEN (atac 2));
   334 by ((forward_tac [new_tv_W] 2) THEN (atac 2));
   334 by (etac conjE 2);
   335 by (etac conjE 2);