Lassuk be hogy letezik univerzalis Turing-gep
Tetel: Mutassuk be, hogy es minden ABC felett letezik univerzalis szalagos, ABC feletti Turing-gep!
Eloszor szallagossal szimulalunk
Tehat van egy Turing-gepunk ami szalagos es egy Turing-gepunk ami szalagos.
Azt szeretnenk, hogy a gepnek az elso szalagja futas kozben megegyezzen az gep szalagjaval.
van irva a gep -edik sorara (ez a programja a Turing-gepnek)
A kovetkezoket a betuivel kodoljuk:
A -t viszont eleme.
Hogyan szimulalja a az -et:
A es az -beli fejek helyzete megegyezik az elso szalagon
Mondjuk azt, hogy belattuk a -es esetet.
Hogyan csinalunk szalagosbol szalagosat?
A -edik szalagra irjuk fel az eredetinek -edik szalagja es a -edikg szalagjat egy -al elvalasztba.
Ha lenne ket fejunk az utolso szalagra akkor trivialis lenne az atallas, de nincs ket fejunk egy szalagra.
Ugyanigy leirjuk a kettot es minden mezot megduplazunk, minden mezo elott szerepel egy ha nem lenne a kovetkezon a fej es ha a kovetkezon lenne a fej.
Most egy fej fogja szimulalni ketto mukodeset ugy hogy balrol elindul a fej es elszalad jobbra odaig ameddig nem er el oda ahol lenne a masik fej. Ott elvegzi a teendojet es ujtana visszafut balra oda ahol az elobb volt. Es igy tovabb.
Church tezis: Minden ami kiszamolhato az kiszamolhato Turing-geppel is.
Megj.: A Church tezis nem egy matematikai tetel, hanem inkabb egy filozofiai hit, mert nincs definialva, hogy mit ertunk ‘kiszamolhato’ alatt.
Tetel: Minden -szalagos ABC folotti Turing-gephez letezik -szalagos ABC folotti Turing-gep, amely az -et helyettesiti a kovetkezo ertelembe:
- adott inputra leall ugyanarra az inputra leall
- megallaskor az utolso szalagjan ugyanaz van, mint a szalagja
Sot, ha megallasig az gep lepest tett meg, akkor megallasig lepest tesz meg.
“Minden -szalagos Turing-gepet lehet szimulalni -szalagossal negyzetes lassulassal.”
Mese: Folhullamoztatom azt az egy szalagomat ugy, hogy magas legyen minden emelet
_ _ _
| | | | | |
| | | | | |
| | | | | |
|_| |_| |_|
Biz.: magasra hullamoztatom fel a szallagomat es mindegyik lefele meno ag szimbolizalja a szalagot.
Mindegyik lefele meno ag cellai duplazva vannak es minden masodik cella egy seged cella, ami megmondja, hogy hol lenne a -adik fej.
A hullamozott szalag elejere es vegere rakunk akadalyozo jelek, hogy itt az eleje es itt a vege.
tud szamolni igy fogja tudni, hogy melyik szalagon jar.
Adott lefele meno agban megy ameddig nem talal olyan jelet, hogy az a jel feletti cellaban jar az -edik fej.
Egy lepest lepesben szimulal.
Problema: Hogyan adjuk meg az inputot ennek az -szalagos Turing-gepnek?
A jo az lenne, ha minden agnak az elso cellajaba lennenek irva az input betui, de ez nem illik a Turing-gep definiciojahoz.
Definiio szerint az inputnak az elso szalagon kell szerepelni, a fej alatt kezdodve.
Fogjuk meg az inputot es a vegso szeleteket mozgassul el mindig -val igy a vegso szelet elso betuje mar jo helyen lesz.
Ha hosszu az input, akkor lepes lesz a mozgatas.
Sajnos ezt a szerencsetlenseget meg kell csinalnom visszafele amikor az outputot irom ki, ez is idoben megcsinalhato.
A RAM-gep
Mese: Van egy program tar es egy adat tar. Az adat tarban szamok vannak.
Azert RAM gep mert Random Access Machine tehat az adat tar barmelyik indexu elemet idoben vissza tudja adni.
Definicio: A RAM-gep az all egy adat tarbol es egy program tarbol. Az adat tar elemei a cellak az -edik cellat -vel jeloljuk. Minden -be egesz szam irhato be, kezdetben minden -re .
A program tarban parancs sorok vannak. A megengedett parancsor a kovetkezok:
- IF THEN GOTO
<label>
Az input hossza az -ba van irva, az input az -ba van irva.
Az output az adattar tartalma, ha a gep leall.
pelda: Element Distinctness (ED) feladat, ahol a nyelv amit szeretnenk hogy a RAM-gepunk dontson el. Tehat elfogad egy szot ha nincsen benne duplikatum es elutasit egy szot ha van benn duplikatum.
- Naiv megkozelites: minden part osszehasonlitjuk
- Rendezunk es utana minden egymas mellettit osszehasonlitunk
for i = 1 to n
X[a_i] = i
for i = 1 to n
if X[a_i] != i
return False
return True
Tetel: Minden Turing-gephez van olyan program a RAM-gepen, hogy minden inputra a RAM-gep megall a Turing-gep megall es megallaskor az output a ket gepen ugyanaz es ha a Turing-gep megallasaig lepest tett meg akkor a RAM-gep lepest tesz meg, legfeljebb bites szamokon.
Biz.: tegyuk fel, hogy es
Ket program szegmens lesz: es
- : A Turing-gep az allapotban van es olvas
- : A Turing-gep az allapotban van es a -t olvasta
Minden pratlanadik cella adminisztaciora van fenntartva.
A fej helye
admin
P_i = [
X[3] := X[X[1]]
IF X[3] <= 0 THEN GO TO label(Q_i0)
X[3] := X[3] - 1
IF X[3] <= THEN GO TO label(Q_i1)
X[3] := X[3] - 1
IF X[3] <= THEN GO TO label(Q_i2)
]
Q_ij = [
FOR _ IN beta(i, g)
X[3] := 0
X[3] := X[3] + 1
X[X[1]] := X[3]
# minden masodik helyen vagyunk
X[1] := X[1] + gamma(i, g)
X[1] := X[1] + gamma(i, g)
X[3] := 0
IF X[3] <= 0 THEN GOTO label(P_alpha(i, g))
]