Module docstring
{"# UnivLE and cardinals "}
{"# UnivLE and cardinals "}
univLE_iff_cardinal_le
theorem
: UnivLE.{u, v} ↔ univ.{u, v + 1} ≤ univ.{v, u + 1}
theorem univLE_iff_cardinal_le : UnivLEUnivLE.{u, v}UnivLE.{u, v} ↔ univ.{u, v+1} ≤ univ.{v, u+1} := by
rw [← not_iff_not, univLE_iff]; simp_rw [small_iff_lift_mk_lt_univ]; push_neg
-- strange: simp_rw [univ_umax.{v,u}] doesn't work
refine ⟨fun ⟨α, le⟩ ↦ ?_, fun h ↦ ?_⟩
· rw [univ_umaxuniv_umax.{v,u}, ← lift_le.{u+1}, lift_univ, lift_lift] at le
exact le.trans_lt (lift_lt_univ'.{u,v+1} #α)
· obtain ⟨⟨α⟩, h⟩ := lt_univ'.mp h; use α
rw [univ_umaxuniv_umax.{v,u}, ← lift_le.{u+1}, lift_univ, lift_lift]
exact h.le
univLE_iff_exists_embedding
theorem
: UnivLE.{u, v} ↔ Nonempty (Ordinal.{u} ↪ Ordinal.{v})
theorem univLE_iff_exists_embedding : UnivLEUnivLE.{u, v}UnivLE.{u, v} ↔ Nonempty (Ordinal.{u} ↪ Ordinal.{v}) := by
rw [univLE_iff_cardinal_le]
exact lift_mk_le'
Ordinal.univLE_of_injective
theorem
{f : Ordinal.{u} → Ordinal.{v}} (h : f.Injective) : UnivLE.{u, v}
theorem Ordinal.univLE_of_injective {f : OrdinalOrdinal.{u} → OrdinalOrdinal.{v}} (h : f.Injective) :
UnivLEUnivLE.{u, v} :=
univLE_iff_exists_embedding.2 ⟨f, h⟩
univLE_total
theorem
: UnivLE.{u, v} ∨ UnivLE.{v, u}
/-- Together with transitivity, this shows `UnivLE` is a total preorder. -/
theorem univLE_total : UnivLEUnivLE.{u, v}UnivLE.{u, v} ∨ UnivLE.{v, u} := by
simp_rw [univLE_iff_cardinal_le]; apply le_total