Logische Programmierung

Logische Programmierung

Logische Programmierung (Prädikative Programmierung) ist ein Programmierparadigma, das auf der mathematischen Logik beruht. Anders als bei der imperativen Programmierung besteht ein Logik-Programm nicht aus einer Folge von Anweisungen, sondern aus einer Menge von Axiomen, welche hier als eine reine Ansammlung von Fakten oder Annahmen zu verstehen sind. Stellt der Benutzer eines Logik-Programms eine Anfrage, so versucht der Interpreter die Lösungsaussage allein aus den Axiomen zu berechnen.

Dazu werden eine Menge von so genannten Regeln und Anweisungen, die der Syntax gemäß aufgebaut sind, zusammen mit der Information, welche Lösungsmethode vorgesehen ist, in den Programmcode eingefügt. Logische Programmiersprachen gehören zu den deklarativen Programmiersprachen und haben ihre Ursprünge im Forschungsgebiet Künstliche Intelligenz.

In einem imperativen Programm wird genau beschrieben, wie und in welcher Reihenfolge ein Problem zu lösen ist. Im Gegensatz dazu wird in einem logikbasierten Programm idealerweise nur beschrieben, was gilt. Das Wie ist bereits durch die Lösungsmethode vorgegeben. Die Lösung wird aus den vorhandenen Regeln hergeleitet. Meistens wird schon nur eine Menge von Regeln als „Programm“ bezeichnet, wenn klar ist, welche Lösungsmethode dazugehört: Nämlich die (einzige) in der vom regelbasierten System bereitgestellten Inferenzmaschine verwirklichte.

Die bekannteste logische Programmiersprache ist Prolog.

Inhaltsverzeichnis

Erläuterungen

Die Syntax gibt an, wie Regeln geschrieben werden müssen, damit der Computer sie verwenden kann. Regeln sind „Falls-dann“-Aussagen und Fakten, die das Wissen zu einem Problemkreis beschreiben. Daneben gibt es oft noch spezielle Konstrukte, um die Lösungsmethode zu beeinflussen. Am bekanntesten ist die Rückwärtsabschneidung (engl. cut) in Prolog, womit z. B. „Falls-dann-außer“-Regeln modelliert werden.

Einem regelbasierten Programm kann man Fragen (engl. query) stellen, indem man ein Ziel (engl. goal) vorgibt. Das entspricht grob gesehen dem Aufruf einer Funktion oder Prozedur in imperativen Programmiersprachen.

Die Lösungsmethode gibt vor, wie die Inferenzmaschine die Regeln (den Programmtext) interpretiert, um die Frage zu beantworten. In Prolog wird eine Tiefensuche (engl. depth first) mit Unifikation und Backtracking verwendet. Jedoch sind auch andere Methoden geeignet und werden je nach Anwendungsfall auch eingesetzt.

Besonderheiten logischer Programmiersprachen

Logikorientierte Programmiersprachen haben ungewöhnliche Eigenschaften (Backtracking, Unifikationsalgorithmen), die sie für gewisse Arten von Problemen prädestiniert, die mit anderen Programmiersprachen nur sehr schwer zu lösen sind.

Da logische Programmiersprachen zu den deklarativen Programmiersprachen gehören, treffen deren Besonderheiten auch hier zu.


Beispiel

Dieses Beispiel ist in natürlicher Sprache formuliert, um das Prinzip aufzuzeigen. Die konkrete Anwendung kann man bei der Programmiersprache Prolog ersehen.

Fakten:

Lucia ist die Mutter von Minna.
Lucia ist die Mutter von Klaus.
Minna ist die Mutter von Nadine.

Regel:

Falls X ist die Mutter von Y und Y ist die Mutter von Z Dann X ist die Großmutter von Z.

Frage/Ziel:

Wer ist die Großmutter von Nadine?

Antwort des Computers, Folgerung aus den Fakten und Regeln:

Lucia

Dieses unspektakuläre Beispiel kann man gedanklich leicht um andere Verwandtschaftsbeziehungen erweitern.

Einsatzgebiete

Typische Einsatzgebiete sind Simulatoren, Generatoren, sowie Systeme zur Diagnose und Prognose. Anwendungen der Logikprogrammierung finden sich beispielsweise in folgenden Bereichen:

