Interpretación teórica de tipo de Skolemization

8

¿Cuál es la interpretación / equivalente de teoría de tipo de Skolemization?

Skolemization convierte alguna fórmula en forma normal de Skolem. Las dos fórmulas son equisatisfacibles entre sí.

O, para decirlo en términos teóricos de tipo: hay un programa que tiene algún tipo si hay un programa que tiene este tipo en forma normal de Skolem.

¿Cómo se relacionan estos programas entre sí?

Manuel Jacob
fuente
De hecho, aprendí primero sobre skolemization cuando programaba en Haskell con tipos existenciales.
Turion

Respuestas:

10

La skolemización corresponde al llamado axioma teórico de elección, que se analiza brevemente en la sección 1.6 del libro HoTT .

Esto proporciona una equivalencia a lo largo de la cual podemos intercambiar los tipos y . Suponiendo que , y , tenemos una equivalencia:ΣΠUNA:Usi:UNAUC:una:UNAsiunaU

unaC:(una:UNAsi:siunaCunasi)((si:una:UNAsiuna)una:UNACuna(siuna))

La prueba de esto es muy simple, por ejemplo, en Agda tenemos lo siguiente (demostrando isomorfismo en lugar de equivalencia por simplicidad ahora):

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)

Yendo de izquierda a derecha a lo largo de la equivalencia, convertimos una variable existencial en una función que abstrae sobre el alcance de la variable universal. También podemos usar esto de forma iterativa para mover todos los -s de un tipo de cuantificador mixto a un prefijo.Σ

Desde una perspectiva más operativa, esto corresponde al levantamiento lambda , una transformación de programa utilizada en compiladores, que eleva las definiciones a un alcance externo al agregar parámetros de función adicionales para variables enlazadas.

András Kovács
fuente