module EquationalReasoning where

open import Equality 
open import Level

infix  1 proof:_ 
proof:_ :
  { : Level}
  {A : Set }
  {x y : A}
   ---------------------
  x  y  x  y
proof: refl = refl

-- infixr 2 _≡[_]_
-- _≡[_]_ :
--   {ℓ : Level}
--   {A : Set ℓ}
--   (x : A)
--   {y z : A}
--   → -------------------
--   x ≡ y → y ≡ z → x ≡ z
-- _ ≡[ refl ] q = q

-- optimization from
-- <https://lists.chalmers.se/pipermail/agda/2016/009090.html>
infixr 2 step≡
step≡ :
  { : Level}
  {A : Set }
  (x : A)
  {y z : A}
   -------------------
  y  z  x  y  x  z
step≡ _ refl p = p

syntax step≡ x p q  = x ≡[ q ] p

infix  3 _qed 
_qed :
  { : Level}
  {A : Set }
  (x : A)
   ---------
  x  x
_ qed = refl