Programmieren berechenbarer Funktionen - Programming Computable Functions

In der Informatik ist Programming Computable Functions (PCF) eine typisierte funktionale Sprache, die 1977 von Gordon Plotkin eingeführt wurde und auf früherem unveröffentlichtem Material von Dana Scott basiert . Es kann als erweiterte Version des typisierten Lambda-Kalküls oder als vereinfachte Version moderner typisierter funktionaler Sprachen wie ML oder Haskell angesehen werden .

Ein vollständig abstraktes Modell für PCF wurde zuerst von Milner (1977) gegeben. Da Milners Modell jedoch im Wesentlichen auf der Syntax von PCF basierte, wurde es als wenig zufriedenstellend angesehen (Ong, 1995). Die ersten beiden vollständig abstrakten Modelle ohne Syntax wurden in den 1990er Jahren formuliert. Diese Modelle basieren auf Spiel Semantik (Hyland und Ong, 2000; Abramsky, Jagadeesan und Malacaria, 2000) und Kripke logische Beziehungen (O'Hearn und Riecke, 1995). Eine Zeit lang war man der Meinung, dass keines dieser Modelle völlig zufriedenstellend war, da sie nicht effektiv vorzeigbar waren. Allerdings Ralph Loader gezeigt , dass kein wirksamer vorzeigbar voll abstraktes Modell existieren könnte, da die Frage der Programm Gleichwertigkeit im finitäre Fragment von PCF ist nicht entscheidbar.

Syntax

Die PCF- Typen werden induktiv definiert als

  • nat ist ein Typ
  • Für die Typen σ und τ gibt es einen Typ στ

Ein Kontext ist eine Liste von Paaren x : σ , wobei x ein Variablenname und σ ein Typ ist, sodass kein Variablenname dupliziert wird. Typisierungsurteile von Begriffen im Kontext definiert man dann in üblicher Weise für die folgenden syntaktischen Konstrukte:

  • Variablen (wenn x : σ Teil eines Kontextes Γ ist , dann Γx  : σ )
  • Anwendung (eines Termes vom Typ στ auf einen Term vom Typ σ )
  • λ-Abstraktion
  • Der Y- Festpunktkombinator (Terme vom Typ σ aus Termen vom Typ σσ machen )
  • Die Nachfolger ( succ ) und Vorgänger ( pred ) Operationen auf nat und die Konstante 0
  • Das bedingte if mit der Typisierungsregel:
( nat s wird hier als Boolean interpretiert, mit einer Konvention wie Null für Wahrheit und jede andere Zahl für Falschheit)

Semantik

Denotationale Semantik

Eine relativ einfache Semantik für die Sprache ist das Scott-Modell . Bei diesem Modell,

  • Typen werden als bestimmte Domänen interpretiert .
    • (die natürlichen Zahlen mit einem daran anschließenden unteren Element, mit der flachen Ordnung)
    • wird als Bereich der Scott-stetigen Funktionen von bis interpretiert , mit der punktweisen Ordnung.
  • Ein Kontext wird als Produkt interpretiert
  • Begriffe im Kontext werden als stetige Funktionen interpretiert
    • Variable Terme werden als Projektionen interpretiert
    • Lambda-Abstraktion und -Anwendung werden interpretiert, indem die kartesische geschlossene Struktur der Kategorie der Domänen und stetigen Funktionen verwendet wird
    • Y wird interpretiert, indem man den kleinsten Fixpunkt des Arguments nimmt

Dieses Modell ist für PCF nicht vollständig abstrakt; sie ist jedoch für die Sprache, die durch Hinzufügen eines Parallel- oder Operators zu PCF erhalten wird, vollständig abstrakt (S. 293 in der folgenden Referenz von Hyland und Ong 2000).

Anmerkungen

  1. ^ "PCF ist eine Programmiersprache für berechenbare Funktionen, basierend auf LCF, Scotts Logik berechenbarer Funktionen" ( Plotkin 1977 ). Programming Computable Functions wird von ( Mitchell 1996 ) verwendet. Es wird auch als Programmieren mit berechenbaren Funktionen oder Programmiersprache für berechenbare Funktionen bezeichnet .

Verweise

Externe Links