INF 4130. 8. oktober 2009. Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet



Like dokumenter
INF Stein Krogdahl. NB: Det som under forelesningen ble kalt et vitne er nå omdøpt til et sertifikat.

INF Algoritmer: Design og effektivitet

INF oktober Stein Krogdahl. Altså: Hva kan ikke gjøres raskt (med mindre P = NP)

Kompleksitetsanalyse Helge Hafting Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO117D Algoritmiske metoder

Kompleksitetsteori reduksjoner

Turingmaskiner en kortfattet introduksjon. Christian F Heide

Go with the. Niende forelesning. Mye matematikk i boka her ikke så komplisert, men mye å holde styr på.

MAT1140: Kort sammendrag av grafteorien

INF3/4130 PRØVE-EKSAMEN MED SVARFORSLAG Gjennomgås 1/ , (lille aud.)

Turingmaskiner en kortfattet introduksjon. Christian F Heide

Utførelse av programmer, metoder og synlighet av variabler i JSP

MAT1030 Diskret Matematikk

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

INF109 - Uke 1b

UNIVERSITETET I OSLO

Diagnosekart for oblig 2, INF3/4130 h07

MAT1030 Diskret matematikk

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

Forelesning 1. Algoritmer, pseudokoder og kontrollstrukturer. Dag Normann januar Vi som skal undervise. Hva er diskret matematikk?

INF 4130 Oppgavesett 3, 20/ m/løsningsforslag

Vann i rør Ford Fulkerson method

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Livet til det lykkelige paret Howie og Becca blir snudd på hodet når deres fire år gamle sønn dør i en ulykke.

INF2220: Time 8 og 9 - Kompleksitet, beregnbarhet og kombinatorisk søk

Reelle tall på datamaskin

Svarforslag til ukeoppgaver til INF 4130

INF / Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

Programmering i Java med eksempler

Løsningsforslag Prøveeksamen i MAT-INF 1100, Høsten 2003

Tallinjen FRA A TIL Å

Hva er en algoritme? Har allerede sett på mange algoritmer til nå i IT1101. Forholdet mellom en algoritme og et program. Algoritme program prosess

ADDISJON FRA A TIL Å

Forelesning 14. Rekursjon og induksjon. Dag Normann februar Oppsummering. Oppsummering. Beregnbare funksjoner

MAT1030 Diskret matematikk

: subs x = 2, f n x end do

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Om mulige og tilsynelatende umulige programmeringsoppgaver

Analyse av Algoritmer

Hvordan blir jeg en ordentlig informatikkstudent? Kurs i studiestrategier med fokus på INF1000

Algoritmer - definisjon

KAPITTEL 3 Litt logikk og noen andre småting

Enkle generiske klasser i Java

MAT1030 Forelesning 30

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

«Litterasitetsutvikling i en tospråklig kontekst»

Veiledning feriepenger

Oppsummering av Uke 3. MAT1030 Diskret matematikk. Binære tall. Oppsummering av Uke 3

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Prøveeksamen 2006 med svarforslag

Kompleksitet. IN algoritmer og datastrukturer Plenumstime / repetisjon

Obligatorisk oppgave 2 i INF 4130, høsten 2009

Prosjektoppgave, FYS-MEK1110 V06 ROBERT JACOBSEN

Gangemesteren Nybegynner Scratch PDF

En eksplosjon av følelser Del 2 Av Ole Johannes Ferkingstad

Anitool åpner opp for en hel verden av kreative muligheter på nett. Uten koding eller tunge programmer. Dette er enkelt, webbasert og rimelig!

PG4200 Algoritmer og datastrukturer forelesning 10. Lars Sydnes 21. november 2014

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

Løsningsforslag Øving 5 TMA4140 Diskret matematikk Høsten 2010

Kap. 5, Del 3: INF5110, fra 1/3-2011

Kapittel 3: Litt om representasjon av tall

Oversikt over bevis at det finnes uendelig mange primtall med bestemte egenskaper

Tall og mengder. Per G. Østerlie. 30. september 2013

6. oktober Dagens program: Første time: Andre time, gjesteforelesning: Uavgjørbarhet. Stein Krogdahl. (Ikke pensum, egne foiler legges ut)

Litterasitetsutvikling i en tospråklig kontekst

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Redd verden. Steg 1: Legg til Ronny og søppelet. Sjekkliste. Introduksjon

Posisjonsystemet FRA A TIL Å

INF mai 2014 Stein Krogdahl, Ifi, UiO

Telle i kor steg på 120 frå 120

Eneboerspillet del 2. Håvard Johnsbråten, januar 2014

Karen og Gabe holder på å rydde bort etter middagen.

ROBERT Frank? Frank! Det er meg. Å. Heisann! Er Frank inne? HANNE Det er ikke noen Frank her. ROBERT Han sa han skulle være hjemme.

