Theory Fresh_Infinite

section ‹Fresh identifier generation for infinite types›

theory Fresh_Infinite
  imports Fresh
begin

text ‹This is a default fresh operator for infinite types
for which more specific (smarter) alternatives are not (yet) available. ›


definition (in infinite) fresh :: "'a set  'a  'a" where
"fresh xs x  if x  xs  infinite xs then x else (SOME y. y  xs)"

sublocale infinite < fresh where fresh = fresh
apply standard
  subgoal unfolding fresh_def
  by (metis ex_new_if_finite local.infinite_UNIV someI_ex)
  subgoal unfolding fresh_def by simp .

end