src/HOL/W0/W0.thy
changeset 21669 c68717c16013
parent 21404 eb85850d3eb7
child 22548 6ce4bddf3bcb
equal deleted inserted replaced
21668:2d811ae6752a 21669:c68717c16013
   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)