1
REDENEREN, REKENEN, EN COMPLEXITEIT Redeneren is rekenen is redeneren In het abstracte perspectief van de logicus zijn gevolgtrekkingen in wezen slechts symbolische configuraties: en wel rijtjes symbolen voor de gegevens en de conclusie. Logische geldigheid is een eigenschap die sommige van die configuraties wel hebben, en andere juist niet. Om geldigheid precies na te gaan voor een gevolgtrekking kan men vaak werken met een soort rekenmethode op de gegeven symbolen. Reeds de beroemde 17de eeuwse wiskundige Leibniz vatte redeneren op als een speciale vorm van rekenen. Hiertoe zocht hij naar een algemene symbolentaal, de 'Characteristica Universalis', waarin beweringen geheel exact kunnen worden geformuleerd, waarna geldigheid van gevolgtrekkingen wordt berekend via een 'Calculus Ratiocinator'. Leibniz is niet geheel toevallig ook de bedenker van het binair rekenen met grondtal 2, hetgeen de basis vormt van symbolische manipulatie door moderne computers. Ook Boole, de ontdekker van de moderne propositielogica zag redeneren als rekenen, gebruik makend van de analogieën tussen Boolese operaties en algebraische functies op de getallen {0, 1}, de moderne 'Boolese Algebra'. Vanaf hier loopt een rechte lijn naar de moderne informatica, met het werk van Turing uit de jaren 1930 als mijlpaal. Voor het eerst werd daar mechanische berekenbaarheid wiskundig gedefinieerd, en op zijn grenzen onderzocht – terwijl ook de ontwikkeling van echte rekenmachines een stimulans kreeg. Turing's werk laat tevens zien dat ieder manipuleren van symbolen door geschikte codering in getallen neerkomt op een vorm van rekenen – en hetzelfde inzicht staat centraal in Gödel's beroemde werk over de grondslagen van de wiskunde (zie Week 5). Sinds de jaren dertig zijn dit soort inzichten ook praktisch gemeengoed geworden: een computer die taal verwerkt staat in feite te rekenen. Overigens wil dit alles niet zeggen dat elke symbolische activiteit uiteindelijk reduceert tot rekenen. De connectie tussen rekenen en redeneren ligt veeleer symmetrisch. Zo kan men ook rekenprocessen even goed opvatten als bewijsprocessen (in equationele logica, of andere symbolische bewijssystemen), en dat is nu juist weer de praktische kijk op programmeren die u vindt in bekende programmeertalen als PROLOG. In dit college bespreken we een aantal raakpunten tussen logisch redeneren en rekenen, met speciale aandacht voor verschillende niveaus van complexiteit van rekenmethoden, een onderwerp van groot belang in de informatica, dat sinds de jaren 70 een geheel nieuwe wiskundige theorie heeft opgeleverd.
2 Propositielogica als rekenen Geldigheid van een gevolgtrekking kunnen we in de propositielogica berekenen met zogenaamde waarheidstafels. Deze taal beschrijft heel simpele situaties, namelijk hoe het staat met de basisbeweringen. Bekijk bijvoorbeeld weer de geldige stap A
B, ¬A
B
Er zijn 4 relevante situaties, te weten de vier verdelingen van 'waar' en 'onwaar' over de twee basisbeweringen A, B, die we kunnen weergeven als AB, A-B, -AB, -A-B Elk van die situaties leidt ook tot waarheidswaarden voor samengestelde beweringen. Bijv. geldt A B alleen in de eerste drie, en de negatie ¬A alleen in de laatste twee. We denken als volgt over de geldigheid van onze gevolgtrekking. Het begin is een toestand waar we nog niets weten: alle 4 gevallen zijn mogelijk. De eerste premisse vertelt ons dat we zitten in een van de eerste 3 situaties, en de tweede premisse sluit dan de eerste twee uit: we zitten in -AB. En daar is de conclusie B inderdaad waar. Hier is een video-strip van de opeenvolgende 'informatietoestanden' en de 'updates': AB, A-B, -AB, -A-B
A B
AB, -AB, A-B
¬ A
B
-AB
-AB
Om hiermee nu te gaan rekenen werken we met waarheidswaarden 1 (waar) en 0 (onwaar). Bijv. de situatie A-B geeft aan A de waarde 1 en aan B de waarde 0. De logische operaties in samengestelde beweringen correponderen dan met eenvoudige rekenvoorschriften. Om te beginnen keert een negatie de waarheidswaarde om: waarde (¬A) = 1 – waarde(A) Een conjunctie A&B is alleen waar als zowel A als B waar zijn. Dit effect krijgen we precies met vermenigvuldiging van waarheidswaarden: waarde (A&B) = waarde (A) * waarde (B) Een disjunctie A B (gelezen als het inclusieve "en/of") willen we juist waar hebben alleen als minstens een van A en B waar is. Dit wordt bereikt door te stellen: waarde (A B) = het maximum van waarde (A) en waarde (B) Compacter genoteerd staan deze tabellen hieronder: A
¬A
1 0
0 1
A& B
1 0
1
0
1 0 0 0
A B
1
1 0
1 1 1 0
0
3 Dungedrukte getallen verticaal geven de waarden voor argument A aan, horizontale die voor B. Vet gedrukte getallen geven de waarden van de Boolese operatie voor de 4 mogelijke combinaties voor de argumenten. Tabellen voor de implicatie en equivalentie zijn ook eenvoudig te geven, maar we zullen ze hier niet gebruiken. Geldig gevolg is nu eenvoudig mechanisch uit te rekenen. Hier is een tabel van de 4 situates voor de eerder gevolgtrekking, met de waarheidswaarden van de beweringen: A 1 1 0 0
B 1 0 1 0
¬A 0 0 1 1
A B 1 1 1 0
B 1 0 1 0
!
Om te testen of B volgt uit A B, ¬A zoeken we alle lijnen waar alle premissen 1 krijgen (hier alleen de derde lijn), en gaan na of daar ook de conclusie een 1 krijgt. Dat klopt: de gevolgtrekking is geldig. Ter vergelijking is hier een ongeldig geval: ¬A
B, A
A 1 1 0 0
¬B :
B 1 0 1 0
¬A B 1 0 1 1
De eerste lijn is een tegenvoorbeeld: ¬A
A 1 1 0 0
¬B 0 1 0 1
!
B, A gelden daar allebei, maar ¬B niet.
Met meer basisbeweringen wordt de tabel groter. Bijvoorbeeld, om na te gaan dat uit A
B, ¬A
C volgt B
C
heeft u een tabel nodig met 8 lijnen voor de drie relevante beweringen A, B, C. Het rekenkarakter van geldigheid komt byzonder sprekend tot uiting bij geldige equivalenties: d.w.z. formules van de vorm die op elke lijn de waarde 1
krijgen. Hier zijn een aantal geldige principes van de zogenaamde Boolese Algebra: Dubbele Negatie De Morgan wetten Distributiewetten
¬¬A A ¬(A B) (¬A & ¬B) ¬(A & B) (¬A ¬B) (A & (B C)) ((A&B) (A&C)) (A (B&C)) ((A B) & (A C))
We kunnen dit opvatten als algebraische rekenregels voor de logische operaties. Deze zijn zelfs mooier dan die voor gewone getallen. Zo hebben we voor getallen wel de distributiewet m • (n + k) = (m •n) + (m•k), maar niet m + (n • k) = (m+n) • (m+k). Voor conjunctie en disjunctie mag het echter allebei! Waarheidstafels en Boolese Algebra liggen ten grondslag aan de digitale circuits die al onze computers sturen.
4
Kwantorlogische taken als rekentaken De volle taal van de wiskunde in vorige colleges was veel rijker dan onze voorbeelden tot nu toe, en bevatte naast Boolese operaties ook de kwantoren , . Ook voor deze taal komen echter dezelfde logische taken terug, waarvan we er hier enkele noemen. Het analoog van uitrekenen van een waarheidswaarde heet
Modelcontrole Gegeven een structuur M en een formule , bepaal of die formule waar is.
Bijv., gegeven kan zijn een graaf M met punten en pijlen, en een formule x y Rxy ('Opvolging'). Model checking van deze formule betekent systematisch nagaan of de relatie in de graaf (zoals gegeven door de pijlen) voldoet aan de eigenschap dat elk punt een uitgaande pijl heeft. Andere kwantorlogische formules drukken weer andere te controleren eigenschappen van grafen uit. het zal duidelijk zijn dat dit soort vragen systematisch zijn na te gaan wanneer we maar punt voor punt de graaf afwerken. Vervolgens is er weer de logische oer-vraag: is een gegeven gevolgtrekking geldig? Heel vaak wordt overigens een verwante vraag gesteld van Consistentie Heeft gegeven formule een model, d.w.z. een structuur M die
waar maakt?
In dat geval vragen we bijv. niet of C volgt uit P, maar of P &¬C consistent is. Dit was bijv. de denkwijze van semantische tableaus. Ook deze vraag is systematisch te bestuderen, hoewel niet zo simpel als het eerdere rekenen met waarheidstabellen. Het verschil heeft te maken met oneindigheid, en wel op twee manieren. Om te beginnen beschrijft onze taal veel meer structuren dan de propositielogica. Zelfs als we alleen naar 'kleine' situaties kijken, zoals eindige grafen, dan zijn dat er al oneindig veel. Die kunnen we niet allemaal tabelleren en in een eindig aantal stappen nazoeken. Maar bovendien kunnen wiskundige structuren zelf oneindig zijn, en ook dat is van belang voor testen van consistentie. Zo heeft de conjunctie van de graaf-eigenschappen van Transitiviteit, Ireflexiviteit en Opvolging een oneindig model, te weten de natuurlijke getallen met <, maar er is makkelijk in te zien dat ze geen eindig model heeft. In feite volgt uit Turing's werk en dat van Gödel zelfs een negatieve conclusie: Onbeslisbaarheid van de kwantorlogica Er bestaat geen mechanische methode voor het volledig en correct testen van geldigheid of consistentie in kwantorlogica. Leibniz' droom van de Calculus Ratiocinator is dus onuitvoerbaar. Dat dit toch ruimte laat voor positieve resultaten blijkt uit het feit dat de logica nog niet is opgeheven… Overigens suggereert een taal als deze ook nieuwe vragen. Een voorbeeld is
5 Modelvergelijking Gegeven twee eindige structuren (bijv. grafen) M, N, kunnen we ze onderscheiden met een kwantorlogische eigenschap? Positief geformuleerd is dit de vraag wanneer twee eindige structuren dezelfde formules waar maken. Dit laatste is weer equivalent met een structurele taal-vrije bewering, en wel dat er een isomorfisme bestaat tussen M en N. In die vorm staat dit ook bekend als het 'Graph Isomorphism' probleem. In Week 2 hebben we dit soort vragen geanalyzeerd door een spel voor twee spelers G en V tussen de structuren. Nog een andere manier om ons probleem te stellen is dan vragen welke speler in zo'n vergelijkingsspel de winnende strategie heeft. Daarmee komen we op het gebied van de speltheorie (zie Week 7), waar diverse algorithmen bestaan voor dit soort taken. Complexiteit van algoritmen Hoe moeilijk zijn logische taken? Een onbeslisbare vraag als kwantorlogische geldigheid is erg moeilijk te beantwoorden, terwijl uitrekenen van een waarheidswaarde in een tabel erg makkelijk is. Maar hoe maken we deze intuïties precies, en hoe brengen we dit spectrum in kaart? Een antwoord komt uit de informatica, en de complexiteitsanalyse van rekenproblemen en algoritmen. Hier zijn twee kenmerkende voorbeelden. We geven eerst een wijd verbreide en typisch 'doenlijke' rekentaak in de informatica, die zich leent voor snelle algoritmen en programma's: Bereikbaarheid Gegeven een eindige gerichte graaf van punten en pijlen, met twee punten s, t ('begin', 'eind'). Is er een pad van pijlen van s naar t? Dit probleem is typerend voor zoekproblemen, zoals: "Kan ik een reisroute vinden van Bloemendaal naar Singapore?", of "Kan ik een reeks zetten vinden vanuit de begintoestand van een spel komen naar een door mij gewenste eindtoestand?". Met name in de AI zijn zoekproblemen essentieel, maar ook in gebruik van databases e.d. We meten de complexiteit van dit probleem in termen van het aantal tijdstappen, gemeten in de grootte van de invoergraaf, dat een beste algoritme nodig heeft: Feit
Bereikbaarheid is oplosbaar met een algoritme met kwadratische tijd.
Bewijs Kleur s rood. R wordt de verzameling der 'actieve' rode knopen. Begin: R = {s}. Herhaal: pak een rode knoop weg uit R, en vervang die door al zijn echte opvolgers in de graaf, rood gekleurd. Misschien zijn er niet zulke opvolgers: dan krimpt R juist. Stop zodra R leeg is. Check dan of t rood is. Zo ja, dan is t bereikbaar uit s, zo nee, dan niet.
6 De volgende twee dingen zijn makkelijk na te gaan: (a) dit algoritme is correct: de antwoorden kloppen altijd (b)
het eindigt in kwadratische tijd t.o.v. de grootte van G.
n
Meer in het algemeen liggen problemen van deze soort in de complexiteitsklasse P (voor 'polynomiale tijd') van alle rekenproblemen waarvoor een algoritme bestaat dat het correcte antwoord geeft in een aantal tijdstappen dat naar boven wordt begrensd door een polynoom (lineair, kwadratisch, cubisch, of hoger…) met als variable de invoergrootte. Lineaire tijd is heel snel, kwadratische tijd is ook nog acceptabel (dit vindt men vaak bij zoekproblemen), terwijl bijv. ontledingsalgoritmen voor taal, zoals gebruikt in de 'natural language processing' op computers, vaak cubische rekentijd vergen. De klasse P wordt algemeen beschouwd als bestaande uit 'doenlijke' taken. De groei van rekentijd met de invoergrootte mee is binnen redelijke grenzen. Maar het kan erger! Het volgende welbekende probleem uit de informatica komt eveneens in talloze varianten voor. (Misschien zag u zojuist de Argentijnse film "Historias Minimas".) Een handelsreiziger wil een gegeven netwerk van steden zo doorlopen via een keuze van aanwezige verbindingen dat hij elke stad precies een keer aandoet. Handelsreizigersprobleem Is er een rondreis door een gegeven graaf die alle knopen één keer aandoet? Een methode met grof geweld somt alle verschillende mogelijke routes door de graaf op die geen punten herhaald aandoen, en kijkt of daar een rondreis bij zit. Dit vergt een exponentieel aantal tijdstappen omdat er exponentieel veel van dit soort routes kunnen zijn, gemeten in de grootte van de graaf. Maar we kunnen deze analyse iets verfijnen. Een positief antwoord op de vraag heeft de volgende vorm, die zich in veel informatica- en logica-problemen voordoet: (a) (b)
'geef een certificaat voor het antwoord', d.w.z. een object dat in korte tijd is op te schrijven gegeven de invoergrootte (dat geldt voor elke route op zich) 'test dat het certificaat voldoet' in korte tijd (in ons geval, het feit dat een voorgestelde route elk punt van de graaf inderdaad precies één keer bezoekt)
Algoritmen met dit karakter zijn beduidend complexer, en ze liggen in de de complexiteitsklasse NP ('niet-deterministische polynomiale tijd') van alle rekenproblemen waarvoor een JA-antwoord bestaat in het opschrijven van een certifikaat in polynomiale tijd in de invoergrootte, gevolgd door verifikatie van het certifikaat eveneens in polynomiale tijd in de invoer. Feit
Het Handelsreizigersprobleem ligt in NP.
7 Het probleem wordt ook wel eens gesteld als het vinden van een kortste rondreis als die er is. Dit is echt complexer, en klimt zelfs omhoog qua rekencomplexiteit. Andere bekende rekentaken zijn het al eerder genoemde oplossen van spelen, d.w.z. het bepalen welke van de spelers een winnende strategie heeft – of meer algemeen, het bepalen van strategische evenwichten (zie College 6). Een bekend genre zijn spelen op een gegeven graaf G, startend vanuit een of ander beginpunt. Graafspel De eerste speler I kiest een pijl, en we gaan naar het eindpunt daarvan. Nu moet de tweede speler II vanuit het nieuwe punt een pijl kiezen, enzovoorts, om en om. Als speler II geen pijl kan kiezen vanuit het huidige punt, en het is haar beurt, dan verliest zij. Dit spel kan oneindig doorgaan, maar dan wint speler II volgens de afspraak. Het is een aardige opgave om te zien hoe we kunnen bepalen wie dit spel kan winnen op een gegeven graaf G vanuit punt s. Dit probleem blijkt oplosbaar in polynomiale tijd P. Maar de volgende variatie is echt lastiger. Aardrijkskunde Hetzelfde spel, maar wie terugkeert op een reeds bezocht punt verliest. Dit lijkt op het bekende plaatsnamen spel waar we steden noemen, de volgende stad moet beginnen met de laatste letter van de vorige, en verliezen gebeurt als we geen stadnaam kunnen noemen, of we begaan de eerste herhaling van een eerdere stadnaam. Er valt te bewijzen dat Aardrijkskunde in een echt hogere complexiteitsklasse zit dan P of NP, en wel polynimomiale ruimte: Pspace. Deze moeilijker soort van problemen komt vaak voor met oplossen van spelen, zoals Schaken of GO. Deze complexiteitsklassen meten dus tijd- of ruimtebeslag van een rekenmethode. Daarbij gaat het nooit om absolute getallen, maar om grootteorde van groei met de grootte van de invoer. De resulterende vormen van gedrag zijn wiskundig welbekend. Bijv. binnen P hebben we lineaire tijd met aantal tijdstappen ten hoogste a • n + b, met n de lengte der gegeven rij invoer-symbolen, en a, b constanten. Kwadratische tijd wordt afgeschat door een term a • n2 + b, kubische tijd door a • n3 + b. De precieze grootte van die constanten a, b doet er voor het 'groeitempo' niet toe. We kunnen dit vergelijken met de bekende discussies over economische groei van de 'Club van Rome' in de jaren 70. Polynomiale groeitempo's zijn nog te doen: maar exponentiële groei met grootteordes als a•2x legt het systeem lam. Ook computers kunnen dit niet aan. Overigens vergen sommige logische taken van geldigheid voor moeilijke operatoren zelfs super-exponentieële tijd: 22 x, en het kan nog veel hoger!
8 In de limiet krijgen we genres problemen waarvoor helemaal geen algoritme meer valt te geven, zoals het onbeslisbare Stopprobleem voor Turing machines, of Geldigheid voor kwantorlogica. Een uitstekend inleidend overzicht van deze kwesties vindt u in David Harel's boek Algorithmics, the Spirit of Computing, Addison-Wesley, 1992. Complexiteit van logische taken Met deze wiskundige begrippen kunnen we nu de eerder genoemde logische taken langs lopen, en hun complexiteit nader bepalen. Feit
Evaluatie van propositielogische formules is in P, en neemt lineaire tijd.
Neem bijvoorbeeld een situatie waar A, B waarde 1 krijgen, en C waarde 0. Dan kunnen we voor een complexe formule ((¬A B) & C) de waarheidswaarde stapsgewijs van binnenuit berekenen, met de constructie van die formule mee:
((¬A (¬A ¬A 0
B) & ¬¬C) 0
B) 1
¬¬C 0 B1
A 1 Voor een willekeurige bewering
¬C 1
C 0
met lengte | | kost zo'n proces
c • | | stappen, waar c een of andere constante is. De reden: het aantal subformules is gelijk aan de lengte van de formule. Dit is een ruwe berekening, die afhangt van wat we tellen als stappen in het proces. Bijv. als we opschrijven van de waarheidswaarde voor een A zelf zien als proces van opzoeken in de gegeven lijst van waarden voor basisbeweringen, dan kost dat nog een lineaire factor extra in de lengte van . Geheel exact kunnen we dit maken door een Turing machine te programmeren om de taak te doen. Maar onafhankelijk van de precieze implementatie blijken dit soort analyses qua grootteorde stabiel, in elk geval tot op een polynomiale factor, en we blijven daarom op dit niveau van abstractie.
Stel dat we nu geldigheid of consistentie willen uitrekenen. Evaluatie der betrokken formules op elke lijn van de waarheidstafel is snel, zoals we zagen. Het probleem is het aantal lijnen. Voor formules met n basisbeweringen moeten we 2n lijnen opschrijven, en daarmee hebben we exponentiële groei in de lengte der invoerformules. Preciezer nadenkend zien we dat consistentie vraagt om een certifikaat (een valuatie) dat moet worden getest of het de gegeven formule waar maakt, en we concluderen: Feit
Consistentie van propositielogische formules is in NP.
9 De kwantorlogica was wezenlijk ingewikkelder dan de propositielogica, en hier vinden we de volgende antwoorden voor de drie genoemde kerntaken. Feit
Modelcontrole neemt polynomiale ruimte (Pspace).
Feit
Consistentie is onbeslisbaar.
Feit
Modelvergelijking is in NP.
Dit laatste feit komt omdat testen voor isomorfisme tussen twee grafen weer het typische NP-karakter heeft van: 'geef certifikaat, voer controle uit'. Complexiteitstheorie De wiskundige complexiteitstheorie bestudeert de fijnstructuur van berekeningen. Een belangrijk hulpmiddel hierbij is de zogenaamde Hiërarchie van Complexiteitsklassen P
NP
PSPACE
EXPTIME
...
ONBESLISBAAR ...
Hierbij zijn allerlei inclusies van links naar rechts bewezen, die we hier verder niet bespreken. Iets meer informatie over belangrijke begrippen en resultaten in de complexiteitstheorie is te vinden in de uitgebreide tekst op webpagina van de cursus. Een moeilijk, maar glashelder over complexiteit met een sterke logische inslag is Ch. Papadimitriou, Computational Complexity, Addison-Wesley, 1995. Met name blijkt het mogelijk door vertalingen in logische formules alle centrale rekentaken, zoals Bereikbaarheid, Handelsreiziger, of Speloplossing, te reduceren tot logische taken zoals Evaluatie of Consistentie in propositielogica, of Modelcontrole in kwantorlogica. Dit illustreert weer het nauwe verband tussen redeneren en rekenen. P = NP? Kan propositielogica beslist worden in polynomiale tijd, en dus 'slimmer' dan waarheidstafels of tableaus? Anders gezegd, is de complexiteitshiërarchie 'echt'? Vele jaren zoeken heeft nooit wezenlijk snellere methoden opgeleverd voor Consistentie. Maar anderzijds is ook nog nooit een afdoend bewijs gevonden dat het echt complexer is dan evaluatie van formules. De algemene vraag hierachter is het P = NP probleem Zijn de complexiteitsklassen P en NP verschillend, of gelijk? Dit beroemde probleem werd voor het eerst gesteld rond 1970. Onlangs werd het opgenomen in de lijst van centrale open wiskundige problemen van deze tijd van het Cray Institute.
10 Discussie Redeneren en rekenen zijn nauw verbonden. De hier geschetste verbanden geven daarvan een eerste indruk, maar er zijn vele verdere raakvlakken. Men ziet deze interactie bijvoorbeeld ook in de geschiedenis van de wiskunde. Reeds Euclides "Elementen" had een nauwe samenhang tussen bewijzen van meetkundige stellingen, en constructies: procedures om meetkundige objecten te vinden. Op dezelfde manier is een er verband tussen computationeel-logische systemen en het opkomende gebruik van computer-bewijzen dan wel computer-hulpmiddelen in de wiskunde.