Programarea funcțiilor calculabile - Programming Computable Functions

În informatică , Programming Computable Functions (PCF) este un limbaj funcțional introdus de Gordon Plotkin în 1977, bazat pe materialul anterior nepublicat de Dana Scott . Poate fi considerat a fi o versiune extinsă a calculului lambda tastat sau o versiune simplificată a limbajelor funcționale moderne tastate, cum ar fi ML sau Haskell .

Un model complet abstract pentru PCF a fost dat pentru prima dată de Milner (1977). Cu toate acestea, deoarece modelul lui Milner se bazează în esență pe sintaxa PCF, a fost considerat mai puțin satisfăcător (Ong, 1995). Primele două modele complet abstracte care nu utilizează sintaxă au fost formulate în anii 1990. Aceste modele se bazează pe semantica jocului (Hyland și Ong, 2000; Abramsky, Jagadeesan și Malacaria, 2000) și pe relațiile logice Kripke (O'Hearn și Riecke, 1995). Pentru o vreme s-a simțit că niciunul dintre aceste modele nu a fost complet satisfăcător, deoarece nu erau prezentabile în mod eficient. Cu toate acestea, Ralph Loader a demonstrat că nu poate exista un model complet abstract prezentabil în mod eficient, deoarece problema echivalenței programului în fragmentul finitar al PCF nu este decisă.

Sintaxă

Cele Tipurile de PCF sunt definite ca inductiv

  • nat este un tip
  • Pentru tipurile σ și τ , există un tip στ

Un context este o listă de perechi x: σ , unde x este un nume de variabilă și σ este un tip, astfel încât niciun nume de variabilă să nu fie duplicat. Se definește apoi judecățile de tastare a termenilor în context în mod obișnuit pentru următoarele constructe sintactice:

  • Variabile (dacă x: σ face parte dintr-un context Γ , atunci Γx  : σ )
  • Aplicare (a unui termen de tip στ la un termen de tip σ )
  • λ-abstractizare
  • Y Combinator punct fix (făcând termeni de tip sigma din termeni de tip sigmasigma )
  • Operațiile succesor ( succ ) și predecesor ( pred ) pe nat și constanta 0
  • Condiționalul if cu regula de tastare:
( naturile vor fi interpretate ca booleeni aici cu o convenție precum zero care denotă adevăr și orice alt număr care denotă falsitate)

Semantică

Semantica denotațională

O semantică relativ simplă pentru limbă este modelul Scott . În acest model,

  • Tipurile sunt interpretate ca anumite domenii .
    • (numerele naturale cu un element inferior alăturat, cu ordonarea plată)
    • este interpretat ca domeniul funcțiilor continue Scott de la la , cu ordonarea punctuală.
  • Un context este interpretat ca produs
  • Termenii din context sunt interpretați ca funcții continue
    • Termenii variabili sunt interpretați ca proiecții
    • Abstracția și aplicația Lambda sunt interpretate prin utilizarea structurii închise carteziene a categoriei de domenii și funcții continue
    • Y este interpretat luând punctul cel mai puțin fix al argumentului

Acest model nu este pe deplin abstract pentru PCF; dar este complet abstract pentru limbajul obținut prin adăugarea unei paralele sau a unui operator la PCF (p. 293 în referința Hyland și Ong 2000 de mai jos).

Note

  1. ^ "PCF este un limbaj de programare pentru funcții calculabile, bazat pe LCF, logica lui Scott a funcțiilor calculabile" ( Plotkin 1977 ). Programarea funcțiilor calculabile este utilizată de ( Mitchell 1996 ). Este, de asemenea, denumit Programare cu funcții calculabile sau limbaj de programare pentru funcții calculabile .

Referințe

linkuri externe