module Equality where

open import Logic

data _≡_ {X : Set} : X  X  Ω where
  reflexivity : {x : X}  x  x

infix  30 _≡_

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 reflexivity reflexivity = reflexivity


transitivity : {X : Set}  {x y z : X}   x  y    y  z    x  z
transitivity reflexivity reflexivity = reflexivity


symmetry : {X : Set}  {x y : X}  x  y  y  x
symmetry reflexivity = reflexivity


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

  x₀  x₁   f x₀  f x₁

compositionality f reflexivity = reflexivity


predicate-compositionality : {X : Set} (A : X  Ω) {x y : X} 

  x  y  A x  A y

predicate-compositionality A reflexivity a = a


binary-predicate-compositionality :

   {X Y : Set} {A : X  Y  Ω} {x x' : X} {y y' : Y} 

   x  x'  y  y'  A x y  A x' y'

binary-predicate-compositionality reflexivity reflexivity a = a


set-compositionality : {I : Set} (X : I  Set)  {i j : I}  i  j  X i  X j
set-compositionality X reflexivity x = x