Skip to content

Commit 0b9f394

Browse files
committed
isContr and isProp for Join
1 parent a6cf6b5 commit 0b9f394

File tree

1 file changed

+52
-2
lines changed

1 file changed

+52
-2
lines changed

Cubical/HITs/Join/Properties.agda

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,18 @@ This file contains:
1010
1111
- Ganea's theorem
1212
13+
- eliminator and recursor for join
14+
- Join is contractible if either side is contractible
15+
- Join is prop if both sides are prop
16+
1317
-}
1418

1519

1620
module Cubical.HITs.Join.Properties where
1721

1822
open import Cubical.Foundations.Prelude
1923
open import Cubical.Foundations.Equiv
24+
open import Cubical.Foundations.HLevels
2025
open import Cubical.Foundations.Isomorphism
2126
open import Cubical.Foundations.GroupoidLaws
2227
open import Cubical.Foundations.Function
@@ -27,13 +32,13 @@ open import Cubical.Data.Sigma renaming (fst to proj₁; snd to proj₂)
2732
open import Cubical.Data.Unit
2833

2934
open import Cubical.HITs.Join.Base
30-
open import Cubical.HITs.Pushout
35+
open import Cubical.HITs.Pushout hiding (elimProp)
3136

3237
open import Cubical.Homotopy.Loopspace
3338

3439
private
3540
variable
36-
ℓ ℓ' : Level
41+
ℓ ℓ' ℓ'' : Level
3742

3843
-- the inclusion maps are null-homotopic
3944
join-inl-null : {X : Pointed ℓ} {Y : Pointed ℓ'} (x : typ X)
@@ -711,3 +716,48 @@ module _ {A : Pointed ℓ} {B : Pointed ℓ'} (f : A →∙ B) where
711716
inv GaneaIso = join→GaneaFib
712717
sec GaneaIso = join→GaneaFib→join
713718
ret GaneaIso = GaneaFib→join→GaneaFib
719+
720+
-- Characterizing when Join isContr, isProp
721+
module _ {A : Type ℓ}{B : Type ℓ'} where
722+
elim : {C : join A B Type ℓ''}
723+
(l : (a : A) C (inl a))
724+
(r : (b : B) C (inr b))
725+
(p : a b PathP (λ i C (push a b i)) (l a) (r b))
726+
j C j
727+
elim l r p (inl a) = l a
728+
elim l r p (inr b) = r b
729+
elim l r p (push a b i) = p a b i
730+
731+
elimProp : {C : join A B Type ℓ''} (isPropC : j isProp (C j))
732+
(l : (a : A) C (inl a))
733+
(r : (b : B) C (inr b))
734+
j C j
735+
elimProp isPropC l r = elim l r (λ a b
736+
isProp→PathP (λ i isPropC (push a b i)) (l a) (r b))
737+
738+
isContrJoinL : isContr A isContr (join A B)
739+
isContrJoinL isContrA .proj₁ = inl (isContrA .proj₁)
740+
isContrJoinL isContrA .proj₂ (inl a) = cong inl (isContrA .proj₂ a)
741+
isContrJoinL isContrA .proj₂ (inr b) = push (isContrA .proj₁) b
742+
isContrJoinL isContrA .proj₂ (push a b i) j = hcomp (λ where
743+
k (i = i0) inl (isContrA .proj₂ a (~ k ∨ j))
744+
k (i = i1) push (isContrA .snd a (~ k)) b j
745+
k (j = i0) inl (isContrA .proj₂ a (~ k))
746+
k (j = i1) push a b i)
747+
(push a b (i ∧ j))
748+
isContrJoinR : isContr B isContr (join A B)
749+
isContrJoinR isContrB .proj₁ = inr (isContrB .proj₁)
750+
isContrJoinR isContrB .snd (inl a) = sym $ push a (isContrB .proj₁)
751+
isContrJoinR isContrB .snd (inr b) = cong inr (isContrB .proj₂ b)
752+
isContrJoinR isContrB .snd (push a b i) j = hcomp (λ where
753+
k (i = i0) push a (isContrB .snd b (~ k)) (~ j)
754+
k (i = i1) inr (isContrB .snd b (~ k ∨ j))
755+
k (j = i0) inr (isContrB .snd b (~ k))
756+
k (j = i1) push a b i)
757+
(push a b (i ∨ (~ j)))
758+
759+
isPropJoin : isProp A isProp B isProp (join A B)
760+
isPropJoin isPropA isPropB = isContrIfInhabited→isProp (elimProp
761+
(λ _ isPropIsContr)
762+
(λ a isContrJoinL (inhProp→isContr a isPropA))
763+
(λ b isContrJoinR (inhProp→isContr b isPropB)))

0 commit comments

Comments
 (0)