Kontraktbaseret Programmering Anker Mørk Thomsen 1. udgave ISBN:

Størrelse: px
Starte visningen fra side:

Download "Kontraktbaseret Programmering Anker Mørk Thomsen 1. udgave ISBN: 978-87-40-41315-1"

Transkript

1 -1 Kontraktbaseret Programmering Anker Mørk Thomsen 1. udgave ISBN:

2 Forord Denne bog er blevet til gennem undervisning i faget Kontraktbaseret Udvikling på bacheloruddannelsen i Softwareudvikling. Emnet har jeg opdelt i to dele. Den første del omfatter konstruktion og udvikling af algoritmer ved at anvende formelle metoder. Denne første del indeholder også diskret matematik, som danner grundlag for at kunne arbejde med de formelle metoder. Bog 1 indeholder pensum for den første del af faget, som kaldes Kontraktbaseret Programmering. Bog 2 Kontraktbaseret Design omhandler design af programmodulerne i et objektorienteret sprog. Januar 2014 Anker Mørk Thomsen 0

3 Indhold I Matematik 9 1 Matematisk argumentation Deduktive argumentationsformer Modus Ponens Modus Tollens Den hypotetiske syllogisme Den disjunktive syllogisme Reductio ad Absurdum Afslutningsvis om argumentation Notation Det direkte bevis Det indirekte bevis Bevis ved modstrid (Proof by contradiction) Bevis ved at opdele i flere tilfælde Simpel Induktion Øvelser Stærk Induktion Strukturel induktion Beviser med fejl Simple og vanskelige påstande Spilteori Øvelser I

4 INDHOLD II 2 Mængder og logik At definere mængder ved hjælp af egenskaber Mængdeoperationer boolsk algebra Boolsk Algebra Kardinalitet Relationer Relationelle databaser Binære relationer Ordningsrelationer Funktioner Venn-diagrammer Øvelser Udsagnslogik Øvelser Boolske operatorer Boolske udtryk Øvelser Regneregler for de boolske operatorer Øvelser Prædikatlogik Øvelser Tilfredsstillelsesmængden Øvelser Kvantificerede udtryk Kvantorer Øvelser Regneregler for kvantificerede udtryk Et-punkts-reglen Sammensætte og adskille termer Sammensætte og adskille rangen Distribution

5 INDHOLD III Den tomme rang Konstant term Øvelser Associativitet Associative operatorer Venstre-associative operatorer Højre-associative operatorer De logiske kvantorer Alkvantoren Eksistenskvantoren Øvelser Mere om prædikater og kvantificerede udtryk II Programkonstruktion 67 5 Imperative Programmer og Programtilstande Lidt om Java Variabler i Java Værdier og referencer Lidt om udførelse af Java-programmer Programtilstande Øvelser Korrekthed Øvelser Hvad er programmering? Specifikationer Øvelser Programnotation Programmeringssprogets kommandoer skip abort Sekvens af kommandoer

6 INDHOLD IV Tilordningskommandoen Selection eller alternativer, IF Iteration eller gentagelse, DO Non-determinisme Klasser og interface-moduler Funktioner Procedurer Eksempler Udvalgssortering Beregning af de første n Fibonacci-tal Øvelser Prædikattransformeren WP Korrekthed Semantik Prædikattransformeren wp Prædikattransformeren wp s egenskaber Øvelser Programmeringssprogets semantik - skip, abort og tilordning Sætningen skip Sætningen abort Tilordningssætningen Øvelser Semantik: Array-variabler Øvelser Programmeringssprogets semantik: Sekvens Programmeringssprogets semantik: IF-sætningen Øvelser Programmeringssprogets semantik: DO-sætningen Kaffekandeproblemet DO-sætningens semantik Øvelser Checklisten for løkker Øvelser

7 INDHOLD V 8 Udvikling af programmer uden løkker At beregne udtryk i tilordningssætninger Øvelser Udvikling af IF-sætninger Øvelser Konstruktion af løkker Konstruktion af løkker Metoden Opsummering af metoden Effektivisering Øvelser At slette en konjunkt Slette en konjunkt Heltalsdivision Beregne heltalsdelen af n Ubegrænset lineær søgning Anvendelser af ubegrænset lineær søgning Sortering af tre værdier Konstruktion af invariant og variant Løkken Begrænset lineær søgning Øvelser Erstatte en konstant med en variabel Erstatte konstanter med variabler Øvelser Beregne heltalsdelen af n Binær søgning generelt Anvendelser af binær søgning Den mest brugte anvendelse af binær søgning Beregne heltalsdelen af n Øvelser Begrænset lineær søgning (igen)

8 INDHOLD VI 12 At forøge en variabels virkefelt At forøge en variabels virkefelt Den sociale bedrager Øvelser A Løsninger til udvalgte øvelser 182

9 Introduktion En kravspecifikation er en aftale mellem systemudvikleren og aftageren. Kravspecifikationen beskriver de egenskaber, der kræves af det færdige produkt. Til brug for skrivning af kravspecifikationer anvendes mange forskellige beskrivelsesværktøjer, hvoraf nogle er formelle og andre er uformelle, dvs. baseret på figurer, tegninger, eksempler, benchmarks og tekstlig beskrivelse. De formelle specifikationer kan være formuleret i diagrammer eller formelle sprog. I praksis anvendes en blanding af de forskellige beskrivelsesformer. Se Søren Lauesen: Software Requirements. Styles and Techniques Lauesen [2000], som indeholder en udførlig beskrivelse af metoder og teknikker til at danne kravspecifikationer i samarbejde med brugere. Bogen indeholder desuden en række gennemarbejdede eksempler. Se også hjemmesiden Søren Lauesen. En kravspecifikation er i denne sammenhæng en aftale mellem systemudvikleren og slutbrugeren. I Kontraktbaseret Udvikling fokuserer vi på aftaler mellem systemudviklere, hvor den ene er klient og den anden aftager. Den samme systemudvikler eller programmør kan have begge roller. Kontrakterne er i Kontraktbaseret Udvikling aftaler om programmodulers funktionelle egenskaber. Lad os antage, at en programmør skal udvikle et programmodul, og at hun har tænkt sig at anvende et modul, som andre har skrevet. Det modul, der skal anvendes kalder vi en server. Det modul, som skal udvikles, kalder vi en klient. I kontraktbaseret udvikling udstyrer vi serveren med en specifikation, der beskriver, i hvilke procestilstande programmøren må anvende modulet. Programmøren, der skal udvikle klienten, skal altså sikre sig, at procedurer og funktioner i serveren kun kaldes i de programtilstande, som er anført i kravspecifikationen som gyldige tilstande. Under forudsætning af, at serveren anvendes korrekt, så skal specifikationen beskrive serverens funktion. Specifikationen skal altså beskrive serverens virkning. Vi siger, at der er en kontrakt mellem klient og server. På den anden side, hvis serveren anvendes forkert, så kan klienten ikke stille krav til serverens funktion. Kontrakten beskriver på den måde, hvad programmet eller programmodulet skal udføre. Det er så programudviklerens opgave at sikre konstruktion af et korrekt program, det vil sige et program, der lever op til kontrakten. Kontrakter indgås altså mellem programudvikleren, som kan være en systemudvikler eller en programmør, og de systemudviklere, der skal anvende programmet til konstruktion af andre programmer. I Kontraktbaseret Udvikling beskæftiger man sig altså ikke med aftaler med slutbrugere. Design af brugergrænsefalden og databasedesign ligger derfor udenfor emneområdet for Kontraktbaseret Udvikling. I forhold til en slutbruger kan det opfattes som en dyd at skrive programmer, der kan acceptere ethvert input, som brugeren kan finde på at anvende. Vi kan godt lide robuste programmer. 1

