April 24, 2019
How does the input data relate to a query output.


Why is $\left<1\right>$ in $\pi_A (R \bowtie S)$?


... but that's not the only reason


Why is $\left<1\right>$ in $\pi_A (R \bowtie S)$?
$\left\{ R_1, S_1 \right\}$, $\left\{ R_1, S_2 \right\}$, $\left\{ R_2, S_3 \right\}$
Witness: Any subset of the original database that still produces the same result.
(Generally we only want 'minimal' witnesses)


How is $\left<1\right>$ derived in $\pi_A (R \bowtie S)$?
$(R_1 \bowtie S_1) \oplus (R_1 \bowtie S_2) \oplus (R_2 \bowtie S_3)$
[head] : [body]
$$Q(A) :~~ R(A, B), S(B, C)$$
like SELECT A FROM R NATURAL JOIN S
Stop thinking about relations as collections of records, and instead think of them as collections of facts
R  A  B 

1  1  2 
2  1  3 
3  2  3 
4  2  4 
The fact $R(1, 2)$ is true.
The fact $R(2, 1)$ is false (or unknown).
A table contains all facts that are provably true.
$$Q(A) :~~ R(A, B), S(B, C)$$
For any $A$, the fact $Q(A)$ is true if...$\forall A : \big( \exists B, C : R(A, B) \wedge S(B, C) \big) \rightarrow Q(A)$
$$Q(A) :~~ R(A, B), S(B, C)$$ $$Q(A) :~~ R(A, B), R(B, C)$$
Treat multiple rules as a disjunction.
($Q(A)$ is true if any rule is satisfied)
$[[ A > B ]]$  A  B 

1  0  
2  0  
3  0  
...  
2  1  
... 
Relations are Sets of Facts. We can have a relation consisting of all pairs $A, B$ where $A$ is bigger.
Safety Property: Every variable must appear in at least one finite relation in a rule body.
Recursive datalog: The body can reference the head atom
$$Q(A, B) :~~ R(A, B)$$ $$Q(A, C) :~~ Q(A, B), R(B, C)$$(~Dijkstra's algorithm)
... is like a very large number of queries with no head variables
...
The fact $Q(1, 1)$ is true if $\exists B : R(1, B) \wedge S(B, 1)$
Think of the relation as a function from potential facts to their truthiness.
R  A  B  

1  1  2  → T 
2  1  3  → T 
3  2  3  → T 
4  2  4  → T 
5  1  1  → F 
6  ...  → F 
Every row not explicitly listed is mapped to False