module Equality where

open import Logic

data _≡_ {X : Set} : X → X → Ω where
  refl : {x : X} → x ≡ x

infix  30 _≡_

_≠_ : {X : Set} → (x y : X) → Ω
x ≠ y = x ≡ y → ⊥

two-things-equal-to-a-third-are-equal : {X : Set} →
             ∀{x y z : X} → x ≡ y → x ≡ z → y ≡ z

two-things-equal-to-a-third-are-equal refl refl = refl


transitivity : {X : Set} → {x y z : X} →  x ≡ y  →  y ≡ z  →  x ≡ z
transitivity refl refl = refl


symmetry : {X : Set} → {x y : X} → x ≡ y → y ≡ x
symmetry refl = refl


extensionality : {X Y : Set} → ∀(f : X → Y) → {x₀ x₁ : X} →

  x₀ ≡ x₁ → f x₀ ≡ f x₁

extensionality f refl = refl


equals-for-equals : {X Y : Set} → (f : X → Y) → {x x' : X} → {y : Y} →

  f x ≡ y →  x ≡ x' → f x' ≡ y

equals-for-equals f refl refl = refl