Skip to content

OrderedTypes.PosetReflection

Tom de Jong, 3 June 2022

The poset reflection of a preorder, using (large) set quotients as constructed
in Quotient.Large.


{-# OPTIONS --safe --without-K #-}

open import MLTT.Spartan
open import UF.FunExt
open import UF.PropTrunc
open import UF.Sets
open import UF.Subsingletons
open import UF.SubtypeClassifier

module OrderedTypes.PosetReflection
        (pt : propositional-truncations-exist)
        (fe : Fun-Ext)
        (pe : Prop-Ext)
       where

open import Quotient.Type
open import Quotient.Large pt fe pe
open import UF.Base hiding (_≈_)
open import UF.ImageAndSurjection pt
open import UF.Subsingletons-FunExt

open general-set-quotients-exist large-set-quotients
open extending-relations-to-quotient fe pe

module poset-reflection
        (X : 𝓤 ̇ )
        (_≲_ : X  X  𝓣 ̇ )
        (≲-is-prop-valued : (x y : X)  is-prop (x  y))
        (≲-is-reflexive : (x : X)  x  x)
        (≲-is-transitive : (x y z : X)  x  y  y  z  x  z)
       where

 private
  _≲Ω_ : X  X  Ω 𝓣
  x ≲Ω y = x  y , ≲-is-prop-valued x y

 _≈_ : X  X  𝓣 ̇
 x  y = x  y × y  x

 ≈-is-equiv-rel : is-equiv-relation _≈_
 ≈-is-equiv-rel =  x y  ×-is-prop (≲-is-prop-valued x y)
                                     (≲-is-prop-valued y x))
                ,  x  ≲-is-reflexive x , ≲-is-reflexive x)
                ,  x y (k , l)  l , k)
                ,  x y z (k , l) (u , v)  (≲-is-transitive x y z k u)
                                           , (≲-is-transitive z y x v l))

  : EqRel X
  = _≈_ , ≈-is-equiv-rel

 private
  ≲-congruence : {x y x' y' : X}  x  x'  y  y'  x ≲Ω y  x' ≲Ω y'
  ≲-congruence {x} {y} {x'} {y'} (k , l) (u , v) =
   Ω-extensionality pe fe
     m  ≲-is-transitive x' x y' l
            (≲-is-transitive x y y' m u))
     m  ≲-is-transitive x x' y k
            (≲-is-transitive x' y' y m v))

  _≤Ω_ : X /   X /   Ω 𝓣
  _≤Ω_ = extension-rel₂   x y  x ≲Ω y) ≲-congruence

 poset-reflection-carrier : 𝓣   𝓤 ̇
 poset-reflection-carrier = X / 

 poset-reflection-is-set : is-set poset-reflection-carrier
 poset-reflection-is-set = /-is-set 

 _≤_ : X /   X /   𝓣 ̇
 x'  y' = (x' ≤Ω y') holds

 ≤-is-prop-valued : (x' y' : X / )  is-prop (x'  y')
 ≤-is-prop-valued x' y' = holds-is-prop (x' ≤Ω y')

 η : X  X / 
 η = η/ 

 η-is-surjection : is-surjection η
 η-is-surjection = η/-is-surjection  pt

 η-reflects-order : {x y : X}  η x  η y  x  y
 η-reflects-order {x} {y} =
  Idtofun (ap pr₁ (extension-rel-triangle₂  _≲Ω_ ≲-congruence x y))

 η-preserves-order : {x y : X}  x  y  η x  η y
 η-preserves-order {x} {y} =
  Idtofun (ap pr₁ ((extension-rel-triangle₂  _≲Ω_ ≲-congruence x y) ⁻¹))

 η-↔-order : {x y : X}  x  y  η x  η y
 η-↔-order = η-preserves-order , η-reflects-order

 ≤-is-reflexive : (x' : X / )  x'  x'
 ≤-is-reflexive = /-induction   x'  ≤-is-prop-valued x' x')
                                 x  η-preserves-order (≲-is-reflexive x))

 ≤-is-transitive : (x' y' z' : X / )  x'  y'  y'  z'  x'  z'
 ≤-is-transitive =
  /-induction₃ fe   x' y' z'  Π₂-is-prop fe  _ _  ≤-is-prop-valued x' z'))
                     x y z k l  η-preserves-order
                                    (≲-is-transitive x y z
                                      (η-reflects-order k)
                                      (η-reflects-order l)))

 ≤-is-antisymmetric : (x' y' : X / )  x'  y'  y'  x'  x'  y'
 ≤-is-antisymmetric =
  /-induction₂ fe   x' q  Π₂-is-prop fe  _ _  /-is-set ))
                     x y k l  η/-identifies-related-points 
                                  ( η-reflects-order k
                                  , η-reflects-order l))


The requirement that Q is a set actually follows from the order assumptions, but
it is convenient to assume it (for now) anyway.


 universal-property :
    {Q : 𝓤' ̇ } (_⊑_ : Q  Q  𝓣' ̇ )
   is-set Q
   ((p q : Q)  is-prop (p  q))
   ((q : Q)  q  q)
   ((p q r : Q)  p  q  q  r  p  r)
   ((p q : Q)  p  q  q  p  p  q)
   (f : X  Q)
   ((x y : X)  x  y  f x  f y)
   ∃!   (X /   Q) , ((x' y' : X / )  x'  y'   x'   y')
                       × (  η  f)
 universal-property {𝓤'} {𝓣'} {Q} _⊑_ Q-is-set ⊑-prop ⊑-refl ⊑-trans
                                               ⊑-antisym f f-mon =
  ( , f̃-mon , f̃-eq) , σ
   where
    μ : ∃!   (X /   Q),   η  f
    μ = /-universality 
         Q-is-set f  {x} {y} (k , l)  ⊑-antisym (f x) (f y)
                                          (f-mon x y k) (f-mon y x l))
     : X /   Q
     = ∃!-witness μ
    f̃-eq :   η  f
    f̃-eq = ∃!-is-witness μ
    f̃-mon : (x' y' : X / )  x'  y'   x'   y'
    f̃-mon = /-induction₂ fe 
              x' y'  Π-is-prop fe  _  ⊑-prop ( x') ( y')))
              x y l  transport₂ _⊑_ ((f̃-eq x) ⁻¹) ((f̃-eq y) ⁻¹)
                         (f-mon x y (η-reflects-order l)))
    f̃-is-unique : (g : X /   Q)
                 ((x' y' : X / )  x'  y'  g x'  g y')
                 (g  η  f)
                   g
    f̃-is-unique g g-mon g-eq = happly e
     where
      e :   g
      e = ap pr₁ (∃!-uniqueness' μ (g , g-eq))
    σ : is-central (Σ g  (X /   Q)
                        , ((x' y' : X / )  x'  y'  g x'  g y')
                        × g  η  f)
                   ( , f̃-mon , f̃-eq)
    σ (g , g-mon , g-eq) =
     to-subtype-=  h  ×-is-prop
                          (Π₃-is-prop fe  x' y' _  ⊑-prop (h x') (h y')))
                          (Π-is-prop fe  _  Q-is-set)))
                  (dfunext fe (f̃-is-unique g g-mon g-eq))