{-# OPTIONS --cubical --safe #-}

module Path where

open import Cubical.Foundations.Prelude
  using ( _≡_
        ; sym
        ; refl
        ; subst
        ; transport
        ; Path
        ; PathP
        ; I
        ; i0
        ; i1
        ; funExt
        ; toPathP
        ; ~_
        ; _∧_
        ; _∨_
        ; hcomp
        ; transp
        ; J
        )
  renaming
    ( cong to cong′
    ; subst2 to subst₂
    ; congS to cong
    )
  public

open import Data.Empty using (¬_)
open import Level

infixr 2 _⨾_
_⨾_ : {x y z : A}  x  y  y  z  x  z
_⨾_ = Cubical.Foundations.Prelude._∙_

infix 4 _≢_
_≢_ : {A : Type a}  A  A  Type a
x  y = ¬ (x  y)

infix 4 PathP-syntax
PathP-syntax = PathP
{-# DISPLAY PathP-syntax = PathP #-}

syntax PathP-syntax  i  Ty) lhs rhs = lhs ≡[ i  Ty ]≡ rhs

cong₂ : (f : A  B  C)
       {x x′ : A}
       {y y′ : B}
       x  x′
       y  y′
       f x y  f x′ y′
cong₂ f x y i = f (x i) (y i)

cong₃ :  {d} {D : Type d}
       (f : A  B  C  D)
       {x x′ : A}
       {y y′ : B}
       {z z′ : C}
       x  x′
       y  y′
       z  z′
       f x y z  f x′ y′ z′
cong₃ f x y z i = f (x i) (y i) (z i)