50 likes | 69 Views
Explore how logic programming with Prolog automates computation and proof tasks. Encode statements, implement inference rules, and delve into deductive databases. Learn the syntax similarities with first-order logic and how Prolog interpreter matches queries for results.
E N D
Logic and Programs • Most programs use Boolean expressions over data • Logic statements can express program semantics • I.e., axiomatic semantics • Logic also can be the subject of computation • E.g., automatic deduction systems, theorem-provers • Can handle computation and proof interchangeably • E.g., for restricted forms of logic (Horn Clauses FOL) • Programming languages then can help automate this • E.g., logic programming in Prolog • Mechanisms readily implemented in a functional style • E.g., in Scheme or other functional programming languages
Logic Programs • Logic programming languages (and programming frameworks in other languages like Scheme or C++) • Provide a means for encoding well formed statements • Provide algorithms for implementing inference rules • Sometimes called “deductive databases” • Logic programming systems as logic + control where the logic is specified and the control is automated • To be feasible, however, some restrictions are needed • Widely applicable beyond theorem proving • E.g., programming robots to adapt to situational factors
Intro to Prolog • The most widely used logic programming language • Though lots of logic programming is done in other languages • Syntax is similar to first-order-logic (FOL) syntax • E.g., ancestor(x,y)^ancestor(y,z)→ ancestor(x,z) in FOL is ancestor(X,Z) :- ancestor(X,Y),ancestor(Y,Z) in Prolog • Note: variables are capitalized (or begin with an underscore) • Note: comma indicates conjunction (and) • Also, Prolog uses =< instead of <= for less-than-or equal • Lists are delimited by square brackets in Prolog • E.g., [alice, bob, X] • Can do head|tail matching (as in ML, Haskell) • E.g., [H|T] = [alice, bob, X] gives [alice] and [bob, X]
Prolog Interpreter Environment • Maintains a database of statements and variables • E.g., loaded from a file, and/or entered by the user • User can enter a predicate as a query • E.g., ancestor(bob,alice) • Interpreter matches query to statements in its database • If query is fully bound, will produce a yes or no answer • If query has a variable, will find a satisfactory binding • User also can ask for the result of an expression • E.g., X is 3 + 5, write(X) • Unification in Prolog • A constant only unifies with itself (exact match is required), while a variable may unify via renaming and/or binding • Predicates unify if same signature, and the arguments unify
Today’s Studio Exercises • We’ll code up initial ideas from Scott Chapter 11 • Looking at basic parsing and evaluation mechanisms for propositional and predicate logic, and proceeding from there • Today’s exercises are again in C++ • Please take advantage of the text books and the on-line pages that are linked on the course web site • As always, please ask for help as needed • When done, e-mail your answers to the cse425@seas.wustl.edu course account, with subject line “Logic Programming Studio I”