Jon Sterling, 25th March 2023. \begin{code} {-# OPTIONS --safe --without-K #-} open import MLTT.Spartan open import UF.Base open import UF.FunExt open import UF.PropTrunc open import UF.SetTrunc open import UF.Subsingletons module Cardinals.Preorder (fe : FunExt) (pe : PropExt) (st : set-truncations-exist) (pt : propositional-truncations-exist) where open import UF.Embeddings open import UF.Sets open import UF.Sets-Properties open import UF.Subsingletons-FunExt open import UF.Subsingletons-Properties open import UF.SubtypeClassifier open import UF.SubtypeClassifier-Properties open import Cardinals.Type st import UF.Logic open set-truncations-exist st open propositional-truncations-exist pt open UF.Logic.AllCombinators pt (fe _ _) _[≤]_ : hSet 𝓤 → hSet 𝓥 → Ω (𝓤 ⊔ 𝓥) A [≤] B = ∥ underlying-set A ↪ underlying-set B ∥Ω [≤]-trans : (A : hSet 𝓤) (B : hSet 𝓥) (C : hSet 𝓦) → (A [≤] B) holds → (B [≤] C) holds → (A [≤] C) holds [≤]-trans A B C = ∥∥-rec (Π-is-prop (fe _ _) (λ _ → holds-is-prop (A [≤] C))) λ AB → ∥∥-rec (holds-is-prop (A [≤] C)) λ BC → ∣ BC ∘↪ AB ∣ module _ {𝓤 𝓥} where _≤_ : Card 𝓤 → Card 𝓥 → Ω (𝓤 ⊔ 𝓥) _≤_ = set-trunc-rec _ lem·0 λ A → set-trunc-rec _ lem·1 λ B → A [≤] B where abstract lem·1 : is-set (Ω (𝓤 ⊔ 𝓥)) lem·1 = Ω-is-set (fe _ _) (pe _) lem·0 : is-set (Card 𝓥 → Ω (𝓤 ⊔ 𝓥)) lem·0 = Π-is-set (fe _ _) λ _ → lem·1 module _ {A : hSet 𝓤} {B : hSet 𝓥} where abstract ≤-compute : (set-trunc-in A ≤ set-trunc-in B) = (A [≤] B) ≤-compute = happly (set-trunc-ind-β _ _ _ _) (set-trunc-in B) ∙ set-trunc-ind-β _ _ _ _ ≤-compute-out : (set-trunc-in A ≤ set-trunc-in B) holds → (A [≤] B) holds ≤-compute-out = transport _holds ≤-compute ≤-compute-in : (A [≤] B) holds → (set-trunc-in A ≤ set-trunc-in B) holds ≤-compute-in = transport⁻¹ _holds ≤-compute ≤-refl : (α : Card 𝓤) → (α ≤ α) holds ≤-refl = set-trunc-ind _ lem λ A → ≤-compute-in ∣ id , id-is-embedding ∣ where lem : (_ : _) → is-set _ lem _ = props-are-sets (holds-is-prop (_ ≤ _)) ≤-trans : (α : Card 𝓤) (β : Card 𝓥) (γ : Card 𝓦) → (α ≤ β) holds → (β ≤ γ) holds → (α ≤ γ) holds ≤-trans = set-trunc-ind _ lem·0 λ A → set-trunc-ind _ (lem·1 A) λ B → set-trunc-ind _ (lem·2 A B) λ C → λ AB BC → ≤-compute-in ([≤]-trans A B C (≤-compute-out AB) (≤-compute-out BC)) where lem·2 : (A : hSet _) (B : hSet _) (_ : Card _) → is-set _ lem·2 A B γ = Π-is-set (fe _ _) λ _ → Π-is-set (fe _ _) λ _ → props-are-sets (holds-is-prop (_ ≤ _)) lem·1 : (A : hSet _) (β : Card _) → is-set _ lem·1 A β = Π-is-set (fe _ _) λ _ → Π-is-set (fe _ _) λ _ → Π-is-set (fe _ _) λ _ → props-are-sets (holds-is-prop (_ ≤ _)) lem·0 : (α : Card _) → is-set _ lem·0 α = Π-is-set (fe _ _) λ _ → Π-is-set (fe _ _) λ _ → Π-is-set (fe _ _) λ _ → Π-is-set (fe _ _) λ _ → props-are-sets (holds-is-prop (_ ≤ _)) module _ {𝓤} where Ω¬_ : Ω 𝓤 → Ω 𝓤 Ω¬ ϕ = ϕ ⇒ ⊥ {𝓤} _<_ : Card 𝓤 → Card 𝓥 → Ω (𝓤 ⊔ 𝓥) α < β = (α ≤ β) ∧ (Ω¬ (β ≤ α))