Constraint-Logikprogrammierung

Constraint-Logikprogrammierung ist eine Form der Constraint-Programmierung, bei der Logikprogrammierung wird erweitert, um Konzepte aus Constraint Satisfaction enthalten. Eine Einschränkung Logikprogramm ist ein Logikprogramm, das Beschränkungen im Körper von Klauseln enthält. Ein Beispiel einer Bestimmung, die eine Einschränkung ist. In dieser Klausel ist eine Einschränkung, ,, und Literale wie in regulären Logikprogrammierung. Diese Klausel besagt, eine Bedingung, unter der die Aussage gilt: größer als Null ist und beide, und wahr sind.

Wie in regelmäßigen Logikprogrammierung werden die Programme über die Beweisbarkeit eines Ziels, die Einschränkungen neben Literale enthalten kann abgefragt. Ein Beweis für ein Ziel wird von Klauseln, deren Körper erfüllbar Zwänge und Literale, die wiederum mit anderen Klauseln bewiesen werden kann zusammengesetzt. Die Ausführung wird von einem Dolmetscher, die aus dem Strafraum beginnt und rekursiv durchsucht die Klauseln versuchen, das Ziel zu beweisen, durchgeführt. Constraints während dieser Abtastung angetroffen werden in einem Satz genannt Constraint Speicher gelegt. Wenn dieser Satz wird gefunden unerfüllbar zu sein, der Dolmetscher Backtracking und versucht, anderen Bestimmungen zum Nachweis der Ziel verwenden. In der Praxis kann die Erfüllbarkeit der Zwangsöffnungs Verwendung eines unvollständigen Algorithmus, der nicht immer Unvereinbarkeit festprüft werden.

Überblick

Formal sind Constraint Logikprogramme wie normale Logikprogramme, aber der Körper von Klauseln können Einschränkungen, zusätzlich zu den regulären Logikprogrammierung Literale. Als ein Beispiel ist eine Einschränkung, und wird im letzten Abschnitt des folgenden bedingten Logikprogramm enthalten.

Wie in regelmäßigen logische Programmierung, die Bewertung ein Ziel, wie beispielsweise erfordert die Bewertung der Körper der letzte Satz mit. Wie bei regulären Logikprogrammierung, dies wiederum erfordert den Nachweis der Ziel. Im Gegensatz zu regulären Logikprogrammierung erfordert dies auch eine Einschränkung zufrieden sein :, die Einschränkung in dem Körper der letzte Satz.

Ob eine Bedingung erfüllt ist, kann nicht immer festgelegt, wenn die Randbedingung angetroffen werden. In diesem Fall wird beispielsweise der Wert nicht bestimmt wird, wenn der letzte Satz ausgewertet. Als Ergebnis ist die Einschränkung nicht erfüllt ist, noch an diesem Punkt verletzt wird. Anstatt Vorgehen in der Auswertung von und dann zu prüfen, ob der resultierende Wert ist dann positiv, speichert der Dolmetscher die Einschränkung und geht bei der Bewertung der dann; Hierdurch kann der Dolmetscher Verletzung der Einschränkung bei der Auswertung zu erkennen und zurückverfolgen sofort, wenn dies der Fall ist, anstatt zu warten, für die Auswertung der zu schließen.

Im Allgemeinen ist die Bewertung einer Constraint-Logik Programm geht, wie für einen normalen Logik-Programm, aber Einschränkungen bei der Auswertung festgestellt werden in einem Satz genannt Constraint Speicher gelegt. Als ein Beispiel der Auswertung der Ziel verläuft durch Auswertung der Körper des ersten Klausel; Diese Evaluierung fügt dem Zwang zu speichern und erfordert das Ziel, nachgewiesen werden. Bei dem Versuch, dieses Ziel zu beweisen, ist die erste Klausel anwendbar, aber ihre Bewertung ergänzt die Einschränkung Laden. Dieser Zusatz macht die Einschränkung store unerfüllbar, und der Dolmetscher Backtracking, das Entfernen der letzten Zugabe von dem Zwang zu speichern. Die Auswertung der zweite Klausel hinzugefügt und der Nebenbedingung zu speichern. Da die Einschränkung store erfüllbar ist und keine andere Literal mehr zu beweisen, stoppt der Interpreter mit der Lösung.

Semantik

Die Semantik constraintlogische Programme können in Form einer virtuellen Interpretierer, der ein Paar während der Ausführung beibehält definiert werden. Das erste Element dieses Paares wird als aktuelles Ziel; das zweite Element wird als Randbedingung zu speichern. Das aktuelle Ziel enthält die Literale der Dolmetscher wird versuchen zu beweisen, und kann auch einige Einschränkungen es versucht, zu genügen, enthalten; die Einschränkung Speicher enthält alle Einschränkungen der Dolmetscher hat erfüllbar ist davon ausgegangen, so weit.

