CS254
Chris Pollett
Mar 6, 2017
We have already defined the class `EXP = cup_(c ge 1) DTIME(2^(n^c))`. Similarly, we can define `NEXP` to be `cup_(c ge 1) NTIME(2^(n^c))`. It turns out the `EXP` versus `NEXP` question is connected with the `P` versus `NP` problem.
Theorem. If `EXP ne NEXP` then `P ne NP`.
Proof. We prove that if `P=NP` then `EXP = NEXP`. Suppose `L in NEXP` and is decided by NDTM `M`. We claim the language
`L_(mbox(pad)) = {langle x, 1^(2^(|x|^c)) rangle | x in L}`
is in NP. Here is an NDTM for `L_(mbox(pad))`: Given `y`, first check if there is a string `z` such that `y=langle z, 1^(2^(|z|^c)) rangle`. If not, output `0`. If `y` of this form, then simulate `M` on `z` for `2^(|z|^c)` steps and output its answer. The running time for this is polynomial in the input `|y|`, and hence `L_(mbox(pad)) in NP`. So if `P=NP`, then `L_(mbox(pad)) in P`. But if `L_(mbox(pad)) in P` then `L in EXP`: To determine whether an input `x in L`, we just pad the input and decide whether it is in `L_(mbox(pad))` using the `P` algorithm.
Which of the following statements is true?
Given a set of clauses F in n variables x[1], ... x[n].
for (i = 1; i <= n; i++) {
if (x[i] is reachable from ~x[i]
and ~x[i] is reachable from x[i]) {
output 0
halt;
}
}
output 1
halt
Let P be a Horn Program on n variables.
Let S be its set of unit clauses. Let OldS be the empty set.
while (S != OldS) {
OldS = S
Pick first literal L in S.
if (~L does not appear in any clause) {
delete clause L from P and S;
} else {
generate all clauses using resolution from clauses
involving ~L and add them to P;
if (derive empty clause) {
output 0;
halt;
}
delete all clauses with L or ~L;
update S according to unit clauses currently in P.
}
}
output 1;
halt