मुझे पता है कि यह साबित किया जा सकता है PROLOG एक प्रोग्राम का निर्माण करके ट्यूरिंग-पूर्ण है जो इस तरह से ट्यूरिंग मशीन का अनुकरण करता है:
turing(Tape0, Tape) :-
perform(q0, [], Ls, Tape0, Rs),
reverse(Ls, Ls1),
append(Ls1, Rs, Tape).
perform(qf, Ls, Ls, Rs, Rs) :- !.
perform(Q0, Ls0, Ls, Rs0, Rs) :-
symbol(Rs0, Sym, RsRest),
once(rule(Q0, Sym, Q1, NewSym, Action)),
action(Action, Ls0, Ls1, [NewSym|RsRest], Rs1),
perform(Q1, Ls1, Ls, Rs1, Rs).
symbol([], b, []).
symbol([Sym|Rs], Sym, Rs).
action(left, Ls0, Ls, Rs0, Rs) :- left(Ls0, Ls, Rs0, Rs).
action(stay, Ls, Ls, Rs, Rs).
action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs).
left([], [], Rs0, [b|Rs0]).
left([L|Ls], Ls, Rs, [L|Rs]).
हालाँकि, मैं सोच रहा हूँ कि PROLOG भाषा के कौन से हिस्से ट्यूरिंग पूर्णता को खोए बिना (esp। फंक्शन सिंबल, क्लॉज़ ओवरलोडिंग, रिकर्सन, यूनिफिकेशन) को छीन सकते हैं। क्या फ़ंक्शन प्रतीक स्वयं ट्यूरिंग पूर्ण हैं?