MAT1030 Diskret Matematikk

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

QED 1 7. Matematikk for grunnskolelærerutdanningen. Bind 2. Fasit kapittel 1 Tallenes hemmeligheter

Mengder, relasjoner og funksjoner

Kap. 5, del 1: Parsering nedenfra-opp (Bottom up parsing) INF5110. Stein Krogdahl Ifi, UiO

MAT1030 Diskret Matematikk

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

UNIVERSITETET I OSLO

MAT1030 Diskret Matematikk

Forelesning 29: Kompleksitetsteori

Notat for oblig 2, INF3/4130 h07

Skilpaddefraktaler Erfaren Python PDF

Kompleksitet og Beregnbarhet

Mer om representasjon av tall

Det er frivillig å delta i spørreundersøkelsen, ingen skal vite hvem som svarer hva, og derfor skal du ikke skrive navnet ditt på skjemaet.

Steg for steg. Sånn tar du backup av Macen din

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

Skilpadder hele veien ned

INF oktober Stein Krogdahl. Kap 23.5: Trær og strategier for spill med to spillere

KUNST, KULTUR OG KREATIVITET. Barn er kreative! Vi samarbeider og finner på nye leker, bruker fantasien og bygger flotte byggverk

Korteste vei problemet (seksjon 15.3)

2 Om statiske variable/konstanter og statiske metoder.

Tall og algebra Matematikk Side 1 av 6

Avgjørbarhet / Uavgjørbarhet

VELKOMMEN TIL MAT-INF1100(L) Knut Mørken Rom 1033, Niels Henrik Abels hus

Hvordan behandle Lipo

Repetisjon: høydepunkter fra første del av MA1301-tallteori.

Transkript:

INF 4130 8. oktober 2009 Stein Krogdahl Dagens tema: Uavgjørbarhet Dette har blitt framstilt litt annerledes tidligere år Se Dinos forelesninger fra i fjor. I år: Vi tenker mer i programmer enn i Turing-maskiner Pensum blir foilene, og antakeligvis litt fra kompendiet. Morsom bok: David Harel, Algorithmics Neste uke: NP-kompletthet Hvilke problemer kan løses, men ikke effektivt? 1

Litt historie: Hva kan ikke gjøres Fra 1900 og utover vokste feltet som kalles metamatematikk (matematiske studier av matematikken selv, dens muligheter og begrensninger). På 1930-tallet kom en del resultater omkring eksistens/ikke-eksistens av algoritmer for ulike problemer. Kurt Gödel (1931): Ufullstendighetsresultater. Alan Turing (1936): «On computable numbers, with an application to the Entscheidungsproblem». Uløsbare = uavgjørbare (siden vi snakker om ja/nei-spørsmål) Løsbare Turings resultater og teknikker

Historie: Hva kan gjøres, men ikke raskt (neste forelesninger) Edmonds: «min algoritme har polynomisk kjøretid, den trivielle bruker eksponensiell tid!» Vi har altså nå resultater omkring problemer som har algoritmer med polynomisk kjøretid. Cook / Levin (1972): NP-completeness. Uavgjørbare (siden vi snakker om ja/nei-spørsmål) Umedgjørlige Cook/Levins resultater og teknikker P (Polynomisk kjøretid)

Algoritme = en Turing-maskin Algoritme 1 1 397 397 + 56 = + 46 443 input 443 output beregning regler Turingmaskin b b 0/ 1 0 b b uendelig tape (input/output) lese-/skrivehode q 2 q 1 s prosessor Kontrollenhet med et endelig antall tilstander og regler for overgang mellom tilstandene, skriving på tapen og flytting av lese-/skrivehodet tilstander Regler (del av maskinen) Steg(s,0) = (q 1, b, R) Steg(q 1,0) = (q 2, b, R)

Church s tese Algoritme tilsvarer Turing-maskin Turing-maskiner kan beregne enhver funksjon som kan beregnes av en algoritme, et dataprogram eller en datamaskin. Programmeringsspråks beregningskraft Et programmeringsspråk (Java, C, Lisp, ) er Turing-komplett om det kan gjøre de samme beregninger som Turing-maskiner. Kan vi implementere en Turing-maskin i språket vårt, er det det. Universelle datamaskinmodeller En datamaskinmodell er Turing-komplett om den kan gjøre de samme beregninger som en Turing-maskin. McCullok og Pitts har vist at nevrale nett kan simulere Turing-maskiner. Uberegnbarhet Hvis en funksjon f ikke kan beregnes av en Turing-maskin, så finnes det ingen datamaskin som kan beregne f.

