Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Relevanta dokument
Föreläsning 5. Deduktion

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

DD1350 Logik för dataloger. Fö 7 Predikatlogikens semantik

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

COMPUTABILITY BERÄKNINGSBARHET. Källa: Goldschlager, Lister: Computer Science A Modern Introduction 2. upplaga 1988, Prentice Hall

D. x 2 + y 2 ; E. Stockholm ligger i Sverige; F. Månen är en gul ost; G. 3 2 = 6; H. x 2 + y 2 = r 2.

Övningshäfte 1: Logik och matematikens språk

Logik och kontrollstrukturer

Om a 2 är ett jämnt tal, så är också a ett jämt tal sant. = 4n 2 + 4n + 1

Beräkningsvetenskap föreläsning 2

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Induktion, mängder och bevis för Introduktionskursen på I

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Kontinuitet och gränsvärden

JavaScript del 3 If, Operatorer och Confirm

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Övningshäfte 2: Induktion och rekursion

1.1. Fördjupning: Jämförelse av oändliga mängder

DD1361 Programmeringsparadigm. Carina Edlund

Datorprogram, algoritmer och Turing-maskiner

Algoritmer, datastrukturer och komplexitet

Logik. Boolesk algebra. Logik. Operationer. Boolesk algebra

Tal till Solomon Feferman

INDUKTION OCH DEDUKTION

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Formell Verifiering. Hur vet man att ett system fungerar korrekt? Lisa Kaati

Klassdeklaration. Metoddeklaration. Parameteröverföring

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Föreläsning 3-4 Innehåll

Bisektionsalgoritmen. Kapitel Kvadratroten ur 2

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Laboration: Whitebox- och blackboxtesting

Mer om reella tal och kontinuitet

MMA132: Laboration 2 Matriser i MATLAB

Svar till vissa uppgifter från första veckan.

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

MATEMATIKENS SPRÅK. Avsnitt 1

inte följa någon enkel eller fiffig princip, vad man nu skulle mena med det. All right, men

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

2D1342 Programkonstruktion för F1, ht 2006

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Programmeringsteknik I

Algoritmer, datastrukturer och komplexitet

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Oändliga tal och mängder.

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Användarhandledning Version 1.2

Imperativ programmering

PROV I MATEMATIK Automatateori och formella språk DV1 4p

2 Matematisk grammatik

Formell logik Kapitel 5 och 6. Robin Stenwall Lunds universitet

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

(N) och mängden av heltal (Z); objekten i en mängd behöver dock inte vara tal. De objekt som ingår i en mängd kallas för mängdens element.

kl Tentaupplägg

Algebra I, 1MA004. Lektionsplanering

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Diskret matematik, lektion 2

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

DD1350 Logik för dataloger

Tema Oändligheten Oändligheten - 1

Hur man skriver matematik

Algoritmer, datastrukturer och komplexitet

Filosofisk logik Kapitel 19. Robin Stenwall Lunds universitet

DD1350 Logik för dataloger. Vad är logik?

Lösningar för tenta i TMV200 Diskret matematik kl. 14:00 18: Svar: Ja, det gäller, vilket kan visas på flera sätt (se nedan).

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

7, Diskreta strukturer

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

7, Diskreta strukturer

Filosofisk logik Kapitel 15 (forts.) Robin Stenwall Lunds universitet

Föreläsning 9: Talteori

Data, typ, selektion, iteration

Föreläsning 3: Booleans, if, switch

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Tentamen i Programmering

1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta denna följd av tal, där varje tal är dubbelt så stort som närmast föregående

Känguru 2013 Student sida 1 / 7 (gymnasiet åk 2 och 3)

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

TDIU01 - Programmering i C++, grundkurs

Programdesign. Dokumentera. Dokumentera

Formell logik Föreläsning 1. Robin Stenwall

TMV166 Linjär Algebra för M. Tentamen

Digitalt lärande och programmering i klassrummet

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Föreläsning 5: Kardinalitet. Funktioners tillväxt

Grundläggande logik och modellteori

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

Visual Basic, en snabbgenomgång

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

Transkript:

Är varje påstående som kan formuleras matematiskt*) alltid antingen sant eller falskt? *) Inom Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige Exempel: 12 = 13 nej, falskt n! > 2n sant om n > 1, dvs falskt om n < 2 f (x) > 0 Beror på vad f och x är. Hilbert är övertygad om att det är så Olika sorters matematik utgår från olika uppsättningar axiom 1931: Kurt Gödel visar att: Nej, nej, det är inte så! Det går att konstruera självrefererande matematiska påståenden av typen Detta påstående är falskt. som varken är sanna eller falska 1 Ett påstående är en satstyp med vilkens hjälp satsens användare hävdar att ett givet sakförhållande råder eller inte råder Påståenden är satser som antingen är sanna eller falska 2 30-talet: Alan Turing (och Alonso Church): Aristoteles (384-322 f. kr) För stegvisa beräkningar utförda av en maskin kan man inte alltid säga om de terminerar eller ej Alan Turing (1912-1954) Turing ger också ett exempel uttryckt med en teoretisk dator (sedemera kallad en Turingmaskin): Eller samtidigt både sant och falskt(!) 1936: Turing bevisar, inspirerad av Kurt Gödel, att: I en by bor en (manlig) barberare som rakar alla män i byn som inte rakar sig själva (och inga andra). Påstående: Barberaren rakar sig själv Detta påstående är varken sant eller falskt(!) I skenet från Gödels upptäckt av motsvarande matematiska paradoxer skulle alltså även dessa kunna betraktas som meningslösa (om man vill) Kurt Gödel (1906-1978) och hans kollega Albert Einstein (1879-1955) Introducerar beräkningar som stegvisa procedurer Istället för sant eller falskt för ett påstående så introducerar de terminerar eller terminerar inte för en beräkning Klassisk logik t ex Det regnar nu och klockan är 12 Russels paradox (populärversionen): David Hilbert (1862 1943) ramen för en viss sorts matematik (det finns olika ) Sant för alla x > 0 om f(x) = x2 + 1 Falskt för några x (t ex x = 0) om f(x) = sin x - 0.5 En sats som inte kan avgöras räknas inte som ett påstående utan en meningslös sats - en paradox 1920: Matematikern David Hilbert frågar: Bertrand Russell (1872 1970) En av grundstenarna för datavetenskapen 3 4

Givet ett datorprogram P och ett indata D, kommer P att terminera eller ej om det får D som indata? Rent praktiskt får P vara en procedur/metod/funktion Vi skriver P(D) då P körs med D som indata Eventuell I/O tar ändlig tid Kan man skriva ett program som löser för alla P och D? Programmet får vara skrivet i vilket språk som helst python, Java, C Både P och D är strängar, dvs programkod och text Heltal, double, arrayer, listor kan ju beskrivas med strängar 5 Bevisteknik: Motsägelsebevis Vi ska nu argumentera för att inte går att lösa som man gör i ett motsägelsebevis I såna antar man först motsatsen till det man vill bevisa och visar sedan [genom logiska resonemang] att detta leder till motsägelser, ja rena absurda situationer Konfronterad med absurditeterna drar man slutsatsen att orsaken måste vara ett felaktigt antagande, dvs att motsatsen till det man antog måste gälla Precis det man ville bevisa! J Det kanske mest kända motsägelsebeviset är det som säger att kvadratroten ur 2 är ett irrationellt tal 6 Antagande Viktigt för beviset Annars är både a och b jämna och har 2 som gemensam faktor Matematiskt är: jämnt * jämnt = jämnt udda * udda = udda Motsägelse! Vi antar därför nu att datorprogrammet som löser finns! Vi kallar det terminerar och anropar det med terminerar(p, D) terminerar(p, D) returnerar true om (och endast om) P terminerar om det får D som indata och false annars OBS! Vi har inga begränsningar på vad terminerar får göra Det får t ex undersöka kodraderna i P, kompilera delar av dem och köra dem mm Det får t o m använda andra program som hjälp, vilka som helst, t ex för att undersöka D Det får också fråga mänskliga experter (skicka SMS, tolka svaren) Dessutom kan vi vänta länge bara vi tillslut får ett riktigt svar Dock såklart ej oändligt länge J Slutsats 7 (Allt detta är något förenklat uttryckt med huvudsakligen korrekt) 8