Beispiele außerhalb der Informatik:

  • Wirtschaft und Handel: Produktkonfigurator, Routenplaner, Marktsimulation (z. B. zur Preisfindung)
  • Medizin: Diagnosesysteme
  • Mathematik: Theorembeweiser und Theoremgeneratoren
  • Naturwissenschaften: Auswerten und Abfragen geologischer und meteorologischer Datensammlungen, Simulatoren und Vorhersagesysteme für Wetter, Erdbeben und Wasserstände
  • Technik: CAD, CAM
  • Soziologie
  • Psychologie
  • Linguistik: Übersetzen natürlicher Sprache, Erkennen und Verstehen gesprochener Sprache
  • und viele weitere

Auf dem Gebiet der Informatik und Computertechnik:

  • Computertechnik: Design und Simulation von Prozessoren und Schaltkreisen
  • Künstliche Intelligenz: Forschung, Expertensysteme, Übersetzen natürlicher Sprache, Erkennen gesprochener Sprache, Semantisches Web
  • Compilerbau
  • Computerspiele: „intelligentes“ Verhalten simulierter Mitspieler, Taktik, Strategie
  • parallele Datenverarbeitung
  • Dokumentenmanagement: Strukturierte Dokumente verarbeiten, Semantisches Web, XSLT
  • Rapid Prototyping

Siehe auch

Weblinks

  • Antwortmengenprogrammierung (PDF) – knapper Überblick von der Entwicklung der klassischen Logik hin zur logischen Programmierung (110 kB)
  • XSB (englisch) Logik-System und Deduktive Datenbank (Open Source)
  • The Mercury Project (englisch) funktional-logische Programmiersprache

Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • logische Programmierung — Art der ⇡ Programmierung, die v.a. in der ⇡ Künstlichen Intelligenz, speziell im Bereich der ⇡ Wissensrepräsentation, große Bedeutung besitzt. L.P. basiert auf der Prädikatenlogik. Bedeutendste Programmiersprache: Prolog …   Lexikon der Economics

  • Induktive logische Programmierung — Die Induktive logische Programmierung (ILP) ist ein Bereich des maschinellen Lernens, in dem Verfahren zur automatischen Erstellung von logischen Programmen aus Beispielen untersucht werden. Damit ähneln ILP Verfahren der allgemeinen Induktion… …   Deutsch Wikipedia

  • Logische Programmiersprache — Logische Programmierung (Prädikative Programmierung) ist ein Programmierparadigma, das auf der mathematischen Logik beruht. Anders als bei der imperativen Programmierung besteht ein Logik Programm nicht aus einer Folge von Anweisungen, sondern… …   Deutsch Wikipedia

  • Regelbasierte Programmierung — Logische Programmierung (Prädikative Programmierung) ist ein Programmierparadigma, das auf der mathematischen Logik beruht. Anders als bei der imperativen Programmierung besteht ein Logik Programm nicht aus einer Folge von Anweisungen, sondern… …   Deutsch Wikipedia

  • Constraint-Programmierung — In diesem Artikel oder Abschnitt fehlen folgende wichtige Informationen: Es fehlen die Domains und Beispiele für Programmiersprachen, die constraintbasiertes Programmieren erleichern. Du kannst Wikipedia helfen, indem du sie recherchierst und… …   Deutsch Wikipedia

  • Programmierbare logische Schaltung — Eine programmierbare logische Schaltung, häufig auch in deutschsprachiger Fachliteratur als Programmable Logic Device oder kurz PLD bezeichnet, ist ein elektronisches Bauelement für integrierte Schaltkreise. Anders als logische Gatter, die eine… …   Deutsch Wikipedia

  • Aspekt-orientierte Programmierung — Die Artikel Aspektorientierte Programmierung und Cross Cutting Concern überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zu vereinigen. Beteilige dich dazu an der Diskussion über diese Überschneidungen.… …   Deutsch Wikipedia

  • Aspektorientierte Programmierung — (AOP) ist ein Programmierparadigma für die Objektorientierte Programmierung, um generische Funktionalitäten über mehrere Klassen hinweg zu verwenden (Cross Cutting Concern). Logische Aspekte eines Anwendungsprogramms werden dabei von der… …   Deutsch Wikipedia

  • Programmierbare logische Anordnung — Grundprinzip eines PLA Eine programmierbare logische Anordnung, häufig in deutschsprachiger Fachliteratur als Programmable Logic Array oder kurz PLA bezeichnet, ist ein Halbleiterschaltkreis, der aus insgesamt zwei hintereinander geschalteten AND …   Deutsch Wikipedia

  • Normierte Programmierung — Die normierte Programmierung (NP) beschreibt eine standardisierte Ablaufsteuerung eines Datenverarbeitungsprogramms. Sie war in DIN 66220 genormt und wurde mit DIN 66260 in Richtung strukturierte Programmierung weiterentwickelt. Beide Ansätze… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”