10 INDHOLD 2 Man kan vejlede eller tvinge slutbrugeren til at gøre det rigtige. Mellem programmoduler er sagen en anden. Her stiller vi eksplicitte krav til klienten. En kontrakt mellem klient og programmør kan være mere eller mindre formaliseret. I mange tilfælde er kontrakter løst formulerede og upræcise. Prøv blot at kigge på dokumentationen af klasserne i Java. Se Java SE 7 API Documentation. En kontrakt kaldes også en specifikation, og den består af mindst følgende to dele: En præbetingelse, der beskriver i hvilke tilstande, programmet eller programdelen må udføres. For en metode er præbetingelsen en beskrivelse af de tilstande 1, hvor man må kalde metoden. Hvis man ikke overholder præbetingelsen, kan man ikke kræve, at programmet opfylder postbetingelsen. Den, der kalder en metode i en ugyldig tilstand, kan ikke stille krav til resultatet. En postbetingelse, der beskriver programmets eller programmodulets resultat. Postbetingelsen beskriver de mulige tilstande, som programmet vil etablere under udførelsen, forudsat at programmet starter udførelsen med præbetingelsen opfyldt. Eksempel 0.1. En procedure, der sorterer en liste af typen Person, kan beskrives uformelt ved en specifikation i stil med /*@ pre Det forudsættes, at alle elementer i listen er af typen post Listen l er sorteret i ikke-aftagende void sorter(list l) hvor pre er præbetingelsen og post er postbetingelsen. Den uformelle specifikation er altså skrevet som en kommentar. Nøgleordt pre angiver præbetingelsen, og nøgleordet post angiver postbetingelsen. Specifikationen anvender JML-syntaks. Se figur Her følger et eksempel på en uformel specifikation af en funktion, der returnerer det største tal i en talrække. Variablen r gør det muligt at referere til funktionens returværdi (resultat). /*@ pre post r >= alle tal i func max(int[] t)->double r 1 En tilstand er en funktion fra mængden af variabler til de tilhørende værdier. Man medtager i beskrivelsen af tilstande kun de variabler, som er berørt af programmet eller programmodulet.

11 INDHOLD 3 Figur 0.0.1: Kontrakt for et program Udover pre- og postbetingelsen består kontrakter for procedurer og funktioner desuden af et hoved, der beskriver modulets navn, metodens parametre og evantuelt returtype. Modulets hoved kaldes ofte modulets signatur. For at anvende modulet (kalde funktionen eller proceduren) korrekt, skal man overholde de typer, som signaturen angiver for parametre og returtype. Signaturen er en syntaktisk specifikation. Præ- og postbetingelser er semantiske specifikationer, som omhandler virkningen af at anvende metoden. Formaliserede kontrakter er formuleret i et matematisk sprog eller i et programmeringssprog og består af udsagn om programmets variabler. Sådanne udsagn kaldes prædikater. Prædikater er udsagn, der kan være sande eller falske. Et prædikat P(x, y) er altså et udsagn eller påstand om variablerne x og y. Udsagnets værdi er enten sand eller f alsk afhængig af indholdet af variablerne x og y. I programmeringsssprog kalder vi ofte prædikater for logiske udtryk eller boolske udtryk. Eksempelvis er x>y+k et prædikat. Sandhedsværdien afhænger af de aktuelle værdier af variablerne x, y og k. I tilstanden {x = 3, y = 2, k = 2} er udtrykket sandt. I tilstanden {x = 3, y = 1, k = 4} er udtrykket falsk.

12 INDHOLD 4 Vi vil arbejde med at formulere kontrakter i form af prædikater. Desuden vil vi anvende de formelle kontrakter på to måder. Vi vil anvende kontrakter som værktøj til at udvikle programmerne, og vi vil anvende kontrakter som grundlag for afprøvning (test) af programmerne. Vi har til hensigt at tilegne os og anvende en teknik, hvor man ud fra en specifikation (kontrakt) konstruerer et program eller et programmodul. Principielt er en specifikation i sig selv et program. Hvis man havde en virtuel maskine til rådighed, som kunne fortolke kontrakten direkte, så ville man slippe for arbejdet med at omforme kontrakten til et andet sprog. I en vis forstand er det netop, hvad man gør i et sprog som SQL. Her beskriver man ikke en beregningsproces. Man beskriver det ønske resultat. F. eks. beskriver select distinct nr from T where T.nr>7 at man ønsker en tabel (relation) med attributten nr. Værdierne i kolonnen nr skal alle være større en 7 og der må ikke forkomme to ens værdier. Værdierne i A skal hentes fra tabellen T. Man kalder også et sprog af denne type for et deklarativt sprog. Man kan med en vis ret sige, at SQL-sætningen er en udførbar specifikation. Hvis vi derimod skriver // T er en given relation create empty relation R foreach (Row r in T){ if (r.nr>7) R.addRow(r) } er der tale om at beskrive en fremgangsmåde til beregning af resultatet. Her er der tale om et imperativt program. Programmet består af en række kommandoer, som skal udføres i en bestemt rækkefølge. De programmer, som vi skal arbejde med, kaldes imperative programmer. Imperative programmer fører under udførelsen computeren fra en starttilstand til en sluttilstand. De fleste af de programmeringssprog, som benyttes i praksis, er imperative, hvor programmerne udføres gennem en række trin, der hver ændrer på computerens tilstand. Der findes dog mange programmeringssprog, der ikke er imperative. Vi har allerede nævnt SQL. Af andre sprogparadigmer kan nævnes funktionelle sprog (f. eks. Lisp og Haskell) og logiksprog (f.eks. Prolog). Se Wikipedia 2. En programs tilstand består af en mængde af benævnte værdier. Navnene kalder vi variabler, og værdierne tages fra de sædvanlige værdimængder: Hele tal, naturlige tal, brøker, tegn osv. 2 Java og C # er også imperative sprog. Der findes også objektorienterede funktionelle sprog.

13 INDHOLD 5 En tilstand er en afbildning (funktion) fra mængden af variabler til værdier, og vi kan beskrive en tilstand ved en tabel: Tilstand 0 : a 23 x 4.5 i 7 Tilstand 1 : a 23 x 5 i 7 Tilstand 0 og Tilstand 1 adskiller sig kun ved værdien af variablen x. Begge tilstande er præcist beskrevet, idet vi kender den præcise værdi af variablerne. Udførelsen af et program kaldes en proces. En program begynder udførelsen i en starttilstand, hvor alle variabler i programmet har givne værdier eller eventuelt ukendte værdier, og programmet slutter udførelsen i en sluttilstand, hvor variablerne har værdier, som er etableret gennem programmets udførelse. I en konkret udførelse kan man eventuelt aflæse disse værdier ved hjælp af en debugger. I nogle tilfælde kan det således ske, at et program må starte i en ukendt tilstand. Et sådant program har en startbetingelse, der er sand, dvs. programmet må udføres i enhver starttilstand. Som programmør og som udvikler er man normalt ikke interesseret i de konkrete tilstande, som et program gennemløber under udførelsen med et givet input. De konkrete tilstande er kun interessante for den, som vil følge udførelsen af programmet med et givet input. I stedet er det interessant at se på forholdet mellem input og output og i de mulige tilstande, som programmet kan være i under udførelsen. De gyldige inputtilstande bekriver vi i en præbetingelse i form af et prædikat, f.eks. x 0 n > 0. Dette prædikat er sandt i alle tilstande, hvor x er støre end eller lig med 0, dvs. alle ikke-negative værdier af x, og hvor n er positiv. Resultatet af et program beskrives i en postbetingelse igen i form af et prædikat, f. eks. x = b[i], dvs. variablen x har samme værdi som variablen b[i]. Prædikater er boolske funktioner dvs. funktioner, der kan antage en af værdierne true og f alse, afhængig af værdierne af de variabler, som ingår i prædikatet. Prædikatet x 0 n > 0 er således f alse i tilstanden {x = 1, n = 2} og true i tilstanden {x = 2, n = 3}. Antag, at b er arrayen int[] b = {2, 4, 2, 4, 1} og x = 2 og i = 2. Så er x = b[i] lig med true. Normalt består undervisningen i programmering i, at man simultant lærer et programmeringssprog og at skrive programmer i dette sprog. Man lærer at gætte, hvad programmerne skal indeholde på grundlag af nogle skabeloner og at afprøve programmerne. Hvis afprøvningen ikke giver det ønskede resultat, udfører man en rettelse (evt. ved et nyt gæt) og gentager afprøvningen. Dette fortsætter, indtil man tror, at programmet er korrekt. I denne bog lærer man at konstruere programmer ved at anvende en teknik, hvor programmers indhold (tekst) kan beregnes. Derved opnår man en større sikkerhed for, at programmerne er korrekte. Lad os se på et eksempel. Funktionen /*@ pre post r er den midterste værdi af x, y og func midt(int x, int y, int z)->int r {... }

14 INDHOLD 6 påstås ifølge specifikationen at returnere den midterste værdi af de tre tal: x, y og z. F. eks skal kaldet midt(7,3,12) returnere værdien 7. Vi har ikke vist kildekoden til funktionens krop. Antallet af forskellige mulige input til midt(x,y,z) er (2 32 ) 3 = En afprøvning af alle mulige input er i praksis umuligt. Ved at vælge en teststrategi, kan vi afprøve udvalgte input. Det kan bruges til at øge tilliden til, at funktionen regner rigtigt. Men vi kan i princippet kun være sikker, hvis alle muligheder er afprøvet. Hvis et input giver en fejl, f. eks. hvis midt(-7,3,12)=-7, så er vi blevet oplyst. Vi ved, at der er en fejl, og vi kan rette i programmet, så fejlen forsvinder. Desværre kan rettelsen give anledning til nye fejl. Læren af dette er. Hvis funktionen regner rigtigt med et givet input, er vi ikke blevet meget klogere. De andre input mangler at blive afprøvet. Gennem afprøvning af programmer kan man i bedste fald afsløre, om der er fejl. Det er generelt ikke muligt gennem afprøvning at afgøre, om et program er korrekt. Den eneste måde, hvorpå vi kan bevise, at funktionen regner rigtigt for alle gyldige input, er ved at studere, hvorledes funktionen er programmeret. Dette kræver, at vi studerer kildekoden. Skal man så ikke anvende test. Jo, test bør være en del af de værktøjer, som vi bruger til at øge sikkerheden for, at vore programmer regner rigtigt. Den teknik, som bogen benytter, er baseret på matematik og især på anvendelse af logik. Det er derfor nødvendigt, at den studerende bliver fortrolig med denne disciplin. Man skal være fortrolig med almindelig algebra (aritmetik), mængdelære, udsagnslogik og prædikatkalkyle for at kunne arbejde med udvikling af programmer efter bogens teknik. Besværet med at lære dette lønner sig, idet man som programmør opnår en større sikkerhed i at skrive korrekte programmere. I tilgift reducerer man den tid, man ellers skulle anvende til test. At udvikle programsystemer til computere er en vanskelig og udfordrende opgave. Hvis kravene til et program er upræcise og uklare, er opgaven også at finde ud af, hvilken opgave programmet skal løse. Upræcise beskrivelser af krav og ønsker til programmer er en kilde til mange fallerede projekter. De fleste har lært programmering baseret på uformelle, tekstlige og til tider upræcise beskrivelser af, hvad programmerne skal udføre. Samtidig har man udviklet programmerne baseret på intuition og gætteri kombineret med erfaring. De fejl, der opstår ved denne fremgangsmåde, kalder man lus (eng. bugs), og man investerer mange kræfter i at finde og rette fejl, kaldet aflusning (eng. debugging). Problemet er, at man ikke kan vide, om en funden fejl er den sidste, eller om rettelse af fejlen har introduceret flere fejl. Ved aflusning af store systemer såsom operativsystemer, store administrative systemere mv. vil man ofte introducere nye fejl. Allerede i 1960 erne blev det klart, at fejlbehæftede programmer var et stort problem. Dette gjaldt ikke mindst operativsystemer. Et operativsystem kunne indeholde omkring 1000 alvorlige fejl. F. eks. udsendte CDC hver uge rettelser til operativsystemet på deres CDV Rettelserne kom på hulkort og fyldte flere hundrede hulkort. Hver rettelsesrunde gav anledning til nye fejl; men antallet af fejl, der skulle rettes hver uge blev mindre og mindre. På et tidpunkt valgte man at udsende en ny version af operativsystemet. Men også applikationer kunne give anledning til alvorlige problemer, hvis programmerne havde fejl. Englænderen C. A. R. Hoare foreslog i artiklen An Axiomatic Basis for Computer Programming Hoare [1969] at indføre en formel matematisk metode til at hjælpe med at skrive

15 INDHOLD 7 korrekte programmer. Det er i stor udstrækning en videreudvikling af denne metode, som bliver præsenteret i denne bog. I bogen A Dicipline of Programming Dijkstra [1976]beskriver E. W. Dijkstra udførligt idéen bag de teknikker, vi skal arbejde med. Bertrand Meyer introducerede i programmeringssproget Eiffel begrebet Design by Contract, hvor man kan forsyne programmer med formelle specifikationer (se f. eks. Meyer [2009]), der fastlægger kravene til input (præbetingelser) og præcise beskrivelser af output (postbetingelser). Disse krav kan så blive kontrolleret under udførelsen af programmet. Kontrol af formelle specifikationer under udførelse af et program svarer til at udføre en test. Hvis udførelsen gennemføres uden fejlreaktioner, har man kun sikret sig, at programmet udføres korrekt med de givne inputdata og i de givne omgivelser. Det beviser ikke, at programmet er korrekt. Vi vil benytte de formelle specifikationer til at konstruere korrekte programmer. På samme måde, som ingeniører anvender matematik som værktøj til at konstruere bygninger, maskiner, broer mv, vil vi anvende matematik til at konstruere programmer. Dette kræver dels, at vi tilegner os de matematiske værktøjer, som skal anvendes til konstruktionen og dels, at vi lærer at skrive præcise formelle specifikationer. Den matematik, som vi benytter os af, kaldes diskret matematik, idet den i modsætning til den matematik, som ingeniører og fysikere benytter sig af, ikke behandler kontinuerte størrelser, men alene arbejder med størrelser, der kan antage diskrete (adskilte) værdier, såsom hele tal og boolske værdier (falsk og sand). Vi anvender diskret matematik, fordi den digitale computer kun kan arbejde med hele tal. Alt, hvad der lagres i en computer og alt, hvad der behandles i en computer, er hele tal. I computeren er tallene repræsenteret på binær form, dvs. hvor kun cifrene 0 og 1 anvendes. Al information i en computer er således kodet ved brug af hele tal. En omfattende præsentation af diskret matematik findes i David Gries og Fred B Schneiders A logical Approach to discrete Math Gries and Schneider [1993]. Den del af diskret matematik, som vi har speciel interesse i er: Mængder Relationer Funktioner Udsagnslogikken Prædikatkalkulen Til brug for programmering vil vi arbejde med: En simpel programnotation, som er en modificeret delmængde af sproget Java. Herved får vi adgang til at afprøve programmerne, hvis dette er ønskeligt. Programsemantik ved brug af prædikattransformeren wp (weakest precondition)

16 INDHOLD 8 Programsemantik er beskrivelsen af virkningen af udførelse af et program. Typisk beskriver man virkningen af de enkelte sætningstyper i sit programmeringssprog. I Java vil vi således beskrive virkningen af tilordningssætninger, if-sætninger og while-sætninger mv. Valget er faldet på wp, da det er et kraftfuldt værktøj, og da det umiddelbart er muligt at anvende wp til at konstruere programmer, der opfylder givne postbetingelser.

17 Del I Matematik 9

18 Kapitel 1 Matematisk argumentation Dette kapitel handler om at kunne forstå og gennemføre en matematisk argumentation for, at et udsagn eller en påstand er sand. En matematisk argumentation for en påstand kaldes et bevis. Det matematiske bevis er baseret på anvendelse af symboler og nogle faste slutningsregler og adskiller sig i præcision og entydighed fra den måde, hvorpå vi argumenterer for en påstand i dagligt sprog. Alligevel er der en klar sammenhæng mellem matematisk bevisførelse og dagligdagens argumentation. Lad os tage et eksempel fra Sherlock Holmes i historien»silver Blaze«Doyle. Sherlock Holmes siger: A dog was kept in the stalls, and yet, though someone had been in and fetched out a horse, the dog had not barked... Obviously the visitor was someone whom the dog knew well... Holmes argumentation indeholder to præmisser. Den første er»hunden gøede ikke ad den besøgende i stalden«. Den anden præmis er implicit, nemlig at»hunde gør ikke af folk, de kender«. De to præmisser medfører, at»hunden kendte den besøgende«. Dette er et eksempel på en type argumentation, som vi kender fra dagligdagen. I matematikken ville man opstille begge præmisser, så det var tydeligt, på hvilket grundlag man drog sin slutning. I matematikken ville man opstille argumenationen således: 1. Præmis. Hunden gøede ikke af den, der kom ind i stalden. 2. Præmis. Hunde gør ikke af folk, de kender. 3. Konklusion. Ergo, hunden kendte den besøgende. Læg mærke til det underforståede alle i præmissen Hunde gør ikke af folk, de kender. Der menes, at alle hunde opfører sig på den måde. Men der kan jo være hunde, som opfører sig anderledes. Nogle hunde ville gø af glæde ved at se en person, som de kender. Men vi udtaler os ikke om rigtigheden af præmisserne. Vi udtaler os kun om argumentationen, dvs. 10

19 KAPITEL 1. MATEMATISK ARGUMENTATION 11 hvis præmisserne er sande, så er slutningen også sand. Sherlock Holmes mener altså, at hans præmisser holder. Og det er netop akilleshælen i hans metode. Måske holder hans præmisser ikke. Selv om resultatet af et argument er forkert, kan selve argumentationen være rigtig. F. eks. Præmis. Alle rige mennesker bor nord for København Præmis. X er rig Konklusion. Altså bor X nord for København Argumentationen er korrekt, men mindst den ene præmis er forkert. Hvilken? Argumentationsformen er et eksempel på en syllogisme. En syllogisme er en logisk slutning, som består af to eller flere præmisser og en konklussion. Præmisserne og konklusionen skal være såkaldte katagoriske udsagn, dvs. udsagn om, at der består en given relation mellem to genstande eller begreber. I eksemplet ovenfor er der en relation mellem rige mennesker og København samt mellem X og rige mennesker. Begrebet rige mennesker er mellembegrebet, som knytter X til København. Se Weston [1992]for mere information om syllogismer. Man kan også hente information om syllogismer på Internet, f. eks. i Den store Danske. Se også Wikipedia. Linket til Wikipedia indeholder en oversigt over forskellige former for syllogismer. På Ludvig Holbergs tid var studiet af syllogismere en vigtig del af universitetsuddannelserne. Her følger et eksempel på en ukorrekt syllogisme hentet fra Ludvig Holbergs skuespil Erasmus Montanus. Rasmus Berg var på besøg i sit hjem, og han ville brillere med det, han havde lært på universitetet. Her er hans syllogisme. En sten kan ikke f lyve Morlille kan ikke f lyve Ergo er morlille en sten Der er ingen egenskab, der forbinder en sten med morlille. At de har samme egenskab, nemlig ikke at kunne flyve gør dem ikke ens. Der er intet mellembegreb som i argumentationen ovenfor på denne side. Her er rig mellembegrebet, der forbinder X med bor nord for København Deduktive argumentationsformer Vi skal se på nogle metoder, som kan anvendes ved argumentation for påstande. Metoderne baseres på det, vi kalder en implikation P Q. Hvis P er sand, så er Q også sand.

Kontraktbaseret Design. Anker Mørk Thomsen

Kontraktbaseret Design. Anker Mørk Thomsen Kontraktbaseret Design Anker Mørk Thomsen 5. marts 2014 -2 Kontraktbaseret Design Anker Mørk Thomsen 1. udgave ISBN: 9788740491500 Forord Bogen er blevet til gennem undervisning i faget Kontraktbaseret

Læs mere

Elementær Matematik. Mængder og udsagn

Elementær Matematik. Mængder og udsagn Elementær Matematik Mængder og udsagn Ole Witt-Hansen 2011 Indhold 1. Mængder...1 1.1 Intervaller...4 2. Matematisk Logik. Udsagnslogik...5 3. Åbne udsagn...9 Mængder og Udsagn 1 1. Mængder En mængde er

Læs mere

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides 01017 Diskret Matematik E12 Alle bokse fra logikdelens slides Thomas Bolander 1 Udsagnslogik 1.1 Formler og sandhedstildelinger symbol står for ikke eller og ( A And) hvis... så... hvis og kun hvis...

Læs mere

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42 Slide 1/42 Hvad er matematik? 1) Den matematiske metode 2) Hvad vil det sige at bevise noget? 3) Hvor begynder det hele? 4) Hvordan vælger man et sæt aksiomer? Slide 2/42 Indhold 1 2 3 4 Slide 3/42 Mængder

Læs mere

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. 26 Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. Hvad er programverifikation? Bevisregel for 'tom kommando'. Bevisregel for assignment. Bevisregler for selektive

Læs mere

Baggrundsnote om logiske operatorer

Baggrundsnote om logiske operatorer Baggrundsnote om logiske operatorer Man kan regne på udsagn ligesom man kan regne på tal. Regneoperationerne kaldes da logiske operatorer. De tre vigtigste logiske operatorer er NOT, AND og. Den første

Læs mere

Bevisteknikker. Bevisteknikker (relevant både ved design og verifikation) Matematisk induktion. Matematisk induktion uformel beskrivelse

Bevisteknikker. Bevisteknikker (relevant både ved design og verifikation) Matematisk induktion. Matematisk induktion uformel beskrivelse Bevisteknikker Bevisteknikker (relevant både ved design og verifikation) Bevisførelse ved modstrid (indirekte bevis) Antag, at det givne teorem er falsk Konkluder, at dette vil føre til en modstrid Teorem:

Læs mere

Udsagnslogik. Anker Mørk Thomsen. 6. december 2013

Udsagnslogik. Anker Mørk Thomsen. 6. december 2013 Udsagnslogik Anker Mørk Thomsen 6. december 2013 Logiske Udsagn Sætningstyper Spørgende (interrogative): Hvor længe bliver du i byen? Befalinger (imperative): Gå tilvenstre efter næste sving? Ønsker (optative):

Læs mere

1 < 2 og 1 > 2 (2.1) er begge udsagn. Det første er sandt det andet er falsk. Derimod er

1 < 2 og 1 > 2 (2.1) er begge udsagn. Det første er sandt det andet er falsk. Derimod er Kapitel 2 Logik Dette kapitel omhandler matematiske udsagn og prædikater. I et formelt kursus om logik opstiller man helt præcise regler for hvilke tegnstrenge, der kan tillades i opbygningen af udsagn

Læs mere

Bevisteknikker (relevant både ved design og verifikation)

Bevisteknikker (relevant både ved design og verifikation) Bevisteknikker 1 Bevisteknikker (relevant både ved design og verifikation) Bevisførelse ved modstrid (indirekte bevis) Antag, at det givne teorem er falsk Konkluder, at dette vil føre til en modstrid Teorem:

Læs mere

Sproget Rascal (v. 2)

Sproget Rascal (v. 2) Sproget Rascal (v. 2) Til brug i K1 på kurset Oversættere Opdateret 29/11 2004 Abstract Rascal er et simpelt Pascal-lignende imperativt sprog. Dette dokument beskriver uformelt Rascals syntaks og semantik

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Læs selv om LOGIK. Erik Bjerre og Pernille Pind Forlaget Pind & Bjerre

Læs selv om LOGIK. Erik Bjerre og Pernille Pind Forlaget Pind & Bjerre Læs selv om LOGIK Erik Bjerre og Pernille Pind Forlaget Pind & Bjerre Læs selv om LOGIK Erik Bjerre og Pernille Pind Forlaget Pind & Bjerre 2 Logik Sandt eller falsk? Lyver han? Taler hun sandt? Det ville

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Hvad er formel logik?

Hvad er formel logik? Kapitel 1 Hvad er formel logik? Hvad er logik? I daglig tale betyder logisk tænkning den rationelt overbevisende tænkning. Og logik kan tilsvarende defineres som den rationelle tænknings videnskab. Betragt

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Mandag den 27. maj 2002, kl. 9.00 13.00 Opgave 1 (25%) Denne opgave handler om multiplikation af positive heltal.

Læs mere

Eksempel på den aksiomatisk deduktive metode

Eksempel på den aksiomatisk deduktive metode Eksempel på den aksiomatisk deduktive metode Et rigtig godt eksempel på et aksiomatisk deduktivt system er Euklids Elementer. Euklid var græker og skrev Elemeterne omkring 300 f.kr. Værket består af 13

Læs mere

Gödel: Über formal unentschiedbare Sätze der Principia Mathematica und verwandter Systeme I, 1931

Gödel: Über formal unentschiedbare Sätze der Principia Mathematica und verwandter Systeme I, 1931 Kommentar til 1 Gödel: Über formal unentschiedbare Sätze der Principia Mathematica und verwandter Systeme I, 1931 Denne afhandling af den 24-årige Kurt Gödel er blevet en klassiker. Det er vist den eneste

Læs mere

Logik. Helge Elbrønd Jensen og Tom Høholdt Fortolket af Michael Elmegård og Øistein Wind-Willassen.

Logik. Helge Elbrønd Jensen og Tom Høholdt Fortolket af Michael Elmegård og Øistein Wind-Willassen. Logik Helge Elbrønd Jensen og Tom Høholdt Fortolket af Michael Elmegård og Øistein Wind-Willassen. 25. juni 2014 2 Indhold 1 Matematisk Logik 5 1.1 Udsagnslogik.................................... 5 1.2

Læs mere

Logik. Af Peter Harremoës Niels Brock

Logik. Af Peter Harremoës Niels Brock Logik Af Peter Harremoës Niels Brock December 2009 1 Indledning Disse noter om matematisk logik er en videreudbygning af det, som står i bogen MAT A [1]. Vi vil her gå lidt mere systematisk frem og være

Læs mere

BOSK F2012, 1. del: Prædikatslogik

BOSK F2012, 1. del: Prædikatslogik ε > 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

Læs mere

Opgaver i logik, torsdag den 20. april

Opgaver i logik, torsdag den 20. april Opgaver i logik, torsdag den 20. april Opgave 1 Oversæt følgende udsagn til logiske udtryk. c) Hvis Jones ikke bliver valgt til leder af partiet, så vil enten Smith eller Robinson forlade kabinettet, og

Læs mere

Projekt 1.4 De reelle tal og 2. hovedsætning om kontinuitet

Projekt 1.4 De reelle tal og 2. hovedsætning om kontinuitet Projekt 1.4 De reelle tal og 2. hovedsætning om kontinuitet Mens den 1. hovedsætning om kontinuerte funktioner kom forholdsvis smertefrit ud af intervalrusebetragtninger, så er 2. hovedsætning betydeligt

Læs mere

De rigtige reelle tal

De rigtige reelle tal De rigtige reelle tal Frank Villa 17. januar 2014 Dette dokument er en del af MatBog.dk 2008-2012. IT Teaching Tools. ISBN-13: 978-87-92775-00-9. Se yderligere betingelser for brug her. Indhold 1 Introduktion

Læs mere

Boolsk algebra For IT studerende

Boolsk algebra For IT studerende Boolsk algebra For IT studerende Henrik Kressner Indholdsfortegnelse 1 Indledning...2 2 Logiske kredsløb...3 Eksempel:...3 Operatorer...4 NOT operatoren...4 AND operatoren...5 OR operatoren...6 XOR operatoren...7

Læs mere

Euklids algoritme og kædebrøker

Euklids algoritme og kædebrøker Euklids algoritme og kædebrøker Michael Knudsen I denne note vil vi med Z, Q og R betegne mængden af henholdsvis de hele, de rationale og de reelle tal. Altså er { m } Z = {..., 2,, 0,, 2,...} og Q = n

Læs mere

Introduktion til prædikatlogik

Introduktion til prædikatlogik Introduktion til prædikatlogik Torben Braüner Datalogisk Afdeling Roskilde Universitetscenter 1 Plan Symbolisering af sætninger Syntaks Semantik 2 Udsagnslogik Sætningen er den mindste syntaktiske enhed

Læs mere

Punktmængdetopologi. Mikkel Stouby Petersen. 1. marts 2013

Punktmængdetopologi. Mikkel Stouby Petersen. 1. marts 2013 Punktmængdetopologi Mikkel Stouby Petersen 1. marts 2013 I kurset Matematisk Analyse 1 er et metrisk rum et af de mest grundlæggende begreber. Et metrisk rum (X, d) er en mængde X sammen med en metrik

Læs mere

Introduktion til differentialregning 1. Jens Siegstad og Annegrethe Bak

Introduktion til differentialregning 1. Jens Siegstad og Annegrethe Bak Introduktion til differentialregning 1 Jens Siegstad og Annegrete Bak 16. juli 2008 1 Indledning I denne note vil vi kort introduktion til differentilregning, idet vi skal bruge teorien i et emne, Matematisk

Læs mere

DM517:Supplerende noter om uafgørlighedsbeviser:

DM517:Supplerende noter om uafgørlighedsbeviser: DM517:Supplerende noter om uafgørlighedsbeviser: Jørgen Bang-Jensen October 9, 2013 Abstract Formålet med denne note er at give en form for kogebogsopskrift på, hvorledes man bygger et uafgørlighedsbevis

Læs mere

Den sproglige vending i filosofien

Den sproglige vending i filosofien ge til forståelsen af de begreber, med hvilke man udtrykte og talte om denne viden. Det blev kimen til en afgørende ændring af forståelsen af forholdet mellem empirisk videnskab og filosofisk refleksion,

Læs mere

Programmering, algoritmik og matematik en nødvendig sammenblanding?

Programmering, algoritmik og matematik en nødvendig sammenblanding? Programmering, algoritmik og matematik en nødvendig sammenblanding? Oplæg til IDA møde, 29. november 2004 Martin Zachariasen DIKU 1 Egen baggrund B.Sc. i datalogi 1989; Kandidat i datalogi 1995; Ph.D.

Læs mere

Matematiske metoder - Opgavesæt

Matematiske metoder - Opgavesæt Matematiske metoder - Opgavesæt Anders Friis, Anne Ryelund, Mads Friis, Signe Baggesen 24. maj 208 Beskrivelse af opgavesættet I dette opgavesæt vil du støde på opgaver, der er markeret med enten 0, eller

Læs mere

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. 22 Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. Indsættelse i hobe. Sletning af minimalt element i hobe. Repræsentation. 327

Læs mere

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Sproget Limba. Til brug i G1 og K1. Dat1E 2003 Sproget Limba Til brug i G1 og K1 Dat1E 2003 Abstract Limba er et simpelt imperativt sprog med hoballokerede tupler. Dette dokument beskriver uformelt Limbas syntaks og semantik samt en fortolker for Limba,

Læs mere

Tal. Vi mener, vi kender og kan bruge følgende talmængder: N : de positive hele tal, Z : de hele tal, Q: de rationale tal.

Tal. Vi mener, vi kender og kan bruge følgende talmængder: N : de positive hele tal, Z : de hele tal, Q: de rationale tal. 1 Tal Tal kan forekomme os nærmest at være selvfølgelige, umiddelbare og naturgivne. Men det er kun, fordi vi har vænnet os til dem. Som det vil fremgå af vores timer, har de mange overraskende egenskaber

Læs mere

Brug og Misbrug af logiske tegn

Brug og Misbrug af logiske tegn Brug og Misbrug af logiske tegn Frank Nasser 20. april 2011 c 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk:

Læs mere

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater Design by Contract Design and Programming by Contract Anne Haxthausen ah@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere

Læs mere

Boolsk algebra For IT studerende

Boolsk algebra For IT studerende Boolsk algebra For IT studerende Henrik Kressner Indholdsfortegnelse Indledning...3 Logiske kredsløb...4 Eksempel:...4 Operatorer...4 NOT operatoren...5 AND operatoren...5 OR operatoren...6 XOR operatoren...7

Læs mere

Studieordning for diplomuddannelsen i informationsteknologi

Studieordning for diplomuddannelsen i informationsteknologi Studieordning for diplomuddannelsen i informationsteknologi April 2007 [v3] 1 Introduktion... 2 2 Formål... 2 3 Indhold... 2 4 Adgangskrav... 3 5 Eksaminer... 3 6 Studieplan... 3 6.1 Formelle modeller

Læs mere

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel: Denne guide er oprindeligt udgivet på Eksperten.dk SQL og ASP En artikel omkring simpel SQL og hvordan disse opbygges, udformes og udføres, sådan at man kan få et brugbart resultat i ASP. Dette ligefra

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Onsdag den. august 200, kl. 9.00.00 Opgave (25%) Lad A = A[] A[n] være et array af heltal. Længden af det længste

Læs mere

Noter til Perspektiver i Matematikken

Noter til Perspektiver i Matematikken Noter til Perspektiver i Matematikken Henrik Stetkær 25. august 2003 1 Indledning I dette kursus (Perspektiver i Matematikken) skal vi studere de hele tal og deres egenskaber. Vi lader Z betegne mængden

Læs mere

Kalkulus 2 - Grænseovergange, Kontinuitet og Følger

Kalkulus 2 - Grænseovergange, Kontinuitet og Følger Kalkulus - Grænseovergange, Kontinuitet og Følger Mads Friis 8. januar 05 Indhold Grundlæggende uligheder Grænseovergange 3 3 Kontinuitet 9 4 Følger 0 5 Perspektivering 4 Grundlæggende uligheder Sætning

Læs mere

Henrik Bulskov Styltsvig

Henrik Bulskov Styltsvig Matematisk logik Henrik Bulskov Styltsvig Datalogiafdelingen, hus 42.1 Roskilde Universitetscenter Universitetsvej 1 Postboks 260 4000 Roskilde Telefon: 4674 2000 Fax: 4674 3072 www.dat.ruc.dk Disposition

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Programmering for begyndere Lektion 2. Opsamling mm

Programmering for begyndere Lektion 2. Opsamling mm Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger

Læs mere

Differentialregning. Ib Michelsen

Differentialregning. Ib Michelsen Differentialregning Ib Michelsen Ikast 2012 Forsidebilledet Tredjegradspolynomium i blåt med rød tangent Version: 0.02 (18-09-12) Denne side er (~ 2) Indholdsfortegnelse Introduktion...5 Definition af

Læs mere

Om at løse problemer En opgave-workshop Beregnelighed og kompleksitet

Om at løse problemer En opgave-workshop Beregnelighed og kompleksitet Om at løse problemer En opgave-workshop Beregnelighed og kompleksitet Hans Hüttel 27. oktober 2004 Mathematics, you see, is not a spectator sport. To understand mathematics means to be able to do mathematics.

Læs mere

Fraktaler Mandelbrots Mængde

Fraktaler Mandelbrots Mængde Fraktaler Mandelbrots Mængde Foredragsnoter Af Jonas Lindstrøm Jensen Institut For Matematiske Fag Århus Universitet Indhold Indhold 1 1 Indledning 3 2 Komplekse tal 5 2.1 Definition.......................................

Læs mere

Hjerner i et kar - Hilary Putnam. noter af Mogens Lilleør, 1996

Hjerner i et kar - Hilary Putnam. noter af Mogens Lilleør, 1996 Hjerner i et kar - Hilary Putnam noter af Mogens Lilleør, 1996 Historien om 'hjerner i et kar' tjener til: 1) at rejse det klassiske, skepticistiske problem om den ydre verden og 2) at diskutere forholdet

Læs mere

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget

Læs mere

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

Læs mere

3. Om skalamønstrene og den indfoldede orden

3. Om skalamønstrene og den indfoldede orden Dette er den tredje af fem artikler under den fælles overskrift Studier på grundlag af programmet SKALAGENERATOREN (forfatter: Jørgen Erichsen) 3. Om skalamønstrene og den indfoldede orden Lad os begynde

Læs mere

Appendiks 6: Universet som en matematisk struktur

Appendiks 6: Universet som en matematisk struktur Appendiks 6: Universet som en matematisk struktur En matematisk struktur er et meget abstrakt dyr, der kan defineres på følgende måde: En mængde, S, af elementer {s 1, s 2,,s n }, mellem hvilke der findes

Læs mere

Ja! det beviste vi uge 16+17

Ja! det beviste vi uge 16+17 Ugens emner Lukketheds- og afgørlighedsegenskaber [5.3-5.5] lukkethed under,,,, * lukkethed under homomorfi og invers homomorfi pumping -lemmaet beslutningsproblemer: membership, emptiness, finiteness

Læs mere

Implikationer og Negationer

Implikationer og Negationer Implikationer og Negationer Frank Villa 5. april 2014 Dette dokument er en del af MatBog.dk 2008-2012. IT Teaching Tools. ISBN-13: 978-87-92775-00-9. Se yderligere betingelser for brug her. Indhold 1 Introduktion

Læs mere

Udarbejdet af CFU Absalon

Udarbejdet af CFU Absalon Chatbots i Scratch Introduktion: En chatbot er et lille program, der kan chatte. De bruges mange steder på internettet, enten for at kunne hjælpe i nogle bestemte situationer eller for at underholde. De

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere

Lad os som eksempel se på samtidigt kast med en terning og en mønt:

Lad os som eksempel se på samtidigt kast med en terning og en mønt: SANDSYNLIGHEDSREGNING Stokastisk eksperiment Et stokastisk eksperiment er et eksperiment, hvor vi fornuftigvis ikke på forhånd kan have en formodning om resultatet af eksperimentet Til gengæld kan vi prøve

Læs mere

Om brugen af matematiske tegn og objekter i en god matematisk fremstilling

Om brugen af matematiske tegn og objekter i en god matematisk fremstilling Om brugen af matematiske tegn og objekter i en god matematisk fremstilling af Petur Birgir Petersen Et særpræg ved matematik som videnskab er den udstrakte brug af symboler. Det er vigtigt at symbolerne

Læs mere

Jan B. Larsen HTX Næstved Computational Thinking Albena Nielsen N. Zahles Gymnasium 2018/2019

Jan B. Larsen HTX Næstved Computational Thinking Albena Nielsen N. Zahles Gymnasium 2018/2019 Forløb: Toksikologi Fag og emner Forløbet kan laves udelukkende i matematik og bioteknologi, men der er oplagt, at det implementeres i andre fag. Matematik modellering, differenceligninger, sandsynlighed,

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

HTX, RTG. Rumlige Figurer. Matematik og programmering

HTX, RTG. Rumlige Figurer. Matematik og programmering HTX, RTG Rumlige Figurer Matematik og programmering Vejledere: Jørn Christian Bendtsen og Karl G. Bjarnason Morten Bo Kofoed Nielsen & Michael Jokil 10-10-2011 In this assignment we have been working with

Læs mere

4 Oversigt over kapitel 4

4 Oversigt over kapitel 4 IMM, 2002-09-14 Poul Thyregod 4 Oversigt over kapitel 4 Introduktion Hidtil har vi beskæftiget os med data. Når data repræsenterer gentagne observationer (i bred forstand) af et fænomen, kan det være bekvemt

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Institut for Matematik og Datalogi Syddansk Universitet, Odense Onsdag den 0. juni 009, kl. 9 Alle sædvanlige hjælpemidler (lærebøger, notater, osv.)

Læs mere

Matematisk induktion

Matematisk induktion Induktionsbeviser MT01.0.07 1 1 Induktionsbeviser Matematisk induktion Sætninger der udtaler sig om hvad der gælder for alle naturlige tal n N, kan undertiden bevises ved matematisk induktion. Idéen bag

Læs mere

DM13-1. Obligatorisk opgave E.05. Jacob Aae Mikkelsen

DM13-1. Obligatorisk opgave E.05. Jacob Aae Mikkelsen DM13-1. Obligatorisk opgave E.05 Jacob Aae Mikkelsen - 191076 26. september 2005 Indhold Analyse af problemstillingen........................ 2 Spørgsmål 1................................. 3 Spørgsmål

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af)

Læs mere

Lineære differentialligningers karakter og lineære 1. ordens differentialligninger

Lineære differentialligningers karakter og lineære 1. ordens differentialligninger enote 11 1 enote 11 Lineære differentialligningers karakter og lineære 1. ordens differentialligninger I denne note introduceres lineære differentialligninger, som er en speciel (og bekvem) form for differentialligninger.

Læs mere

Grundlæggende Matematik

Grundlæggende Matematik Grundlæggende Matematik Hayati Balo, AAMS August 2012 1. Matematiske symboler For at udtrykke de verbale udsagn matematisk korrekt, så det bliver lettere og hurtigere at skrive, indføres en række matematiske

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Matematisk Metode. Jesper Lützen og Ian Kiming

Matematisk Metode. Jesper Lützen og Ian Kiming Matematisk Metode Jesper Lützen og Ian Kiming 17. oktober 2008 ii Contents Introduktion. Den aksiomatisk-deduktive metode ix 1 Logik 1 1.1 Udsagn og prædikater........................ 1 1.2 Sammensatte

Læs mere

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Opbyg løsningen skridt for skridt ved hele tiden af vælge lige

Læs mere

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528)

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528) Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM58) Institut for Matematik & Datalogi Syddansk Universitet Torsdag den 7 Januar 010, kl. 9 13 Alle sædvanlige hjælpemidler (lærebøger,

Læs mere

Klassen er sammenlæst, altså 5 og 6 klasse på en og samme tid. Samtidig er klassen pt på ca 11 elever ialt.

Klassen er sammenlæst, altså 5 og 6 klasse på en og samme tid. Samtidig er klassen pt på ca 11 elever ialt. Introduktion til mat i 5/6 klasse Vejle Privatskole 13/14: Klassen er sammenlæst, altså 5 og 6 klasse på en og samme tid. Samtidig er klassen pt på ca 11 elever ialt. Udgangspunktet bliver en blød screening,

Læs mere

Reeksamen i Diskret Matematik

Reeksamen i Diskret Matematik Reeksamen i Diskret Matematik Første Studieår ved Det Teknisk-Naturvidenskabelige Fakultet 21. august 2015 Nærværende eksamenssæt består af 10 nummererede sider med ialt 17 opgaver. Tilladte hjælpemidler:

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering 1 / 36 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 6, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

DM536. Rapport og debug

DM536. Rapport og debug DM536 Rapport og debug Kilder Vigtig.it (Felix Palludan Hargreaves) http://vigtig.it/dm502/howto_report.pdf http://vigtig.it/blog/teaching/#toc-relevant-tips Peter Schneider-Kamp http://imada.sdu.dk/~petersk/dm536/project2.pdf

Læs mere

3. klasse 6. klasse 9. klasse

3. klasse 6. klasse 9. klasse Børne- og Undervisningsudvalget 2012-13 BUU Alm.del Bilag 326 Offentligt Elevplan 3. klasse 6. klasse 9. klasse Matematiske kompetencer Status tal og algebra sikker i, er usikker i de naturlige tals opbygning

Læs mere

16. december. Resume sidste gang

16. december. Resume sidste gang 16. december Resume sidste gang Abstrakt problem, konkret instans, afgørlighedsproblem Effektiv kodning (pol. relateret til binær kodning) Sprog L : mængden af instanser for et afgørlighedsproblem hvor

Læs mere

Skriftlig Eksamen Diskret Matematik (DM528)

Skriftlig Eksamen Diskret Matematik (DM528) Skriftlig Eksamen Diskret Matematik (DM528) Institut for Matematik & Datalogi Syddansk Universitet Tirsdag den 20 Januar 2009, kl. 9 13 Alle sædvanlige hjælpemidler (lærebøger, notater etc.) samt brug

Læs mere

Affine rum. a 1 u 1 + a 2 u 2 + a 3 u 3 = a 1 u 1 + (1 a 1 )( u 2 + a 3. + a 3. u 3 ) 1 a 1. Da a 2

Affine rum. a 1 u 1 + a 2 u 2 + a 3 u 3 = a 1 u 1 + (1 a 1 )( u 2 + a 3. + a 3. u 3 ) 1 a 1. Da a 2 Affine rum I denne note behandles kun rum over R. Alt kan imidlertid gennemføres på samme måde over C eller ethvert andet legeme. Et underrum U R n er karakteriseret ved at det er en delmængde som er lukket

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Sammenhængskomponenter i grafer

Sammenhængskomponenter i grafer Sammenhængskomponenter i grafer Ækvivalensrelationer Repetition: En relation R på en mængde S er en delmængde af S S. Når (x, y) R siges x at stå i relation til y. Ofte skrives x y, og relationen selv

Læs mere

Årsplan matematik 8. klasse

Årsplan matematik 8. klasse Årsplan matematik 8. klasse 2019-2020 Eleverne arbejder med grundbogen Matematrix 8. I undervisningen inddrages digitale undervisningsredskaber såsom Geogebra, Wordmat, MatematikFessor, emat, excel og

Læs mere

Opgaver hørende til undervisningsmateriale om Herons formel

Opgaver hørende til undervisningsmateriale om Herons formel Opgaver hørende til undervisningsmateriale om Herons formel 20. juni 2016 I Herons formel (Danielsen og Sørensen, 2016) er stillet en række opgaver, som her gengives. Referencer Danielsen, Kristian og

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Gruppeteori. Michael Knudsen. 8. marts For at motivere indførelsen af gruppebegrebet begynder vi med et eksempel.

Gruppeteori. Michael Knudsen. 8. marts For at motivere indførelsen af gruppebegrebet begynder vi med et eksempel. Gruppeteori Michael Knudsen 8. marts 2005 1 Motivation For at motivere indførelsen af gruppebegrebet begynder vi med et eksempel. Eksempel 1.1. Lad Z betegne mængden af de hele tal, Z = {..., 2, 1, 0,

Læs mere

Vurdering af kvalitet en note af Tove Zöga Larsen

Vurdering af kvalitet en note af Tove Zöga Larsen Vurdering af kvalitet en note af Tove Zöga Larsen Kvalitet... 2 Test... 2 Hvordan finder man testdata?... 2 Dokumentation af test... 3 Review... 3 Vurderingskriterier... 3 Gennemførelsen af et review...

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

3 Algebraisk Specifikation af Abstrakte Datatyper.

3 Algebraisk Specifikation af Abstrakte Datatyper. 3 Algebraisk Specifikation af Abstrakte Datatyper. Specifikation kontra program. Bestanddele af en algebraisk specifikation. Klassificering af funktioner i en ADT. Systematisk definition af ligninger.

Læs mere

Import af rekursivt (parent-child) hierarki i Palo

Import af rekursivt (parent-child) hierarki i Palo Import af rekursivt (parent-child) hierarki i Palo Dette dokument beskriver hvordan et simpelt rekursivt (parent-child) hierarki kan importeres ind i Palo på forskellige måder via SQL og samtidig bibeholde

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere