Haskell zur Constraint-Programmierung HaL8



Ähnliche Dokumente
4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Zeichen bei Zahlen entschlüsseln

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Professionelle Seminare im Bereich MS-Office

Semantik von Formeln und Sequenzen

Data Mining: Einige Grundlagen aus der Stochastik

Grundbegriffe der Informatik

Kapitalerhöhung - Verbuchung

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt 4

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Grammatiken. Einführung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Rekursionen. Georg Anegg 25. November Methoden und Techniken an Beispielen erklärt

IRF2000 Application Note Lösung von IP-Adresskonflikten bei zwei identischen Netzwerken

Kapiteltests zum Leitprogramm Binäre Suchbäume

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Theorie der Informatik

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

1 Mathematische Grundlagen

Formeln. Signatur. aussagenlogische Formeln: Aussagenlogische Signatur

Festigkeit von FDM-3D-Druckteilen

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Einführung in. Logische Schaltungen

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Kapitel 5: Dynamisches Programmieren Gliederung

Erfüllbarkeit und Allgemeingültigkeit

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Übungsbuch für den Grundkurs mit Tipps und Lösungen: Analysis

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Individuelle Formulare

AZK 1- Freistil. Der Dialog "Arbeitszeitkonten" Grundsätzliches zum Dialog "Arbeitszeitkonten"

10 Erweiterung und Portierung

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Logik für Informatiker

Eine Logikschaltung zur Addition zweier Zahlen

How-to: Webserver NAT. Securepoint Security System Version 2007nx

How to do? Projekte - Zeiterfassung

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Informationsblatt Induktionsbeweis

Grundlagen der Künstlichen Intelligenz

SJ OFFICE - Update 3.0

11.3 Komplexe Potenzreihen und weitere komplexe Funktionen

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

3. LINEARE GLEICHUNGSSYSTEME

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)

Einfügen von Bildern innerhalb eines Beitrages

Task: Nmap Skripte ausführen

Rente = laufende Zahlungen, die in regelmäßigen Zeitabschnitten (periodisch) wiederkehren Rentenperiode = Zeitabstand zwischen zwei Rentenzahlungen

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus:

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Die Lernumgebung des Projekts Informationskompetenz

Binäre Suchbäume (binary search trees, kurz: bst)

Kurzeinweisung. WinFoto Plus

Dokumentation. estat Version 2.0

Übung Theoretische Grundlagen

Nachkalkulation. Hat sich das Objekt CVO Auxilium hilden im Juni rentiert?

BERECHNUNG DER FRIST ZUR STELLUNGNAHME DES BETRIEBSRATES BEI KÜNDIGUNG

Korrelation (II) Korrelation und Kausalität

Planen mit mathematischen Modellen 00844: Computergestützte Optimierung. Autor: Dr. Heinz Peter Reidmacher

Lineare Gleichungssysteme

Physik & Musik. Stimmgabeln. 1 Auftrag

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

Abschlussprüfung Realschule Bayern II / III: 2009 Haupttermin B 1.0 B 1.1

9.2. DER SATZ ÜBER IMPLIZITE FUNKTIONEN 83

Darstellungsformen einer Funktion

2.11 Kontextfreie Grammatiken und Parsebäume

Strategie & Kommunikation. Trainingsunterlagen TYPO3 Version 4.3: News Stand

Petri-Netze / Eine Einführung (Teil 2)

Theoretische Grundlagen der Informatik WS 09/10

a n auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:

Klausur Informationsmanagement

Divergenz 1-E1. Ma 2 Lubov Vassilevskaya

Einleitende Bemerkungen

Robot Karol für Delphi

SEPA Lastschriften. Ergänzung zur Dokumentation vom Workshop Software GmbH Siemensstr Kleve / /

Programmiersprachen und Übersetzer

Installation der SAS Foundation Software auf Windows

5.12. Variable Temperaturgradienten über dem Scheibenzwischenraum

Hauptprüfung Abiturprüfung 2015 (ohne CAS) Baden-Württemberg

FRAGE 39. Gründe, aus denen die Rechte von Patentinhabern beschränkt werden können

Beschreibung und Bedienungsanleitung. Inhaltsverzeichnis: Abbildungsverzeichnis: Werkzeug für verschlüsselte bpks. Dipl.-Ing.

Wann ist eine Software in Medizinprodukte- Aufbereitungsabteilungen ein Medizinprodukt?

Wir gehen aus von euklidischen Anschauungsraum bzw. von der euklidischen Zeichenebene. Parallele Geraden schneiden einander nicht.

Rekursionen (Teschl/Teschl )

Übung 9 - Lösungsvorschlag

Java: Vererbung. Teil 3: super()

Markovketten. Bsp. Page Ranking für Suchmaschinen. Wahlfach Entscheidung unter Risiko und stat. Datenanalyse

Video Unlimited -Nutzungsbeschränkungen

Kurzanweisung für Google Analytics

Wie Sie mit Mastern arbeiten

Technical Note Nr. 101

Outlook Vorlagen/Templates

