CS345 PROBLEM SET #6
Due in class, Wednesday, December 4, 1996.
6 Questions, 100 pts.
Problem 1 (15 pts.)
Rectify the following rules.
- p(X,Y,Z) :- q(X,X,Y,V) & q(Z,V,Y,a)
- q(X,Y,Z,W) :- p(X,Y,Y) & p(Y,Z,W)
- q(X,Y,Z,W) :- r(X,Y,Z,W,X)
Note that r is an EDB predicate and a is a constant.
Problem 2 (15 pts.)
Suppose we have the relation R whose value is the four tuples (R1 and
R2 are the first and second arguments of the relation R):
R1 |
R2 |
a |
b |
f(a) |
g(b) |
f(g(a)) |
g(f(b)) |
f(f(a)) |
f(a) |
Perform the following translations
- a)
- Q(X,Y) =
ATOV
(p(f(X),g(Y)), R).
- b)
- Q(X,Y) =
ATOV
(p(f(X),X), R).
- c)
- Q(X,Y) =
VTOA
(p(h(X,Y),g(X)), R(X,Y)).
Problem 3 (15 pts.)
Consider the rules
- p(X,Y,Z) :- q(X,Y,Z)
- p(X,Y,Z) :- q(X,S,Y) & p(Y,T,Z)
Draw the rule/goal graph starting with the goal for predicate
p with adornment bff.
Problem 4 (15 pts.)
For the rules in Problem 2 and query p(0,A,B), write the magic-set
rules.
Problem 5 (20 pts.)
Below are the rules that define terms representing the structure of
arithmetic expressions with +,*, and parentheses.
- expression(plus(E,T)) :- expression(E) & product(T).
- expression(E) :- product(E).
- product(times(T,F)) :- product(T) & factor(F).
- product(T) :- factor(T).
- factor(parens(E)) :- expression(E).
- factor(F) :- identifier(F).
Write the magic-set rules for the query form expression with
adornment b. For Group V you can imagine that the query is
about some term e, which we are testing to see if it is a
valid expression.
Problem 6 (20 pts)
Suppose a REFER application wants to support the following global
concepts:
- doctor(D) = ``D is a doctor.''
- nurse(N) = ``N is a nurse.''
- patient(P) = ``P is a patient.''
- diag(P,C) = ``patient P is diagnosed with condition C.''
- operation(D,N,P) = ``an operation is performed by doctor D and
nurse N on patient P.''
Let the query be:
- ans(N) :- operation(D,N,P) & doctor(D) & nurse(N) & patient(P) &
diag(P,appendicitis)
That is, find the nurses who participated in appendectomies.
Suppose we want to run this query against a database with the following
relations:
- staff(Name, Position) gives the name (assumed unique)
of staff (doctors and nurses) and their position (either "doctor" or
"nurse").
- patients(Name, Address, Condition) gives the name (again assumed
unique), address, and condition (e.g., "appendicitis") of the patient.
- assigned(S, P) meaning that staff member S is assigned to the
operation on patient P.
- a)
- Write ``view definitions'' for each of the global concepts in terms
of the relations at the source.
- b)
- Rewrite the query in terms of the source relations.
Do not forget to use each subgoal of the query, even if it results in
duplicate subgoals in the rewritten query.
- c)
- Optimize your query from (b) to remove redundant subgoals.