1 Lecture 6 Logic Programming introduction to Prolog, facts, rules Ras Bodik Shaon Barman Thibaud Hottelier Hack Your Language! CS164: Introduction to.

Slides:



Advertisements
Similar presentations
Artificial Intelligence: Natural Language and Prolog
Advertisements

CS4026 Formal Models of Computation Part II The Logic Model Lecture 1 – Programming in Logic.
First Order Logic Logic is a mathematical attempt to formalize the way we think. First-order predicate calculus was created in an attempt to mechanize.
1 Programming Languages (CS 550) Mini Language Interpreter Jeremy R. Johnson.
Prolog The language of logic. History Kowalski: late 60’s Logician who showed logical proof can support computation. Colmerauer: early 70’s Developed.
Prolog.
LING 388: Language and Computers Sandiway Fong Lecture 5: 9/5.
COMMONWEALTH OF AUSTRALIA Copyright Regulations 1969 WARNING This material has been reproduced and communicated to you by or on behalf of Monash University.
Prolog The language of logic. History Kowalski: late 60’s Logician who showed logical proof can support computation. Colmerauer: early 70’s Developed.
1 Introduction to Prolog References: – – Bratko, I., Prolog Programming.
CSE 3341/655; Part 4 55 A functional program: Collection of functions A function just computes and returns a value No side-effects In fact: No program.
1 Logic Programming. 2 A little bit of Prolog Objects and relations between objects Facts and rules. Upper case are variables. parent(pam, bob).parent(tom,bob).
ML: a quasi-functional language with strong typing Conventional syntax: - val x = 5; (*user input *) val x = 5: int (*system response*) - fun len lis =
About prolog  History  Symbolic Programming Language  Logic Programming Language  Declarative Programming Language.
Chapter 12 - Logic Programming
Constraint Logic Programming Ryan Kinworthy. Overview Introduction Logic Programming LP as a constraint programming language Constraint Logic Programming.
Comp 205: Comparative Programming Languages Declarative Programming Languages Unification Backtracking Lecture notes, exercises, etc., can be found at:
Logic Programming Languages. Objective To introduce the concepts of logic programming and logic programming languages To introduce a brief description.
Lisp. Versions of LISP Lisp is an old language with many variants –LISP is an acronym for List Processing language Lisp is alive and well today Most modern.
Discrete Mathematics Goals of a Discrete Mathematics Learn how to think mathematically 1. Mathematical Reasoning Foundation for discussions of methods.
DEDUCTIVE DATABASE.
Formal Models of Computation Part II The Logic Model
Notes for Chapter 12 Logic Programming The AI War Basic Concepts of Logic Programming Prolog Review questions.
1 Lecture 7 Implementing Prolog unification, backtracking with coroutines Ras Bodik Shaon Barman Thibaud Hottelier Hack Your Language! CS164: Introduction.
COP4020 Programming Languages Logical programming with Prolog Prof. Xin Yuan.
1-1 Introduction Logic programming languages, sometimes called declarative programming languages Express programs in a form of symbolic logic Use a logical.
1 Lecture 7 Implementing Prolog unification, backtracking with coroutines Ras Bodik with Mangpo and Ali Hack Your Language! CS164: Introduction to Programming.
30/09/04 AIPP Lecture 3: Recursion, Structures, and Lists1 Recursion, Structures, and Lists Artificial Intelligence Programming in Prolog Lecturer: Tim.
F28PL1 Programming Languages Lecture 16: Prolog 1.
Logic Programming Module 2AIT202 Website Lecturer: Dave Sharp Room: AG15
Artificial Intelligence Programming in Prolog Lecture 1: An Introduction 23/09/04.
Introduction to Prolog Asst. Prof. Dr. Senem Kumova Metin Revised lecture notes of “Concepts of Programmig Languages, Robert W. Sebesta, Ch. 16”
1.  Provides the ability to access individual assertions. e.g. in Predicate calculus we may say: P denotes “It rained on Tuesday” but in predicate calculus.
First Order Logic Lecture 2: Sep 9. This Lecture Last time we talked about propositional logic, a logic on simple statements. This time we will talk about.
COP4020 Programming Languages Functional Programming Prof. Xin Yuan.
1 Knowledge Based Systems (CM0377) Lecture 3 (Last modified 5th February 2001)
CS Introduction to AI Tutorial 8 Resolution Tutorial 8 Resolution.
CS4026 Formal Models of Computation Part II The Logic Model Lecture 2 – Prolog: History and Introduction.
CS 603: Programming Languages Lecture 25 Spring 2004 Department of Computer Science University of Alabama Joel Jones.
Lecture 9b: Prolog Heshaam Faili University of Tehran The language of logic Concepts Examples.
Dr. Muhammed Al-Mulhem ICS An Introduction to Logical Programming.
Logic Programming Languages Session 13 Course : T Programming Language Concept Year : February 2011.
Logic Programming and Prolog Goal: use formalism of first-order logic Output described by logical formula (theorem) Input described by set of formulae.
603 Database Systems Senior Lecturer: Laurie Webster II, M.S.S.E.,M.S.E.E., M.S.BME, Ph.D., P.E. Lecture 24 A First Course in Database Systems.
603 Database Systems Senior Lecturer: Laurie Webster II, M.S.S.E.,M.S.E.E., M.S.BME, Ph.D., P.E. Lecture 25 A First Course in Database Systems.
1 Implementing Prolog with Coroutines Ras Bodik, Thibaud Hottelier, James Ide UC Berkeley CS164: Introduction to Programming Languages and Compilers Fall.
Introduction to Prolog. Outline What is Prolog? Prolog basics Prolog Demo Syntax: –Atoms and Variables –Complex Terms –Facts & Queries –Rules Examples.
CS 337 Programming Languages Logic Programming I (Logic, Intro to Prolog)
© Kenneth C. Louden, Chapter 12 - Logic Programming Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden.
Propositional Logic Predicate Logic
Milos Hauskrecht (PDF) Hieu D. Vu (PPT) LISP PROGARMMING LANGUAGE.
CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones.
CS 152: Programming Language Paradigms March 12 Class Meeting Department of Computer Science San Jose State University Spring 2014 Instructor: Ron Mak.
Programming Language Concepts Lecture 17 Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Logic Programming.
MB: 26 Feb 2001CS Lecture 11 Introduction Reading: Read Chapter 1 of Bratko Programming in Logic: Prolog.
1 Lecture 6 Logic Programming rule-based programming with Prolog Ras Bodik with Mangpo, Ali Hack Your Language! CS164: Introduction to Programming Languages.
C. Varela1 Logic Programming (PLP 11, CTM 9.1) Terms, Resolution, Unification, Search, Backtracking (Prolog) Relational Computation Model (Oz) Carlos Varela.
CS412/413 Introduction to Compilers Radu Rugina Lecture 13 : Static Semantics 18 Feb 02.
Knowledge Based Information System
1-1 An Introduction to Logical Programming Sept
1 First Order Logic CS 171/271 (Chapter 8) Some text and images in these slides were drawn from Russel & Norvig’s published material.
Introduction to Prolog Asst. Prof. Dr. Senem Kumova Metin Revised lecture notes of “Concepts of Programmig Languages, Robert W. Sebesta, Ch. 16”
COMP 412, FALL Type Systems C OMP 412 Rice University Houston, Texas Fall 2000 Copyright 2000, Robert Cartwright, all rights reserved. Students.
Carlos Varela Rennselaer Polytechnic Institute November 11, 2016
Carlos Varela Rensselaer Polytechnic Institute November 14, 2017
Logic Programming Languages
CSE 3302 Programming Languages
Chapter 2: Prolog (Introduction and Basic Concepts)
Representations & Reasoning Systems (RRS) (2.2)
Presentation transcript:

