Distributivity of set truncation over projective products

Content created by Fredrik Bakke.

Created on 2026-09-09.
Last modified on 2026-09-09.

module foundation.distributivity-of-set-truncation-over-projective-products where
Imports
open import foundation.action-on-identifications-functions
open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.embeddings
open import foundation.equivalences
open import foundation.fibers-of-maps
open import foundation.function-extensionality
open import foundation.function-extensionality-axiom
open import foundation.function-types
open import foundation.functoriality-truncation
open import foundation.homotopies
open import foundation.identity-types
open import foundation.inhabited-types
open import foundation.mere-equality
open import foundation.projective-types
open import foundation.propositional-truncations
open import foundation.propositions
open import foundation.reflecting-maps-equivalence-relations
open import foundation.set-truncations
open import foundation.sets
open import foundation.surjective-maps
open import foundation.truncation-levels
open import foundation.universal-property-set-quotients
open import foundation.universe-levels

Idea

Set truncation distributes over dependent products on projective types . The distributive map

is an equivalence

Properties

Distributivity of set truncation over projective types

module _
  {l1 l2 : Level} (X : UU l1) (Y : X  UU l2)
  where

  set-map-Π-unit-trunc : Set (l1  l2)
  set-map-Π-unit-trunc =
    ( ( (x : X)   Y x ║₀) ,
      ( is-set-Π  x  is-set-type-trunc-Set {A = Y x})))

  mere-eq-map-Π-unit-trunc-is-projective-Level :
    (H : is-projective-Level l2 X)
    (f g : (x : X)  Y x) 
    map-Π  x  unit-trunc-Set) f  map-Π  x  unit-trunc-Set) g 
    mere-eq f g
  mere-eq-map-Π-unit-trunc-is-projective-Level H f g p =
    map-is-inhabited
      ( eq-htpy)
      ( H ( λ x  f x  g x)
          ( λ x  apply-effectiveness-unit-trunc-Set (htpy-eq p x)))

  reflecting-map-map-Π-unit-trunc :
    reflecting-map-equivalence-relation
      ( mere-eq-equivalence-relation ((x : X)  Y x))
      ( type-Set set-map-Π-unit-trunc)
  pr1 reflecting-map-map-Π-unit-trunc =
    map-Π  x  unit-trunc-Set)
  pr2 reflecting-map-map-Π-unit-trunc {f} {g} r =
    apply-universal-property-trunc-Prop
      ( r)
      ( Id-Prop
        ( set-map-Π-unit-trunc)
        ( map-Π  x  unit-trunc-Set) f)
        ( map-Π  x  unit-trunc-Set) g))
      ( ap (map-Π  x  unit-trunc-Set)))

  map-map-Π-unit-trunc-trunc-is-projective-Level :
    (H : is-projective-Level l2 X) 
     ((x : X)  Y x) ║₀ 
    (x : X)   Y x ║₀
  map-map-Π-unit-trunc-trunc-is-projective-Level H =
    map-universal-property-set-quotient-is-set-quotient
      ( mere-eq-equivalence-relation ((x : X)  Y x))
      ( trunc-Set ((x : X)  Y x))
      ( reflecting-map-mere-eq-unit-trunc-Set ((x : X)  Y x))
      ( is-set-quotient-trunc-Set ((x : X)  Y x))
      ( set-map-Π-unit-trunc)
      ( reflecting-map-map-Π-unit-trunc)

  triangle-map-map-Π-unit-trunc-trunc-is-projective-Level :
    (H : is-projective-Level l2 X) 
    map-map-Π-unit-trunc-trunc-is-projective-Level H  unit-trunc-Set ~
    map-Π  x  unit-trunc-Set)
  triangle-map-map-Π-unit-trunc-trunc-is-projective-Level H =
    triangle-universal-property-set-quotient-is-set-quotient
      ( mere-eq-equivalence-relation ((x : X)  Y x))
      ( trunc-Set ((x : X)  Y x))
      ( reflecting-map-mere-eq-unit-trunc-Set ((x : X)  Y x))
      ( is-set-quotient-trunc-Set ((x : X)  Y x))
      ( set-map-Π-unit-trunc)
      ( reflecting-map-map-Π-unit-trunc)

  htpy-map-distributive-trunc-Π-map-map-Π-unit-trunc-trunc-is-projective-Level :
    (H : is-projective-Level l2 X) 
    map-distributive-trunc-Π zero-𝕋 Y ~
    map-map-Π-unit-trunc-trunc-is-projective-Level H
  htpy-map-distributive-trunc-Π-map-map-Π-unit-trunc-trunc-is-projective-Level
    H t =
    apply-universal-property-trunc-Prop
      ( is-surjective-unit-trunc-Set ((x : X)  Y x) t)
      ( Id-Prop
        ( set-map-Π-unit-trunc)
        ( map-distributive-trunc-Π zero-𝕋 Y t)
        ( map-map-Π-unit-trunc-trunc-is-projective-Level H t))
      ( λ (f , qf) 
        ( inv
          ( ap
            ( map-distributive-trunc-Π zero-𝕋 Y)
            ( qf))) 
        ( eq-htpy (compute-distributive-trunc-Π zero-𝕋 f)) 
        ( inv (triangle-map-map-Π-unit-trunc-trunc-is-projective-Level H f)) 
        ( ap (map-map-Π-unit-trunc-trunc-is-projective-Level H) (qf)))

  is-surjective-map-distributive-trunc-Π-is-projective-Level :
    is-projective-Level l2 X 
    is-surjective (map-distributive-trunc-Π zero-𝕋 Y)
  is-surjective-map-distributive-trunc-Π-is-projective-Level H t =
    map-is-inhabited
      ( λ s 
        ( unit-trunc-Set  x  pr1 (s x)) ,
          eq-htpy
            ( λ x 
              ( compute-distributive-trunc-Π zero-𝕋  y  pr1 (s y)) x) 
              ( pr2 (s x)))))
      ( H ( λ x  fiber (unit-trunc-Set {A = Y x}) (t x))
          ( λ x  is-surjective-unit-trunc-Set (Y x) (t x)))

  is-emb-map-distributive-trunc-Π-is-projective-Level :
    is-projective-Level l2 X 
    is-emb (map-distributive-trunc-Π zero-𝕋 Y)
  is-emb-map-distributive-trunc-Π-is-projective-Level H =
    is-emb-htpy
      ( htpy-map-distributive-trunc-Π-map-map-Π-unit-trunc-trunc-is-projective-Level
        ( H))
      ( is-emb-map-universal-property-set-quotient-is-set-quotient
        ( mere-eq-equivalence-relation ((x : X)  Y x))
        ( trunc-Set ((x : X)  Y x))
        ( reflecting-map-mere-eq-unit-trunc-Set ((x : X)  Y x))
        ( is-set-quotient-trunc-Set ((x : X)  Y x))
        ( set-map-Π-unit-trunc)
        ( reflecting-map-map-Π-unit-trunc)
        ( mere-eq-map-Π-unit-trunc-is-projective-Level H))

  is-equiv-map-distributive-trunc-Π-is-projective-Level :
    is-projective-Level l2 X 
    is-equiv (map-distributive-trunc-Π zero-𝕋 Y)
  is-equiv-map-distributive-trunc-Π-is-projective-Level H =
    is-equiv-is-emb-is-surjective
      ( is-surjective-map-distributive-trunc-Π-is-projective-Level H)
      ( is-emb-map-distributive-trunc-Π-is-projective-Level H)

  distributive-trunc-Π-is-projective-Level :
    is-projective-Level l2 X 
    is-contr
      ( Σ (  ((x : X)  Y x) ║₀  ( (x : X)   Y x ║₀))
          ( λ e  map-equiv e  unit-trunc-Set ~ map-Π  x  unit-trunc-Set)))
  distributive-trunc-Π-is-projective-Level H =
    uniqueness-trunc-Set
      ( set-map-Π-unit-trunc)
      ( map-Π  x  unit-trunc-Set))
      ( is-set-truncation-is-equiv
        ( set-map-Π-unit-trunc)
        ( map-Π  x  unit-trunc-Set))
        ( λ f  eq-htpy (compute-distributive-trunc-Π zero-𝕋 f))
        ( is-equiv-map-distributive-trunc-Π-is-projective-Level H))

Set truncation distributes over dependent products over set-projective sets

module _
  {l1 l2 : Level} (X : UU l1) (Y : X  UU l2)
  where

  is-equiv-map-distributive-trunc-Π-is-set-projective :
    is-set X 
    is-set-projective X 
    is-equiv (map-distributive-trunc-Π zero-𝕋 Y)
  is-equiv-map-distributive-trunc-Π-is-set-projective K H =
    is-equiv-map-distributive-trunc-Π-is-projective-Level X Y
      ( is-projective-is-set-projective K H {l2})

  distributive-trunc-Π-is-set-projective :
    is-set X 
    is-set-projective X 
    is-contr
      ( Σ (  ((x : X)  Y x) ║₀  ((x : X)   Y x ║₀))
          ( λ e  map-equiv e  unit-trunc-Set ~ map-Π  x  unit-trunc-Set)))
  distributive-trunc-Π-is-set-projective K H =
    distributive-trunc-Π-is-projective-Level X Y
      ( is-projective-is-set-projective K H {l2})

See also

Recent changes