{-# OPTIONS --cubical --safe #-}
module Relation.Binary.Equivalence.PropHIT where
open import Prelude
open import Relation.Nullary.Stable
open import HITs.PropositionalTruncation
open import HITs.PropositionalTruncation.Sugar
open import Relation.Binary
infix 4 _≐_
_≐_ : A → A → Type _
x ≐ y = ∥ x ≡ y ∥
import Relation.Binary.Equivalence.Reasoning
module _ {A : Type a} where
prop-equiv : Equivalence A _
prop-equiv .Equivalence._≋_ = _≐_
prop-equiv .Equivalence.sym = sym ∥$∥_
prop-equiv .Equivalence.refl = ∣ refl ∣
prop-equiv .Equivalence.trans x≐y y≐z = ⦇ x≐y ; y≐z ⦈
module Reasoning = Relation.Binary.Equivalence.Reasoning prop-equiv
-- data ∙⊥ : Prop where
-- private
-- variable
-- x y z : A
-- rerel : ∙⊥ → ⊥
-- rerel ()
-- ∙refute : x ≐ y → (x ≡ y → ⊥) → ∙⊥
-- ∙refute ∣ x≡y ∣ x≢y with x≢y x≡y
-- ∙refute ∣ x≡y ∣ x≢y | ()
-- refute : x ≐ y → ¬ (¬ (x ≡ y))
-- refute x≐y x≢y = rerel (∙refute x≐y x≢y)
-- unsquash : Stable (x ≡ y) → x ≐ y → x ≡ y
-- unsquash st x≐y = st (refute x≐y)
-- ∙refl : x ≐ x
-- ∙refl = ∣ refl ∣
-- ∙trans : x ≐ y → y ≐ z → x ≐ z
-- ∙trans ∣ xy ∣ (∣_∣ yz) = ∣_∣ (xy ; yz)
-- ∙sym : x ≐ y → y ≐ x
-- ∙sym (∣_∣ p) = ∣_∣ (sym p)
-- ∙cong : (f : A → B) → x ≐ y → f x ≐ f y
-- ∙cong f ∣ x≡y ∣ = ∣ cong f x≡y ∣
-- module Reasoning where
-- infixr 2 ≐˘⟨⟩-syntax ≐⟨∙⟩-syntax
-- ≐˘⟨⟩-syntax : ∀ (x : A) {y z} → y ≐ z → y ≐ x → x ≐ z
-- ≐˘⟨⟩-syntax _ y≡z y≡x = ∙trans (∙sym y≡x) y≡z
-- syntax ≐˘⟨⟩-syntax x y≡z y≡x = x ≐˘⟨ y≡x ⟩ y≡z
-- ≐⟨∙⟩-syntax : ∀ (x : A) {y z} → y ≐ z → x ≐ y → x ≐ z
-- ≐⟨∙⟩-syntax _ y≡z x≡y = ∙trans x≡y y≡z
-- syntax ≐⟨∙⟩-syntax x y≡z x≡y = x ≐⟨ x≡y ⟩ y≡z
-- _≐⟨⟩_ : ∀ (x : A) {y} → x ≐ y → x ≐ y
-- _ ≐⟨⟩ x≡y = x≡y
-- infix 2.5 _∎
-- _∎ : ∀ {A : Type a} (x : A) → x ≐ x
-- _∎ x = ∙refl
-- infixr 2 ≡˘⟨⟩-syntax ≡⟨∙⟩-syntax
-- ≡˘⟨⟩-syntax : ∀ (x : A) {y z} → y ≐ z → y ≡ x → x ≐ z
-- ≡˘⟨⟩-syntax _ y≡z y≡x = ∙trans (∣_∣ (sym y≡x)) y≡z
-- syntax ≡˘⟨⟩-syntax x y≡z y≡x = x ≡˘⟨ y≡x ⟩ y≡z
-- ≡⟨∙⟩-syntax : ∀ (x : A) {y z} → y ≐ z → x ≡ y → x ≐ z
-- ≡⟨∙⟩-syntax _ y≡z x≡y = ∙trans ∣ x≡y ∣ y≡z
-- syntax ≡⟨∙⟩-syntax x y≡z x≡y = x ≡⟨ x≡y ⟩ y≡z