{-# OPTIONS --rewriting #-}
open import Agda.Primitive using (Level;lsuc;_⊔_;lzero)
open import Lib
open import Interval
open import Cofibs
open import Kan
open import Path
module Susp where
postulate
Susp : {l : Level} (A : Set l) → Set l
north : {l : Level} {A : Set l} → Susp A
south : {l : Level} {A : Set l} → Susp A
merid : {l : Level} {A : Set l} → A → I → (Susp A)
merid0 : {l : Level} {A : Set l} (x : A) → merid x `0 == north
merid1 : {l : Level} {A : Set l} (x : A) → merid x `1 == south
{-# REWRITE merid0 #-}
{-# REWRITE merid1 #-}
postulate
fcomSusp : {l : Level} {A : Set l} → hasHCom(Susp A)
Susp-elim : {l l' : Level} {A : Set l}
(C : Susp A → Set l')
→ (comC : relCom C)
→ (n : C north)
→ (s : C south)
→ ((a : A) → PathO (\ x → C(merid a x)) n s )
→ (x : Susp A) → C x
Susp-elim-north : {l l' : Level} {A : Set l}
(C : Susp A → Set l')
→ (comC : relCom C)
→ (n : C north)
→ (s : C south)
→ (m : (a : A) → PathO (\ x → C(merid a x)) n s )
→ (Susp-elim C comC n s m north) == n
Susp-elim-south : {l l' : Level} {A : Set l}
(C : Susp A → Set l')
→ (comC : relCom C)
→ (n : C north)
→ (s : C south)
→ (m : (a : A) → PathO (\ x → C(merid a x)) n s )
→ (Susp-elim C comC n s m south) == s
Susp-elim-merid : {l l' : Level} {A : Set l}
(C : Susp A → Set l')
→ (comC : relCom C)
→ (n : C north)
→ (s : C south)
→ (m : (a : A) → PathO (\ x → C(merid a x)) n s )
→ (a : A) (x : I) → (Susp-elim C comC n s m (merid a x)) == fst (m a) x
{-# REWRITE Susp-elim-north #-}
{-# REWRITE Susp-elim-south #-}
{-# REWRITE Susp-elim-merid #-}
postulate
Susp-elim-fcom : {l l' : Level} {A : Set l}
(C : Susp A → Set l')
→ (comC : relCom C)
→ (n : C north)
→ (s : C south)
→ (m : (a : A) → PathO (\ x → C(merid a x)) n s )
→ Strictly-Preserves-HCom (Susp A) C fcomSusp comC (Susp-elim C comC n s m)