module Padova2024.EquationalReasoning where data _≡_ {X : Set} : X → X → Set where refl : {a : X} → a ≡ a cong : {A B : Set} {x y : A} → (f : A → B) → x ≡ y → f x ≡ f y cong f refl = refl symm : {A : Set} {x y : A} → x ≡ y → y ≡ x symm refl = refl trans : {A : Set} {x y z : A} → x ≡ y → y ≡ z → x ≡ z trans refl q = q infix 3 _∎ infixr 2 _≡⟨_⟩_ _≡⟨⟩_ infix 1 begin_ _≡⟨_⟩_ : {A : Set} {y z : A} → (x : A) → x ≡ y → y ≡ z → x ≡ z x ≡⟨ p ⟩ q = trans p q _≡⟨⟩_ : {A : Set} {y : A} → (x : A) → (q : x ≡ y) → x ≡ y x ≡⟨⟩ q = q _∎ : {A : Set} → (x : A) → x ≡ x x ∎ = refl begin_ : {A : Set} {x y : A} → x ≡ y → x ≡ y begin p = p