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); |