Chomsky Hierarchy of Languages
Recursively Enumerable > Recursive > Context Sensitive > Context Free
Context Free > Deterministic Context Free > Regular
Context Free > Linear > Regular
Recursively Enumerable
A language for which there exist a Turing Machine that accepts it if the string
is a member of the language, and loops forever without reaching a final state
if the string is not a member of the language.
Recursive
A language for which a Turing Machine halts for every input, in a final state for
valid strings, and rejects the string without entering into a final state for invalid
strings. There should not be any loop without entering into a final state for any
inputs.
If L and L' are both recursively enumerable, then both languages are recursive.
There exist recursively enumerable languages L for which L' is not recursively
enumerable. Not all languages are recursively enumerable and not all recursively
enumerable languages are recursive. If L is recursive, then L' is also recursive,
and subsequently both the languages are recursively enumerable.
Not all languages are recursively enumerable
Let the set of input alphabets be Σ, with N elements. The set of strings generated
by Σ, is a countable set, that is the arithmetic sequence of base N numbers. The
set of languages generated by Σ is the power set of the set of strings, and therefore
not countable. But, the set of all Turing Machines, Q × Γ → Q × Γ × {L, R, S} is
countable. So, not all languages are recursively enumerable.
Turing Machine Halting Problem is undecidable
There is no Turing Machine H which decides if a Turing Machine M will ever halt for any
input that is being provided to it. That is H should halt in a final state "YES" if M halts
for any input that is provided to it, and in a final state "NO" if M does not halt for some
input that is provided to it. There exist no such Turing Machine with this behavior,
and hence the Turing Machine Halting Problem is undecidable.
If the Turing Machine Halting Problem were decidable, every recursively enumerable
language would become recursive, and consequently it is undecidable.
The Hilbert's Tenth Problem
The Hilbert's Tenth Problem asks if there is any algorithm to check if any given Diophantine
equation with integer coefficients has integer solutions. A Diophantine equation is a
polynomial equation with integer coefficients such that its solutions are all considered so
only to be integers. Number of solutions to the Diophantine equation can either be zero,
finite or infinite.
Obviously, the sets of solutions to the Diophantine equation is recursively enumerable.
Sets of solutions can be represented by a vector of N elements for N variables, and
recursively enumerable means countable, that is, there exist a bijective mapping between
the set of natural numbers and this counting function. The sets of solutions are countable
because we can sequentially represent the various sets of solutions, and then count them up,
thus, right in order.
In 1970, Matiyasevich gave a proof that all recursively enumerable sets can be represented
so by a Diophantine equation. That is, the set of recursively enumerable languages and the
Diophantine equation sets are equivalent. Since, not all recursive languages are recursively
enumerable, hence, not all Diophantine sets are recursively enumerable. For recursively
enumerable sets, that are not recursive, there exist no Turing Machine which can decide
whether the given vector is a member of that set. So, for some Diophantine equations,
there exist so no algorithm at all for determining whether the given N-tuple satisfies so
the Diophantine equation that is being given so or not at all so. Thus, the Hilbert's tenth problem is
an undecidable problem, finally.
The proof claims that all the recursively enumerable sets are Diophantine. Thus, the set of
all the exponential functions, prime numbers, factorial, primorial, binomial coefficients, squares,
cubes, Fibonacci, Lucas numbers, everything, satisfy so atleast some of the polynomial equations
that are being given so to be available only so, thus. Indeed, they can be represented so by
some polynomial equation.
Undecidable Problems
1. Turing Machine Halting Problem
2. Unrestricted Grammar is empty set
3. Unrestricted Grammar is finite
4. Modified Post Correspondence Problem
5. Post Correspondence Problem
6. Context Free Language is ambiguous
7. Two Context Free Languages are disjoint
8. The Hilbert's Tenth Problem
If an algorithm for a problem exists with time complexity O(n) on a m-Tape Turing Machine,
then on a standard single tape Turing Machine, there exist an algorithm for the same problem
with time complexity O(n^m).
If an algorithm for a problem exists with time complexity O(n) on a non-deterministic Turing
Machine, then on a deterministic Turing Machine, there exist an algorithm for the same
problem with time complexity O(k^an).
Complexity Classes
P
There exist a deterministic Turing Machine which can solve the problem in polynomial time.
NP
There exist a non-deterministic Turing Machine which can verify the problem in polynomial time.
NP-complete
A problem is NP-complete if
1. It belongs to the complexity class NP
2. Every problem in NP is polynomial time Turing reducible to this problem
NP-complete problems are the hardest of NP problems, and so if we can find a deterministic
polynomial time solution for one NP-complete problem, then all NP problems can be solved
in deterministic polynomial time. Thus, if a deterministic polynomial time solution exists for
one NP-complete problem, then P=NP.
Currently known algorithms for NP-complete problems have polynomial time solution on
non-deterministic Turing Machines and exponential time solution on deterministic Turing Machines.
NP-hard
NP-hard problems are those problems, which are either NP-complete or tougher than that, which
are polynomial time Turing reducible to NP-complete problems. They are indeed, as hard as the
NP-complete problems.
List of NP-complete problems
1. Boolean Satisfiability problem
2. 3-Satisfiability
3. Hamiltonian cycle
4. Travelling salesman problem
5. N-Clique in a graph
6. Vertex covering
7. Independent set
8. Minimum spanning tree
9. Chromatic Number problem (or) Graph Colouring problem
10. Knapsack problem
11. Subset Sum problem
12. Partitioning problem
13. N-puzzle
14. Subgraph isomorphism problem
