230 likes | 366 Vues
This comprehensive guide covers the fundamental concepts of Logic Programming with a focus on Prolog. It elucidates the nonprocedural nature of high-level programming languages and automatic deduction for theorem proving. Key topics include predicates, clauses, goals, and control structures essential for effective Prolog programming. The guide explains how Prolog structures data through compound terms and emphasizes subgoal generation with backtracking techniques. Additionally, it addresses the importance of depth-first search, nonmonotonic reasoning, and the practical applications of Logic Programming.
E N D
CSE3302Programming Languages(notes?) Dr. Carter Tiernan Programming Languages
Logic Programming • Nonprocedural programming • Higher-level language allows one to express the same program with less detail • Language does more automatically • Programmer focuses more on what to do not on how to do it Programming Languages
Automatic deduction • Automatic theorem proving • The development of programs that can construct formal proofs of propositions stated in symbolic language • Side effect of proof is construction of a result which demonstrates the proof • Programs expressed in the form of propositions that assert the existence of a desired result Programming Languages
Prolog • Programs are structured like theorems • Clauses that define the problem domain • Facts (database of relationships among atomic individuals) • Goals • Is a fact provable? • Is there an individual satisfying the goal? • Is there a solution satisfying the goal? Programming Languages
Prolog Clauses • Clauses define relationships or “predicates” • Facts or hypotheses parent (charles, harry). • Goals :- grandparent (elizabeth, X). • Conditions or rules grandparent(Y, Z) :- parent (Y,W), parent(W,Z). Programming Languages
Predicates • <head> :- <body> • Predicates • Relationship applied to terms • Relationships • Properties of • Relations among • Terms • Atoms • Variables • Compound terms • Horn clause form Programming Languages
Goals • Executing a goal • Match clauses in predicate by finding an assignment of values to the variables that makes the goal identical to the head of one of the clauses (unification) • Variables are bound (instantiated) to create subgoal • Recursive application and pattern matching Programming Languages
Compound terms • Compound term allows us to describe individuals without naming them • Functor with atoms or variables d(X, plus(U,V), plus(DU,DV)) or d(X, U + V, DU + DV) • Similar to LISP list structure • Acts somewhat like a function but is not a function call Programming Languages
Data structures • No constructors • Data structures are implicitly defined by their properties • Few primitives • Compound terms can provide logical description of structure • Some Prologs allow infix notation for functors Programming Languages
Complex structures • Compound terms represent themselves • Symbolic notations can be defined directly • Good for mathematical relationships • Predicates can define structures • Predicates can replace compound terms • Expressions matched to clauses must exist within the Prolog “closed world” • Good for object-oriented relationships Programming Languages
More data structures • Abstract data types - so abstract they’re only described • Infinite terms - “occurs check” • Representation of ‘infinite’ list is finite • Circular structure Programming Languages
Control Structures • Separation of logic and control • Independent analysis • Order of clauses has no effect on meaning or logic • Control affects generation and unification of subgoals • Efficiency is an issue but not meaning Programming Languages
Subgoal Generation • Top-down • Start from goal; try to reach hypotheses • Recursive approach • Bottom-up • Start with hypotheses; try to reach goal • Iterative approach Programming Languages
Backtracking • Multiple matching clauses may be available • If a failure occurs after a choice point, execution backtracks to the last choice point • Another match is made and execution continues. • Implementation of efficient backtracking is crucial in logic programming Programming Languages
Input / Output Parameters • Goals attempt to satisfy subgoals with whatever value is unified • Parameters are neither inherently input nor output. Which ever is supplied is used as input. • When no parameter values are given, the systems attempts to search for any solution that satisfies the pattern Programming Languages
Searching in Prolog • Depth-first search isspecified • Not pure logic programming • Attempts to satisfy goals in the order written • Will try matching clauses in the order in which they were entered into the DB Programming Languages
Prolog vs. Logic Programming • Interpretation of arithmetic jumps beyond the bounds of strict logic programming unless handled as succ() • Efficiency requires the use underlying hardware support • ‘is’ gives an assignment • Binding forces ordering Programming Languages
Search rationale • Breadth-first • searches paths in parallel • needs exponentially more space than depth-first • Depth-first • Can get caught in infinitely deep search • Programmer is required to order clauses to prevent endless search Programming Languages
Nonmonotonic reasoning • Updateable database • Assert • Retract • Does not match logic • Does match world state changes over time Programming Languages
Cuts • “You have found all the solutions there are; do not bother trying to find any others” • Predicate that always succeeds, but past which you can never backtrack • Used with repeat to provide looping Programming Languages
Higher-order rules • Parameters must be terms not predicates • Logic programming is generally restricted to first-order logic • Resolution algorithm is complete only for first-order logic Programming Languages
Negation • Unsatisfiability - cannot be proved true • Absence of data • Closed world assumption • Conclusions can be drawn about relationships that DO hold • NO conclusions can be made about relationships that do NOT hold • not( -- ) predicate succeeds if -- fails Programming Languages
Equivalence • Term equality • Other types of equivalence cannot be defined • In terms of logical properties • Term inequality requires complete binding for correct interpretation Programming Languages