Hier ist der tatsächliche Aufenthaltsort anzugeben, unbeachtlich davon ob der Ehemann dort beim

Transkript:

Haskell zur Constraint-Programmierung HaL8 Alexander Bau 2. Mai 2013 Wir benutzen eine Teilmenge von Haskell zur Spezifikation von Constraint- Systemen über Haskell-Datentypen. Ein Constraint-Compiler erzeugt zur Übersetzungszeit aus einem parametrisierten Constraint-System ein Haskell- Programm, welches zur Laufzeit für einen gegebenen Parameter eine aussagenlogische Formel generiert. Dabei werden rekursive Datentypen geeignet in ihrer Größe beschränkt, um eine endlich große Formel zu garantieren. Zu dieser Formel bestimmt ein SAT-Solver eine erfüllende Belegung, aus der schließlich eine erfüllende Belegung des ursprünglichen Constraint-Systems rekonstruiert wird. Es wird die Transformation von algebraischen Datentypen und Pattern-Matches auf diesen Typen diskutiert. 1 Einleitung In der Constraint-Programmierung sind für Constraint-Systeme f der Form f : U B solche Belegungen u U von Interesse, für die f(u) = gilt; wobei B = {, }. Es existieren effiziente Suchverfahren für verschiedene Mengen U, um solche erfüllenden Belegungen zu finden [3, 1]. Der wesentliche Vorteil der Constraint- Programmierung besteht in der Trennung der Problemspezifikation, in Form eines Constraint-Systems, von jenen problemunabhängigen Suchverfahren. Dieser Beitrag beschäftigt sich mit der Möglichkeit, eine Teilmenge von Haskell (Haskell ) als Spezifikationssprache für Constraint-Systeme über Haskell -Daten zu nutzen. Dadurch kann Haskell als etablierte Programmiersprache in einem anderen Programmierparadigma genutzt werden. Spracheigenschaften wie algebraische Datentypen, rekursive Funktionen, Pattern-Matching und polymorphe Typen höherer Ordnung erlauben eine wesentlich ausdrucksstärkere Spezifikation von Constraint-Systemen gegenüber bisherigen Ansätzen, z.b. SAT und SMT. Ein Constraint-Compiler übersetzt ein über P parametrisiertes Constraint-System in Haskell vom Typ f : P U B in eine aussagenlogische Formel F, die von einem abau@imn.htwk-leipzig.de

SAT-Solver gelöst werden kann. Da die Erfüllbarkeit aussagenlogischer Formeln ein erfolgreich erforschtes Gebiet ist, existieren laufzeiteffiziente SAT-Solver wie Minisat 1. Damit erlaubt unserer Ansatz sowohl eine natürliche Spezifikation des Constraint-Systems in einer etablierten Sprache, als auch dessen Lösung durch schnelle Suchverfahren. Schließlich kann eine erfüllende Belegung u U für f aus einer erfüllenden Belegung von F rekonstruiert werden, so dass f(p, u) = gilt. Beispiel 1 Das Beispiel zeigt ein Constraint-System f : Nat Nat B über Peano-Zahlen: data Bool = data Nat = Z S Nat eqnat x y = case x of Z - > case y of Z - > S y -> S x -> case y of Z -> S y -> eqnat x y add x y = case x of Z -> y S x -> S ( add x y) f p u = eqnat p ( add u (S (S Z ))) Der Übersetzungsprozess ist zweistufig: 1. zunächst wird aus einem Constraint-System f : P U B in Haskell ohne Kenntnis des Parameter zur Übersetzungszeit eine Haskell-Funktion f : P (B n B), n N erzeugt. 2. f wird zur Laufzeit auf einen Parameter p P angewendet. Die resultierende aussagenlogische Formel F kann schließlich mit einem externen SAT-Solver gelöst werden. Eine erfüllende Belegung für f wird aus der erfüllenden Belegung für F rekonstruiert. Ein wesentliches Problem bei der Übersetzung ist die Beschränkung auf einen endlichen Bereich von U. Da rekursive Haskell -Datentypen unendlich große Mengen repräsentieren, müssen Rekursionen geeignet in ihrer Tiefe beschränkt werden. Wir bearbeiten dieses Problem unter Angabe eines Allokators für die Elemente U als Teil der Parametermenge P. 1 http://minisat.se

