ε > 0. δ > 0. x. x a < δ f (x) L < ε February 8, 2012
Prædikater Vi skal lære om prædikatslogik lad os starte med prædikater. Et prædikat er et orakel der svarer ja eller nej. Eller mere præcist: Prædikater Et prædikat er en funktion fra en mængde som vi kalder prædikatets domæne til mængden af sandhedsværdier: {S, F }. Vi bruger tit mængden af naturlige tal N som domæne. Et eksempel på et prædikat med domæne N er følgende: { S hvis man som n-årig kan modtage efterløn eller pension E(n) = F hvis man ikke kan. I skrivende stund har vi eksempelvis E(60) = S og E(32) = F. Bemærk at det ikke går at spørge om E( 10) er sandt eller falsk for vi er røget ud af domænet.
Hotdogprædikatet og Java Hotdogprædikatet H med domæne N er tankevækkende: { S hvis der er muligt at spise n hotdogs på 10 min. P(n) = F ellers I Java vil det se omtrent sådan ud: Hotdogprædikatet i Java public static boolean hotdog(int n) { return n <= 68; } Metoden tager et argument af typen int der nogenlunde modsvarer N og returnerer en værdi af typen boolean.
Hotdogs eller efterløn: Universel kvantifikation Lad n N være et vilkårligt naturligt tal. Hvis n 60 har vi at E(n) holder. Hvis n 68 har vi at H(n) holder. Og da n 60 n 68 har vi at prædikatet D med domæne N givet ved D(n) = E(n) H(n) giver sandt, uanset input. Dette skriver vi n N. D(n). Universel kvantifikation For et prædikat P med domæne D skriver vi d D. P(d) og mener at P giver sand på alle elementerne i domænet. Tænk gerne maskinelt : Løb alle værdierne i domænet igennem og hvis P faktisk svarer sand til dem alle så har vi d D. P(d). Men hvis en eller flere giver falsk går den ikke, så er d D. P(d) selv falsk og d D. P(d) sand.
Universel kvantifikation: for og imod d D. P(d) er sand hvis P altid returnerer sand. Derfor: Den svære at bevise universel kvantifikation For at bevise d D. P(d) skal vi godtgøre at P(d) = S uanset valg af d D. Da D kan være endda overordentlig stor fører vi tit et abstrakt argument: lad d D være vilkårligt,..., P(d) er sand. Den lette at modbevise universel kvantifikation For at modbevise d D. P(d) skal vi blot hitte et vidne, det vil sige et element i D som giver falsk. Eksempelvis har vi ikke n N. E(n) H(n). Hvorfor ikke? Tag n = 1 N, vi får E(1) H(1) = F S = F. Liden tue kan vælte stort læs. Hvis man kan finde den.
At bevise (!) universel kvantifikation i Java Undertiden kan vi eftervise universel kvantifikation i Java. Metoden er sjældent anvendelig men giver en vis intuition. Vi vil vise at n {1, 2, 3, 4, 5}. n! n n n. Gennemløb i Java boolean result = true; for(int n = 1; n <= 5; n++) { boolean ntruth = fact(n) <= n * n * n; result = result && ntruth; } System.out.println("Udsagnet er : " + result); Output Udsagnet er : true
At modbevise (!!) universel kvantifikation i Java At modbevise universel kvantifikation i Java er mere realistisk. Vi lader programmet finde modeksemplet for os. Vi vil modbevise følgende, som man kunne forledes til at tro efter forrige slide: n {1, 2, 3,...}. n! n n n. Gennemløb i Java for(int n = 1; true; n++) { if(fact(n) > n*n*n) { System.out.println("n = "+n+" er modeksempel."); break; } } Output n = 6 er modeksempel.
Hotdogs og efterløn: Eksistentiel kvantifikation Vi så at n N. E(n) H(n) ikke gik, fordi E(1) H(1) = F. Omvendt har vi 64 N og E(64) H(64) = S S = S. Der findes altså et element i domænet som gør prædikatet sandt. Dette skriver vi n N. E(n) H(n). Eksistentiel kvantifikation For et prædikat P med domæne D skriver vi d D. P(d) og mener at P giver sand på et eller flere elementer i domænet. Tænk igen maskinelt : Løb alle værdierne i domænet igennem, hvis P svarer sand en eller flere gange, så har vi d D. P(d). Men hvis alle elementer giver falsk går den ikke, så er d D. P(d) selv falsk og d. P(d) sand.
Eksistentiel kvantifikation: for og imod d D. P(d) holder hvis P er sand for mindst et element. Derfor: Den lette at bevise eksistentiel kvantifikation Vi viser d D. P(d) ved at fremvise et vidne, det vil sige et element d D så P(d) holder. I tilfældet n N. E(n) H(n) er 64 et sådant vidne. Den svære at modbevise eksistentiel kvantifikation For at modbevise d D. P(d) skal vi godtgøre P(d) = F uanset valg af d D. Vi fører hyppigt et abstrakt argument i stil med følgende: lad d D være vilkårligt,..., P(d) er falsk.
At bevise eksistentiel kvantifikation i Java Vi viser eksistentiel kvantifikation ved at rode rundt i domænet indtil vi (måske) finder et vidne. Til tider kan Java tage slæbet, lad os eksempelvis eftervise n N. n 2 + (n + 7) 2 = (n + 32) 2. Gennemløb i Java for(int n = 0; true; n++) { if(n*n + (n+7)*(n+7) == (n+32)*(n+32)) { System.out.println("n = " + n + " er vidne."); break; } } Output n = 65 er vidne.
Indlejrede kvantorer Vi kan gerne have prædikater over mere end en variabel og dermed bruge mere end en kvantor. Det ser flot ud, men man angriber bare fra venstre mod højre. Her er et eksempel: n N. m N. m 2n. Hvis du giver mig et tal, så kan jeg give dig et tal som er mindst dobbelt så stort. Eller mere formelt: Lad n N være vilkårligt. Vi skal vise m N. m 2n og prøver med m = 2n N. Vi har at m = 2n 2n så den er ok. Vi viser altså al- og eksistenskvantor som vi plejer.
Flere indlejrede kvantorer Mon rækkefølgen har betydning? Lad os prøve den anden version m N. n N. m 2n. Jeg kan give dig et tal som er mindst dobbelt så stort som ethvert tal du kan give mig. Så skal m være stort. Vi prøver modbevis: Lad m N være vilkårligt, vi prøver at modbevise n N. m 2n. Vi skal altså finde n N så m 2n ikke går. Vi prøver n = m + 1 og får m 2m < 2m + 2 = 2(m + 1) = 2n. Rækkefølgen har altså betydning. Før kunne vi vælge m efter n, her skal vi præstere m som det første. Og den går ikke.
Indlejrede kvantorer er indlejrede løkker Tænk gerne indlejrede løkker for indlejrede kvantorer. Her viser vi det første eksempel, dog med lidt mindre domæner: n {1, 2, 3,..., 10}. m {1, 2, 3,..., 20}. m 2n. Løkken er Java boolean forall, exists; forall = true; for(int n = 1; n <= 10; n++) { exists = false; for(int m = 1; m <= 20; m++) { exists = exists m >= 2*n; } forall = forall && exists; } System.out.println("Løkkelogikken siger: " + forall);
Nogle tal er mere lige end andre Et tal er lige hvis 2 går op i det. Eller mere præcist med kvantorer: Lig(e)heds prædikatet L : N {S, F} L(n) = m N. n = 2m. Er eksempelvis 10 lige? Ja, L(10) = S for 5 N og 10 = 2 5. Et tal er omvendt ulige hvis det er 2 gange noget plus en: Ulig(e)heds prædikatet U : N {S, F} U(n) = m N. n = 2m + 1. Er 117 ulige. Ja, U(117) = S for 58 N og 117 = 2 58 + 1.
Efter ulighed kommer lighed Det synes rimeligt (måske ganske trivielt) at der følger et lige tal efter et ulige. Vi kan faktisk vise det præcist: Sætning: Lige tal følger ulige n N. U(n) L(n + 1). Bevis: Lad n N være vilkårligt. For at vise implikationen antager vi at U(n) er sand, altså at m N. n = 2m + 1. Vi kan altså vælge l N så n = 2l + 1. Vi vil gerne vise at L(n + 1) holder, altså at m N. n + 1 = 2m. Vi skal med andre ord finde et m N med egenskaben n + 1 = 2m. Vi prøver med l + 1 N: n + 1 = 2l + 1 + 1 = 2l + 2 = 2(l + 1).
L er dominant Vi skruer lidt op: Hvordan går det med produktet af et lige og et ulige tal? Vi fornemmer lighed ja vi kan vise det helt præcist: Sætning: U er recessiv n N. m N. L(n) U(m) L(nm). Bevis: Lad n N være vilkårligt. Lad m N være vilkårligt. Vi antager L(n) U(m) altså at L(n) = S og U(m) = S. Vi kan vælge l N så n = 2l og vi kan vælge k N så m = 2k + 1. Vi skal vise at L(nm) holder, altså at j N. nm = 2j. Vi regner: nm = 2l(2k + 1) = 4lk + 2l = 2(2lk + l). Så vi kan vælge j = 2lk + 1 N og så er L(nm) vist.
De Morgan og kvantorerne, del I Vi modbeviser en alkvantor ved at finde et element der gør prædikatet falsk. Vi beviser en eksistenskvantor ved at finde et element der gør prædikatet sand. De er snublende ens. De Morgan negerer alkvantorer ( d D. P(d) ) d D. P(d). Venstresiden er sand netop når der findes et d D så P(d) er falsk. Og højresiden går det ligeså. Det er lidt det samme som De Morgan fra udsagnslogikken: (p q) p q.
De Morgan og kvantorerne, del II Vi beviser en alkvantor ved at vise at prædikatet holder for alle elementer i domænet. Vi modbeviser en eksistenskvantor ved at vise at prædikatet fejler for alle elementer i domænet. Igen er sammenhængen nærliggende: De Morgan negerer eksistenskvantorer ( d D. P(d) ) d D. P(d). Venstresiden er sand netop når P(d) er falsk for alle d D. Og højresiden går det ligeså. Igen modsvarer det De Morgan fra udsagnslogikken: (p q) p q.
Et prim(a) eksempel, del I 17 er primtal, det har kun de trivielle divisorer 1 og 17. På græsk: n N. ( m N. 17 = nm ) n = 1 n = 17. 42 er næppe et primtal. Så vi forventer at have ( n N. ( m N. 42 = nm ) ) n = 1 n = 42. Magen til suppedas skal man lede længe efter. Vi må omskrive lidt.
Et prim(a)) eksempel, del II Vi regner derudad, først negerer vi en alkvantor og så er det udsagnslogik resten af vejen: ( n N. ( m N. 42 = nm ) ) n = 1 n = 42 ( ( m ) ) n N. N. 42 = nm n = 1 n = 42 ( n N. ( m N. 42 = nm ) ) n = 1 n = 42 n N. ( m N. 42 = nm ) n 1 n 42. Der skal med andre ord findes en ikke-triviel divisor netop hvad man ville forvente af et sammensat tal. 7 er et godt bud her.