{-# OPTIONS --rewriting #-} -- Agda-MLTT library. -- Author: Mario Román. -- Equality. Properties of the equality types in Martin-Löf type -- theory. They are derived from the induction principle given by the -- J-eliminator. In particular, we can prove theorems on the -- reflexivity case and they are extended to any other case by the -- induction principle. open import Base module Equality where -- Equality types have a groupoid structure. That is, they can be -- composed associatively (by transitivity), each equality has an -- inverse (by symmetry) and there is an neutral element -- (reflexivity). -- Composition of equalities. This can be read as transitivity. _·_ : {A : Set} {a b c : A} → a ≡ b → b ≡ c → a ≡ c refl · q = q -- Inverse of an equality. This can be read as symmetry. inv : {A : Set} {a b : A} → a ≡ b → b ≡ a inv refl = refl -- Equalities are also preserved by functions. ap : {A B : Set} (f : A → B) {a b : A} → a ≡ b → f a ≡ f b ap f refl = refl -- If two terms are equal, a proof of a proposition instantiated -- over one of them is automatically a proof of a proposition -- instantiated over the other. Propositions can be transported -- along equalities. transport : {A : Set} (P : A → Set) {a b : A} → a ≡ b → P a → P b transport P refl = λ x → x -- Common combinators for equational reasoning. They allow us to -- write proofs in an equational style. These versions have been -- adapted from the old version of the HoTT-agda library. infixr 2 _≡⟨_⟩_ _≡⟨_⟩_ : {A : Set} (x : A) {y z : A} → x ≡ y → y ≡ z → x ≡ z _ ≡⟨ p1 ⟩ p2 = p1 · p2 infix 3 _qed _qed : {A : Set} (x : A) → x ≡ x _qed x = refl infix 1 begin_ begin_ : {A : Set} {x y : A} → x ≡ y → x ≡ y begin_ p = p -- A lemma on the equality of a dependent pair. A pair is equal if -- its two components are equal. If the second component depends on -- the first one, we must transport the component along the -- equality. Σ-eq : {A : Set} {B : A → Set} → (u v : Σ A B) → (p : fst u ≡ fst v) → (transport B p (snd u) ≡ snd v) → u ≡ v Σ-eq (a , b) (.a , .b) refl refl = refl