スコーレム化は、いわゆるタイプ理論の公理に対応します。これは、HoTTブックのセクション1.6で簡単に説明されています。
ΣΠA :UB :A → UC:∏a :ABa → U
a c :( ∏a :AΣb :BaCab ) ≃ ( ∑(b :∏a :ABa )Πa :ACa(ba ))
これが非常に単純であることの証明、たとえばAgdaでは次のようになります(単純化するために、等価ではなく同型を証明します)。
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)
Σ
より運用的な観点から見ると、これはラムダリフティング(コンパイラで使用されるプログラム変換)に対応し、バインドされた変数に追加の関数パラメータを追加することで、定義を外部スコープに引き上げます。