# The principle of omniscience

```agda
module foundation.principle-of-omniscience where
```

<details><summary>Imports</summary>

```agda
open import foundation.decidable-subtypes
open import foundation.propositional-truncations
open import foundation.universe-levels

open import foundation-core.decidable-propositions
open import foundation-core.propositions
```

</details>

## Idea

A type `X` is said to satisfy the **principle of omniscience** if every
[decidable subtype](foundation.decidable-subtypes.md) of `X` is either
[inhabited](foundation.inhabited-types.md) or
[empty](foundation-core.empty-types.md).

## Definition

```agda
is-omniscient-Prop : {l : Level}  UU l  Prop (lsuc lzero  l)
is-omniscient-Prop X =
  Π-Prop
    ( decidable-subtype lzero X)
    ( λ P  is-decidable-Prop (trunc-Prop (type-decidable-subtype P)))

is-omniscient : {l : Level}  UU l  UU (lsuc lzero  l)
is-omniscient X = type-Prop (is-omniscient-Prop X)
```

## See also

- [The limited principle of omniscience](foundation.limited-principle-of-omniscience.md)
- [The lesser limited principle of omniscience](foundation.lesser-limited-principle-of-omniscience.md)
- [The weak limited principle of omniscience](foundation.weak-limited-principle-of-omniscience.md)