# Hilbert's `ε`-operators ```agda module foundation.hilberts-epsilon-operators where ``` <details><summary>Imports</summary> ```agda open import foundation.functoriality-propositional-truncation open import foundation.propositional-truncations open import foundation.universe-levels open import foundation-core.equivalences open import foundation-core.function-types ``` </details> ## Idea Hilbert's $ε$-operator at a type `A` is a map `type-trunc-Prop A → A`. Contrary to Hilbert, we will not assume that such an operator exists for each type `A`. ## Definition ```agda ε-operator-Hilbert : {l : Level} → UU l → UU l ε-operator-Hilbert A = type-trunc-Prop A → A ``` ## Properties ### The existence of Hilbert's `ε`-operators is invariant under equivalences ```agda ε-operator-equiv : {l1 l2 : Level} {X : UU l1} {Y : UU l2} (e : X ≃ Y) → ε-operator-Hilbert X → ε-operator-Hilbert Y ε-operator-equiv e f = (map-equiv e ∘ f) ∘ (map-trunc-Prop (map-inv-equiv e)) ε-operator-equiv' : {l1 l2 : Level} {X : UU l1} {Y : UU l2} (e : X ≃ Y) → ε-operator-Hilbert Y → ε-operator-Hilbert X ε-operator-equiv' e f = (map-inv-equiv e ∘ f) ∘ (map-trunc-Prop (map-equiv e)) ```