Theory Abstract_Substitution.List_Extra
theory List_Extra
imports Main
begin
:: "'a set ⇒ 'a list" where
"set_list S ≡ SOME xs. set xs = S ∧ distinct xs"
lemma [simp]: "set_list {} = []"
unfolding set_list_def
by auto
lemma [simp]: "set_list {x} = [x]"
proof (unfold set_list_def, rule some1_equality, intro ex_ex1I)
show "⋀xs y. ⟦set xs = {x} ∧ distinct xs; set y = {x} ∧ distinct y⟧ ⟹ xs = y"
by (metis distinct_card replicate_eqI singleton_iff)
qed (auto simp: finite_distinct_list)
lemma [simp]:
assumes "finite S"
shows "set (set_list S) = S"
unfolding set_list_def
by (rule someI2_ex[OF finite_distinct_list[OF assms]]) argo
lemma [simp]:
assumes "finite S"
shows "distinct (set_list S)"
unfolding set_list_def
by (rule someI2_ex[OF finite_distinct_list[OF assms]]) argo
end