Exempel Programmet vp 1) Ett program som terminerar: program hasnonzerolength(e) if ( E 0) then { return true else { return false Ger alltid ett svar som anger om argumentet E, längden på E, är mer än noll eller ej 2) Ett program som inte terminerar: program stop(e) Går alltid in i evig loop utan att bry sig om E, och då kan det ju inte avsluta! 3) Ett program som inte säkert terminerar: program test(e) if ( E ==0) then { else { Hm, eventuell terminering beror på uttrycket E, längden av strängen E: Är längden noll går programmet in i evig loop, och avslutar alltså inte Annars når det else-delen och avslutar därefter Låt oss återvända till och använda terminerar i ett eget program som vi kallar vp, vårt program : else { terminerar (i if-satsens villkor) ska alltså avgöra om ett program X terminerar om det får sin egen källkod X som indata Vårt program vp kan verka konstigt (för vad gör det?!) men är ändå ett exempel på ett riktigt program 9 10 Hur fungerar vp? vp(hasnonzerolength) terminerar inte, för hasnonzerolength terminerar alltid även när det får sin egen kod sin indata vp(stop) terminerar, för stop terminerar aldrig även när det får sin egen kod som indata vp(test) terminerar inte, för test terminerar när det får sin egen kod som indata test terminerar ju om argumentet har längd > 0, och koden i test är ju ganska lång else { program hasnonzerolength(e) if ( E 0) then { return true else { return false program stop(e) program test(e) if ( E ==0) then { else { Hur fungerar vp? Vad händer nu om vi startar vp med X=vp som indata: vp(vp) else {?! Vårt program vp får som indata sin egen kod Kommer vp(vp) då att terminera eller ej..? Låt oss gå igenom vad som kan hända! 11 12

Vårt kära program: else { Analys av vp(vp) Eftersom X=vp beror vp:s beteende på vad terminerar(vp,vp) returnerar 1) Antag att true returneras dvs vp(vp) förutsägs terminera... men då är villkoret i if-satsen true dvs vp(vp) skulle gå in i evig loop och inte terminera! 2) Antag istället att false returneras dvs vp(vp) förutsägs inte terminera men då är villkoret i if-satsen false dvs vp(vp) når else-delen varpå det terminerar! Inget stämmer! Vad har hänt?! 13 Vårt kära program: else { Slutsats Programmet vp existerar (se till vänster) och av dess delar är allt känt utom terminerar... Vi har bara antagit att terminerar finns, inte t ex visat hur det är programmerat Eftersom vi når logiska motsägelser (absurditeter!) måste vi ha utgått från nåt som inte var sant och som lett oss till dessa tokigheter Enda slutsaten är, möjligen något förvånande, att terminerar inte finns dvs inte går att programmera! Det var detta Alan Turing kom på 1936 14 Diskussion Det finns alltså datorprogram vars funktion man kan tänka sig (fantisera om) men aldrig programmera OBS! Programmet terminerar existerar inte/kan inte programmeras för att klara av alla indata P och D MEN kan existera för vissa begränsade specialfall av indata Man har nu kommit på många fler program som inte existerar annat än i begränsade specialfall t ex: Kodoptimering t ex att automatiskt minimera programs storlek och få bort död kod Verifiera att program överensstämmer med sin specifikation m fl Finns även andra typer av problem som är lika omöjliga Såna kallas oavgörbara problem 15 Diskussion The Tiling Problem: Ungefär: Givet några (t ex 3) slags kakelplattor (t ex kvadratiska), obegränsat (oändligt) antal av varje, duger (de 3) sorterna till för att kakla varje tänkbar rektangel (med kvadratiska rutor stora som kakelplattorna) så att plattornas mönster passar ihop längs kanterna överallt? Även The Mortal Matrices Problem: Givet en mängd n x n matriser med heltal, kan sådana (flera av varje tillåts) multipliceras ihop på något sätt så att resultatet blir nollmatrisen? Oavgörbart för 7 eller fler 3 3 matriser eller två 15 15 matriser a) b)? Nej! Inte ens 3x3 går? Ja! Periodisk c) Generellt? Oavgörbart. Finns t o m bitar som ger oändliga ickerepeterande mönster (Wang tiles) och även andra än kvadrater (Penrose Tilings) 16 Bildkälla: http://www.cs.stir.ac.uk/~sma/it21/computability.pdf

Sir Roger Penrose (1931-) Drake och pil : 17 Källa: http://tilings.math.uni-bielefeld.de/substitution_rules/penrose_kite_dart Penrose Tilings (finns flera olika)