Warum Term Rewriting?

12

Ich habe ein bisschen gegoogelt und bin ein bisschen zu kurz gekommen.

Ich frage mich, was die Hauptgründe für Informatiker und Programmierer sind, das Umschreiben von Begriffen und / oder das Umschreiben von Termgraphen zu studieren.

Soweit ich das beurteilen kann, hilft es nur bei grundlegenden Überlegungen zu Funktionsprogrammen und (zwingender) Programmsteuerung. Anscheinend ist es ein Thema von großem Interesse für Logiker und diejenigen, die konstruktive abstrakte Algebren studieren.

Jede Hilfe wäre sehr dankbar!

Musa Al-hassy
quelle

Antworten:

11

Ich bin mir nicht sicher, ob dies Ihnen mehr bringen wird, als Sie bereits wissen. Aber dann verstehe ich möglicherweise nicht die Gründe, aus denen Sie sich über das Umschreiben von Begriffen wundern. Es hilft.

Wie Sie vielleicht wissen, sind Grammatiken Systeme zum Umschreiben von Zeichenfolgen. An der Spitze der Chomsky-Hierarchie stehen Grammatiken vom Typ 0, die rekursiv aufzählbare (RE) Sprachen definieren und über die Rechenleistung von Turing-Maschinen verfügen.

Das zeigt Ihnen also, dass das Umschreiben von Systemen im Allgemeinen viel mit dem Ausdrücken von Algorithmen zu tun hat.

Das Problem mit Zeichenfolgen im Allgemeinen ist, dass es keine offensichtliche Möglichkeit gibt, ihnen Semantik zuzuweisen. Es ist eine Art amorphes Umschreiben.

Was Menschen normalerweise interessiert, ist das Ausdrücken von Algorithmen in bestimmten Domänen, die Struktur und Eigenschaften haben. Solche Domänen werden häufig aus elementaren (atomaren) Entitäten definiert und durch verschiedene Operationen geschlossen, die möglicherweise durch Äquivalenzbeziehungen quotientiert werden, und so weiter. Diese werden oft Algebren genannt.

Diese Domänen sind oft abstrakt. Berechnungen zu ihren Elementen können jedoch nur in konkreten Darstellungen ausgedrückt werden. Begriffe sind eine natürliche Darstellung dieser Elemente, da sie ausdrücken, wie Elemente für andere Elemente durch Anwendung von Operationen erhalten werden können, die rekursiv auf atomare Elemente herunterfallen (obwohl allgemeine Eigenschaften nicht immer vollständig nach unten gehen müssen). Begriffe sind eine Art Baumstruktur-Syntax, die manipuliert werden kann, um Algorithmen auszudrücken (wie für Zeichenfolgen). Die Operatoroperandenstruktur von Begriffen ermöglicht es jedoch auch, ihnen mithilfe von Homomorphismen Semantik in einem abstrakten Bereich zuzuordnen.

Anstatt die sehr formale Sichtweise von Wikipedia und vielen Texten zu diesem Thema zu vertreten, sollten Sie nur Programme in Betracht ziehen. Es wird normalerweise erkannt, dass eine bequeme syntaktische Darstellung von Programmen der sogenannte Abstract Syntax Tree (AST) ist. Ein AST ist jedoch nur ein Begriff, der ein Programmobjekt darstellt. Die Denotationssemantik ist eine Möglichkeit, abstrakte Domänen zu definieren und Werte aus diesen Domänen mithilfe von Homomorphismen AST (oder AST-Teilbäumen) zuzuordnen. Programme in AST-Form können durch Anwenden von Umschreibregeln transformiert oder optimiert werden (ich behaupte nicht, dass alle Optimierungen auf diese Weise durchgeführt werden können oder sollten).

Die Transformation algebraischer Ausdrücke für verschiedene Zwecke kann durch Umschreiben von Begriffen ausgedrückt werden. Zum Beispiel die Vereinfachung einiger Ausdrücke. Verschiedene Arten von Berechnungen können natürlich auch als Umschreiben von Begriffen ausgedrückt werden, beispielsweise die Berechnung von Derivaten. Das Umschreiben von Begriffen wird manchmal auch verwendet, um kanonische Formen in Algebren zu definieren, wenn dieselbe semantische Entität mehrere syntaktische Darstellungen haben kann.

Ich schlage vor, dass Sie sich den Wikipedia-Artikel zu diesem Thema ansehen .

babou
quelle
6

Mein Gedanke ist, dass Term Rewriting etwas extrem Grundlegendes ist, mit dem Sie Dinge auf extrem einfache Weise beschreiben können, unabhängig von jeglicher Hardware.

Das Umschreiben von Begriffen kann Grammatiken beschreiben, bietet Ihnen aber auch die Mechanik für beschriebene logische Systeme wie Logik erster Ordnung usw. Beweise und Ableitungen können als Termschreiben geschrieben werden. Dann ist die Ersetzung des Umschreibens von Begriffen wirklich die einzige Operation, die Sie haben. Die Einfachheit hier ist wertvoll, weil Sie Logik beschreiben, sodass Sie nicht die volle Komplexität der Logik zur Beschreibung Ihres Systems verwenden können (da dies das System ist, das Sie beschreiben möchten).

Dies gibt Ihnen dann die Mechanik, die Sie benötigen, um über den Lambda-Kalkül als logisches / axiomatisches System zu sprechen, das Ihnen eine äußerst formale, grundlegende Version der Berechnung bietet.

Turing-Maschinen sind nützlich, aber ihre zugrunde liegenden Definitionen erfordern ein Konzept von Mengen, Funktionen usw. Es gibt viel mehr Mathematik, von der angenommen wird, dass sie erstellt wurde.

Der Lambda-Kalkül hingegen ist logisch definiert, sodass Sie ihn ohne viel Definition für Mengenlehre, Funktionen usw. verwenden können.

Das logisch modellierte Umschreiben von Begriffen gilt nicht nur für die funktionale Programmierung. Wenn Sie eine formale Überprüfung von Hardware oder Software durchführen, werden Sie immer eine Art Argumentation durchführen, und diese Argumentation kann durch Umschreiben von Begriffen modelliert werden.

jmite
quelle
2

Ein sehr praktischer Grund ist, dass es zur Konstruktion von Programmtransformationssystemen führt , Tools, mit denen man den Code für Programme als Begriffe (abstrakte Syntaxbäume) mithilfe von Oberflächen-Syntax-Umschreibungen bearbeiten kann.

Ein Beispiel für dieses System ist das DMS Software Reengineering Toolkit , das für eine Vielzahl von Programmanalysen und massiven Transformationsaufgaben verwendet wurde. Sie können sehen, wie DMS Umschreibungen ausdrückt . Diese Umschreibungen werden von einem Assoziativ-Kommutativ-Umschreibungssystem angewendet, das hinter den Kulissen arbeitet.

Ira Baxter
quelle