Anfangs ist der aktuelle Ziel das Ziel und die Einschränkung Shop ist leer. Der Interpreter geht, indem das erste Element aus dem aktuellen Ziel und analysieren. Die Details dieser Analyse werden im Folgenden erläutert, aber am Ende dieser Analyse kann eine erfolgreiche Beendigung oder einen Fehler zu erzeugen. Diese Analyse kann rekursive Aufrufe und Hinzufügen neuer Literale auf die aktuelle Ziel und neue Einschränkung der Einschränkung Store beinhalten. Der Dolmetscher Backtracking, wenn ein Fehler erzeugt. Ein erfolgreicher Beendigung wird generiert, wenn das aktuelle Ziel ist leer und die Einschränkung store ist erfüllbar.

Die Details der Analyse eines Literal vom Ziel entfernt ist wie folgt. Nachdem diese wörtliche der vor dem Tor entnommen wird geprüft, ob es sich um eine Einschränkung oder ein Literal. Wenn es eine Einschränkung, wird der Nebenbedingung Speicher hinzugefügt. Wenn es sich um eine wörtliche, eine Klausel, dessen Kopf die gleiche Prädikat des wörtlichen gewählt wird; die Klausel wird durch Ersetzen ihrer Variablen neue Variablen umgeschrieben: Das Ergebnis ist eine neue Variante der Klausel berufen; der Körper des Frischvariante des Satzes wird dann vor dem Ziel angeordnet ist; die Gleichheit jedes Argument der wörtlichen mit dem entsprechenden der frischen Variante Kopf vor dem Ziel als gut aufgestellt.

Einige Prüfungen werden während dieser Operationen durchgeführt. Insbesondere ist die Einschränkung Speicher für Konsistenz jedes Mal eine neue Einschränkung wird hinzugefügt geprüft. Im Prinzip, wenn die Einschränkung store unerfüllbar ist der Algorithmus könnte zurückverfolgen. Jedoch Überprüfung Unerfüllbarkeit bei jedem Schritt nicht wirksam sein würde. Aus diesem Grund kann eine unvollständige Erfüllbarkeit checker stattdessen verwendet werden. In der Praxis wird die Erfüllbarkeit mit Methoden, die die Einschränkung Geschäft zu vereinfachen, dass überprüft wird, schreiben sie in eine äquivalente, aber einfacher zu lösen Form. Diese Methoden können manchmal, aber nicht immer beweisen Unerfüllbarkeit einer unerfüllbar Einschränkung Laden.

Der Dolmetscher hat das Ziel erwiesen, wenn der aktuelle Ziel ist leer und die Einschränkung Speicher wird nicht erkannt unerfüllbar. Das Ergebnis der Ausführung ist der aktuelle Satz von Einschränkungen. Dieser Satz kann Einschränkungen wie die Kraft-Variablen auf einen bestimmten Wert enthalten, kann aber auch Einschränkungen wie, dass nur gebunden Variablen umfassen, ohne ihnen einen bestimmten Wert.

Formal ist die Semantik der Einschränkung Logikprogrammierung in Bezug auf die Ableitungen definiert. Ein Übergang ist ein Paar von Paaren Ziel / Speicher, festgestellt. Ein solches Paar gibt die Möglichkeit, sich von Staat zu Staat. Ein solcher Übergang ist in drei möglichen Fällen möglich:

  • ein Element ist eine Einschränkung, und; in anderen Worten, eine Bedingung aus dem Ziel der Einschränkung-Speicher verschoben werden
  • ein Element ist eine wörtliche, gibt es eine Klausel, die, neu geschrieben werden mit neuen Variablen, ist, mit Fassung, und; Mit anderen Worten, kann ein Literal vom Körper eines frischen Variante einer Klausel mit derselben Prädikat in den Kopf ersetzt werden, indem der Körper des frischen Variante und die obigen Gleichungen der Begriffe zu dem Ziel
  •  und je nach den spezifischen Einschränkung Semantik äquivalent

Eine Folge von Übergängen ist eine Ableitung. Ein Ziel nachgewiesen werden kann, wenn es eine Ableitung aus, um für einige erfüllbar Einschränkung Laden. Diese Semantik formalisiert die möglichen Entwicklungen des Dolmetschers, der willkürlich wählt die wörtliche des Ziels zu verarbeiten und die Klausel, um Literale ersetzen. Mit anderen Worten, ist ein Ziel, im Rahmen dieser Semantik bewiesen, wenn es eine Folge von Entscheidungen von Literalen und Klauseln, unter den möglicherweise viele Lieben, dass Blei in ein leeres Ziel und erfüllbar Laden.

Tatsächliche Dolmetscher verarbeiten die Ziel-Elemente in einem LIFO Reihenfolge: Elemente in der Front hinzu und von vorne bearbeitet. Sie die Klausel der zweiten Regel wählen, auch entsprechend der Reihenfolge, in der sie geschrieben sind, und schreiben Sie die Einschränkung store, wenn es geändert wird.

Die dritte mögliche Art von Übergang ist ein Ersatz der Einschränkung Shop mit einer äquivalenten eins. Dieser Ersatz ist beschränkt auf solche, die durch spezifische Verfahren, wie Randbedingungspropagations getan. Die Semantik der Einschränkung Logikprogrammierung metrische nicht nur auf die Art der Randbedingungen verwendet, sondern auch für das Verfahren zum Überschreiben des Constraint Speicher. Die spezifischen Methoden in der Praxis verwendet wird, ersetzen die Einschränkung-Shop mit einem, die einfacher zu lösen ist. Wenn die Einschränkung store unerfüllbar ist, kann diese Vereinfachung dieses Unerfüllbarkeit manchmal zu erkennen, aber nicht immer.

