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