Double negation eliminating maps

Content created by Fredrik Bakke.

Created on 2025-01-07.
Last modified on 2025-01-07.

module logic.double-negation-eliminating-maps where
Imports
open import foundation.action-on-identifications-functions
open import foundation.cartesian-morphisms-arrows
open import foundation.coproduct-types
open import foundation.decidable-equality
open import foundation.decidable-maps
open import foundation.decidable-types
open import foundation.dependent-pair-types
open import foundation.double-negation
open import foundation.empty-types
open import foundation.functoriality-cartesian-product-types
open import foundation.functoriality-coproduct-types
open import foundation.identity-types
open import foundation.injective-maps
open import foundation.retractions
open import foundation.retracts-of-maps
open import foundation.retracts-of-types
open import foundation.transport-along-identifications
open import foundation.universe-levels

open import foundation-core.contractible-maps
open import foundation-core.equivalences
open import foundation-core.fibers-of-maps
open import foundation-core.function-types
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.homotopies

open import logic.double-negation-elimination

Idea

A map is said to be double negation eliminating if its fibers satisfy untruncated double negation elimination. I.e., for every y : B, if fiber f y is irrefutable, then we do in fact have an element of the fiber p : fiber f y. In other words, double negation eliminating maps come equipped with a map

  (y : B) → ¬¬ (fiber f y) → fiber f y.

Definintion

Double negation elimination structure on a map

module _
  {l1 l2 : Level} {A : UU l1} {B : UU l2}
  where

  is-double-negation-eliminating-map : (A  B)  UU (l1  l2)
  is-double-negation-eliminating-map f =
    (y : B)  has-double-negation-elim (fiber f y)

The type of double negation eliminating maps

infix 5 _→¬¬_

_→¬¬_ : {l1 l2 : Level} (A : UU l1) (B : UU l2)  UU (l1  l2)
A →¬¬ B = Σ (A  B) (is-double-negation-eliminating-map)

double-negation-eliminating-map :
  {l1 l2 : Level} (A : UU l1) (B : UU l2)  UU (l1  l2)
double-negation-eliminating-map = _→¬¬_

module _
  {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A →¬¬ B)
  where

  map-double-negation-eliminating-map : A  B
  map-double-negation-eliminating-map = pr1 f

  is-double-negation-eliminating-double-negation-eliminating-map :
    is-double-negation-eliminating-map map-double-negation-eliminating-map
  is-double-negation-eliminating-double-negation-eliminating-map = pr2 f

Properties

Double negation eliminating maps are closed under homotopy

abstract
  is-double-negation-eliminating-map-htpy :
    {l1 l2 : Level} {A : UU l1} {B : UU l2} {f g : A  B} 
    f ~ g 
    is-double-negation-eliminating-map g 
    is-double-negation-eliminating-map f
  is-double-negation-eliminating-map-htpy H K b =
    has-double-negation-elim-equiv
      ( equiv-tot  a  equiv-concat (inv (H a)) b))
      ( K b)

Decidable maps are double negation eliminating

is-double-negation-eliminating-map-is-decidable-map :
  {l1 l2 : Level} {A : UU l1} {B : UU l2} {f : A  B} 
  is-decidable-map f  is-double-negation-eliminating-map f
is-double-negation-eliminating-map-is-decidable-map H y =
  double-negation-elim-is-decidable (H y)

Composition of double negation eliminating maps

Given a composition g ∘ f of double negation eliminating maps where the left factor g is injective, then the composition is double negation eliminating.

module _
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3}
  {g : B  C} {f : A  B}
  where

  fiber-left-is-double-negation-eliminating-map-left :
    is-double-negation-eliminating-map g 
    (z : C)  ¬¬ (fiber (g  f) z)  fiber g z
  fiber-left-is-double-negation-eliminating-map-left G z nngfz =
    G z  x  nngfz  w  x (f (pr1 w) , pr2 w)))

  fiber-right-is-double-negation-eliminating-map-comp :
    is-injective g 
    (G : is-double-negation-eliminating-map g) 
    is-double-negation-eliminating-map f 
    (z : C) (nngfz : ¬¬ (fiber (g  f) z)) 
    fiber f (pr1 (fiber-left-is-double-negation-eliminating-map-left G z nngfz))
  fiber-right-is-double-negation-eliminating-map-comp H G F z nngfz =
    F ( pr1
        ( fiber-left-is-double-negation-eliminating-map-left G z nngfz))
          ( λ x 
            nngfz
              ( λ w 
                x ( pr1 w ,
                    H ( pr2 w 
                        inv
                          ( pr2
                            ( fiber-left-is-double-negation-eliminating-map-left
                                G z nngfz))))))

  is-double-negation-eliminating-map-comp :
    is-injective g 
    is-double-negation-eliminating-map g 
    is-double-negation-eliminating-map f 
    is-double-negation-eliminating-map (g  f)
  is-double-negation-eliminating-map-comp H G F z nngfz =
    map-inv-compute-fiber-comp g f z
      ( ( fiber-left-is-double-negation-eliminating-map-left G z nngfz) ,
        ( fiber-right-is-double-negation-eliminating-map-comp H G F z nngfz))

Left cancellation for double negation eliminating maps

If a composite g ∘ f is double negation eliminating and the left factor g is injective, then the right factor f is double negation eliminating.

