{-# OPTIONS --without-K --safe #-}
module Prelude.Relation.PropositionalEquality where
open import Agda.Primitive
open import Agda.Builtin.Equality public
private variable
a b c : Level
A B C D : Set _
sym : {x y : A} → x ≡ y → y ≡ x
sym refl = refl
trans : {x y z : A} → x ≡ y → y ≡ z → x ≡ z
trans refl eq = eq
trans' : {x y z : A} → x ≡ y → y ≡ z → x ≡ z
trans' eq refl = eq
cong : ∀ (f : A → B) {x y} → x ≡ y → f x ≡ f y
cong f refl = refl
cong₂ : ∀ (f : A → B → C) {x y u v}
→ x ≡ y → u ≡ v → f x u ≡ f y v
cong₂ f refl refl = refl
cong₃ : ∀ (f : A → B → C → D) {w x y z u v}
→ w ≡ x → y ≡ z → u ≡ v → f w y u ≡ f x z v
cong₃ f refl refl refl = refl
subst : (P : A → Set b) {x y : A} → x ≡ y → P x → P y
subst P refl p = p
module ≡-Reasoning {A : Set a} where
infix 3 _∎
infixr 2 _≡⟨⟩_ step-≡ step-≡' step-≡˘
infix 1 begin_
begin_ : ∀{x y : A} → x ≡ y → x ≡ y
begin_ x≡y = x≡y
_≡⟨⟩_ : ∀ (x {y} : A) → x ≡ y → x ≡ y
_ ≡⟨⟩ x≡y = x≡y
step-≡ : ∀ (x {y z} : A) → y ≡ z → x ≡ y → x ≡ z
step-≡ _ y≡z x≡y = trans x≡y y≡z
step-≡' : ∀ (x {y z} : A) → y ≡ z → x ≡ y → x ≡ z
step-≡' _ y≡z x≡y = trans' x≡y y≡z
step-≡˘ : ∀ (x {y z} : A) → y ≡ z → y ≡ x → x ≡ z
step-≡˘ _ y≡z y≡x = trans (sym y≡x) y≡z
_∎ : ∀ (x : A) → x ≡ x
_∎ _ = refl
syntax step-≡ x y≡z x≡y = x ≡⟨ x≡y ⟩ y≡z
syntax step-≡' x y≡z x≡y = x ≡⟨ x≡y ⟩' y≡z
syntax step-≡˘ x y≡z y≡x = x ≡˘⟨ y≡x ⟩ y≡z
FunExt : Setω
FunExt = ∀ {ℓ ℓ'} {A : Set ℓ} {B : A → Set ℓ'} {f g : (a : A) → B a}
→ (∀ a → f a ≡ g a) → f ≡ g
infix 4 _≡ω_
data _≡ω_ {A : Setω} (x : A) : A → Setω where
refl : x ≡ω x
substω₁ : {A : Setω} (P : A → Setω₁) {x y : A} → x ≡ω y → P x → P y
substω₁ P refl p = p
symω : {A : Setω} {x y : A} → x ≡ω y → y ≡ω x
symω refl = refl