Theory ZFfin_HF
chapter ‹Models and counter-models›
theory ZFfin_HF
imports HereditarilyFinite.Rank ZFfin
begin
section ‹Hereditarily finite sets›
text ‹We show that the hereditarily finite sets as implemented in @{theory HereditarilyFinite.HF} are a model of
ZFfin as implemented in @{theory ZF_finite.ZFfin}›
interpretation zfhf: ZFfin "(❙∈)"
rewrites "zfhf.emptysetM = 0" and
"zfhf.singletonM y = ⦃y⦄" and
"zfhf.setsucM x y = x ◃ y"
proof-
interpret zfhf: L_setsuc "(❙∈)"
by unfold_locales blast+
interpret zfhf: L_empty "(❙∈)"
by unfold_locales blast
interpret zfhf: L_setext_empty "(❙∈)"
by unfold_locales blast
show zfhf_emp: "zfhf.emptysetM = 0"
using zfhf.empty_is_empty by auto
interpret zfhf: L_setsuc "(❙∈)"
by unfold_locales blast+
interpret zfhf: L_empty "(❙∈)"
by unfold_locales blast
interpret zfhf: L_setext_empty_setsuc "(❙∈)"
by unfold_locales
show zfhf_sing: "zfhf.singletonM y = ⦃y⦄" for y
using zfhf.singleton_def' by blast
show zfhf_suc: "zfhf.setsucM x y = x ◃ y" for x y
unfolding zfhf.setext[of _ "x ◃ y"] zfhf.setsuc_def' by auto
interpret L_setind "(❙∈)"
proof
show "zfhf.SetFormulaPredicate P ⟹ P (Ξ(0 := zfhf.emptysetM)) ⟶
(∀x y. P (Ξ(0 := x)) ⟶ P (Ξ(0 := zfhf.setsucM x y))) ⟶ (∀x. P (Ξ(0 := x)))" for P Ξ
unfolding zfhf_suc zfhf_emp using hf_induct[of "λ a. P (Ξ(0:=a))"] by blast
qed
interpret L_setext_empty_setsuc_setind "(❙∈)"
by unfold_locales
interpret L_epsind "(❙∈)"
proof
fix Ξ :: "nat ⇒ hf" and Q
from Rank.hmem_induct[of "λ x. Q(Ξ(0:=x))"]
show "(∀x. (∀y. y ❙∈ x ⟶ Q (Ξ(0 := y))) ⟶ Q (Ξ(0 := x))) ⟶ (∀x. Q (Ξ(0 := x)))"
by blast
qed
show "ZFfin (❙∈)"
proof (unfold_locales, unfold zfhf_emp zfhf_suc)
fix Ξ :: "nat ⇒ hf" and P
from hf_induct[of "λ x. P(Ξ(0:=x))"]
show "∄x. 0 ❙∈ x ∧ (∀y. y ❙∈ x ⟶ y ◃ y ❙∈ x)"
using fin zfhf_emp zfhf_suc by auto
qed