Das Ergebnis der Auswertung ein Tor gegen eine Einschränkung Logik-Programm definiert ist, wenn das Ziel ist bewiesen. In diesem Fall gibt es eine Ableitung aus der Ausgangspaar zu einem Paar, wo das Ziel ist leer. Die Einschränkung Shop von diesem zweiten Paar gilt als das Ergebnis der Auswertung. Dies ist, weil die Einschränkung Speicher enthält alle Beschränkungen angenommen erfüllbar, um das Ziel nachzuweisen. In anderen Worten ist das Ziel für alle variablen Auswertungen, die diese Beschränkungen erfüllen erwiesen.

Die paarweisen Gleichheit der Amtszeiten von zwei Literale wird oft kompakt bezeichnet durch: dies ist eine Kurzform für die Zwänge. Eine häufige Variante der Semantik für Constraint Logikprogrammierung fügt direkt zur Einschränkung Geschäft und nicht auf das Tor zu.

Allgemeine Geschäftsbedingungen und Einschränkungen

Unterschiedliche Definitionen von Begriffen verwendet werden, erzeugen verschiedene Arten von Zwang logische Programmierung: über Bäume, Realen, oder finite Domänen. Eine Art von Zwang, die immer vorhanden ist, ist die Gleichheit der Begriffe. Solche Einschränkungen sind erforderlich, weil der Dolmetscher hinzufügt, um das Ziel, wenn ein Literal mit dem Körper einer Klausel frische Variante dessen Kopf ersetzt.

Baum Begriffe

Constraint-Logikprogrammierung mit Baum Begriffe emuliert regulären Logikprogrammierung, indem Substitutionen als Randbedingungen in der Einschränkung zu speichern. Allgemeine Geschäftsbedingungen sind Variablen, Konstanten und Funktionssymbolen zu anderen Bedingungen angewendet. Die einzigen Einschränkungen berücksichtigt sind Gleichheiten und disequalities zwischen Begriffen. Gleichheit ist besonders wichtig, da Einschränkungen dergleichen werden oft durch den Interpreter erzeugt. Gleichheitsbeschränkungen zu Bedingungen vereinfacht werden, dass gelöst ist, über die Einigung:

Eine Einschränkung kann vereinfacht werden, wenn beide Begriffe sind Funktionssymbole, um andere Bedingungen angewendet. Wenn die beiden Funktionssymbole gleich sind und die Anzahl der Teilterme ist auch dieselbe, kann diese Bedingung mit dem paarweisen Gleichterme ersetzt. Wenn die Bedingungen der verschiedenen Funktionssymbolen oder zur gleichen functor aber auf unterschiedlichen Anzahl von Termen zusammengesetzt ist, die Randbedingung nicht erfüllbar.

Wenn einer der beiden Begriffe ist eine Variable, ist die einzige zulässige Wert die Variable annehmen kann der andere Begriff. Als Ergebnis kann die andere Bezeichnung der Variablen in der Ziel und Beschränkungs Speicher zu ersetzen, damit praktisch das Entfernen der variable Berücksichtigung. In dem besonderen Fall der Gleichheit einer Variablen mit sich selbst kann die Einschränkung wie immer zufrieden entfernt werden.

Bei dieser Form der Constraint Satisfaction sind variable Werte Begriffe.

Reals

Constraint-Logikprogrammierung mit reellen Zahlen verwendet echte Ausdrücke als Begriffe. Wenn keine Funktionssymbole verwendet werden, Begriffe sind Ausdrücke über Realen, möglicherweise auch Variablen. In diesem Fall kann jede Variable nur dann eine reelle Zahl als Wert.

Um genau zu sein, Begriffe sind Ausdrücke über Variablen und reelle Konstanten. Gleichstellung von Begriffen ist eine Art von Zwang, die immer vorhanden ist, wie der Interpreter erzeugt Gleich Begriffe während der Ausführung. Als Beispiel, wenn der erste wörtlichen des aktuellen Ziel ist es, und der Dolmetscher hat sich entschieden eine Klausel, die nach dem Überschreiben ist Variablen sind die Einschränkungen der aktuellen Ziel zugegeben und. Die Regeln der Vereinfachung für die Funktionssymbole verwendet werden, offensichtlich nicht verwendet: nicht unerfüllbar, nur weil der erste Ausdruck wird mithilfe der integrierten und der zweite mit.

Reals und Funktionssymbole können kombiniert werden, was zu Bedingungen, die Ausdrücke über reellen Zahlen und Funktionssymbole, um andere Bedingungen angewendet werden. Formal Variablen und reelle Konstanten sind Ausdrücke, wie jeder arithmetischen Operator über andere Ausdrücke. Variablen, Konstanten und Ausdrücke sind Begriffe, wie jede Funktion Symbol, um Begriffe angewendet. Mit anderen Worten werden die Terme über Ausdrücke gebaut, während Ausdrücke werden als Zahlen und Variablen aufgebaut. In diesem Fall Variablen erstreckt sich über reellen Zahlen und Begriffe. In anderen Worten, kann eine Variable eine reelle Zahl als einen Wert zu nehmen, während ein anderer müsste term.

