src/HOL/MiniML/W.ML
changeset 11232 558a4feebb04
parent 7499 23e090051cb8
child 12524 66eb843b1d35
equal deleted inserted replaced
11231:30d96882f915 11232:558a4feebb04
   315 by (mp_tac 1);
   315 by (mp_tac 1);
   316 by (assume_tac 1);
   316 by (assume_tac 1);
   317 (* case Let e1 e2 *)
   317 (* case Let e1 e2 *)
   318 by (simp_tac (simpset() addsplits [split_option_bind]) 1);
   318 by (simp_tac (simpset() addsplits [split_option_bind]) 1);
   319 by (strip_tac 1);
   319 by (strip_tac 1);
   320 by (rename_tac "w q m1 S1 t1 m2 S2 t n2" 1); 
   320 (*by (rename_tac "w q m1 S1 t1 m2 S2 t n2" 1); *)
       
   321 by (rename_tac "S1 t1 m1 S2" 1); 
   321 by (res_inst_tac [("t1.0","$ S2 t1")] has_type.LETI 1);
   322 by (res_inst_tac [("t1.0","$ S2 t1")] has_type.LETI 1);
   322 by (simp_tac (simpset() addsimps [o_def]) 1);
   323  by (simp_tac (simpset() addsimps [o_def]) 1);
   323 by (simp_tac (HOL_ss addsimps [subst_comp_scheme_list RS sym]) 1);
   324  by (simp_tac (HOL_ss addsimps [subst_comp_scheme_list RS sym]) 1);
   324 by (rtac (has_type_cl_sub RS spec) 1);
   325  by (rtac (has_type_cl_sub RS spec) 1);
   325 by (dres_inst_tac [("x","A")] spec 1);
   326  by (dres_inst_tac [("x","A")] spec 1);
   326 by (dres_inst_tac [("x","S1")] spec 1);
   327  by (dres_inst_tac [("x","S1")] spec 1);
   327 by (dres_inst_tac [("x","t1")] spec 1);
   328  by (dres_inst_tac [("x","t1")] spec 1);
   328 by (dres_inst_tac [("x","m2")] spec 1);
   329  by (dres_inst_tac [("x","m1")] spec 1);
   329 by (rotate_tac 4 1);
   330  by (dres_inst_tac [("x","n")] spec 1);
   330 by (dres_inst_tac [("x","m1")] spec 1);
   331  by (mp_tac 1);
   331 by (mp_tac 1);
   332  by (asm_full_simp_tac (simpset() addsimps [eq_sym_conv]) 1);
   332 by (asm_full_simp_tac (simpset() addsimps [eq_sym_conv]) 1);
       
   333 by (simp_tac (simpset() addsimps [o_def]) 1);
   333 by (simp_tac (simpset() addsimps [o_def]) 1);
   334 by (simp_tac (HOL_ss addsimps [subst_comp_scheme_list RS sym]) 1);
   334 by (simp_tac (HOL_ss addsimps [subst_comp_scheme_list RS sym]) 1);
   335 by (rtac (gen_subst_commutes RS sym RS subst) 1);
   335 by (rtac (gen_subst_commutes RS sym RS subst) 1);
   336 by (rtac (app_subst_Cons RS subst) 2);
   336  by (rtac (app_subst_Cons RS subst) 2);
   337 by (etac thin_rl 2);
   337  by (etac thin_rl 2);
   338 by (dres_inst_tac [("x","gen ($S1 A) t1 # $ S1 A")] spec 2);
   338  by (dres_inst_tac [("x","gen ($S1 A) t1 # $ S1 A")] spec 2);
   339 by (dres_inst_tac [("x","S2")] spec 2);
   339  by (dres_inst_tac [("x","S2")] spec 2);
   340 by (dres_inst_tac [("x","t")] spec 2);
   340  by (dres_inst_tac [("x","t")] spec 2);
   341 by (dres_inst_tac [("x","n2")] spec 2);
   341  by (dres_inst_tac [("x","m")] spec 2);
   342 by (dres_inst_tac [("x","m2")] spec 2);
   342  by (dres_inst_tac [("x","m1")] spec 2);
   343 by (ftac new_tv_W 2);
   343  by (ftac new_tv_W 2);
   344 by (assume_tac 2);
   344   by (assume_tac 2);
   345 by (dtac conjunct1 2);
   345  by (dtac conjunct1 2);
   346 by (dtac conjunct1 2);
   346  by (ftac new_tv_subst_scheme_list 2);
   347 by (ftac new_tv_subst_scheme_list 2);
   347   by (rtac new_scheme_list_le 2);
   348 by (rtac new_scheme_list_le 2);
   348    by (rtac W_var_ge 2);
   349 by (rtac W_var_ge 2);
   349    by (assume_tac 2);
   350 by (assume_tac 2);
   350   by (assume_tac 2);
   351 by (assume_tac 2);
   351  by (etac impE 2);
   352 by (etac impE 2);
   352   by (res_inst_tac [("A","$ S1 A")] new_tv_only_depends_on_free_tv_scheme_list 2);
   353 by (res_inst_tac [("A","$ S1 A")] new_tv_only_depends_on_free_tv_scheme_list 2);
   353    by (Simp_tac 2);
   354 by (Simp_tac 2);
   354    by (Fast_tac 2);
   355 by (Fast_tac 2);
   355   by (assume_tac 2);
   356 by (assume_tac 2);
   356  by (Asm_full_simp_tac 2);
   357 by (Asm_full_simp_tac 2);
       
   358 by (rtac weaken_A_Int_B_eq_empty 1);
   357 by (rtac weaken_A_Int_B_eq_empty 1);
   359 by (rtac allI 1);
   358 by (rtac allI 1);
   360 by (strip_tac 1);
   359 by (strip_tac 1);
   361 by (rtac weaken_not_elem_A_minus_B 1);
   360 by (rtac weaken_not_elem_A_minus_B 1);
   362 by (case_tac "x < m2" 1);
   361 by (case_tac "x < m1" 1);
   363 by (rtac disjI2 1);
   362  by (rtac disjI2 1);
   364 by (rtac (free_tv_gen_cons RS subst) 1);
   363  by (rtac (free_tv_gen_cons RS subst) 1);
   365 by (rtac free_tv_W 1);
   364  by (rtac free_tv_W 1);
   366 by (assume_tac 1);
   365    by (assume_tac 1);
   367 by (Asm_full_simp_tac 1);
   366   by (Asm_full_simp_tac 1);
   368 by (assume_tac 1);
   367  by (assume_tac 1);
   369 by (rtac disjI1 1);
   368 by (rtac disjI1 1);
   370 by (dtac new_tv_W 1);
   369 by (dtac new_tv_W 1);
   371 by (assume_tac 1);
   370 by (assume_tac 1);
   372 by (dtac conjunct2 1);
       
   373 by (dtac conjunct2 1);
   371 by (dtac conjunct2 1);
   374 by (rtac new_tv_not_free_tv 1);
   372 by (rtac new_tv_not_free_tv 1);
   375 by (rtac new_tv_le 1);
   373 by (rtac new_tv_le 1);
   376 by (assume_tac 2);
   374  by (assume_tac 2);
   377 by (asm_full_simp_tac (simpset() addsimps [not_less_iff_le]) 1);
   375 by (asm_full_simp_tac (simpset() addsimps [not_less_iff_le]) 1);
   378 qed_spec_mp "W_correct_lemma";
   376 qed_spec_mp "W_correct_lemma";
   379 
   377 
   380 (* Completeness of W w.r.t. has_type *)
   378 (* Completeness of W w.r.t. has_type *)
   381 Goal "!S' A t' n. $S' A |- e :: t' --> new_tv n A -->     \
   379 Goal "!S' A t' n. $S' A |- e :: t' --> new_tv n A -->     \