2 Vergleich zu vorhandenen Arbeiten Bibliotheken wie Gecode 2 oder Satchmo 3 ermöglichen die explizite Konstruktion von Finite-Domain-Constraint-Systemen. Dadurch ist die Beschränkung des Problems auf einen endlichen Bereich kein Problem des Werkzeugs, sondern der Spezifikation des Constraint-Systems selbst. Der Nachteil gegenüber dem hier vorgestellten Ansatz besteht in der Notwendigkeit, ein neues Werkzeug bzw. eine neue Sprache zu erlernen, um das Constraint-System zu spezifizieren. Haskell wird in anderen Bereichen bereits erfolgreich als Spezifikationssprache eingesetzt, so z.b. für digitale Schaltungen [2, 4]. 3 Datenübersetzung Zur Übersetzung eines Haskell -Constraint-Systems f in eine aussagenlogische Formel ist es notwendig, die Daten, auf denen f operiert, als Menge von Booleschen Variablen auszudrücken. Definition 1 Eine Haskell -Datendeklaration hat die folgende Form: c v 1... v m = c 1 t 11 t 12... t 1n1... c k t k1 t k2... t knk wobei c einen m-stelligen Typkonstruktor benennt v i, 0 i m die Typvariablen von c benennt c i, 1 i k die Konstruktoren von c benennt n i 0, 1 i k gleich der Anzahl der Konstruktorargumente von c i ist t ij, 1 i k, 0 j n i der Typ des j-ten Arguments des i-ten Konstruktors ist Dabei gilt, dass die in den Konstruktorargumenten vorkommenden Variablen durch die Typvariablen v 1... v m gebunden sein müssen. Bei der Übersetzung von Haskell -Daten eines Types, dessen Typdeklaration aus k Konstruktoren besteht, werden die Konstruktoren mit log k 2 Booleschen Variablen x i entsprechend ihrer Reihenfolge in der Typdeklaration durch eine Binärkodierung dieser Variablen nummeriert. Die Booleschen Variablen bezeichnen wir als Flags. Jedes Konstruktorargument wird rekursiv mit diesem Schema übersetzt. Abbildung 1 illustriert einige beispielhafte Übersetzungen üblicher Datentypen. 2 http://www.gecode.org 3 https://github.com/jwaldmann/satchmo

Bool = Abbildung 1: Einige Datenübersetzungen Pair = Pair Bool Bool Either = [ ] Left Bool Right Bool [x 1 ] Pair Left Right [x] [x 1 ] [x 2 ] [x 2 ] [x 3 ] 4 Programmübersetzung In Haskell können durch Pattern-Matching die Konstruktorargumente eines Datums extrahiert werden. Da zur Übersetzungszeit der äußerste Konstruktor des untersuchten Ausdrucks möglicherweise nicht bekannt ist, muss die Programmübersetzung für alle Zweige des Pattern-Matches stattfinden. Definition 2 Wir nehmen einem Pattern-Match der Form c 1 v 11 v 12... v 1n1 b 1 r = case e of... c k v k1 v k2... v knk b k an, wobei die Konstruktoren c 1,..., c k vollständig in der Reihenfolge ihrer Deklaration vorkommen die Konstruktorargumente durch Typvariablen t ij gebunden werden b 1,..., b k die Zweige des Pattern-Matches bezeichnen und vom selben Typ sind Abhängig von den Flags f der Übersetzung von e wird die i-te, im Resultat r vorkommende, Boolesche Variable r i durch eine Konjunktion vom k Implikationen kodiert:, wobei r i (f 10? = 0 b1i ) (f 10? = 1 b2i ) (f 10? = k 1 bki ) f 10 die Interpretation der Flags f der Übersetzung von e im Dezimalsystem? darstellt. f 10 = j gilt also genau dann, wenn die Flags f den j + 1-ten Konstruktoren indexieren.

b ji die i-te Variable im j-ten Zweig des Pattern Matches bezeichnet (s. Nummerierung der Variablen in Abb. 1) Beispiel 2 Wir betrachten folgenden Pattern-Match: { x r = case e of y, wobei e vom Typ Bool und x, y vom Typ Either sind. Entsprechend der Nummerierung der Flags in Abb. 1 sei e i (bzw. x i und y i ) das i-te Flag der Übersetzung von e (bzw. x und y). Die Übersetzung des Resultates r hat nach Definition 2 schließlich folgende Struktur: [(e 1 x 1 ) (e 1 y 1 )] Left [(e 1 x 2 ) (e 1 y 2 )] Right [(e 1 x 3 ) (e 1 y 3 )] 5 Ausblick Zur effizienten Übersetzung von Haskell -Programmen sind Optimierungen nötig. Diese basieren auf der Annahme, dass Formeln mit weniger Klauseln und Variablen in kürzerer Zeit vom Solver gelöst werden können. Beispielsweise können Haskell -Daten kompakter kodiert werden, in dem Konstruktorargumente überlappt werden. Ebenso ist die Übersetzung von Ausdrücken, die ausschließlich von bekannten Daten abhängen, nicht sinnvoll, da diese ohne Hilfe des SAT-Solvers ausgewertet werden können. In einem Constraint-Compiler ist also die Unterscheidung zwischen bekannten Daten und unbekannten Daten wesentlich. Weiterhin ist die Speicherung und Wiederverwendung von bereits generierten Teilformeln sinnvoll. Literatur [1] Krzysztof R. Apt. Principles of constraint programming. Cambridge University Press, 2003. [2] Per Bjesse, Koen Claessen, Mary Sheeran, and Satnam Singh. Lava: Hardware design in haskell. In ICFP, pages 174 184, 1998. [3] Petra Hofstedt and Armin Wolf. Einführung in die constraint-programmierung, 2007. [4] John Matthews, Byron Cook, and John Launchbury. Microprocessor specification in hawk. In ICCL, pages 90 101, 1998.