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