1 Lecture 6 Logic Programming introduction to Prolog, facts, rules Ras Bodik Shaon Barman Thibaud Hottelier Hack Your Language! CS164: Introduction to Programming Languages and Compilers, Spring 2012 UC Berkeley

Today Introduction to Prolog Assigned reading: a Prolog tutorial (link at the end) Today is no-laptop Thursday but you can use laptops to download SWI Prolog and solve excercises during lecture. 2

Software Software: download SWI Prolog Usage: ?- [likes]. # loads file likes.pl Content of file likes.pl: likes(john,mary). likes(mary,jim). After loading, we can ask query: ?- likes(X,mary). #who likes mary? X = john ; # type semicolon to ask “who else?” false. # no one else 3

Facts and queries Facts: likes(john,mary). likes(mary,jim). Boolean queries ?- likes(john,jim). false Existential queries ?- likes(X,jim). mary 4

Terminology Ground terms (do not contain variables) father(a,b).# fact (a is father of b) ?- father(a,b).# query (is a father of b?) Non-ground terms (contain variables) likes(X,X).# fact: everyone likes himself ?- likes(X,mary).# query: who likes mary? Variables in facts are universally quantified for all X, it is true that X likes X Variables in queries are existentially quantified does there exist an X such that X likes mary? 5

Generalization (a deduction rule) Facts father(abraham,isaac). Query ?- father(abraham,X). # this query is a generalization above fact We answer by finding a substitution {X=isaac}. 6

