What are the best uses of Logic Programming?

17,717

Solution 1

Prototyping.

Prolog is dynamic and has been for 50 years. The compiler is liberal, the syntax minimalist, and "doing stuff" is easy, fun and efficient. SWI-Prolog has a built-in tracer (debugger!), and even a graphical tracer. You can change the code on the fly, using make/0, you can dynamically load modules, add a few lines of code without leaving the interpreter, or edit the file you're currently running on the fly with edit(1). Do you think you've found a problem with the foobar/2 predicate?

?- edit(foobar).

And as soon as you leave the editor, that thing is going to be re-compiled. Sure, Eclipse does the same thing for Java, but Java isn't exactly a prototyping language.

Apart from the pure prototyping stuff, Prolog is incredibly well suited for translating a piece of logic into code. So, automatic provers and that type of stuff can easily be written in Prolog.

The first Erlang interpreter was written in Prolog - and for a reason, since Prolog is very well suited for parsing, and encoding the logic you find in parse trees. In fact, Prolog comes with a built-in parser! No, not a library, it's in the syntax, namely DCGs.

Prolog is used a lot in NLP, particularly in syntax and computational semantics.

But, Prolog is underused and underappreciated. Unfortunately, it seems to bear an academic or "unusable for any real purpose" stigma. But it can be put to very good use in many real-world applications involving facts and the computation of relations between facts. It is not very well suited for number crunching, but CS is not only about number crunching.

Solution 2

Since Prolog = Syntactic Unification + Backward chaining + REPL,

most places where syntactic unification is used is also a good use for Prolog.

Syntactic unification uses

  • AST transformations
  • Type Inference
  • Term rewriting
  • Theorem proving
  • Natural language processing
  • Pattern matching
  • Combinatorial test case generation
  • Extract sub structures from structured data such as an XML document
  • Symbolic computation i.e. calculus
  • Deductive databases
  • Expert systems
  • Artificial Intelligence
  • Parsing
  • Query languages

Solution 3

Constraint Logic Programming (CLP)

Many very good and well-suited use cases of logic programming have already been mentioned. I would like to complement the existing list with several tasks from an extremely important application area of logic programming:

Logic programming blends seamlessly, more seamlessly than other paradigms, with constraints, resulting in a framework called Constraint Logic Programming.

This leads to dedicated constraint solvers for different domains, such as:

  • CLP(FD) for integers
  • CLP(B) for Booleans
  • CLP(Q) for rational numbers
  • CLP(R) for floating point numbers.

These dedicated constraint solvers lead to several important use cases of logic programming that have not yeen been mentioned, some of which I show below.

When choosing a Prolog system, the power and performance of its constraint solvers are often among the deciding factors, especially for commercial users.

CLP(FD) — Reasoning over integers

In practice, CLP(FD) is one of the most imporant applications of logic programming, and is used to solve tasks from the following areas, among others:

  • scheduling
  • resource allocation
  • planning
  • combinatorial optimization

See for more information and several examples.

CLP(B) — Boolean constraints

CLP(B) is often used in connection with:

  • SAT solving
  • circuit verification
  • combinatorial counting

See .

CLP(Q) — Rational numbers

CLP(Q) is used to solve important classes of problems arising in Operations Research:

  • linear programming
  • integer linear programming
  • mixed integer linear programming

See .

Solution 4

One of the things Prolog gives you for free is a backtracking search algorithm -- you could implement it yourself, but if your problem is best solved by having that algorithm available, then it's nice to use it.

The two things I've seen it be good at is mathematical proofs and natural language understanding.

Solution 5

Prolog is ideal for non-numeric problems. This article gives a few examples of some applications of Prolog and it might help you understand the type of problems that it might solve.

Share:
17,717
mbac32768
Author by

mbac32768

Updated on June 30, 2022

Comments

  • mbac32768
    mbac32768 almost 2 years

    By Logic Programming I mean the a sub-paradigm of declarative programming languages. Don't confuse this question with "What problems can you solve with if-then-else?"

    A language like Prolog is very fascinating, and it's worth learning for the sake of learning, but I have to wonder what class of real-world problems is best expressed and solved by such a language. Are there better languages? Does logic programming exist by another name in more trendy programming languages? Is the cynical version of the answer a variant of the Python Paradox?

  • wnoise
    wnoise over 15 years
    I don't see how it makes solving complicated puzzles harder, FWIW.
  • Brian
    Brian over 15 years
    It is often useful to take a fully imperative approach (complete with state and the like) for at least part of the solution. You can fake it with Prolog, but it's often easier in other languages. Especially when it's time to optimize. A built in search is less helpful once thinks get crazy.
  • Laurence Chen
    Laurence Chen over 5 years
    A rule to explain new idea efficiently to someone who do not understand is to explain with the keywords/ideas that are already understood by someone. This answer uses the keyword 'backtracking search algorithm', which I think is much more ordinary and common compared to 'unification', etc. I get better understanding from this answer.