------------------------------------------------------------------------
-- The Agda standard library
--
-- Convenient syntax for "equational reasoning" in multiple Setoids
------------------------------------------------------------------------

-- Example use:
--
--   open import Data.Maybe
--   import Relation.Binary.SetoidReasoning as SetR
--
--   begin⟨ S ⟩
--     x
--       ≈⟨ drop-just (begin⟨ setoid S ⟩
--          just x
--            ≈⟨ justx≈mz ⟩
--          mz
--            ≈⟨ mz≈justy ⟩
--          just y ∎) ⟩
--     y
--       ≈⟨ y≈z ⟩
--     z ∎

open import Relation.Binary
open import Relation.Binary.EqReasoning as EqR using (_IsRelatedTo_)
open import Relation.Binary.PropositionalEquality

open Setoid

module Relation.Binary.SetoidReasoning where

infix 1 begin⟨_⟩_
infixr 2 _≈⟨_⟩_ _≡⟨_⟩_
infix 3 _∎

begin⟨_⟩_ :  {c l} (S : Setoid c l)  {x y : Carrier S}  _IsRelatedTo_ S x y  _≈_ S x y
begin⟨_⟩_ S p = EqR.begin_ S p

_∎ :  {c l} {S : Setoid c l}  (x : Carrier S)  _IsRelatedTo_ S x x
_∎ {S = S} = EqR._∎ S

_≈⟨_⟩_ :  {c l} {S : Setoid c l}  (x : Carrier S)  {y z : Carrier S}  _≈_ S x y  _IsRelatedTo_ S y z  _IsRelatedTo_ S x z
_≈⟨_⟩_ {S = S} = EqR._≈⟨_⟩_ S

_≡⟨_⟩_ :  {c l} {S : Setoid c l}  (x : Carrier S)  {y z : Carrier S}  x  y  _IsRelatedTo_ S y z  _IsRelatedTo_ S x z
_≡⟨_⟩_ {S = S} = EqR._≡⟨_⟩_ S