Gleichheit der beiden Begriffe können mit den Regeln für die Baum Begriffe, wenn keiner der beiden Begriffe ist ein echter Ausdruck vereinfacht werden. Zum Beispiel, wenn die beiden Begriffe haben die gleiche Funktion Symbol und Anzahl der Teilterme, ihre Gleichheit Einschränkung kann mit der Gleichheit der Teilterme ersetzt werden.

Finite-Domains

Die dritte Klasse von Einschränkungen in constraintlogische Programmierung ist die finite Domänen. Werte von Variablen sind in diesem Fall aus einer endlichen -Domäne entnommen, die oft, dass der Ganzzahlen. Für jede Variable kann auch eine andere Domain angegeben werden: beispielsweise bedeutet, dass der Wert zwischen und. Die Domäne einer Variablen kann auch durch Auflisten aller Werte kann eine Variable unterrichtet werden; Daher kann die obige Domäne Erklärung auch geschrieben werden. Diese zweite Art der Angabe einer Domäne ermöglicht für Domains, die nicht von ganzen Zahlen zusammengesetzt sind, wie zum Beispiel. Wenn die Domäne eine variable nicht angegeben ist, wird angenommen, um die Menge der ganzen Zahlen darstellbar ist in der Sprache. Eine Gruppe von Variablen können die gleiche Domäne mit einer Erklärung, wie angegeben werden.

Die Domäne einer Variablen kann während der Ausführung reduziert werden. In der Tat, wie der Interpreter fügt Einschränkungen der Einschränkung store, führt er Constraint-Propagation, eine Form der lokalen Konsistenz zu erzwingen, und diese Vorgänge können die Domain von Variablen reduzieren. Wenn die Domäne einer Variablen leer wird, ist die Einschränkung Speicher inkonsistent sind, und der Algorithmus Backtracking. Wenn die Domäne einer Variablen wird ein Singleton kann die variable den einzigartigen Wert in seinem Bereich zugeordnet werden. Die Formen der Konsistenz in der Regel durchgesetzt bogen Konsistenz, hyper-Bogen Konsistenz und gebundenen Konsistenz. Die aktuelle Domäne einer Variablen kann unter Verwendung spezifischer Literale inspiziert; beispielsweise findet die aktuelle Domäne eines variablen.

Wie für Domänen des Realen, können Funktoren mit Domänen von ganzen Zahlen verwendet werden. In diesem Fall kann ein Ausdruck, ein Ausdruck über ganze Zahlen sind, eine Konstante oder die Anwendung eines functor über anderen Bedingungen. Eine Variable kann einen beliebigen Begriff als Wert annehmen, wenn seine Domäne ist nicht festgelegt, um eine Reihe von ganzen Zahlen oder Konstanten sein.

Die Einschränkung Shop

Die Einschränkung Speicher enthält die Einschränkungen, die derzeit davon ausgegangen, erfüllbar sind. Es kann angenommen werden, was die aktuelle Substitution für regelmäßige Logikprogrammierung werden. Als einzige Baum Begriffe sind erlaubt, enthält die Einschränkung store Einschränkungen in der Form; Diese Einschränkungen werden durch Vereinigung vereinfacht, was zu Einschränkungen der Form; solche Einschränkungen entsprechen einer Substitution.

Allerdings kann die Einschränkung Laden auch Einschränkungen enthalten, in der Form, wenn die Differenz zwischen Begriffe sind erlaubt. Wenn Einschränkungen über Realen oder finite Domänen zulässig sind, kann die Einschränkung Laden auch domänenspezifische Randbedingungen wie usw. enthalten,

Die Zwangsöffnungs erweitert das Konzept der gegenwärtigen Substitution in zweierlei Hinsicht. Erstens ist es nicht nur enthalten, die Einschränkungen von gleich wörtlich mit dem Kopf von einem frischen Variante eines Klausel abgeleitet, aber auch die Einschränkungen des Körpers von Klauseln. Zweitens, es enthält nicht nur Beschränkungen der Form, sondern auch Beschränkungen für das betrachtete Constraint Language. Während das Ergebnis einer erfolgreichen Auswertung eines regulären Logik-Programm ist der letzte Substitution, das Ergebnis für eine Einschränkung Logik-Programm ist die letzte Einschränkung zu speichern, die Einschränkung der Form Variable = Wert enthalten kann, aber im Allgemeinen können beliebige Einschränkungen enthalten.

