Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit b36a458

Browse files
committed
feat(set_theory/ordinal/basic): add gc_ord_card and gci_ord_card (#15152)
Define a Galois coinsertion between `cardinal.ord` and `ordinal.card`, then use it to golf some proofs.
1 parent b9c17c1 commit b36a458

File tree

2 files changed

+19
-22
lines changed

2 files changed

+19
-22
lines changed

src/order/galois_connection.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,7 +720,6 @@ lemma is_lub_of_l_image [preorder α] [preorder β] (gi : galois_coinsertion l u
720720
(hs : is_lub (l '' s) a) : is_lub s (u a) :=
721721
gi.dual.is_glb_of_u_image hs
722722

723-
724723
section lift
725724

726725
variables [partial_order α]

src/set_theory/ordinal/basic.lean

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -902,30 +902,31 @@ let ⟨r, _, e⟩ := ord_eq α in begin
902902
exact le_trans (ord_le_type _) (type_le'.2 ⟨g⟩) }
903903
end
904904

905-
theorem lt_ord {c o} : o < ord c ↔ o.card < c :=
906-
by rw [← not_le, ← not_le, ord_le]
905+
theorem gc_ord_card : galois_connection ord card := λ _ _, ord_le
906+
907+
theorem lt_ord {c o} : o < ord c ↔ o.card < c := gc_ord_card.lt_iff_lt
907908

908909
@[simp] theorem card_ord (c) : (ord c).card = c :=
909910
quotient.induction_on c $ λ α,
910911
let ⟨r, _, e⟩ := ord_eq α in by simp only [mk_def, e, card_type]
911912

912-
theorem ord_card_le (o : ordinal) : o.card.ord ≤ o :=
913-
ord_le.2 le_rfl
913+
/-- Galois coinsertion between `cardinal.ord` and `ordinal.card`. -/
914+
def gci_ord_card : galois_coinsertion ord card :=
915+
gc_ord_card.to_galois_coinsertion $ λ c, c.card_ord.le
914916

915-
lemma lt_ord_succ_card (o : ordinal) : o < (succ o.card).ord :=
916-
by { rw lt_ord, apply lt_succ }
917+
theorem ord_card_le (o : ordinal) : o.card.ord ≤ o := gc_ord_card.l_u_le _
917918

918-
@[simp] theorem ord_le_ord {c₁ c₂} : ord c₁ ≤ ord c₂ ↔ c₁ ≤ c₂ :=
919-
by simp only [ord_le, card_ord]
919+
lemma lt_ord_succ_card (o : ordinal) : o < (succ o.card).ord := lt_ord.2 $ lt_succ _
920920

921-
@[simp] theorem ord_lt_ord {c₁ c₂} : ord c₁ < ord c₂ ↔ c₁ < c₂ :=
922-
by simp only [lt_ord, card_ord]
921+
@[mono] theorem ord_strict_mono : strict_mono ord := gci_ord_card.strict_mono_l
922+
@[mono] theorem ord_mono : monotone ord := gc_ord_card.monotone_l
923923

924-
@[simp] theorem ord_zero : ord 0 = 0 :=
925-
le_antisymm (ord_le.2 $ zero_le _) (ordinal.zero_le _)
924+
@[simp] theorem ord_le_ord {c₁ c₂} : ord c₁ ≤ ord c₂ ↔ c₁ ≤ c₂ := gci_ord_card.l_le_l_iff
925+
@[simp] theorem ord_lt_ord {c₁ c₂} : ord c₁ < ord c₂ ↔ c₁ < c₂ := ord_strict_mono.lt_iff_lt
926+
@[simp] theorem ord_zero : ord 0 = 0 := gc_ord_card.l_bot
926927

927928
@[simp] theorem ord_nat (n : ℕ) : ord n = n :=
928-
le_antisymm (ord_le.2 $ by simp only [card_nat]) $ begin
929+
(ord_le.2 (card_nat n).ge).antisymm begin
929930
induction n with n IH,
930931
{ apply ordinal.zero_le },
931932
{ exact succ_le_of_lt (IH.trans_lt $ ord_lt_ord.2 $ nat_cast_lt.2 (nat.lt_succ_self n)) }
@@ -935,14 +936,11 @@ end
935936
by simpa using ord_nat 1
936937

937938
@[simp] theorem lift_ord (c) : (ord c).lift = ord (lift c) :=
938-
eq_of_forall_ge_iff $ λ o, le_iff_le_iff_lt_iff_lt.2 $ begin
939-
split; intro h,
940-
{ rcases ordinal.lt_lift_iff.1 h with ⟨a, e, h⟩,
941-
rwa [← e, lt_ord, ← lift_card, lift_lt, ← lt_ord] },
942-
{ rw lt_ord at h,
943-
rcases lift_down' (le_of_lt h) with ⟨o, rfl⟩,
944-
rw [← lift_card, lift_lt] at h,
945-
rwa [ordinal.lift_lt, lt_ord] }
939+
begin
940+
refine le_antisymm (le_of_forall_lt (λ a ha, _)) _,
941+
{ rcases ordinal.lt_lift_iff.1 ha with ⟨a, rfl, h⟩,
942+
rwa [lt_ord, ← lift_card, lift_lt, ← lt_ord, ← ordinal.lift_lt] },
943+
{ rw [ord_le, ← lift_card, card_ord] }
946944
end
947945

948946
lemma mk_ord_out (c : cardinal) : #c.ord.out.α = c := by simp

0 commit comments

Comments
 (0)