{-# OPTIONS --cubical-compatible --safe #-} module PropositionalEquality where open import Relation.Nullary using (Dec ; yes ; no ; ¬_) open import Agda.Builtin.Equality public sym : ∀ {ℓ} {A : Set ℓ} {x y : A} → x ≡ y → y ≡ x sym refl = refl infixr 20 _∙_ _∙_ : ∀ {ℓ} {A : Set ℓ} {x y z : A} → x ≡ y → y ≡ z → x ≡ z refl ∙ refl = refl subst : ∀ {ℓ ℓ'} {A : Set ℓ} (P : A → Set ℓ') {x y : A} → x ≡ y → P x → P y subst P refl p = p cong : ∀ {ℓ ℓ'} {A : Set ℓ} {B : Set ℓ'} {x y : A} → (f : A → B) → x ≡ y → f x ≡ f y cong f refl = refl cong₂ : ∀ {ℓ ℓ' ℓ″} {A : Set ℓ} {B : Set ℓ'} {C : Set ℓ″} → {x y : A} {u v : B} → (f : A → B → C) → x ≡ y → u ≡ v → f x u ≡ f y v cong₂ f refl refl = refl J : ∀ {ℓ ℓ'} {A : Set ℓ} {x y : A} → (P : ∀ y → x ≡ y → Set ℓ') → P x refl → (p : x ≡ y) → P y p J P d refl = d lCancel : ∀ {ℓ} {A : Set ℓ} {x y : A} → (p : x ≡ y) → sym p ∙ p ≡ refl lCancel refl = refl isProp isSet : ∀ {ℓ} → Set ℓ → Set ℓ isProp A = (x y : A) → x ≡ y isSet A = (x y : A) → isProp (x ≡ y) Discrete : ∀ {ℓ} → Set ℓ → Set ℓ Discrete A = (x y : A) → Dec (x ≡ y)