equal
deleted
inserted
replaced
351 "free_tv (\<lambda>u::nat. $s1 (s2 u) :: typ) \<subseteq> free_tv s1 \<union> free_tv s2" |
351 "free_tv (\<lambda>u::nat. $s1 (s2 u) :: typ) \<subseteq> free_tv s1 \<union> free_tv s2" |
352 apply (unfold free_tv_subst dom_def) |
352 apply (unfold free_tv_subst dom_def) |
353 apply (tactic {* |
353 apply (tactic {* |
354 fast_tac (set_cs addSDs [thm "free_tv_app_subst_te" RS subsetD, |
354 fast_tac (set_cs addSDs [thm "free_tv_app_subst_te" RS subsetD, |
355 thm "free_tv_subst_var" RS subsetD] |
355 thm "free_tv_subst_var" RS subsetD] |
356 addss (simpset() delsimps bex_simps |
356 addss (simpset() delsimps (thms "bex_simps") |
357 addsimps [thm "cod_def", thm "dom_def"])) 1 *}) |
357 addsimps [thm "cod_def", thm "dom_def"])) 1 *}) |
358 done |
358 done |
359 |
359 |
360 |
360 |
361 subsection {* Most general unifiers *} |
361 subsection {* Most general unifiers *} |
579 (v \<in> free_tv s \<or> v \<in> free_tv t) \<Longrightarrow> v < n \<Longrightarrow> v \<in> free_tv a" |
579 (v \<in> free_tv s \<or> v \<in> free_tv t) \<Longrightarrow> v < n \<Longrightarrow> v \<in> free_tv a" |
580 apply (atomize (full)) |
580 apply (atomize (full)) |
581 apply (induct e) |
581 apply (induct e) |
582 txt {* case @{text "Var n"} *} |
582 txt {* case @{text "Var n"} *} |
583 apply clarsimp |
583 apply clarsimp |
584 apply (tactic {* fast_tac (HOL_cs addIs [nth_mem, subsetD, thm "ftv_mem_sub_ftv_list"]) 1 *}) |
584 apply (tactic {* fast_tac (HOL_cs addIs [thm "nth_mem", subsetD, thm "ftv_mem_sub_ftv_list"]) 1 *}) |
585 txt {* case @{text "Abs e"} *} |
585 txt {* case @{text "Abs e"} *} |
586 apply (simp add: free_tv_subst split add: split_bind) |
586 apply (simp add: free_tv_subst split add: split_bind) |
587 apply (intro strip) |
587 apply (intro strip) |
588 apply (rename_tac s t n1 v) |
588 apply (rename_tac s t n1 v) |
589 apply (erule_tac x = "Suc n" in allE) |
589 apply (erule_tac x = "Suc n" in allE) |