{-# OPTIONS --without-K #-} module equality.core where open import sum open import level using () open import function.core infix 4 _≡_ data _≡_ {a} {A : Set a} (x : A) : A → Set a where refl : x ≡ x sym : ∀ {i} {A : Set i} {x y : A} → x ≡ y → y ≡ x sym refl = refl _·_ : ∀ {i}{X : Set i}{x y z : X} → x ≡ y → y ≡ z → x ≡ z refl · p = p infixl 9 _·_ ap : ∀ {i j}{A : Set i}{B : Set j}{x y : A} → (f : A → B) → x ≡ y → f x ≡ f y ap f refl = refl ap₂ : ∀ {i j k}{A : Set i}{B : Set j}{C : Set k} {x x' : A}{y y' : B} → (f : A → B → C) → x ≡ x' → y ≡ y' → f x y ≡ f x' y' ap₂ f refl refl = refl subst : ∀ {i j} {A : Set i}{x y : A} → (B : A → Set j) → x ≡ y → B x → B y subst B refl = id subst₂ : ∀ {i j k} {A : Set i}{x x' : A} {B : Set j}{y y' : B} → (C : A → B → Set k) → x ≡ x' → y ≡ y' → C x y → C x' y' subst₂ C refl refl = id singleton : ∀ {i}{A : Set i} → A → Set i singleton {A = A} a = Σ A λ a' → a ≡ a' singleton' : ∀ {i}{A : Set i} → A → Set i singleton' {A = A} a = Σ A λ a' → a' ≡ a J' : ∀ {i j}{X : Set i}{x : X} → (P : (y : X) → x ≡ y → Set j) → P x refl → (y : X) → (p : x ≡ y) → P y p J' P u y refl = u J : ∀ {i j}{X : Set i} → (P : (x y : X) → x ≡ y → Set j) → ((x : X) → P x x refl) → (x y : X) → (p : x ≡ y) → P x y p J P u x y p = J' (P x) (u x) y p