Sammenlikning mellom Turingmaskin og program/algoritme Vi skal ikke knytte oss like mye til Turing-maskiner som tidligere år, men i stedet tenke mer i programmer/algoritmer. Men merk: Det fine med Turing-maskiner er at det er opplagt hva et steg er at det er opplagt at et steg kan utføres i endelig tid den arbeider med en endelig datamengde i hvert skritt om det er tvil om detaljer kan man alltid gå tilbake å studere den fullt definerte Turing-maskinen. Fordelen med å bruke programmer (= algoritmer) er vi er på vårt hjemmeområde, at vi allerede har en grei terminologi at vi veldig lett ser hva enkle grep fører til 6

Turing-maskiner og programmer/algoritmer Imidlertid: For at et program skal ha samme styrke som en Turing-maskin må programmeringsspråket og utførelsesdelen ha litt spesielle egenskaper Må ha noe som tilsvarer Turing-maskinens tape som alltid kan utvides etter behov, men som alltid bare har data på endelig del. Derfor: Språket må ha variable som kan ha så stor verdi man bare vil og en eveig løkke kan derfor sette i := i + 1 inne i løkka uten at det blir noe overflow-tull eller liknende Bør kutte ut reelle tall, siden de gjør det uklart hva et steg er! Om OO-språk: Må kunne lage så mange objekter e.l. man ønsker. Alle programmer skal starte med en viss endelig input-fil Leverer svar på en eller flere output-filer (som er tomme fra starten) Vi må altså velge en passelig steg-enhet i prog.-språket: F.eks. hente opp en operand, gjøre en aritmetisk operasjon, gjøre et assignment, Vi vil vanligvis velge steget slik at output/input av ett tegn er ett steg. 7

Universell Turing-maskin En viktig ting med Turing-maskiner (i bevis etc.) er at vi kan lage en universell Turing-maskin. Dette er en Turing-maskin som kan ta beskrivelsen av en hvilken som helst Turing-maskin T som input (først på tapen) og så kan utføre (simulere) T, der input til T ligger bak baskrivelsen av T på tapen Dette tilsvarer i programmerings-verdenen at vi kan skrive en kompilator/interpretator som et vanlig program Dette er selvfølgelig for oss, og vi behøver derfor ikke mase mye med det, og kan derfor tenke lettere. Men i 1936 måtte Turing mase mye med dette! t8

Hva er et problem? Et problem P består av en mengde instanser {P 1, P 2, } som er de egentlige konkrete problemene, som hver har et svar Vi skal her først og fremst snakke om desisjons-problemer, altså problemer der hver enkelt instans har et svar Ja eller Nei En koding av et problem P, K(P), er en tekstlig sekvensiell (og enen-tydig) representasjon av hver av instansene til problemet. En algoritme A som løser (eller avgjør) P er en algoritme som ved input K(P i ) etter endelig tid leverer riktig svar på P i, for alle P i. Et problem P er avgjørbart om det finnes en algoritme som løser P. Merk her at det her ikke forlanges at vi skal kunne vise fram denne algoritmen, men bare at en algoritme slik finnes. 9

Bevis: Observasjon: Et problem som har et endelig antall instanser er avgjørbart Vi antar at instansene for P er P 1, P 2,, P N Følgende algoritme vil da løse problemet: if <input = P 1 > then <levér svaret på P 1 > else if <input = P 2 > then <levér svaret på P 2 > else if <input = P N > then <levér svaret på P N > ; Merk at vi vet at denne algoritmen finnes, selv om vi ikke nødvendigvis vet alle de riktige svarene. 10

Et problem som ikke er avgjørbart Stoppeproblemet STP (eller HALT) er som følger: Instans: En algoritme representert som et program, og en (endelig) input-streng X til dette. Spørsmål: Vil programmet med input X stoppe, eller gå i evig løkke? Vi påstår at STP ikke er avgjørbart! Beviset er overraskende enkelt Egentlig så enkelt at man lett får følelsen av at det hele er litt hokus-pokus-filiokus. Vi skal bevise dette ved å anta at STP er avgjørbart og vise at denne antakelsen fører til en selvmotsigelse. 11

Hokus: Bevis for at STP er uavgjørbart Vi antar at STP er avgjørbart Altså at det finnes et program P som løser STP Det vil si at om P får som input et vilkårlig program Q og input X til dette, så vil P (etter endelig tid ) komme med svaret Ja (altså, Q(X) vil stoppe) eller Nei (Q(X) vil gå i evig løkke) X Q P Ja (Q(X) stopper) Nei (Q(x) stopper ikke) 12

Pokus: Mer bevis for at STP er uavgjørbart Ut fra P lager vi så et nytt program P, som har ett program R som input, og som lages som følger: X Q P Ja Nei P R X Q P Ja Nei Stopp 13

