open import 1Lab.HLevel
open import 1Lab.Equiv
open import 1Lab.Type

module 1Lab.Path.IdentitySystem.Interface where

open import 1Lab.Path.IdentitySystem
  hiding (to-path-refl)
open import 1Lab.Path using (_≡_)

module
  Ids { ℓ'} {A : Type } {R : A  A  Type ℓ'} {refl :  a  R a a}
      (rr : is-identity-system R refl)
  where

  J :  { a} (P : (b : A)  R a b  Type )  P a (refl a)  {b : A} (s : R a b)  P b s
  J = IdsJ rr

  J-refl
    :  { a} (P :  b  R a b  Type )  (x : P a (refl a))
     J P x (refl a)  x
  J-refl = IdsJ-refl rr

  module _ {a b} where open Equiv (identity-system-gives-path rr {a} {b}) public

  to-refl :  {a}  to-path rr (refl a)  λ _  a
  to-refl = 1Lab.Path.IdentitySystem.to-path-refl rr

  from-refl :  {a}  from  _  a)  refl a
  from-refl = 1Lab.Path.transport-refl (refl _)

  hlevel :  n  (∀ x y  is-hlevel (R x y) n)  is-hlevel A (suc n)
  hlevel n = identity-system→hlevel n rr