180 likes | 197 Views
Explore the foundations of logic programming, formal logics, proofs, and applications. Learn about assignments, proofs, automating logical statements, theorem proving, and the tradeoff between language power and evaluation complexity.
E N D
Formal Logics- Recap • Formulas • w/out quantifiers • Free Variables • Bound Variables • Assignments and satisfaction • Validity and satisfiability
Formal Logics- Proofs • Satisfaction of a formula should be proved • Based on facts (assertions, assumptions, axioms) and inference rules • We are led to a notion of Proof Trees • Why trees? • Proofs are informative! • E.g. assignment to an existential variable
Logic and Programming • Can we automate the process of proving logical statements? • First we need a syntax for defining assertions, rules,.. • Then we need an automated proof system
Logic and Programming • Can we automate the process of proving logical statements? • First we need a syntax for defining facts, rules, statements to-be-proved • Then we need an automated proof system • Note that in principle we may need to use a fact multiple times so no a-priori bound on the proof size
Applications • Theory behind database query languages is based on logic • Querying a database = looking for a satisfying assignment to a query, based on the database facts • Automated Verification • Describe (e.g. Java) program as logical rules, constraints on behavior as query • Automated Theorem Proving
Is it even feasible? • Hilbert’s first decision problem: given a first order logic formula, decide whether it is satisfiable • Undecidable!
Tradeoff • Classic tradeoff between expressive power of languages and complexity of evaluation • There are decidable fragments of First Order Logic which are still quite expressive • SQL, Datalog, Description Logic, Prolog,…
Sub-cases • We start with Relational Logic Programming • Facts are relations between elements, relatively simple rules allow to infer new relations • Then move on to Full Logic Programming • Allow function symbols etc.
Syntax • We consider the Prolog syntax for describing facts and rules • Very similar to the Datalog syntax • Other LP languages use different syntax, but similar ideas
Facts • % Signature: parent(Parent, Child)/2 • % Purpose: Parent is a parent of Child • parent(rina, moshe). • parent(rina, rachel). • parent(rachel, yossi). • parent(reuven, moshe). • % Signature: male(Person)/1 • % Purpose: Person is a male. • male(moshe). • male(yossi). • male(reuven). • % Signature: female(Person)/1 • % Purpose: Person is a female. • female(rina). • female(rachel).
Variables and constants • Variables begin with an upper-case, constants with lower-case • Variables in facts are universally quantified
Rules • father(Dad, Child) :- parent(Dad, Child), male(Dad). • ancestor (Anc, Child) :- parent(Anc, X), ancestor(X, Child).
Queries • ?- father(D,C). • D = reuven, • C = moshe. • ?- father(reuven,moshe). • true. • ?- mother(M,C). • M = rina, • C = moshe ; • M = rina, • C = rachel ; • M = rachel, • C = yossi ; • fail.
Variables • Variables in facts are universally quantified • In queries they are existentially quantified • father(X,Ron). • ?- father(Y,Ron). true