module _
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {f : A  B} {g : B  C}
  (GF : is-double-negation-eliminating-map (g  f))
  where

  fiber-comp-is-double-negation-eliminating-map-right-factor' :
    (y : B)  ¬¬ (fiber f y)  Σ (fiber g (g y))  t  fiber f (pr1 t))
  fiber-comp-is-double-negation-eliminating-map-right-factor' y nnfy =
    map-compute-fiber-comp g f (g y)
      ( GF (g y)  ngfgy  nnfy λ x  ngfgy ((pr1 x) , ap g (pr2 x))))

  is-double-negation-eliminating-map-right-factor' :
    is-injective g  is-double-negation-eliminating-map f
  is-double-negation-eliminating-map-right-factor' G y nnfy =
    tr
      ( fiber f)
      ( G ( pr2
            ( pr1
              ( fiber-comp-is-double-negation-eliminating-map-right-factor'
                ( y)
                ( nnfy)))))
      ( pr2
        ( fiber-comp-is-double-negation-eliminating-map-right-factor' y nnfy))

Any map out of the empty type is double negation eliminating

abstract
  is-double-negation-eliminating-map-ex-falso :
    {l : Level} {X : UU l} 
    is-double-negation-eliminating-map (ex-falso {l} {X})
  is-double-negation-eliminating-map-ex-falso x f = ex-falso (f λ ())

The identity map is double negation eliminating

abstract
  is-double-negation-eliminating-map-id :
    {l : Level} {X : UU l}  is-double-negation-eliminating-map (id {l} {X})
  is-double-negation-eliminating-map-id x y = (x , refl)

Equivalences are double negation eliminating maps

abstract
  is-double-negation-eliminating-map-is-equiv :
    {l1 l2 : Level} {A : UU l1} {B : UU l2} {f : A  B} 
    is-equiv f  is-double-negation-eliminating-map f
  is-double-negation-eliminating-map-is-equiv H x =
    double-negation-elim-is-contr (is-contr-map-is-equiv H x)

The map on total spaces induced by a family of double negation eliminating maps is double negation eliminating

module _
  {l1 l2 l3 : Level} {A : UU l1} {B : A  UU l2} {C : A  UU l3}
  where

  is-double-negation-eliminating-map-tot :
    {f : (x : A)  B x  C x} 
    ((x : A)  is-double-negation-eliminating-map (f x)) 
    is-double-negation-eliminating-map (tot f)
  is-double-negation-eliminating-map-tot {f} H x =
    has-double-negation-elim-equiv (compute-fiber-tot f x) (H (pr1 x) (pr2 x))

The map on total spaces induced by a double negation eliminating map on the base is double negation eliminating

module _
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (C : B  UU l3)
  where

  is-double-negation-eliminating-map-Σ-map-base :
    {f : A  B} 
    is-double-negation-eliminating-map f 
    is-double-negation-eliminating-map (map-Σ-map-base f C)
  is-double-negation-eliminating-map-Σ-map-base {f} H x =
    has-double-negation-elim-equiv'
      ( compute-fiber-map-Σ-map-base f C x)
      ( H (pr1 x))

Products of double negation eliminating maps are double negation eliminating

module _
  {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
  where

  is-double-negation-eliminating-map-product :
    {f : A  B} {g : C  D} 
    is-double-negation-eliminating-map f 
    is-double-negation-eliminating-map g 
    is-double-negation-eliminating-map (map-product f g)
  is-double-negation-eliminating-map-product {f} {g} F G x =
    has-double-negation-elim-equiv
      ( compute-fiber-map-product f g x)
      ( double-negation-elim-product (F (pr1 x)) (G (pr2 x)))

Coproducts of double negation eliminating maps are double negation eliminating

module _
  {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
  where

  is-double-negation-eliminating-map-coproduct :
    {f : A  B} {g : C  D} 
    is-double-negation-eliminating-map f 
    is-double-negation-eliminating-map g 
    is-double-negation-eliminating-map (map-coproduct f g)
  is-double-negation-eliminating-map-coproduct {f} {g} F G (inl x) =
    has-double-negation-elim-equiv'
      ( compute-fiber-inl-map-coproduct f g x)
      ( F x)
  is-double-negation-eliminating-map-coproduct {f} {g} F G (inr y) =
    has-double-negation-elim-equiv'
      ( compute-fiber-inr-map-coproduct f g y)
      ( G y)

Double negation eliminating maps are closed under base change

module _
  {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
  {f : A  B} {g : C  D}
  where

  is-double-negation-eliminating-map-base-change :
    cartesian-hom-arrow g f 
    is-double-negation-eliminating-map f 
    is-double-negation-eliminating-map g
  is-double-negation-eliminating-map-base-change α F d =
    has-double-negation-elim-equiv
      ( equiv-fibers-cartesian-hom-arrow g f α d)
      ( F (map-codomain-cartesian-hom-arrow g f α d))

Double negation eliminating maps are closed under retracts of maps

module _
  {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
  {f : A  B} {g : X  Y}
  where

  is-double-negation-eliminating-retract-map :
    f retract-of-map g 
    is-double-negation-eliminating-map g 
    is-double-negation-eliminating-map f
  is-double-negation-eliminating-retract-map R G x =
    has-double-negation-elim-retract
      ( retract-fiber-retract-map f g R x)
      ( G (map-codomain-inclusion-retract-map f g R x))

Recent changes