Instantiation (another deduction rule) Rather than writing plus(0,1,1). plus(0,2,2). … We write plus(0,X,X).# 0+x=x plus(X,0,X).# x+0=x Query ?- plus(0,3,3). # this query is instantiation of plus(0,X,X). yes We answer by finding a substitution {X=3}. 7

Rules Rules define new relationships in terms of existing ones parent(X,Y) :- father(X,Y). parent(X,Y) :- mother(X,Y). grandfather(X,Y) :- parent(X,Z), parent(Z,Y). Load family.pl [family] ?- grandfather(X,Y). X = john, Y = jim ; false. 8

Database programming A database programming rule brother(Brother, Sib) :- parent(P, Brother), parent(P, Sib), male(Brother), Brother \= Sib. # same as \=(Brother,Sib) In cs164, we will translate SQL-like queries to Prolog. But Prolog can also express richer (recursive) queries: descendant(Y,X) :- father(X,Y). descendant(Y,X) :- father(X,Z), descendant(Y,Z). 9

Compound terms Compound term = functors and arguments. Name of functor is an atom (lower case), not a Var. example: cons(a, cons(b, nil)) A rule: car(Head, List) :- List = cons(Head,Tail). car(Head, cons(Head,Tail)). # equivalent to the above Query: ?- car(Head, cons(a, cons(b, nil)). 10

Must answer to queries be fully grounded? 11 Program: eat(thibaud, vegetables). eat(thibaud, Everything). eat(lion, thibaud). Queries: eat(thibaud, X)?

A simple interpreter A representation of an abstract syntax tree int(3) plus(int(3),int(2)) plus(int(3),minus(int(2),int(3))) An interpreter eval(int(X),X). eval(plus(L,R),Res) :- eval(L,Lv), eval(R, Rv), Res is Lv + Rv. eval(minus(L,R),Res) :- # same as plus 12

Lists Lists are just compounds with special, clearer syntax. Cons is denoted with a dot ‘.’.(a,[]) is same as [a|[]]is same as [a].(a,.(b,[]))[a|[b|[[]]][a,b].(a,X)[a|X][a|X] 13

Am a list? predicate Let’s test is a value is a list list([]). list([X|Xs]) :- list(Xs). Note the common Xs notation for a list of X’s. 14

Let’s define the predicate member Desired usage: ?- member(b, [a,b,c]). true 15

Lists car([X|Y],X). cdr([X|Y,Y). cons(X,R,[X|R]). meaning... The head (car) of [X|Y] is X. The tail (cdr) of [X|Y] is Y. Putting X at the head and Y as the tail constructs (cons) the list [X|R]. From:

An operation on lists: The predicate member/2: member(X,[X|R]). member(X,[Y|R]) :- member(X,R). One can read the clauses the following way: X is a member of a list whose first element is X. X is a member of a list whose tail is R if X is a member of R. 17

List Append append([],List,List). append([H|Tail],X,[H|NewTail]) :- append(Tail,X,NewTail). ?- append([a,b],[c,d],X). X = [a, b, c, d]. ?- append([a,b],X,[a,b,c,d]). X = [c, d]. Hey, “bidirectional” programming! Variables can act as both inputs and outputs 18

More on append ?- append(Y,X,[a,b,c,d]). Y = [], X = [a, b, c, d] ; Y = [a], X = [b, c, d] ; Y = [a, b], X = [c, d] ; Y = [a, b, c], X = [d] ; Y = [a, b, c, d], X = [] ; false. 19

Exercise for you Create an append query with infinitely many answers. ?- append(Y,X,Z). Y = [], X = Z ; Y = [_G613], Z = [_G613|X] ; Y = [_G613, _G619], Z = [_G613, _G619|X] ; Y = [_G613, _G619, _G625], Z = [_G613, _G619, _G625|X] ; 20

Another exercise: desugar AST Want to rewrite each instance of 2*x with x+x: rewrite(times(int(2),R), plus(Rr,Rr)) :- !, rewrite(R,Rr). rewrite(times(L,int(2)), plus(Lr,Lr)) :- !, rewrite(L,Lr). rewrite(times(L,R),times(Lr,Rr)) :- !, rewrite(L,Lr),rewrite(R,Rr). rewrite(int(X),int(X)). 21

And another exercise Analyze a program: 1)Translate a program into facts. 2)Then ask a query which answers whether a program variable is a constant at the of the program. Assume the program contains two statement kinds S ::= S* | def ID = n | if (E) ID = n You can translate the program by hand 22

Some other cool examples to find in tutorials compute the derivative of a function this is example of symbolic manipulation solve a math problem by searching for a solution: “Insert +/- signs between so that the result is 5.” 23

Reading Required download SWI prolog go through a good prolog tutorial, including lists, recursion Recommended The Art of Prolog (this is required reading in next lecture) 24