{-# OPTIONS --safe --without-K #-}
module PEUtil where
open import Relation.Binary.Definitions
using (Decidable)
open import Relation.Binary.PropositionalEquality
using (_≡_ ; refl ; sym ; trans ; cong ; subst ; subst₂)
≡[]-syntax = _≡_ ; syntax ≡[]-syntax {A = A} a b = a ≡[ A ] b
module _ {a} {A : Set a} {x y z : A} where
trans˘ : x ≡ y → z ≡ y → x ≡ z
trans˘ x≡y z≡y = trans x≡y (sym z≡y)
˘trans : y ≡ x → y ≡ z → x ≡ z
˘trans y≡x y≡z = trans (sym y≡x) y≡z
module _ {a} {A : Set a} {b} {B : Set b} {x y : A} where
cong˘ : (f : A → B) → y ≡ x → f x ≡ f y
cong˘ f y≡x = cong f (sym y≡x)
module _ {a} {b} {c} where
cong1 : ∀ {A : Set a} {B : Set b} {C : Set c}
(f : A → B → C) {x₁ x₂ y}
→ (p : x₁ ≡ x₂)
→ f x₁ y ≡ f x₂ y
cong1 _f refl = refl
cong1˘ : ∀ {A : Set a} {B : Set b} {C : Set c}
(f : A → B → C) {x₁ x₂ y}
→ (p : x₂ ≡ x₁)
→ f x₁ y ≡ f x₂ y
cong1˘ _f refl = refl
module _ {a} {b} {c} where
cong2 : ∀ {A : Set a} {B : Set b} {C : Set c}
(f : A → B → C) {x y₁ y₂}
→ (p : y₁ ≡ y₂)
→ f x y₁ ≡ f x y₂
cong2 _f refl = refl
module _ {a} {A : Set a} {p} (P : A → Set p) where
subst˘ : ∀ {x₁ x₂} → x₂ ≡ x₁ → P x₁ → P x₂
subst˘ x₂≡x₁ = subst P (sym x₂≡x₁)
module _ {a} {A : Set a} {b} {B : Set b} {r} (R : A → B → Set r) where
subst1 : ∀ {x₁ x₂ y} → x₁ ≡ x₂ → R x₁ y → R x₂ y
subst1 {_x₁} {_x₂} {y} = subst (λ x → R x y)
subst1˘ : ∀ {x₁ x₂ y} → x₂ ≡ x₁ → R x₁ y → R x₂ y
subst1˘ x₂≡x₁ = subst1 (sym x₂≡x₁)
module _ {a} {b} {c} where
dcong₂ : ∀ {A : Set a} {B : A → Set b} {C : Set c}
(f : (x : A) → B x → C) {x₁ x₂ y₁ y₂}
→ (p : x₁ ≡ x₂) → subst B p y₁ ≡ y₂
→ f x₁ y₁ ≡ f x₂ y₂
dcong₂ _f refl refl = refl
module _ {a} {b} {c} {d} where
dcong₃ : ∀ {A : Set a} {B : A → Set b} {C : A → Set c} {D : Set d}
(f : (x : A) → B x → C x → D) {x₁ x₂ y₁ y₂ z₁ z₂}
→ (p : x₁ ≡ x₂) → subst B p y₁ ≡ y₂ → subst C p z₁ ≡ z₂
→ f x₁ y₁ z₁ ≡ f x₂ y₂ z₂
dcong₃ _f refl refl refl = refl
module _ {a} {b} {c} {d} {e} where
idcong₄ : ∀ {A : Set a} {B : Set b} {C : A → Set c} {D : A → B → Set d} {E : Set e}
(f : {x : A} → {y : B} → C x → D x y → E) {w₁ w₂ x₁ x₂ y₁ y₂ z₁ z₂}
→ (p : w₁ ≡ w₂) → (q : x₁ ≡ x₂) → subst C p y₁ ≡ y₂ → subst₂ D p q z₁ ≡ z₂
→ f {w₁} {x₁} y₁ z₁ ≡ f {w₂} {x₂} y₂ z₂
idcong₄ _f refl refl refl refl = refl
module _ {a} {b} {c} {d} {e} where
dcong₄ : ∀ {A : Set a} {B : A → Set b} {C : A → Set c} {D : A → Set d} {E : Set e}
(f : (w : A) → B w → C w → D w → E) {w₁ w₂ x₁ x₂ y₁ y₂ z₁ z₂}
→ (p : w₁ ≡ w₂) → subst B p x₁ ≡ x₂ → subst C p y₁ ≡ y₂ → subst D p z₁ ≡ z₂
→ f w₁ x₁ y₁ z₁ ≡ f w₂ x₂ y₂ z₂
dcong₄ _f refl refl refl refl = refl
subst-sym : ∀ {a p} {A : Set a} {P : A → Set p}
{x₁ x₂ : A} {y₁ : P x₁} {y₂ : P x₂}
(eq : x₁ ≡ x₂)
→ subst P eq y₁ ≡ y₂
→ y₁ ≡ subst P (sym eq) y₂
subst-sym refl y₁≡y₂ = y₁≡y₂
module _ {a p q} {A : Set a} {P : A → Set p} {Q : A → Set q}
(g : {x : A} → P x → Q x) where
subst-application′ : ∀ {x₁ x₂ y} → (eq : x₁ ≡ x₂)
→ subst Q eq (g y) ≡ g (subst P eq y)
subst-application′ refl = refl
subst˘-application′ : ∀ {x₁ x₂ y} → (eq : x₂ ≡ x₁)
→ subst˘ Q eq (g y) ≡ g (subst˘ P eq y)
subst˘-application′ refl = refl
module _ {a p} {A : Set a} {P : A → Set p}
(g : {x : A} → P x) where
subst-application′′ : ∀ {x₁ x₂} → (eq : x₁ ≡ x₂)
→ subst P eq g ≡ g
subst-application′′ refl = refl
module _ {a p b q} {A : Set a} {P : A → Set p} {B : Set b} {Q : A → Set q}
(g : {x : A} → P x → B → Q x) where
subst-application1′ : ∀ {x₁ x₂ y z} → (eq : x₁ ≡ x₂)
→ subst Q eq (g y z) ≡ g (subst P eq y) z
subst-application1′ refl = refl
subst˘-application1′ : ∀ {x₁ x₂ y z} → (eq : x₂ ≡ x₁)
→ subst˘ Q eq (g y z) ≡ g (subst˘ P eq y) z
subst˘-application1′ refl = refl
module _ {a} (A : Set a) where
K : Set a
K = {a : A} → (p : a ≡ a) → p ≡ refl
module Decidable⇒K {a} {A : Set a} (_≟_ : Decidable (_≡_ {A = A})) where
open import Axiom.UniquenessOfIdentityProofs using (module Decidable⇒UIP)
open Decidable⇒UIP _≟_ public
using ()
renaming (≡-irrelevant to Decidable⇒UIP)
Decidable⇒K : K A
Decidable⇒K p = Decidable⇒UIP p refl
Generated from commit 2fd14c996b195ef101dff8919e837907ca0a08aa.