{-# OPTIONS --without-K --safe #-} module Prelude.Relation where open import Prelude.Empty public open import Prelude.Relation.Dec public open import Prelude.Relation.PropositionalEquality public open import Prelude.Function open import Prelude.Bool private variable A B C : Set _ infix 4 _≢_ _≢_ : A → A → Set _ x ≢ y = x ≡ y → ⊥ ¬-reflects : ∀ {b ℓ} {P : Set ℓ} → Reflects P b → Reflects (¬ P) (not b) ¬-reflects (ofʸ p) = ofⁿ (_$ p) ¬-reflects (ofⁿ ¬p) = ofʸ ¬p ¬? : ∀ {ℓ} {P : Set ℓ} → Dec P → Dec (¬ P) does (¬? p?) = not (does p?) proof (¬? p?) = ¬-reflects (proof p?) decEq₂ : {f : A → B → C} → (∀ {x y z w} → f x y ≡ f z w → x ≡ z) → (∀ {x y z w} → f x y ≡ f z w → y ≡ w) → ∀ {x y z w} → Dec (x ≡ y) → Dec (z ≡ w) → Dec (f x z ≡ f y w) decEq₂ f-inj₁ f-inj₂ (no neq) _ = no λ eq → neq (f-inj₁ eq) decEq₂ f-inj₁ f-inj₂ _ (no neq) = no λ eq → neq (f-inj₂ eq) decEq₂ f-inj₁ f-inj₂ (yes refl) (yes refl) = yes refl