スコーレム化の型理論的解釈


8

型理論的解釈/ Skolemizationに相当するものは何ですか?

スコーレム化は、ある式をスコーレムの正規形に変換します。2つの式は互いに等しく満たされます。

または、型理論的に言えば、スコーレムの正規形でこの型を持つプログラムが存在する場合に、何らかの型を持つプログラムがあります。

これらのプログラムは互いにどのように関連していますか?


実際、私はHaskellで実存型を使用してプログラミングするときに、最初にスコーレム化について学びました。
トゥリオン

回答:


10

スコーレム化は、いわゆるタイプ理論の公理に対応します。これは、HoTTブックのセクション1.6で簡単に説明されています。

ΣΠUBUCΠaBaU

acΠaΣbBaCabΣbΠaBaΠaCaba

これが非常に単純であることの証明、たとえば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)

Σ

より運用的な観点から見ると、これはラムダリフティング(コンパイラで使用されるプログラム変換)に対応し、バインドされた変数に追加の関数パラメータを追加することで、定義を外部スコープに引き上げます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.