Domänenspezifische Einschränkungen kann der Einschränkung store sowohl aus dem Körper eines Klauseln und von gleich wörtlich mit einer Klausel Haupt kommen: zum Beispiel, wenn der Interpreter schreibt die wörtliche mit einer Klausel, deren frische Variante Kopf ist, wird die Einschränkung hinzugefügt der Zwang zu speichern. Wenn eine Variable in einer realen oder Finite-Domain-Ausdruck angezeigt wird, kann es nur einen Wert in den reellen Zahlen oder der Finite-Domain. Eine solche Variable kann nicht eine Laufzeit von einem Funktor zu anderen Bedingungen als Wert angewendet werden. Die Einschränkung store unerfüllbar ist, ob eine Variable gebunden ist, um sowohl einen Wert der spezifischen Domäne und einen Funktor, um Begriffe angewendet werden.

Nachdem eine Beschränkung auf die Einschränkung Speicher hinzugefügt werden einige Operationen an der Einschränkung Speicher durchgeführt. Welche Operationen durchgeführt werden, hängt von der betrachteten Domänen- und Einschränkungen. Zum Beispiel Einigung ist für endliche Baum Gleichheiten, variable Eliminierung für Polynomgleichungen über Realen, Constraint-Propagation verwendet, um eine Form der lokalen Konsistenz für finite Domänen durchzusetzen. Diese Operationen werden an der Herstellung der Zwang store einfacher für die Erfüllbarkeit überprüft und gelöst werden sollen.

Als Ergebnis dieser Operationen kann die Zugabe des neuen Zwängen die alten zu ändern. Wesentlich ist, dass der Interpreter ist in der Lage, diese Änderungen rückgängig zu machen, wenn es Backtracking. Der einfachste Fall-Methode ist für den Interpreten, den kompletten Zustand des Speichers jedes Mal, wenn es eine Wahl zu speichern. Effizientere Methoden zu ermöglichen, dass die Einschränkung Laden, um zu einem früheren Zustand zurückkehren existieren. Insbesondere kann man einfach speichern Sie die Änderungen an der Einschränkung Speicher zwischen zwei Punkten der Wahl, einschließlich der Änderungen an den alten Zwängen gemacht. Dies kann durch einfaches Speichern der alten Wert von den Zwängen, die modifiziert wurden geschehen; diese Methode aufgerufen nachlauf. Eine erweiterte Methode ist, um die Änderungen, die auf den veränderten Randbedingungen durchgeführt wurden, zu speichern. Zum Beispiel wird eine lineare Einschränkung durch eine Änderung seines Koeffizient verändert: die Rettung der Differenz zwischen dem alten und neuen Koeffizient ermöglicht Rückgriff eine Änderung. Dieses zweite Verfahren wird als semantische Backtracking, da die Semantik der Änderungs eher gespeichert als die alte Version von nur den Beschränkungen.

Kennzeichnung

Die Kennzeichnung Literale werden zu Variablen über endlichen Domänen verwendet werden, um die Erfüllbarkeit oder teilweise Erfüllbarkeit der Einschränkung Speicher zu überprüfen und um eine erfüllende Belegung finden. Eine Kennzeichnung wörtlicher ist von der Form, in der das Argument eine Liste von Variablen über endlichen Domänen. Immer, wenn der Interpreter wertet eine solche wörtliche, führt es eine Suche in den Bereichen der Variablen der Liste, um einen Auftrag, der alle relevanten Einschränkungen erfüllt finden. Typischerweise wird dies durch eine Form von Backtracking durchgeführt: Variablen werden in der Reihenfolge ausgewertet und versuchte alle möglichen Werte für jeden von ihnen, und Backtracking, wenn Inkonsistenzen festgestellt wird.

Der erste Einsatz der Kennzeichnung wörtlicher ist es, tatsächliche Kontrolle Erfüllbarkeit oder teilweise Erfüllbarkeit der Einschränkung zu speichern. Wenn der Interpreter fügt eine Einschränkung der Nebenbedingung zu speichern, er nur den Form von lokalen Konsistenz auf sie. Dieser Vorgang kann nicht Unverträglichkeit festzustellen, selbst wenn der Constraint-Shop ist unerfüllbar. Markierende literal über einen Satz von Variablen, erzwingt eine Erfüllbarkeit Überprüfung der Randbedingungen über diese Variablen. Als Ergebnis unter Verwendung aller in den Zwang store Ergebnisse bei der Prüfung Erfüllbarkeit des Ladens genannten Variablen.

Die zweite Verwendung der Kennzeichnung wörtlicher ist, um tatsächlich bestimmen, eine Bewertung der Variablen, die die Einschränkung Speicher erfüllt. Ohne die Kennzeichnung wörtlicher werden Variablen Werte zugewiesen nur, wenn die Einschränkung Speicher enthält eine Einschränkung der Form und als lokale Konsistenz reduziert die Domäne einer Variablen auf einen einzigen Wert. Eine Kennzeichnung wörtlicher über einige Variablen erzwingt diese Variablen zu bewerten. Mit anderen Worten, nach der die Kennzeichnung wörtlicher betrachtet worden, alle Variablen ein Wert zugewiesen.

