Was ist diese fraktionsähnliche „diskrete Mathematik“ -Notation, die für formale Regeln verwendet wird?

18

In dem Artikel "Ein konfliktfrei replizierter JSON-Datentyp" stieß ich auf die folgende Notation, um "Regeln" formal zu definieren:

Einige der "Regeln", die in der Veröffentlichung gezeigt werden] [1

Wie heißt diese Notation? Wie lese ich es?

Beispielsweise:

  • Die DOCRegel hat nichts im "Zähler" - warum nicht?
  • Die Regeln EXECund GETscheinen zwei getrennte Ausdrücke über der Linie zu haben. Was bedeutet das?
  • Die VARRegel ist auch ein wenig auffällig, da viele andere Regeln eine Art Pfeil (den ich als "impliziert" bezeichnen würde) verwenden. Oben scheint diese Regel nur zu sagen, dass x ein Element von etwas ist.
  • Fast alles ist mit einer Initiale gespickt, Ap,die im Text als "der Zustand der Replik p wird durch Ap, eine endliche Teilfunktion, beschrieben" beschrieben wird. Wie würde ein erfahrener Leser dieser Notation dazu neigen, diesen Teil jeder Regel zu "sehen"?

Diese Seite hat eine verwandte Frage vorgeschlagen, die eine sehr ähnlich aussehende Schreibweise hat, über die Frage, welche Bedeutung ⟨B, s⟩ -> ⟨B ', s'⟩ als die Anfangsregel in dieser Frage zu kleinen Schritten hat Semantik? - Dies ist als operative Semantik gekennzeichnet , und das scheint ein starker Vorsprung zu sein. Ist das wirklich der Rahmen, in dem ich diese Zahlen interpretieren sollte? Könnten Sie dies einfach in "Crash-Kurs" -Form zusammenfassen, damit ich, auch wenn ich die Richtigkeit ihrer Beweise nicht überprüfen kann, zumindest ein bisschen mehr Verständnis dafür bekommen kann, was sie in diesem Abschnitt sagen?

natevw
quelle

Antworten:

25

Dies ist eine Standardnotation für eine Inferenzregel . Die Prämissen werden über eine horizontale Linie gesetzt, und die Schlussfolgerung wird unter die Linie gesetzt. Es sieht also aus wie ein "Bruch", aber mit einem oder mehreren logischen Sätzen über der Linie und einem einzelnen Satz unter der Linie. Wenn Sie eine Beschriftung (z. B. "LET" oder "VAR" in Ihrem Beispiel) daneben sehen, ist dies nur ein für Menschen lesbarer Name, um die bestimmte Regel zu identifizieren.

Dies wird möglicherweise auch als natürlicher Abzug oder natürlicher Abzug nach Gentzen-Art bezeichnet .

Dies ist eine in der Literatur der Programmiersprachen übliche Schreibweise. Sie werden es überall sehen. Es ist sehr praktisch für die Arten von Schlussfolgerungen und rekursiv strukturierten Beweisen, die in diesem Bereich auftreten.

Diese Notation wird zum Ausdrücken von Axiomen / Regeln verwendet. Sie können sich jedes Axiom als Vorlage mit " Metavariablen " vorstellen (z. B. expr ). Sie können jede Metavariable durch eine Syntax aus der Programmiersprache ersetzen (z. B. einen in der Programmiersprache gültigen Ausdruck), und Sie erhalten eine Instanz der Regel. Die Inferenzregel verspricht, dass, wenn alle Aussagen über der Linie wahr sind (in einigen Fällen des Templates, in denen Sie jede Metavariable in der Regel durch denselben Wert ersetzen), auch die Aussage unter der Linie wahr ist .

DW
quelle
2
Eine bemerkenswerte Verwendung ist die Spezifizierung der Inferenz des Hindley-Milner-Typs: In dieser Antwort auf „Welchen Teil von Milner-Hindley verstehen Sie nicht?“ Erfahren Sie, wie Sie diesen Regelsatz lesen und verwenden.
DylanSp
Eine kleine Korrektur: Die Prämissen und Schlussfolgerungen sind Urteile , keine Vorschläge . Sätze sind eine bestimmte Form des Urteils. In diesem Sinne sind Urteile offensichtlich , nicht wahr (weil der Begriff der Wahrheit schwer zu definieren und für die Programmiersprachensemantik nicht wirklich interessant ist).
Gardenhead
7

Hier ist eine sehr informelle Erklärung, die Leuten helfen könnte, die mit formalen Notationen nicht vertraut sind, einen Fuß in die Tür zu bekommen. Es ersetzt keine formale Definition!

Der Ap ist der Status Ihres Systems oder Ihres laufenden Programms. "State" kann viele Dinge bedeuten, aber in diesem Fall scheint es eine Liste aller definierten lokalen Variablen und ihrer Werte zu enthalten. Warum ist Ap eine Funktion? Weil dies eine bequeme Möglichkeit ist, Variablenzuweisungen auszudrücken: Ap (x) gibt den Wert der Variablen x an .

Nehmen wir nun die Regel EXEC als Beispiel. Es definiert die Semantik der Ausführung eines Befehls cmd1 gefolgt von einem Befehl cmd2 , dh was mit dem Zustand Ap des Systems geschieht , wenn cmd1 gefolgt von cmd2 ausgeführt wird .

  • Über der Linie: Dies sind die Räumlichkeiten. Was sie sagen: "Sei cmd1 ein Befehl. Wenn Sie den Befehl cmd1 ausführen, während sich Ihr System im Zustand Ap befindet , wird Ihr System in einem neuen Zustand Ap ' enden ."
  • Unter dem Strich: Hier beschreibt die Regel, was es bedeutet, zwei Befehle cmd1 und cmd2 nacheinander auszuführen . Was sie sagt: „Ihr System Unter der Annahme , in Zustand Ap , Ausführung cmd1 und dann cmd2 Mittel auszuführen cmd2 , wenn Ihr System im Zustand Ap‘ “(denken Sie daran , dass Ap ' der Zustand ist , dass Sie nach der Ausführung erhalten cmd1 , wie in der definiert Lokal).

Die anderen Regeln beschreiben die Semantik der einzelnen Befehle und Ausdrücke. Zum Beispiel beschreibt die VAR-Regel, was es bedeutet, eine Variable "auszuführen": Wenn x eine lokale Variable (über der Zeile) ist, was bedeutet es dann, die Variable x auszuwerten / auszuführen ? Es steht unter der Zeile: Wenn sich Ihr Programm im Zustand Ap befindet , ergibt die Auswertung von x den Wert von x , dh Ap (x) .

Ich hoffe das hilft.

Trunklop
quelle
Danke, das ist eine große Hilfe für das Verständnis und genau das, wonach ich gesucht habe! Meine erste Frage bleibt jedoch unbeantwortet: Hat diese Notation im Allgemeinen und / oder in diesem speziellen Kontext einen Namen? Meine Vermutung war "Operative Semantik", aber die andere Antwort hier sagt bisher, dass es sich nur um einfache "Inferenzregeln" handelt. Ich denke, wenn ich eine zweiteilige Frage stelle, habe ich es verdient, die Antworten aufzuteilen, aber jetzt bin ich hin- und hergerissen, was ich akzeptieren soll :-)
natevw
1
@natevw Sie sind Inferenzregeln. Operative Semantik ist nur eines von vielen Dingen, die üblicherweise mit Inferenzregeln ausgedrückt werden.
Gilles 'SO - hör auf böse zu sein'