Description
1. (5 pts) Problem 9.4 from the text (which we repeat here for those who do not have
the text). For each pair of atomic sentences, give the most general unifier if it
exists:
(a) P(A, A, B), P(x, y, z).
(b) Q(y, G(A, B)), Q(G(x, x), y).
(c) R(x,A,z) , R(B,y,z)
(d) Older (Father(y), y), Older (Father(x), John).
(e) Knows(Father(y),y), Knows(x,x).
2. (25 pts) Consider the following sentences:
• John likes all kinds of food.
• Apples are food.
• Chicken is food.
• Anything someone eats and isn’t killed by is food.
• If you are killed by something, you are not alive.
• Bill eats peanuts and is still alive. *
• Sue eats everything Bill eats.
(a) Translate these sentences into formulas in first-order logic.
(b) Convert the formulas of part (a) into CNF (also called clausal form).
(c) Prove that John likes peanuts using resolution.
(d) Use resolution to answer the question, “What does Sue eat?”
(e) Use resolution to answer (d) if, instead of the axiom marked with an asterisk
above, we had:
• If you don’t eat, you die.
• If you die, you are not alive.
• Bill is alive.
3. (70 pts) In this problem, you will write a Lisp program that converts graph
coloring problems into SAT problems and use a SAT solver to solve them. We
have broken the task into multiple functions and provided you with some basic
code for file I/O and for gluing all the functions together (see hw6-skeleton.lsp).
For each graph coloring problem, each node will be represented by a positive
integer (node index). Each color is also represented by a positive integer (color
index).
Similarly, for a SAT problem, each variable is represented by a positive integer
(variable index). As a result, a positive integer is used for a positive literal and a
negative integer is used for a negative literal. A clause is simply a list containing
the literals of the clause. A CNF formula is then simply a list of clauses.
For example, if variable a has index 1, variable b has 2, and variable c has index
3, then the clause (abc) is represented as the list (1 -2 -3). The CNF formula
(abc) (abc) is represented as ((1 2 3) (-1 2 -3)). Of course, the order of
clauses and literals in each clause does not matter.
Here are your tasks:
i) Write a function called node2var that takes a node index (n), a color index (c),
and the maximum color index (k). This function should return the index of the
propositional variable that represents the constraint: “node n receives color c”
(with k colors being considered). Use the following conversion convention:
variable index = (n-1)*k + c
ii) Write a function called at-least-one-color that takes a node index (n), a color
index (c), and the maximum color index (k). This function should return a clause
that represents the constraint: “node n must be colored with at least one color
whose index comes from the set {c,c+1,…,k}.”
iii) Write a function called at-most-one-color that takes the same arguments as atleast-one-color. This function should return a list of clauses that represent the
constraint: “node n must be colored with at most one color whose index comes
from the set {c,c+1,…,k}.”
iv) Write a function called generate-node-clauses that takes a node index (n) and
the maximum color index. This function should return a list of clauses that
constrain node n to be colored with exactly one color whose index is in the set
{1,2,…,k}.
v) Write a function called generate-edge-clauses that takes an edge (x y) and the
maximum color index (k). An (undirected) edge is simply a list of two node
indices. This function should return a list of clauses that prohibit nodes x and y
from having the same color in the set {1,2,…,k}.
After finishing all the above parts, you should be able to convert a graph coloring
problem into a SAT problem. To do so, call
(graph-coloring-to-sat )
The graph filename is the name of the input graph file. The SAT filename is the
name of the output file you want the program to write to. Max color index is
simply the number of colors being considered in the problem.
The graph file has the following format:
• The first line contains 2 numbers. The first one is the number of vertices in the
graph, the second one is the number of edges.
• Each subsequent line describes an edge. An edge is represented by two
numbers—the node indices of the two nodes linked by the edge.
Now that you have a converting program working, you will use it to convert some
actual graph coloring problems into SAT problems and solve them with a SAT
solver.
First, consider the following graph (whose nodes are labeled with their node
indices):
A graph file for this graph is also provided (graph1.txt). Convert the graph
coloring problem of this graph with 3 colors into a SAT instance using the
program you wrote.
1
2
4 3
5
6 7
Then, download the RSat SAT solver from (http://reasoning.cs.ucla.edu/rsat/).
Read the manual carefully. Use RSat to solve the SAT instance obtained above.
(1). Is the instance satisfiable?
Do the conversion again, this time, with 4 colors. Use RSat to solve this new SAT
instance. (2). Is the instance satisfiable?
(3). What do the answers of these two SAT instances tell you about the graph
coloring problem of the above graph? Can you give a solution (a coloring) to
the graph coloring problem of the above graph based on the results of RSat?
Now, use a similar approach to solve the graph coloring of the graph described in
graph2.txt. (4). What is the minimum number of colors required to properly
color this graph?
Submit your lisp file (named hw6.lsp) via CCLE. Put all non-programming
answers (including those to questions 3-(1) to 3-(4) shown in bold) in hw6.txt and
submit both files through CCLE.