A skolemization corresponde ao chamado axioma teórico de escolha do tipo, que é brevemente discutido na seção 1.6 do livro HoTT .
ΣΠA : UB : A → UC: ∏a : ABa → U
a c : ( ∏a : A∑b : BumaCumab ) ≃ ( ∑( b : ∏a : ABa )∏a : ACuma( ba ) )
A prova disso é muito simples, por exemplo, no Agda, temos o seguinte (provando isomorfismo em vez de equivalência por simplicidade agora):
open import Data.Product
open import Function
open import Relation.Binary.PropositionalEquality
iso : Set → Set → Set
iso A B =
∃₂ λ (f : A → B)(g : B → A) → (∀ x → f (g x) ≡ x) × (∀ x → g (f x) ≡ x)
ac : ∀ {A : Set}{B : A → Set}{C : ∀ a → B a → Set}
→ iso ((a : A) → Σ (B a) λ b → C a b)
(Σ ((a : A) → B a) λ b → (a : A) → C a (b a))
ac = (λ f → proj₁ ∘ f , proj₂ ∘ f)
, (λ {(b , c) a → b a , c a})
, (λ _ → refl)
, (λ _ → refl)
Σ
De uma perspectiva mais operacional, isso corresponde ao levantamento lambda , uma transformação de programa usada em compiladores, que eleva as definições em um escopo externo, adicionando parâmetros de função extras para variáveis ligadas.