ling 388: language and computers sandiway fong lecture 2: 8/25
TRANSCRIPT
LING 388: Language and Computers
Sandiway Fong
Lecture 2: 8/25
Administrivia
• LING 388 Homework #1– handed out today– submit homework by email
• [email protected]– arrive in my mailbox
• by midnight Wednesday September 1st – see lecture 1 slides for general policy about write-ups– you should collect all your answers to the homework
exercises into one file• put your name on the homework• Use Word or plain text (something I can easily read)• Adobe PDF is also acceptable
From last time…
• Have you installed SWI-Prolog?– Latest version is 10.5.1
Today’s Topic
• first hands-on experience using SWI-Prolog– SWI-Prolog is already installed on all the lab machines– via Program menu
Today’s Topic
• Gentle hands-on introduction to Prolog– a powerful tool for writing grammars– grammars that can also be run on a
computer
Some Background
• Prolog = Programming in Logic– Horn clause logic (subset of first-order predicate calculus)– roots in Mechanical Theorem Proving
• Resolution Rule (Robinson, 65)– invented in the early 1970s– designed to support natural language processing
• … has grammar rules– has been taught to schoolkids
Prolog is a Database• Prolog can be used to store a list of facts
– facts are things that are true in Prolog’s world– initially Prolog’s world is empty
• We can look up facts just like in a database– mechanism is a Prolog database query
• Usage– We can store facts in the database by using assert– e.g. assert(bird(robin)).
• adds fact bird(robin). to the Prolog world
Example• Facts in the database
bird(robin). “robin is a bird”bird(eagle). “eagle is a bird”
• Database queries?- bird(robin). Yes?- bird(tiger). No
• Jargon– bird is a predicate– the predicate bird has one argument– e.g. robin and eagle are arguments of the predicate bird– bird(robin) is a fact
• meaning bird(robin) is true in the database– ?- bird(eagle). is a query
• meaning we want to know if bird(eagle) is true in the database
SWI-Prolog
• how to start it?– from the Windows Program
menu– interpreter window pops up and – is ready to accept database
queries (?-)• how to see what’s in the
Prolog database?– ?- listing.
• Other useful commands – once we start storing facts in files instead of entering them using assert.
• how to see what the current working directory is?– (the working directory is where your files are stored)– important: every machine in the lab is different– ?- working_directory(X,Y).
– X: current working directory, Y: new working directory• how to change to a new working directory?
– ?- working_directory(X,NEW).
Note: on the Mac: use /opt/local/bin/swipl in Terminal
Exercise 1
1. Let’s start Prolog2. Enter the bird facts into the database
– Using the assert/1 query
3. Query the database4. List the database
– using query listing.Note:• all facts and queries must end in a period.• Prolog is case-sensitive
– don’t mix upper and lower case– anything that begins with an uppercase letter is a logic variable– use lower case for symbols
• Facts in the databasebird(robin). bird(eagle).
• Database queries?- bird(robin).?- bird(tiger).
To remove a fact from the databaseuse retract(the counterpart of assert)e.g. ?- retract(bird(robin)).would leave just tiger
Exercise 2: Variables
• Database– bird(robin).– bird(eagle).
• Query containing a variable X– ?- bird(X).– X = robin ;– X = eagle ;– No
• Query with a variable– ?- bird(X).
• means – tell me if bird(X). is true in Prolog’s world.
• Closed World Assumption– In general, Prolog obeys the closed world assumption: things aren’t true unless explicitly stated to be
true– e.g. our database might be incomplete, for example, daffy might be a bird– but unless we explicitly tell Prolog daffy is a bird, Prolog assumes it’s not.
• Notation: variables and symbols– X (capitalized 1st letter) is a variable– robin, tiger (beginning with a lowercase letter) are simple symbols (not variables)
semicolon (;)representsdisjunction (or)in the context of a Prolog query, it means“give me the next answer”
Exercise 3: Negation
Prolog negation– “failure to prove”– a limited form of logical negation denoted by \+ – used in queries and bodies (not head) of rules– negative facts are not permitted, can’t put them in the database– can’t do?- assert(\+ bird(cat)).
• Example?- \+ bird(robin). No?- \+ bird(tiger). Yes
• Reasoning• \+ bird(robin) is true
– if bird(robin) is false,• i.e. can’t be proved from the database
– but bird(robin) is true– so \+ bird(robin) is false
• \+ bird(cat) is true – if bird(cat) is false, i.e. can’t be proved
from the database– bird(cat) is not in the database, so it’s
false– so \+ bird(cat) is true ERROR: assert/1: No permission
to modify static_procedure
Homework Question 1
• Use databasebird(robin). “robin is a bird”
bird(eagle). “eagle is a bird”
• (2pts) What do the following queries return as an answer?
• The queries?- \+ bird(Eagle).?- \+ \+ bird(robin).
• (6pts) Give the logical reasoning for each answer – (in the form given in Exercise 3)
Exercise 4: Rules
• Databasebird(robin). “robin is a bird”
bird(eagle). “eagle is a bird”
• Rules (to be asserted)has_feathers(Y) :- bird(Y). “Y has feathers if Y is a bird”can_fly(X) :- has_feathers(X). “X can fly if X has feathers”
Run Queries– ?- has_feathers(robin). Yes
• if bird(robin) is true
– ?- can_fly(robin). Yes (can chain inferences)• ?- has_feathers(robin).
– ?- bird(robin).» bird(robin) true
Notation– :- means “if”
Homework Question 2
• (2pts) In Exercise 4, we stated:– has_feathers(Y) :- bird(Y).– However, it is common knowledge that, of all the animals in the
world, all birds have feathers and only birds have feathers.– What is missing from my Prolog rule?– Submit the missing rule.
• (4pts) Although all birds have feathers, not all birds fly, e.g. penguins and ostriches– Add these two birds to the database– Make sure bird/1 and has_feathers/1 are true for them– Modify the can_fly rule to exclude them– hint: look up conjunction (comma symbol in Prolog)– Submit the completed database
SWI-Prolog
• Getting stuck?– Type <control>-C– Type a (for abort)
– gets you back to the Prolog interpreter prompt (?-)
SWI-Prolog
• How to enter facts and rules into the database?– Method 2:
• Use your favorite text editor• Create a file in the current working directory containing
database facts and rules. • Load the file at the Prolog prompt using:• ?- consult(FILE).• or • ?- [FILE].
– (comma-delimited list notation)• or
Note: file are loaded from Prolog’s working directory
see slide 7 for working directory queries
Replace with actual filename
SWI-Prolog
• How to enter facts and rules into the database?– consult/edit/new under the File menu
SWI-Prolog
• A note on filenames– Convention: Prolog files normally have extension .pl
• e.g. mydb.pl• (.pl extension is also used by Perl – which came later in 1987
but is much more popular)– FILE above should be the filename without the extension
• e.g. ?- [mydb].– The period (.) is a special symbol in Prolog.
If you wish to specify the full name, you must enclose it in single quotes
• e.g. ?- [’mydb.pl’].
Prolog Resources
SWI-Prolog manual and help system
Useful Online Tutorials– An introduction to Prolog
• (Michel Loiseleur & Nicolas Vigier)• http://invaders.mars-attacks.org/~boklm
/prolog/– Learn Prolog Now!
• (Patrick Blackburn, Johan Bos & Kristina Striegnitz)
• http://www.coli.uni-saarland.de/~kris/learn-prolog-now/lpnpage.php?pageid=online