P Filiokus: Vi ser så på utførelsen P (P ) P X Ja P Q Nei Stopp Det viser seg at denne utførelsen fører til en selvmotsigelse, slik: Anta først P (P ) stopper. Da skulle P her svare Ja, men det vil jo si at P (P ) faktisk går i evig løkke, altså en motsigelse. Anta så at P (P ) ikke stopper. Da skulle P her svare Nei, men det vil jo igjen bety at P (P ) faktisk vil stoppe, altså også her en motsigelse. Det betyr altså at P (P ) verken stopper eller ikke stopper. Denne motsigelsen betyr at vi må ha gjort en eller annen gal antakelse, og den eneste kandidaten er at det finnes en algoritme som løser STP. Altså er den antakelsen gal! Stoppeproblemet er uavgjørbart.

Dette beviset kan også sees som et diagonaliserings-bevis En viss type bevis kalles diagonaliseringbevis Et slikt bevis brukes f.eks. til å vise at det er flere reelle tall enn naturlige tall. Interesserte kan slå opp i Dino Karabegs foiler fra 24. september i fjor, eller i kompendiet. 15

Finnes andre uavgjørbare problemer? Ja, i masse vis! En liste ligger f.eks. på: en.wikipedia.org/wiki/list_of_undecidable_problems Vi kan nevne: Om BNF-grammatikker: Gitt to BNF-grammatikker. Generer de samme språk? Gitt en BNF-grammatikk. Er den flertydig? Nesten ethvert spørsmål om programmer: Vil en gitt variabel i et gitt program noen gang få verdien 2? Vil et gitt program, ved input x alltid levere verdien x 2 Diofantiske likninger Gitt et polynom i variablene x, y, z, med heltallige koeffisienter. Kan dette bli null for heltallige x, y, z,? En mengde såkalte flisleggingsproblemer 16

Hvordan vise at et problem er uavgjørbart? Dette er greit nok når vi først har ett uavgjørbart problem Om vi ønsker å vise at R er uavgjørbart, gjør vi som følger: Anta at vi har en algoritme P som løser (alle instanser av) R. Forsøk så, med denne antakelsen, å løse stoppeproblemet (STP), ved å bruke P som en slags subrutine e.l. Om du klarer det, og siden STP fakstisk er uavgjørbart, vet vi at antakelsen var gal. Altså er problemet R uavgjørbart. Vi sier da at stoppeproblemet er reduserbart til R Det er jo vel og bra, men det er umulig å huske hvilken vei reduksjonen skal gå for å få vist det man ønsker. Derfor anbefaler jeg heller å tenke slik: Vis at dersom R kan avgjøres så kan også stoppeproblemet avgjøres. Men stoppeproblemet er uavgjørbart, og dermed er også R uavgjørbart. må gjerne forsøke begge veier før man finner den riktige! 17

Eksempel på uavgjørbarhets-bevis Vi vil vise at følgende problem R (forenklet STP) er uavgjørbart: Instans: Et program Spørsmål: Vil dette programmet stoppe om det får en tom input-fil? Etter skjemaet antar vi at det finnes et program P som avgjør R. Vi må så vise at vi kan løse en generell instans av STP (vi betegner den (Q, X)) ved hjelp av P. Vi omarbeider da Q til Q slik: Legg til en første del som legger konstant-strengen X inn i en ny array A. Omgjør alle input-setninger i Q, slik at de i stedet leser fra arrayen A. Vi ser da at Q med tomt input, etter initialiseringen av A vil kjøre og lage output akkurat som Q ville med input X. På Q bruker vi så programmet P. Vi kjører altså P(Q ) Dette skulle (etter antakelsen om P) svare Ja om Q med tomt input vil stoppe, og ellers svare Nei. Men derved ville vi altså kunne avgjøre om Q(X) vil stoppe, og vi ville altså kunne avgjøre stoppeproblemet. Dette er feil, altså er R uavgjørbart.

Konklusjon på forrige foil Stoppeproblemet er uavgjørbart enten instansene er et program P med input X, eller om instansene bare er et program som ikke tar input. Det kan ofte i bevis være like greit å bruke denne spesielle versjonen av stoppeproblemet, i stedet for den generelle versjonen. Og husk generelt: Ethvert problem som er vist å være uavgjørbart kan brukes i slike bevis i stedet for stoppeproblemet. 19

Det finnes enda vanskeligere problemer enn de uavgjørbare For de uavgjørbare kan vi ha en algoritme som helt sikkert stopper og sier ja om svaret er ja, men som går i løkke om svaret er nei: Slik algoritme for stoppeproblemet: Kjør algoritmen, og om den stopper skriv ut ja. Det finnes enda vanskeligere problemer P: P er uavgjørbart, men det finnes heller ingen algoritme som på alle ja-instanser innen endelig tid vil svare ja. Disse kan kalles sterkt uavgjørbare. Et slikt er: Instans: Et program Spørsmål: Vil dette stoppe for alle lovlige input? 20