Typischerweise werden Constraint Logikprogramme derart Kennzeichnung Literale werden erst nach so vielen Einschränkungen wie möglich in der Beschränkungs Speicher akkumuliert worden ausgewertet geschrieben. Dies liegt daran, Kennzeichnung Literale Suche durchzusetzen, und Such ist effizienter, wenn es mehr Einschränkungen, zufrieden zu sein. Ein Constraint Satisfaction Problem wird gelöst durch eine typische Einschränkung Logik-Programm mit der folgenden Struktur:

Wenn der Interpreter wertet das Ziel, legt sie den Körper eines frischen Variante der ersten Klausel im aktuellen Ziel. Da das erste Ziel ist, ist die zweite Klausel ausgewertet wird, und dieser Vorgang verschiebt alle Einschränkungen in der aktuellen Ziel und schließlich in der Constraint-Shop. Die wörtliche wird dann ausgewertet, die Suche nach einer Lösung des Constraint Geschäft zwingen. Da die Beschränkungsöffnungs enthält genau die Einschränkungen des ursprünglichen Bedingungserfüllungsproblem, sucht diese Operation nach einer Lösung des ursprünglichen Problems.

Programm Neuformulierungen

Eine bestimmte Einschränkung Logik-Programm kann neu formuliert, um ihre Effizienz zu verbessern. Eine erste Regel ist, dass die Kennzeichnung Literale sollte nach so viel Einschränkungen für die markierten Literale werden in der Einschränkung Speicher angesammelt platziert werden. Während in der Theorie entspricht, der Suche, die ausgeführt wird, wenn der Interpret stößt die Kennzeichnung wörtlicher befindet sich auf einem Constraint Geschäft, das nicht die Einschränkung enthält. Als Ergebnis kann es Lösungen, wie sich später herausgefunden werden nicht auf diese Bedingung erfüllen zu erzeugen. Andererseits wird in der zweiten Mischung die Suche nur durchgeführt wird, wenn die Randbedingung ist bereits in der Nebenbedingung zu speichern. Als Ergebnis wird nur Suche gibt Lösungen, die mit ihm sind, unter Ausnutzung der Tatsache, dass zusätzliche Bedingungen verringern die Suchraum.

Eine zweite Neuformulierung, die Effizienz steigern können, ist zu Einschränkungen vor Literale im Körper von Klauseln zu platzieren. Wieder und sind im Prinzip gleichwertig. Allerdings ist die erste können mehr Berechnung erfordern. Wenn beispielsweise die Einschränkung Speicher enthält die Einschränkung, rekursiv wertet der Interpreter im ersten Fall; wenn es gelingt, dann findet sie heraus, dass die Einschränkung store ist inkonsistent, wenn das Hinzufügen. Im zweiten Fall, bei der Bewertung, dass die Klausel fügt der Dolmetscher Erste, der Zwang zu speichern und dann gegebenenfalls wertet. Da die Einschränkung Speicher nach der Zugabe von Windungen aus inkonsistent zu sein, wird die rekursive Auswertung der überhaupt nicht durchgeführt.

Eine dritte Neuformulierung, die Effizienz steigern kann, ist die Zugabe von redundanten Nebenbedingungen. Wenn der Programmierer weiß, dass die Lösung eines Problems eine bestimmte Einschränkung erfüllt, können sie diese Einschränkung zählen zu Inkonsistenz der Einschränkung Speicher so schnell wie möglich verursachen. Zum Beispiel, wenn es bekannt ist beforehands daß die Auswertung zu einem positiven Wert zu führen, kann der Programmierer vor jedem Auftreten hinzuzufügen. Als Beispiel wird auf dem Ziel fehlschlagen, aber dies ist bei der Auswertung der das Teilziel nur gefunden. Auf der anderen Seite, wenn die oben genannte Klausel wird ersetzt durch, backtracks der Dolmetscher, sobald die Einschränkung der Nebenbedingung zu speichern, die vor der Auswertung geschieht von selbst startet aufgenommen.

Constraint Handling Rules

Constraint Handling Rules wurden zunächst als Stand-alone-Formalismus zur Angabe Constraint Solver definiert und wurden später in Logikprogrammierung eingebettet. Es gibt zwei Arten von Constraint Handling Rules. Die Regeln der ersten Art anzugeben, dass, unter einer gegebenen Bedingung, ist eine Reihe von Randbedingungen äquivalent zu einem anderen. Die Regeln der zweiten Art anzugeben, dass, unter einer gegebenen Bedingung, eine Reihe von Einschränkungen impliziert einen anderen. In einem Constraint-Logik-Programmiersprache unterstützt Constraint Handling Rules kann ein Programmierer diese Regeln zu verwenden, um möglichen Umschreibungen der Einschränkung speichern und mögliche Ergänzungen von Beschränkungen, um es anzugeben. Die folgenden sind Beispielregeln:

Die erste Regel besagt, dass, wenn durch den Laden zur Folge, kann die Einschränkung umgeschrieben werden. Als ein Beispiel kann umgeschrieben werden als wenn der Speicher beinhaltet, dass. Das Symbol gleicht Äquivalenz Logik und mitteilt, dass die erste Bedingung ist äquivalent zu dieser. In der Praxis bedeutet dies, dass die erste Bedingung kann mit dem letzteren ersetzt.

