module lib.Nullary where
open import Relation.Nullary
open import Function
open import Data.Unit
open import Data.Empty
dec : ∀ {ℓᵖ ℓᶜ} {P : Set ℓᵖ} {C : Set ℓᶜ} (d : Dec P) (yes : P → C) (no : ¬ P → C) → C
dec (yes p) y n = y p
dec (no ¬p) y n = n ¬p
dec′ : ∀ {ℓᵖ ℓᶜ} {P : Set ℓᵖ} (C : Dec P → Set ℓᶜ)
(d : Dec P) (yes : (p : P) → C (yes p)) (no : (¬p : ¬ P) → C (no ¬p)) → C d
dec′ C (yes p) y n = y p
dec′ C (no ¬p) y n = n ¬p
tactics : ∀ {ℓᵃ ℓᵖ} {A : Set ℓᵃ} {P : A → Set ℓᵖ} (P? : (a : A) → Dec $ P a) →
(a : A) {_ : dec (P? a) (const ⊤) (const ⊥)} → P a
tactics {ℓᵖ = ℓᵖ} {P = P} P? a {pr} = dec′ C (P? a) const (const ⊥-elim) pr
where C : Dec $ P a → Set ℓᵖ
C Pa? = dec Pa? (const ⊤) (const ⊥) → P a