Zulip Chat Archive
Stream: maths
Topic: cardinals and ordinals
Kenny Lau (Aug 22 2018 at 14:21):
In lean they are not sets? i.e. set_theory/zfc.lean
and set_theory/cardinal.lean
are independent?
Kenny Lau (Aug 22 2018 at 14:59):
so I've written my embedding:
import set_theory.zfc set_theory.ordinal universe u noncomputable def ordinal.to_Set (o : ordinal.{u}) : Set.{u+1} := quotient.mk $ ordinal.limit_rec_on o ∅ (λ _ s, insert s s) $ λ L _ ih, pSet.Union $ pSet.mk { o // o < L } $ λ o', ih o'.1 o'.2
Kenny Lau (Aug 22 2018 at 14:59):
and I wonder if I can do it in pSet.{u}
Kenny Lau (Aug 22 2018 at 20:15):
import set_theory.zfc set_theory.ordinal universe u attribute [elab_as_eliminator] well_founded.induction def Well_order.to_pSet (w : Well_order.{u}) : pSet.{u} := pSet.mk w.1 $ well_founded.fix (@is_well_order.wf w.1 w.2 w.3) $ λ x ih, pSet.mk { y | w.r y x } $ λ p, ih p.1 p.2 theorem ordinal.to_Set.aux (v w : Well_order.{u}) (e : v.2 ≃o w.2) (x : v.1) : (Well_order.to_pSet v).func x ≈ (Well_order.to_pSet w).func (e x) := show pSet.equiv (well_founded.fix (@is_well_order.wf v.1 v.2 v.3) (λ x ih, pSet.mk { y | v.r y x } $ λ p, ih p.1 p.2) x) (well_founded.fix (@is_well_order.wf w.1 w.2 w.3) (λ x ih, pSet.mk { y | w.r y x } $ λ p, ih p.1 p.2) (e x)), from well_founded.induction (@is_well_order.wf v.1 v.2 v.3) x $ λ x ih, by rw [well_founded.fix_eq, well_founded.fix_eq]; from ⟨λ ⟨y, hy⟩, ⟨⟨e y, (order_iso.ord e).1 hy⟩, ih y hy⟩, λ ⟨y, hy⟩, ⟨⟨e.symm y, by simpa using (order_iso.ord e.symm).1 hy⟩, by have := ih (e.symm y) (by simpa using (order_iso.ord e.symm).1 hy); rw [order_iso.apply_inverse_apply] at this; from this⟩⟩ def ordinal.to_Set (o : ordinal.{u}) : Set.{u} := quotient.lift_on o (λ w, ⟦Well_order.to_pSet w⟧) $ λ ⟨v1, v2, v3⟩ ⟨w1, w2, w3⟩ ⟨e⟩, quotient.sound ⟨λ x, ⟨e x, ordinal.to_Set.aux _ _ e x⟩, λ x, ⟨e.symm x, by simpa using ordinal.to_Set.aux ⟨v1, v2, v3⟩ ⟨w1, w2, w3⟩ e (e.symm x)⟩⟩
Kenny Lau (Aug 22 2018 at 20:15):
and I did it in the same universe @Mario Carneiro
Kenny Lau (Aug 22 2018 at 20:16):
and I still don't think it's a good idea to destruct the Well_order
in the definition of the setoid of ordinal
Kenny Lau (Aug 22 2018 at 20:54):
and after 38 minutes, the other direction:
Kenny Lau (Aug 22 2018 at 20:54):
def pSet.type.setoid (p : pSet.{u}) : setoid p.type := ⟨λ i j, ⟦p.func i⟧ = ⟦p.func j⟧, λ i, rfl, λ i j, eq.symm, λ i j k, eq.trans⟩ local attribute [instance] pSet.type.setoid def Set.cardinal (s : Set.{u}) : cardinal.{u} := quotient.lift_on s (λ p, cardinal.mk $ quotient $ pSet.type.setoid p) $ λ ⟨p1, p2⟩ ⟨q1, q2⟩ H, quotient.sound $ nonempty.intro { to_fun := λ x, quotient.lift_on x (λ i, @@quotient.mk (pSet.type.setoid $ pSet.mk q1 q2) (classical.some (H.1 i))) $ λ i j H', quotient.sound $ calc ⟦q2 (classical.some (H.1 i))⟧ = ⟦p2 i⟧ : eq.symm (quotient.sound $ classical.some_spec (H.1 i)) ... = ⟦p2 j⟧ : H' ... = ⟦q2 (classical.some (H.1 j))⟧ : quotient.sound (classical.some_spec (H.1 j)), inv_fun := λ x, quotient.lift_on x (λ i, @@quotient.mk (pSet.type.setoid $ pSet.mk p1 p2) $ classical.some $ H.2 i) $ λ i j H', quotient.sound $ calc ⟦p2 (classical.some (H.2 i))⟧ = ⟦q2 i⟧ : quotient.sound (classical.some_spec (H.2 i)) ... = ⟦q2 j⟧ : H' ... = ⟦p2 (classical.some (H.2 j))⟧ : eq.symm (quotient.sound $ classical.some_spec (H.2 j)), left_inv := λ i, quotient.induction_on i $ λ i, quotient.sound $ calc ⟦p2 (classical.some (H.2 (classical.some (H.1 i))))⟧ = ⟦q2 (classical.some (H.1 i))⟧ : quotient.sound (classical.some_spec (H.2 _)) ... = ⟦p2 i⟧ : eq.symm (quotient.sound $ classical.some_spec (H.1 i)), right_inv := λ i, quotient.induction_on i $ λ i, quotient.sound $ calc ⟦q2 (classical.some (H.1 (classical.some (H.2 i))))⟧ = ⟦p2 (classical.some (H.2 i))⟧ : eq.symm (quotient.sound $ classical.some_spec (H.1 _)) ... = ⟦q2 i⟧ : quotient.sound (classical.some_spec (H.2 i)) }
Kenny Lau (Aug 22 2018 at 21:15):
@Mario Carneiro should I develop on this and then PR?
Kenny Lau (Aug 22 2018 at 22:32):
theorem Well_order.to_pSet.exact (w : Well_order.{u}) (x : w.1) : ∀ y, ⟦w.to_pSet.func x⟧ = ⟦w.to_pSet.func y⟧ → x = y := well_founded.induction (@is_well_order.wf w.1 w.2 w.3) x $ λ x ih y H, begin replace H := quotient.exact H, rw [Well_order.to_pSet.def, Well_order.to_pSet.def] at H, letI := w.3, rcases is_trichotomous.trichotomous w.2 x y with h | h | h, { rcases H.2 ⟨x, h⟩ with ⟨⟨z, hzx⟩, h1⟩, specialize ih z hzx x (quotient.sound h1), exfalso, subst ih, exact is_irrefl.irrefl w.r _ hzx }, { exact h }, { rcases H.1 ⟨y, h⟩ with ⟨⟨z, hzy⟩, h1⟩, specialize ih y h z (quotient.sound h1), exfalso, subst ih, exact is_irrefl.irrefl w.r _ hzy } end example (c : cardinal.{u}) : c.ord.to_Set.to_cardinal = c := begin apply quotient.induction_on c, intro c, have := cardinal.ord_eq c, rcases this with ⟨r, wo, H⟩, simp [H, ordinal.type, ordinal.to_Set], rw [Set.mk, Set.to_cardinal, quotient.lift_on_beta], apply quotient.sound, split, fapply equiv.mk, { fapply quotient.lift, { exact id }, { intros x y H, exact Well_order.to_pSet.exact _ _ _ H } }, { exact quotient.mk }, { intro x, apply quotient.induction_on x, intro x, refl }, { intro x, refl } end
Kenny Lau (Aug 22 2018 at 22:33):
that's the round trip in one direction
Last updated: Dec 20 2023 at 11:08 UTC