Die zweite Regel gibt an, dass statt der letztere Einschränkung ist eine Folge der ersten, wenn die Einschränkung in der Mitte wird von der Randöffnungs brachte. Als Ergebnis wird, wenn es in der Einschränkung zu speichern und durch den Zwang Speicher zur Folge, so kann zu dem Speicher hinzugefügt werden. Unterschied zu dem Fall der Äquivalenz, ist dies eine Addition und kein Ersatz: die neue Randbedingung hinzugefügt, aber die alte bleibt.

Äquivalenz ermöglicht die Vereinfachung des Constraint store indem einige Einschränkungen mit einfacheren; Insbesondere dann, wenn die dritte Einschränkung in einem Äquivalenzregel ist, und die zweite Einschränkung zur Folge, wobei die erste Einschränkung wird vom Zwang Speicher entfernt. Inferenz ermöglicht das Hinzufügen von neuen Zwängen, die dem Nachweis Inkonsistenz der Beschränkungs Speicher führen kann, und kann im allgemeinen die Menge von Such benötigt, um seine Erfüllbarkeit herzustellen.

Logikprogrammierung Klauseln im Zusammenhang mit Constraint Handling Rules verwendet werden, um ein Verfahren für die Herstellung der Erfüllbarkeit der Einschränkung Speicher anzugeben. Verschiedene Klauseln verwendet, um die verschiedenen Möglichkeiten der Methode umzusetzen; die Constraint Handling Rules sind zum Überschreiben des Constraint Speicher während der Ausführung verwendet. Als Beispiel kann man umsetzen Backtracking mit Einheit Ausbreitung auf diese Weise. Let eine aussagenlogische Klausel, in der die Literale in der Liste sind in der gleichen Reihenfolge, wie sie ausgewertet werden. Der Algorithmus kann unter Verwendung von Klauseln für die Wahl der Zuweisung einer wörtlichen, um wahr oder falsch, und Constraint Handling Rules, um die Ausbreitung angeben umgesetzt werden. Diese Regeln spezifizieren, dass, wenn aus dem Speicher folgt, entfernt werden, und es kann, wie aus dem Speicher folgt umgeschrieben werden. In ähnlicher Weise kann durch ersetzt werden. In diesem Beispiel ist die Wahl des Werts für eine Variable mit Klauseln der Logikprogrammierung durchgeführt werden; jedoch kann es in Constraint Handling Rules Verwendung eines Verlängerungs genannt disjunktiven Constraint Handling Rules oder CHR codiert werden.

Bottom-up-Bewertung

Die Standardstrategie der Auswertung der Logikprogramme ist von oben nach unten und Tiefen: von dem Ziel, eine Anzahl von Klauseln als möglicherweise in der Lage, das Ziel nachzuweisen identifiziert und Rekursion über die Literale ihrer Körper durchgeführt wird. Eine alternative Strategie ist es, aus den Tatsachen starten und Klauseln, neue Tatsachen abzuleiten; Diese Strategie wird von unten nach oben bezeichnet. Es gilt als besser als die von oben nach unten ein, wenn das Ziel ist, dass der Herstellung aller Folgen eines bestimmten Programms, anstatt beweist ein einziges Ziel. Insbesondere finden Sie alle Folgen eines Programms in der Standard-Top-down- und Tiefen Weise möglicherweise nicht beenden, während die Bottom-up-Evaluierungsstrategie beendet.

Die Bottom-up-Evaluierungsstrategie hält den Sachverhalt so weit bei der Auswertung erwiesen. Dieses Set ist zunächst leer. Mit jedem Schritt werden neue Tatsachen, indem eine Programmklausel zu den vorhandenen Fakten abgeleitet und werden zu dem Satz hinzugefügt. Zum Beispiel kann die Bottom-up-Bewertung des folgenden Programms erfolgt in zwei Schritten:

Der Satz von Folgen ist zunächst leer. Bei dem ersten Schritt, ist der einzige Abschnitt, dessen Körper nachgewiesen werden kann, und ist daher mit dem aktuellen Satz von Folgen zugegeben. In der zweiten Stufe, da bewiesen ist, wobei der zweite Satz verwendet werden kann und wird auf die Folgen zugegeben. Da keine andere Konsequenz aus bewiesen werden, beendet die Ausführung.

Der Vorteil des Bottom-up-Evaluierung über die von oben nach unten ist, dass Zyklen von Ableitungen nicht eine Endlosschleife zu erzeugen. Dies liegt daran, das Hinzufügen einer Folge mit dem aktuellen Satz von Folgen, die bereits enthält er keine Wirkung. Als Beispiel wird ein drittes Klausel der obigen Programm erzeugt einen Zyklus von Ableitungen in der Top-down-Bewertung:

Während beispielsweise die Auswertung aller Antworten auf das Ziel, die Top-down-Strategie würde die folgenden Ableitungen produzieren:

Mit anderen Worten, die einzige Folge wird zuerst der Algorithmus Zyklen über Ableitungen, die jede andere Antwort produzieren nicht erzeugt, aber dann. Generell ist bei der Top-down-Evaluierungsstrategie kann Zyklus über mögliche Herleitungen, möglicherweise, wenn andere, die vorhanden sind.

