module Library.Equality.Reasoning where

open import Library.Equality

infix  1 begin_
infixr 2 _==⟨⟩_ _⟨⟩==_ _==⟨_⟩_ _⟨_⟩==_
infix  3 _end

begin_ : {A : Set} {x y : A} -> x == y -> x == y
begin_ p = p

_end : {A : Set} (x : A) -> x == x
_end _ = refl

_==⟨_⟩_ : {A : Set} (x : A) {y z : A} -> x == y -> y == z -> x == z
_==⟨_⟩_ _ = tran

_⟨_⟩==_ : {A : Set} (x : A) {y z : A} -> y == x -> y == z -> x == z
_  p ⟩== q = tran (symm p) q

_==⟨⟩_ : {A : Set} (x : A) {y : A} -> x == y -> x == y
_ ==⟨⟩ p = p

_⟨⟩==_ : {A : Set} (x : A) {y : A} -> y == x -> x == y
_ ⟨⟩== p = symm p