Content deleted Content added
→Statement: Statement is no longer correct; it must be little o of f(n)/log f(n), not big O |
Full proof given, corollaries listed |
||
Line 7:
===Statement===
For any time constructible function <math>t: N \rightarrow N</math>, there exists
a language <math>A</math> that is decidable in time <math>O(t(n))</math> but not in time
<math>o(t(n)/\log t(n))</math>.
===Proof===
We prove this by constructing a Turing machine <math>B</math> that is a <math>O(t(n))</math>
decider for a language <math>A</math> that is not decidable in <math>o(t(n)/\log
t(n))</math> time. In order to ensure that <math>B</math> finishes its computation in
time <math>O(t(n))</math> we include in <math>B</math> a counter of length <math>\log t(n)</math>,
which is the number of bits required to store the number <math>O(t(n))</math>.
There are two parts to this construction. One part is to ensure that
<math>B</math> has a different output from all <math>o(t(n)/\log t(n))</math> Turing
machines. We do this by simulating a given Turing machine <math>M</math> on
input <math>\langle M\rangle 10^*</math>. If <math>M</math> finishes its computation
quickly enough (in time less than <math>t(n)/\log t(n)</math> where <math>n</math> is the
length of the input string), we construct <math>B</math> to have the opposite
output (this is similar to the digitalisation technique explained in the [[Diagonalization Lemma]]). But what if <math>M</math> does not halt in the alloted time? we still need
to make sure that <math>B</math> is a <math>O(t(n))</math> decider, so we add a counter to
<math>B</math> to make sure that it stops after <math>t(n)</math> steps.
The basic structure of TM <math>B</math> is:
'''input''': string <math>w</math> with length <math>n</math>
'''if''' w 6 <math>w \not= \langle M\rangle 10^*</math> for some TM M '''then'''
reject
'''end if'''
calculate <math>\lceil t(n) / \log t(n)\rceil</math> and use this value to create counter <math>c</math>
'''while c > 0 do'''
simulate <math>M</math> with input <math>w</math> for 1 step
'''if''' <math>M</math> accepts '''then'''
reject
'''else if''' <math>M</math> rejects '''then'''
accept
'''end if'''
decrement <math>c</math>
'''end while'''
reject
Now we need to show that <math>B</math> halts within <math>O(t(n))</math> time. In order to
simulate <math>M</math>, <math>B</math> needs to keep track of <math>M</math>'s state, the tape symbol
<math>M</math> is currently reading, and <math>M</math>'s transition function. If <math>B</math> were
to store this information in one spot on its tape, as <math>B</math> simulates
<math>M</math> <math>B</math> may have to spend an arbitrary amount of time moving traveling
back and forth retrieving this information about <math>M</math>. So we introduce
a notion of tracks on <math>B</math>'s tape. In one track we will store
information about <math>M</math>, in the other track we will store information
about <math>B</math>'s current computation. We change <math>B</math>'s tape alphabet to a
set of pairs, one from each track. Then, in a constant amount of time
(dependent on the length of <math>M</math>, not the length of the entire input
string <math>w</math>) <math>B</math> can copy the information on the first track to the
current ___location on the second track. So, if <math>M</math> runs in time <math>g(n)</math>,
<math>B</math> can simulate it in time <math>O(g(n))</math>. We add the counter to a third
tape (also to cut down on unbounded time of traveling between the
current head position of <math>B</math> and the clock). The actual clock
updating operations require only <math>O(\log t(n))</math> because the length of
the clock is <math>\log (t(n) / \log t(n))</math>. So, if we allow <math>B</math> to
execute for <math>\lceil t(n) / \log t(n)\rceil</math> steps and each step
requires <math>O(\log t(n))</math> time, <math>B</math> will halt in time <math>O(t(n))</math>.
Formally we need to show that <math>A</math> is not decidable in <math>o(t(n)/\log
t(n))</math> time. We prove this by contradiction. Assume that TM <math>M</math>
decides <math>A</math> in time <math>g(n)</math>, which is <math>o(t(n)/\log t(n))</math>. Then <math>B</math>
can simulate <math>M</math> in <math>d \cdot g(n)</math> time for some constant <math>d</math>. So,
for some constant <math>n_0</math>, <math>d \cdot g(n) < t(n) / \log t(n)</math> for all <math>n
\geq n_0</math>. Consider what happens when we run <math>B</math> on input <math>\langle
M\rangle 10^{n_0}</math>. This input is longer than <math>n_{0}</math>, which means
that <math>B</math> will have time to simulate <math>M</math> until it halts and then <math>B</math>
will do the opposite of <math>M</math> on the same input. Thus, <math>M</math> does not
decide <math>A</math> which contradicts our assumption. So, <math>A</math> is not decidable
in <math>o(t(n)/\log t(n))</math> time.
== Non-deterministic time hierarchy theorem ==
If ''g''(''n'') is a time-constructible function, and ''f''(''n''+1) = [[Big O notation|o]](''g''(''n'')), then there exists a decision problem which cannot be solved in non-deterministic time ''f''(''n'') but can be solved in non-deterministic time ''g''(''n''). In other words, the complexity class [[NTIME]](''f''(''n'')) is a strict subset of NTIME(''g''(''n'')).
==Corollaries==
===Corrollary 1===
''For any two functions <math>t_1</math>, <math>t_2: \mathbb{N} \longrightarrow
\mathbb{N}</math>, where <math>t_1</math>(n) is o(<math>t_2</math>(n)/<math>log t_2</math>(n)) and <math>t_2</math> is
time constructible, TIME(<math>t_1</math>(n)) <math>\subset</math> TIME(<math>t_2</math>(n)).''
This corollary shows that <math>t_1</math> and <math>t_2</math> belong to two different
classes of TIME hierarchies (and that TIME(<math>t_2</math>) includes
TIME(<math>t_1</math>). Note that we can say the two classes are different
because TIME(<math>t_1</math>) is a strict subset of TIME(<math>t_2</math>).
===Corrollary 2===
''For any two real number <math>1 \leq \epsilon_1 < \epsilon_2</math>,
TIME(<math>n^{\epsilon_1}</math>) <math>\subset</math> TIME(<math>n^{\epsilon_2}</math>)''
This corollary shows that polynomials of different degree are in
different TIME hierarchies and that the classes of the smaller degree
polynomials are strict subsets of the classes of the larger degree
polynomials.
===Corrollary 3===
''<math>P \subset EXPTIME</math>''
By this corollary, the classes of polynomial time algorithms and
exponential time algorithms are different.
==Consequences==
|