Der Bottom-up-Strategie nicht den gleichen Nachteil, als Folgen, die bereits abgeleitet wurden keine Auswirkungen. Auf dem obigen Programm startet der Bottom-up-Strategie, das Hinzufügen zu dem Satz von Folgen; in dem zweiten Schritt verwendet wird, um abzuleiten; in dem dritten Schritt nur Tatsachen aus den aktuellen Folgen abgeleitet werden können, sind, und, die jedoch bereits in dem Satz von Folgen. Als Ergebnis wird der Algorithmus.

In dem obigen Beispiel, waren die einzigen gebrauchte Fakten Boden Literale. Im allgemeinen wird jede Klausel, das nur Beschränkungen in den Körper als eine Tatsache. Zum Beispiel wird eine Bestimmung als Tatsache angesehen ebenso. Diese erweiterte Definition von Tatsachen, können einige Fakten äquivalente während syntaktisch nicht gleich sein. Beispielsweise entspricht und beide äquivalent sind. Um dieses Problem zu lösen, werden Fakten Übersetzungeine normale Form, in der der Kopf enthält ein Tupel aller-verschiedenen Variablen; zwei Tatsachen sind dann gleich, wenn ihre Körper äquivalent zu den Variablen des Kopfes, das heißt, sind die Sätze von Lösungen, die gleiche, wenn auf diese Variablen beschränkt.

Wie beschrieben, hat der Bottom-up-Ansatz den Vorteil, nicht bedenkt Folgen, die bereits abgeleitet worden. Jedoch kann es immer noch Folgen, die durch die bereits abgeleitet zwar nicht gleich einer von ihnen zur Folge abzuleiten. Als ein Beispiel ist die Bottom-up-Bewertung der folgende Programm unendlich:

Die Bottom-up-Auswertungsalgorithmus erste stammt das gilt für und. Im zweiten Schritt, die erste Tatsache mit der dritten Klausel können zur Ableitung. Im dritten Schritt wird abgeleitet, usw. Allerdings sind diese Tatsachen bereits durch die Tatsache, daß für jede nichtnegative stimmt mit sich gebracht. Dieser Nachteil kann durch Prüfen auf entailment Tatsachen, die mit dem aktuellen Satz von Folgen hinzugefügt werden überwunden werden. Wenn die neue Folge ist bereits durch den Satz zur Folge, ist jedoch nicht hinzugefügt. Seit Tatsachen werden als Klauseln möglicherweise mit "lokalen Variablen" gespeichert ist, wird über die Folgerungsvariablen ihrer Köpfe beschränkt.

Concurrent Einschränkung Logikprogrammierung

Die gleichzeitige Versionen Einschränkung Logikprogrammierung sind bei der Programmierung gleichzeitig ablaufenden Prozessen statt sie zu lösen Constraint Satisfaction Probleme. Tore Einschränkung Logikprogrammierung werden gleichzeitig ausgewertet; eine konkurrierende Prozeß wird daher als der Auswertung eines Ziel durch den Interpretierer programmiert.

Syntaktisch sind gleichzeitige Einschränkungen Logikprogrammen ähnlich wie nicht-gleichzeitigen Programmen, die einzige Ausnahme ist, dass Klauseln enthält Wachen, die Einschränkungen, die die Anwendbarkeit der Klausel unter Umständen blockieren können, sind. Semantisch unterscheidet gleichzeitige Einschränkung Logikprogrammierung von seinem nicht-konkurrierende Versionen, da ein Ziel Evaluierung soll eine gleichzeitige Prozess und nicht als Suche nach einer Lösung für ein Problem zu realisieren. Vor allem wirkt sich dieser Unterschied, wie der Interpreter verhält, wenn mehr als ein Abschnitt gilt: nicht gleichzeitige Einschränkung Logikprogrammierung rekursiv versucht alle Klauseln; gleichzeitige Einschränkung Logikprogrammierung wählt nur eine. Dies ist der offensichtlichste Effekt einer beabsichtigten Direktionalität der Interpreter, der nie revidiert Wahl es zuvor gefunden hat. Andere Effekte hierfür sind die semantischen Möglichkeit, ein Ziel, das nicht bewiesen werden kann, während die gesamte Auswertung nicht versagt werden, und eine bestimmte Art und Weise für die Gleichsetzung ein Ziel und eine Klausel Kopf.

Anwendungen

Constraint-Logikprogrammierung hat zu einer Reihe von Bereichen wie Bauwesen, Maschinenbau, digitale Schaltungsverifikation, automatisierte Flugzeiten, Flugverkehrskontrolle, Finanzen und anderen angewandt.

Geschichte

Constraint-Logikprogrammierung wurde von Jaffar und Lassez 1987 führten sie verallgemeinert die Beobachtung, dass der Begriff Gleichungen und disequations von Prolog II waren eine spezifische Form von Einschränkungen und verallgemeinert diese Idee auf beliebige Einschränkung Sprachen. Die ersten Implementierungen des Konzepts waren Prolog III, CLP und CHIP.

(0)
(0)
Kommentare - 0
Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha