{{TIN065 Prednášky}} Na vyčísliteľnosti I sme mali 1-prevoditeľnosť: znamená, že existuje prostá ORF funkcia f, pre ktorú platí, že .
Okrem tejto prevoditeľnosti existuje množstvo ďalších - napríklad známa m-prevoditeľnosť, ktorá sa od 1-prevoditeľnosti líši tým, že nepožaduje, aby funkcia f bola prostá (), potom "truth table" prevoditeľnosť (), "weak truth table" prevoditeľnosť () a pre nás najzaujímavejšia turingovská prevoditeľnosť (). Prevoditeľnosť slúži na to, aby sme vedeli zistiť, či nejaký prvok je prvkom množiny A na základe toho, že vieme o nejakých prípadne iných prvkoch zistiť, či sú prvkami množiny B.
Truth table reducibility
znamená, že existuje ORF, ktorá každému priradí n-árnu boolovskú funkciu a tiež n-ticu bodov takých, že , kde je charakteristická funkcia a je charakteristická funkcia . (Spomínaná ORF teda priradí každému kód funkcie a hodnoty ypsilónov).
Priradenie funkcie ako aj premenných je závislé na , takže pre rôzne môžu byť rôzne aj . Pekné na funkcii je, že je definovaná všade a to nezávisle na množine , pretože to je boolovská funkcia. A boolovská funkcia sa dá zapísať pravdivostnou tabuľkou - odtiaľ názov "truth table" redukcia (poznámka: boolovských funkcií na premenných je ). Príklad množín, ktoré sú na seba prevoditeľné, je a . K prvku priradíme prvok (ten istý) a bude negácia (poznámka: 1-previesť sa nám ale na nepodarí).
K tomuto môžeme vymyslieť nejaké obmedzenia, či už na (takže sa spýtame na najviac prvkov), prípadne na tvar funkcie . Tým sa teraz nebudeme zaoberať. Tiež prevoditeľnosťou "weak truth table" sa budeme zaoberať až časom.
T-prevoditeľnosť
Čo nás bude zaujímať viac, je T-prevoditeľnosť. Budeme potrebovať orákulum - hypotetické zariadenie, ktoré odpovedá na otázky "Je prvkom ?". Prípadne si môžeme predstaviť, že máme orákulovu pásku, na ktorej je zapísaná charakteristická funkcia množiny B.
Neformálne: ak existuje program, ktorý počíta charakteristickú funkciu množiny , pričom sa občas môže spýtať, či nejaké , ktoré počas svojej práce vypočíta, je prvkom množiny .
Keďže hovoríme o programe, zišiel by sa programovací jazyk. Prvá možnosť je použiť -ČRF. B-čiastočne rekurzívne funkcie sú také, ku ktorým okrem už známych základných funkcií (nula, nasledovník, projekcia) existuje aj ďalšia - a to práve charakteristická funkcia množiny , teda . Tá slúži na zistenie, či nejaký prvok je prvkom množiny . Takže B-ČRF sú rozdielne pre každé . Inak povedané: je vlastne množinová premenná. Operátory ostávajú rovnaké ako pri obyčajných ČRF.
Definícia pre Pascal-like jazyk (nazvaný tiež aj B-pascal) je, že pridáme k programu funkciu is_in_B(x:integer):boolean
, ktorá vráti ak je prvkom a ak nie je prvkom . Táto funkcia si svoj výsledok zisťuje "iným spôsobom" - pýta sa, či už užívateľa alebo orákula.
Pre Turingov stroj si zasa môžeme zaviesť "orákulovu pásku", ktorú stroju pridáme (ako ďalšiu pásku), na ktorej bude mať (takže napríklad na tejto páske na pozícii bude , ak a ak ).
Chcelo by to ukázať, že všetky tieto možnosti zavedenia sú ekvivalentné.
To, že B-ČRF môžeme reprezentovať Turingovým strojom s orákulom alebo B-Pascalom je viac menej vidieť. Ukáže sa to rovnako ako pri obyčajných ČRF - sú vybudované induktívne. Opačným smerom použijeme mierne všeobecnejší postup.
Výpočtový strom
Predstavme si program P so vstupmi B (množina) a x (číslo): P(B, x). To, ako náš program počíta sa dá nakresliť do výpočtového stromu.
Image:Vypoctovy%20strom.PNG
Tento strom zachytáva všetky možné scenáre behu programu pre ľubovoľný vstup a ľubovoľnú množinu . Program dostane na vstupe a množinu . Výpočet potom prebieha podobne ako výpočet bežného programu definovaného klasickou ČRF. Rozdiel je však v tom, že naviac je povolená operácia <em>otázky</em>. To znamená, že sa behom výpočtu je možné spýtať, či je nejaké prvkom množiny . Podľa toho, aká bude odpoveď, sa je možné vo výpočte rozhodovať a následne sa vydať po ľavej či pravej vetve stromu. Týchto otázok je povolený neobmedzený počet. Výpočet môže dopadnúť rôzne. Buď skončí (na obrázku úplne ľavá vetva) alebo sa "zacyklí" (druhá vetva zľava). To, čo je pre nás dôležité je, že každý konečný výpočet sa skončí po konečnom počte krokov.
Kľúčové miesto
Množina konečných vetiev výpočtového stromu je rekurzívne spočítateľná. Nahliadne sa to tak, že prehľadávaním do šírky môžeme prejsť celý strom a tak efektívne vygenerovať všetky jeho konečné vetvy.
Tiež si môžeme vymyslieť aj rekurzívne spočítateľnú množinu , ktorá obsahuje štvorice , kde je vstup programu, je jeho výstup a a sú indexy konečných množín, ktoré vyrobíme tak, že keď ideme po vetve v strome od k (beží nám program), tak pri rozhodovaní sa, či je prvkom množiny uložíme do množiny s indexom ak je prvkom množiny a ak nie je prvkom množiny , tak uložíme do množiny s indexom . Indexy a na začiatku reprezentujú kód prázdnej množiny a postupne sa menia tak, že do odpovedajúcich množín pridávame práve rozhodované podľa príslušnosti do . Ak v strome na obrázku pôjdeme stále vľavo, tak (množina s indexom ) bude prázdna a bude obsahovať a .
Potom platí: práve vtedy, keď
ParseError: KaTeX parse error: Undefined control sequence: \and at position 35: …y, u, v> \in W \̲a̲n̲d̲ ̲D_u \subset B \…
.{{TODO|Nasledujúci odstavec som nepochopil, takže je to tu napísané len "ako som to zaznamenal".}} <TIN064%20Rekurzivní%20spočetnost#Některé%20z%20vlastností> bola veta, že ČRF má rekurzívne spočítateľný graf. Tiež sa hovorilo, že by mala existovať nejaká rekurzívne spočítateľná podmienka (v našom prípade by mala byť podmienkou tá vec, s , ktoré je prvkom ). A my si z toho vytvoríme rekurzívnu podmienku tak, že miesto napíšeme a prehlásime za nejaký počet krokov (a za rekurzívnu, pretože máme ) a tak máme -rekurzívnu podmienku. A z toho, že to vieme takto vyjadriť je funkcia B-ORF?
A ešte sa na prednáške zopakovali definície, čo je to binárny reťazec (string) - konečná postupnosť núl a jedničiek. A tiež čo to znamená, že je začiatkom (prefixom) (normálne to značíme \preceq
, ale na tejto Wiki z technických dôvodov ). A ešte sme si povedali, že a stotožníme a že teda môžeme mať aj "prefix" množiny. A tiež, že množiny môžeme viac menej namapovať na reálne čísla medzi nulou a jednotkou. Problémy sú s číslami ako a , ktoré sú rovnaké, ale predstavovali by inú množinu. A teda množín, s ktorými budeme pracovať, je nespočítateľne veľa.