{-# 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)