{-# OPTIONS --cubical --safe --postfix-projections #-}
module Relation.Nullary.Omniscience where
open import Prelude
open import Relation.Nullary.Decidable
open import Relation.Nullary.Decidable.Properties
open import Relation.Nullary.Decidable.Logic
open import Relation.Nullary
open import Data.Bool using (bool)
private
variable
p : Level
P : A → Type p
Omniscient Exhaustible Prop-Omniscient : ∀ p {a} → Type a → Type _
Omniscient p A = ∀ {P : A → Type p} → (∀ x → Dec (P x)) → Dec (∃ x × P x)
Exhaustible p A = ∀ {P : A → Type p} → (∀ x → Dec (P x)) → Dec (∀ x → P x)
Omniscient→Exhaustible : Omniscient p A → Exhaustible p A
Omniscient→Exhaustible omn P? =
map-dec
(λ ¬∃P x → Dec→Stable _ (P? x) (¬∃P ∘ (x ,_)))
(λ ¬∃P ∀P → ¬∃P λ p → p .snd (∀P (p .fst)))
(! (omn (! ∘ P?)))
Prop-Omniscient p A = ∀ {P : A → Type p} → (∀ x → Dec (P x)) → Dec ∥ ∃ x × P x ∥