Pilen ved træets rod. Hans Hüttel

Størrelse: px
Starte visningen fra side:

Download "Pilen ved træets rod. Hans Hüttel"

Transkript

1 Pilen ved træets rod Hans Hüttel Foråret 2004

2 2

3 Forord Endnu et år er gået, og endnu en ny udgave af Pilen ved træets rod ser dagens lys. Dette er 2004-udgaven af bogen, der er blevet til i forbindelse med mit kursus Syntaks og semantik ved semesteret Dat 2 på datalogistudiet ved Aalborg Universitet. Lærebøger har som regel prosaiske titler, men Pilen ved træets rod er min hyldest til Astrid Lindgren. Samtidig minder titlen os om at der i en operationel semantik er en transition præcis hvis transitionen er rod i et derivationstræ! Formål og kontekst Formålet med Pilen ved træets rod er at give et indblik i hvordan man ved brug af strukturel operationel semantik kan beskrive gængse konstruktioner i programmeringssprog og anvende operationel semantik i implementation af oversættere og fortolkere. For at kunne perspektivere emnet, har jeg også medtaget et kapitel om denotationel semantik og et kapitel om det matematiske grundlag for rekursive definitioner. Så vidt jeg ved, er dette den første lærebog af sin art på dansk. Min fremstilling i denne notesamling er inspireret af Gordon Plotkins banebrydende forelæsningsnoter [Plo81] samt uudgivne noter af Robin Milner. Notationen er bevidst holdt nogenlunde tæt på notationen i [NN92], som tidligere har været anvendt i kurset Syntaks og semantik på datalogistudiet ved Aalborg Universitet. En anden, nyere bog om operationel semantik er [Hen91]. En fin nyere bog om denotationel semantik er [Sch86], der også har været anvendt på datalogistudiet ved Aalborg Universitet. Matematiske/datalogiske forudsætninger De matematiske forudsætninger for at kunne læse Pilen ved træets rod er matematik på A-niveau fra gymnasieskolen, elementær mængdelære, kend-

4 4 skab til elementære begreber fra diskret matematik som grafer og strenge samt fortrolighed med bevisteknikker som heltalsinduktion og indirekte beviser. Kapitel 1 er et kort vue over nogle aspekter af elementær mængdelære. De datalogiske forudsætninger er kendskab på programmeringsniveau til et typisk imperativt programmeringssprog som Pascal. En læsevejledning Kapitlerne i del I og II (kapitlerne 2 til 4) er nødvendige forudsætninger for alle emner i resten af bogen. Kapitel 8 forudsætter at du har læst stoffet om parallelitet i kapitel 5, og kapitel 7 forudsætter kapitel 6. Kapitel 10 om smallstep-semantik for procedurer forudsætter at du læst kapitel 6, og kapitel 11 om objektorientering og parallelitet forudsætter at du har læst kapitlerne 8 og 10. Kapitel 14 forudsætter kapitel 13. Opgaver og overvejelser Der er en del øvelser rundt om i Pilen ved træets rod. Nogle af disse øvelser er opgaver, der belyser aspekter af teksten. Her skal du under alle omstændigheder have blyant og papir fremme. Du kan godt læse teksten igennem uden at regne opgaverne i første omgang, undtagen for de ganske enkelte opgaver hvorom der står at de er vigtige. Andre øvelser er overvejelser, små spørgsmål, som du skal overveje for at tjekke din forståelse af det du netop har læst. (Der er altså ikke tale om udeladelser.) Du bør ikke læse teksten uden at tænke grundigt over overvejelserne. Ændringer i forhold til tidligere udgaver I forhold til 2003-udgaven af Pilen ved træets rod er der sket en del ændringer rundt omkring. En række meningsforstyrrende fejl er søgt rettet, og kapitel 14 er blevet kraftigt omstruktureret i et forsøg på at gøre det mere læsevenligt. Tak Tak til alle de studerende, som siden 1996 har måttet leve med tidligere inkarnationer af denne bog og har hjulpet mig med at rydde op i alle trykfejlene. En særlig tak til Lars Christian Schunk for en meget grundig korrekturlæsning.

5 5 Kommentarer Der er sandsynligvis stadig uopdagede fejl i denne udgave af Pilen ved træets rod, og der er sikkert mange valg og udeladelser som kan diskuteres. Så send med dine kommentarer til hans@cs.auc.dk. Hans Hüttel 24. februar 2004

6 6

7 Indhold I Baggrund 13 1 Motivation og baggrund Semantik er læren om betydning Eksempler fra historien ALGOL Pascal Forskellige tilgange til semantik Moderne anvendelser af semantik Standarder for implementation Compiler- og fortolker-generering Verifikation og fejlfinding eksempler og moraler Semantik og principper i programmeringssprog Grundlæggende mængdelære Mængder Funktioner Partielle og totale funktioner Funktionsforskrifter Operationer på mængder Foreningsmængde Fællesmængde Potensmængde Kartesisk produkt Funktionsrum II Grundlæggende operationel semantik 33 3 Operationel semantik Abstrakt syntaks Sproget Bims og dets abstrakte syntaks

8 8 INDHOLD Nogle konventioner i denne bog Transitionssystemer Operationel semantik for Aud En big-step-semantik for Aud En small-step-semantik for Aud Om at vise egenskaber ved en operationel semantik En semantik for boolske udtryk Sammenfatning Operationelle semantikker for Bims En model for programtilstande En big-step operationel semantik for Aud med variable En big-step operationel semantik for Bud med variable En big-step semantik for Bims Definition af transitionssystemet Om at konstruere derivationstræer En small-step semantik for Bims Ækvivalens af de to semantikker III Sproglige konstruktioner 71 5 Udvidelser af Bims Generelt om udvidelserne Løkkekonstruktioner Repeat-until-løkker For-løkker Abnorm terminering Nondeterminisme Parallelitet Blokke og procedurer (1) Abstrakt syntaks for Bip Environment-store-modellen Aritmetiske og boolske udtryk Erklæringer Variabelerklæringer Procedureerklæringer Kommandoer scoperegler Dynamisk binding af variabler og procedurer

9 INDHOLD Dynamisk binding af variabler og statisk binding af procedurer Statisk binding for variabler og procedurer Parametermekanismer Grundlæggende antagelser Reference-parametre Om rekursive og ikke-rekursive procedurekald Værdiparametre Navneparametre Scoperegler Syntaktisk substitution Perspektivering Parallelitet og kommunikation Kommunikation via kanaler sproget Pib Synkron kommunikation i Pib Det lokale niveau semantik af processer Global adfærd semantik af programmer Andre kommunikationsmodeller Asynkron Pib Implicit parallelitet Semantisk ækvivalens og parallelitet Records Hvad er records? Abstrakt syntaks for Bur Environments Transitionsregler Generaliserede variabler Aritmetiske udtryk Boolske udtryk Variabelerklæringer Procedure-erklæringer Generaliserede procedurenavne Record-erklæringer Kommandoer Blokke og procedurer (2) Køretidsstakke Erklæringer

10 10 INDHOLD 10.3 Kommandoer Evalueringskontekster Transitionsregler for kommandoer Objektorientering og parallelitet Ble Abstrakt syntaks for Ble Rendezvous med Ble Operationel semantik for parallel adfærd Globalt og lokalt Environments Transitionssystemer Erklæringer Det lokale transitionssystem Kommunikations-transitionssystemet Det globale transitionssystem Funktionelle sprog Hvad er et funktionelt sprog? De funktionelle sprogs historie λ-kalkylen Anvendt λ-kalkyle Fup et lille funktionelt sprog Abstrakt syntaks Big-step-semantik En small-step-semantik Videre læsning Programverifikation Typer Parallelle funktionelle sprog IV Andre emner Introduktion til denotationel semantik Lidt om hvad denotationel semantik kan bruges til λ-notation Grundlæggende ideer Denotationel semantik for Aud Denotationel semantik for Bud Denotationel semantik for Bims

11 INDHOLD Denotationen af en kommando Potentielle problemer i definitionen af S Rekursive definitioner Lidt notation Eksempler på rekursive definitioner Nogle patologiske eksempler Kontekstfrie grammatikker Rekursive funktioner over de hele tal Denotationelle semantiske definitioner Domæner Partielt ordnede mængder Lukning under grænseværdi Eksempler på domæner Delmængde-domæner Funktionsrum-domæner Analyse af rekursive definitioner Kontekstfrie grammatikker Rekursive funktioner over de hele tal Denotationelle semantiske definitioner Kontinuerte funktioner over domæner Eksistens af mindste fikspunkt Anvendelser af resultatet om fikspunkter Kontekstfrie grammatikker Rekursive funktioner over de hele tal Denotationel semantik Andre anvendelser Programverifikation Ækvivalens mellem denotationel og operationel semantik Rekursivt definerede mængder Videre læsning Bilag 211 A Big-step semantik for Bip 211 A.1 Abstrakt syntaks A.1.1 Syntaktiske kategorier A.1.2 Opbygningsregler for de syntaktiske kategorier A.2 Semantiske mængder og hjælpefunktioner A.3 Transitionssystemer

12 12 INDHOLD A.3.1 Transitionssystem for Aud A.3.2 Transitionssystem for Bud A.3.3 Transitionssystem for ErkV A.3.4 Transitionssystem for ErkP A.3.5 Transitionssystem for Kom B Om Standard ML 221 B.1 Funktionalsprog B.2 Typer i SML B.2.1 Lister og den slags B.2.2 Datatype-definitioner B.3 Kontrolstrukturer i SML B.4 At køre SML B.5 Programmer B.5.1 At indlæse et program B.5.2 At bruge funktioner og værdier i et program B.6 Hvor kan jeg finde SML? C At implementere operationelle semantikker 225 C.1 Abstrakt syntaks C.2 Transitionssystemer C.2.1 Programtilstande C.2.2 Semantik for aritmetiske og boolske udtryk C.3 Big-step-semantik C.4 Small-step-semantik C.5 Parallelitet Litteratur 231

13 Del I Baggrund

14

15 Kapitel 1 Motivation og baggrund Formålet med dette korte kapitel er at give læseren en fornemmelse af de anvendelser og problemstillinger, der har motiveret og stadig motiverer det vigtige område inden for datalogi der hedder semantik af programmeringssprog. 1.1 Semantik er læren om betydning Programmeringssprogssemantik er det systematiske studium af matematiske modeller og metoder til at beskrive programmers adfærd. Ordet semantik er sin oprindelse græsk og blev oprindelig anvendt i lingvistik. I lingvistik skelner man mellem tre hoveddiscipliner, nemlig syntaks, der er studiet af sproglige ytringers opbygning, semantik, der er studiet af hvad sproglige ytringer betyder, og pragmatik, der er studiet af hvordan man anvender sproglige ytringer. Begreberne syntaks og semantik optræder også i datalogi. I datalogi beskæftiger vi os med programmeringssprog (i ordets bredeste forstand). Et programs betydning er dets adfærd, og semantik er derfor her den del af programmeringssprogs teori, der er studiet af programmers adfærd. Semantik af programmeringssprog beskæftiger sig kun med rent interne aspekter af programmet, nemlig præcis hvad der sker i et program. Semantik foregiver således ikke at kunne fortælle noget om bløde kvaliteter i et program f.eks. om det er brugervenligt. Når vi i denne bog taler om semantik, mener vi formel semantik forstået som en semantik, der anvender matematiske begrebsdannelser. Formel semantik opstod i forbindelse med matematisk logik i begyndelsen af det 20. århundrede. Et af de oprindelige mål med matematisk logik var at give en præcis matematisk beskrivelse af matematikkens sprog, herunder

16 16 KAPITEL 1. MOTIVATION OG BAGGRUND Figur 1.1: Alfred Tarski betydningen af begrebet sandhed. Et væsentligt bidrag til dette arbejde blev leveret af den polske logiker Alfred Tarski [Tar35]. Mange af de oprindelige og centrale begreber i teorierne for programmeringssprogs semantik stammer fra Tarskis arbejde. Studiet af programmeringssprogs semantik begyndte sidst i 1960erne. Det udsprang af de stedse større problemer med at give dækkende og utvetydige beskrivelser af forskellige konstruktioner i eksisterende programmeringssprog. 1.2 Eksempler fra historien Lige siden de første programmeringssprog har erfaringen vist at man ikke kan nøjes med at definere adfærden af programmer uformelt ALGOL60 Programmeringssproget ALGOL60, der først så dagens lys i form af en artikel fra 1960 [BN60] (i dag kendt som ALGOL60-rapporten ), var på mange måder et skelsættende programmeringssprog. For det første var det resultatet af et meget omhyggelig arbejde foretaget af en komité af fremtrædende forskere, heriblandt John Backus, der også stod bag det første højniveauprogrammeringssprog FORTRAN, John McCarthy, opfinderen af LISP og danskeren Peter Naur, der blev Danmarks første professor i datalogi. For det andet blev ALGOL60 ophav til en hel familie af senere meget udbredte sprog, hvoriblandt Pascal og Modula er de mest kendte. For det tredie var

17 1.2. EKSEMPLER FRA HISTORIEN 17 ALGOL60 det første programmeringssprog, hvor man forsøgte at beskrive hele sprogets syntaks formelt. Den anvendte notation var en variant af kontekstfrie grammatikker, senere kendt som Backus-Naur-Form (BNF). Hvad angik beskrivelsen af ALGOL60-programmers semantik var Backus og hans kolleger henvist til at beskrive adfærden af programmer på et almindeligt engelsk der skulle være så præcist som overhovedet muligt; der var endnu ikke blevet formuleret nogen gængs matematisk teori for programmers adfærd. Det viste sig dog snart at selv ikke en samling dygtige forskere som AL- GOL60 s ophavsmænd (som for en stor dels vedkommende var uddannede matematikere) kunne undgå at være upræcise, når de ikke havde en formaliseret matematisk teori for programmers adfærd til deres rådighed. I 1963 udsendte forfatterne derfor en revideret udgave af ALGOL60-rapporten [BN63], hvor de forsøgte at rette de tvetydigheder og mangler, som var blevet fundet af dem selv og andre siden den oprindelige ALGOL60-rapport. Men hermed sluttede det ikke. Den amerikanske datalog og matematiker Donald E. Knuth skrev i 1967 [Knu67] en artikel, hvori han påpegede de problemer, der endnu var til stede i ALGOL60. Et af problemerne har med globale variabler i procedurer at gøre. Figur 1.2 viser hvordan det manifesterer sig. Den lille procedure pinlig er en udtryks-procedure, der returnerer en heltallig værdi. integer procedure pinlig begin comment x er en global variabel x := x+1 pinlig := 3 end pinlig Figur 1.2: En lille udtryks-procedure i ALGOL60 hvad laver den? Men det er ikke i ALGOL60-rapporten beskrevet om sideeffekter er tilladt eller ej. Det er derfor heller ikke beskrevet hvordan man evaluerer aritmetiske udtryk, hvor der kan indgå sideeffekter. Lad os antage at den globale variabel x har værdien 5 og vi derefter vil udregne x+pinlig. Skal vi evaluere x før eller efter vi kalder pinlig? Hvis vi evaluerer x først, er udtrykkets værdien 8, hvis vi evaluerer x efter kaldet, får vi værdien 9! Et resultat af Knuths artikel var at ophavsmændene til ALGOL60 gik tilbage til tegnebrættet og arbejdede på at få fjernet unøjagtighederne. At det

18 18 KAPITEL 1. MOTIVATION OG BAGGRUND tog så forholdsvis længe inden disse unøjagtigheder blev opdaget, skyldtes at man ikke havde et udtømmende matematisk begrebsapparat til sin rådighed, der kunne hjælpe med at afklare om alle aspekter af adfærden var blevet defineret Pascal Pascal blev første gang dokumenteret samlet i Jensen 1 og Wirths bog fra 1975[JW75]. Også Pascal har lidt under de problemer som en uformel beskrivelse giver anledning til. Specielt er der problemer med at forstå scopereglerne de er knap nok defineret i Jensen og Wirths beskrivelse. Der tales f.eks. om globale variabler, men intet sted i beskrivelsen af Pascal fremgår det hvad en global variabel er, endsige hvad dens scope skal være. Der er heller ikke nogen regler, der kræver at en variabel skal erklæres før den bliver brugt! Alle eksisterende Pascal-implementationer har en sådan regel (undtagen for pointer-typer), men reglen er ikke del af den oprindelige definition af Pascal. 1.3 Forskellige tilgange til semantik Arbejdet med at skabe en matematisk præcis teori for programmers adfærd er blevet motiveret af eksempler som de ovenfor nævnte. Denotationel semantik er historisk set den første tilgang og blev til i løbet af sidste halvdel af 1960erne [Sto77]. Pionererne inden for denotationel semantik er den amerikanske logiker Dana Scott og den engelske datalog Christopher Strachey. I denotationel semantik beskriver man et programs adfærd ved at definere en betydningsfunktion, der for hver sproglig konstruktion giver konstruktionens betydning dens denotation. Typisk er denotationen af en konstruktion en funktion fra input til output. Strukturel operationel semantik, opstod omkring 1980 og skyldes Gordon Plotkin, der gav en samlet beskrivelse af sine ideer i [Plo81] og Robin Milner, der anvendte ideerne i [Mil80]. Plotkin giver i [Plo03] en grundig gennemgang af hele dette områdes opståen. I strukturel operationel semantik beskriver man et programs adfærd ved en transitionsrelation der beskriver de enkelte programskridt. En af motivationerne til denne tilgang var at det giver en simpel beskrivelse af parallelle programmer; alle tidligere forsøg på at give en semantisk beskrivelse af selv simple parallelle programmeringssprog ved brug af denotationel semantik havde vist sig at være mere end almindeligt komplicerede. 1 Jensen er amerikaner.

19 1.3. FORSKELLIGE TILGANGE TIL SEMANTIK 19 Figur 1.3: Dana Scott Figur 1.4: Gordon Plotkin (t.v.) og Robin Milner (t.h.)

20 20 KAPITEL 1. MOTIVATION OG BAGGRUND I aksiomatisk semantik, som skyldes Hoare [Apt77] og som opstod omtrent samtidig med denotationel semantik, beskriver man en sproglig konstruktion ved logik, typisk ved at opstille regler for hvilke logiske formler der gælder før og efter konstruktionens udførelse. Figur 1.5: Tony Hoare I algebraisk semantik, beskriver man programmers adfærd ved brug af universel algebra [GM96, Gue81]. Forskergruppen OBJ med bl.a. Joseph Goguen har været central i at udvikle denne tilgang. Figur 1.6: Joseph Goguen

21 1.4. MODERNE ANVENDELSER AF SEMANTIK 21 Disse fire tilgange til semantik er ikke rivaler, men kompletterer hinanden. Forskellige former for semantik egner sig i varierende omfang til at beskrive forskellige aspekter af programmers adfærd. Således er det, som nævnt tidligere, typisk nemmere at beskrive parallel programadfærd i operationel semantik end i denotationel semantik. Lidt filosofisk kan man udtrykke forskellene mellem de forskellige slags semantik således: Denotationel semantik fortæller os hvad et program laver. Operationel semantik fortæller os hvordan et program udføres Algebraisk semantik fortæller os hvilke algebraiske love et program overholder. Aksiomatisk semantik fortæller os hvorfor et program opfører sig som det gør. Denne bog lægger hovedvægten på operationel semantik. 1.4 Moderne anvendelser af semantik Semantik af programmeringssprog har efterhånden fået mange anvendelser i områder, hvor det er vigtigt at kunne give en præcis beskrivelse af et programs adfærd Standarder for implementation En semantik for et programmeringssprog er ikke et alternativ til de uformelle beskrivelser af programmeringssprogskonstruktioner, som findes i introducerende manualer og er vigtige når man skal lære at programmere. Semantik tjener et helt andet formål, nemlig at fungere som rettesnor ved implementation. Eksemplerne fra afsnit 1.2 var med til at forme den vigtige erkendelse at kun en præcis semantisk definition kan give en udtømmende, implementationsuafhængig og helt præcis definition af alle aspekter af sproget. En sådan præcis definition er af største vigtighed, hvis man er en superbruger af sproget der der skal implementere sproget, verificere programmer skrevet i sproget eller lave en programmeringsomgivelse. Det bedst kendte eksempel på en semantisk definition af et stort programmeringssprog er definitionen af Standard ML [MTHM97], som skyldes Robin Milner, Robert Harper, David

22 22 KAPITEL 1. MOTIVATION OG BAGGRUND MacQueen og danskeren Mads Tofte 2. Senere er der blevet lagt mange kræfter i at give en passende semantisk definition af Java, og der eksisterer nu såvel denotationelle som operationelle semantikker af Java [AF99] Compiler- og fortolker-generering En præcis semantisk definition fortæller hvordan et program skal udføres. Derfor er skridtet ikke langt til at konstruere en compiler-generator, der kan tage en semantisk definition som input og herudfra lave en compiler eller fortolker for det sprog, man har defineret semantik for. Der findes i dag adskillige sådanne compiler-generatorer. Nogle er baseret på denotationel semantik, andre på forskellige varianter af operationel semantik. I denne bog vil jeg give et antal mindre eksempler på hvordan man kan generere en (ineffektiv) fortolker ud fra en strukturel operationel semantik Verifikation og fejlfinding eksempler og moraler Mange systemer i dag er sikkerhedskritiske, dvs. at fejl i systemerne kan have katastrofale følger. Der er allerede adskillige eksempler på hvordan tilsyneladende banale fejl i et program kan have forfærdelige konsekvenser. En præcis matematisk model for programmers adfærd gør det muligt at forudsige hvad et program vil foretage sig på samme måde som f.eks. en præcis matematisk model for belastninger i en stålkonstruktion gør det muligt at beregne en bros dimensioner. Ariane 5-eksplosionen Styringssystemet i Ariane 5-raketten giver et eksempel på en katastrofal fejl, der kunne være blevet forhindret ved brug af en præcis analyse af et programs adfærd. Ariane 5 er en løfteraket udviklet af det europæiske rumagentur ESA. Det tog 10 år at udvikle Ariane 5 og kostede alt i alt 7 milliarder dollars. Ariane 5 skulle kunne løfte to satellitter på hver 3 ton ud i kredsløb. 4. juni 1996 foretog man den første prøveopsendelse af Ariane 5. ESA håbede så meget på succes at man havde valgt at sende fire dyre satellitter op med Ariane 5. På Figur 1.7 kan man se, hvordan affyringen udviklede sig. 39 sekunder efter opsendelsen eksploderede raketten og de fire satellitter. Der var ikke blevet tegnet nogen forsikring på dem. Årsagen til eksplosionen var en fejl i det program som skulle styre Ariane 5. Programmet i Ariane-raketten prøvede at gemme det tal, der angiver 2 Mads Tofte er i dag direktør ved IT-Universitetet i København.

23 1.4. MODERNE ANVENDELSER AF SEMANTIK 23 Figur 1.7: Den mislykkede affyring af Ariane 5 rakettens vandrette hastighed, på bare 16 bit. Problemet er at rakettens hastighed kan være meget høj; et andet sted i programmet skulle man da også bruge 64 bit til at gemme rakettens vandrette hastighed. I en computer på jorden ville der ikke ske andet end at programmet gik ned med en fejlmeddelelse. Men i Ariane-raketten giver den slags fejl anledning til at rakettens reservecomputer overtager kontrollen. Problemet var blot at reservecomputeren kørte samme, fejlagtige program. Meget af Ariane 5s styresystem var baseret på erfaringerne med den gamle Ariane 4-raket. Programmørerne ikke havde regnet med at Ariane 5 ville kunne flyve så hurtigt som den kunne. For det kunne den gamle Ariane 4 ikke. Derfor havde de ikke sat mere end 16 bit af til at repræsentere rakettens horisontale hastighed. Den del af programmet, hvor fejlen var, var faktisk helt unødvendig ved selve affyringen. Den beregning, som denne del af programmet tog sig af, skulle sikre at raketten stod korrekt på affyringsrampen inden start. Den pågældende programdel var faktisk kun med fordi det skulle være let at genoptage en nedtælling, der var blevet afbrudt. Mars Climate Orbiter En anden ubehagelig programfejl fra rumfartens verden kunne også være forhindret gennem en systematisk programanalyse. Det fejlagtige program sad i rumsonden Mars Climate Orbiter, som var et af NASAs nyereubemandede rumprogrammer. Mars Climate Orbiter var en sonde der skulle sendes i kredsløb om Mars for at tage billeder af planetens

24 24 KAPITEL 1. MOTIVATION OG BAGGRUND Figur 1.8: Mars Climate Orbiter som den burde have set ud vejrfænomener. Figur 1.8 viser hvad NASA havde tænkt sig. Opsendelsen gik fint! Mars Climate Orbiter nåede frem i september Computeren om bord skulle nu tænde for raketmotoren og sørge for at sonden kom i et stabilt kredsløb om Mars. Sådan kom det ikke til at gå. NASA mistede radiokontakten med Mars Climate Orbiter, og d. 23. september 1999 bekendtgjorde NASA at sonden var blevet væk og at man ikke ville lede efter den mere. I en pressemeddelelse udtalte en talsmand for NASA: Vi havde planlagt at sonden skulle nærme sig planeten med en højde på omkring 150 kilometer. Vi troede at det var hvad vi gjorde, men ved gennemsyn af de sidste seks til otte timers data op til ankomsten, så vi tegn på at den faktiske højde havde været meget mindre. Det ser ud som om den faktiske højde var omkring 60 kilometer.(oversat fra [Lab99]) I december 1999 fandt NASA årsagen, og den var skræmmende enkel: I nogle dele af sondens styreprogram angav man højdemålinger i engelske miles (som man bruger i USA), i andre dele af programmet i kilometer (som man bruger de fleste andre steder også i Storbritannien) I dag ofrer NASA derfor også store anstrengelser på at udvikle systemer til at finde fejl i programmer, og disse systemer er baseret på teorier og metoder fra semantik.

25 1.4. MODERNE ANVENDELSER AF SEMANTIK 25 Systemer til automatisk verifikation Moralen af ovenstående historier er at det er nødvendigt at analysere sikkerhedskritiske programmer grundigt for fejl, hvis man vil undgå tab af menneskeliv og dyrt materiel. Desværre er det i praksis meget besværligt at analysere programmer af blot en vis størrelse ved håndkraft, og en sådan analyse kan risikere blot at indføre yderligere fejl. Inden for de seneste 10 år er man derfor begyndt at interessere sig for automatisk verifikation, dvs. dette at konstruere software som automatisk kan analysere et stort program for fejl. Disse analyse- og verifikationsværktøjer bygger alle på teorier og resultater fra semantik. Blandt de mest kendte er SPIN [SPI, Hol90], som blev udviklet på Bell Labs i USA af medlemmer af den oprindelige Unix-gruppe, PVS [PVS], udviklet på Stanford Research institute, FDR [FDR], udviklet af Inmos og forskere ved universitetet i Oxford og UPPAAL [UPP], udviklet af forskere i Uppsala og Aalborg Semantik og principper i programmeringssprog Et vigtigt formål med denne bog er at vise hvordan man kan beskrive principper i programmeringssprog ved brug af semantik. Alle programmeringssprog i denne bog er små, konstruerede programmeringssprog der skal belyse bestemte sproglige aspekter. Faktisk eksisterende programmeringssprog rummer et hav af forskellige facetter som hver især er vigtige, men som hvis de blev præsenteret samlet, ville gøre en præsentation kompliceret og svær at overskue. Studiet af programmeringssprogenes teori giver en systematisk og (forhåbentlig) elegant forståelse af alle de mange fænomener som eksisterer i programmeringssprog ved at studere programmeringssprogs semantik kan man se at tilsyneladende ubeslægtede fænomener som f.eks. pointere, referenceparametre og referencer i objektorienterede sprog kan beskrives inden for samme enkle begrebsapparat. Den dybere forståelse af principperne kan hjælpe os med at designe bedre programmeringssprog og at lave bedre og mere effektive implementationer af dem.

26 26 KAPITEL 1. MOTIVATION OG BAGGRUND

27 Kapitel 2 Grundlæggende mængdelære Dette kapitel er ment som en kort genopfriskning af grundlæggende begreber inden for mængdelære. De er centrale i resten af bogen. Også personer med et godt kendskab til mængdelære bør kigge i dette kapitel for at sikre sig kendskab til notationen. 2.1 Mængder En mængde er en helt vilkårlig samling. Man kan tale om f.eks. mængden af hele tal, mængden af datalogistuderende eller mængden af lande i Afrika. Mængdens bestanddele kaldes dens elementer. I en mængde må ethvert element forekomme en og kun en gang. En mængde kan beskrives på listeform ved at man opremser dens elementer, anført i krøllede parenteser ( tuborger ). Hvis x er element i mængden A skriver vi x A. Hvis x ikke er element i mængden A skriver vi x A. Eksempel {1, 2, 42} er en mængde der som elementer har hele tal 1, 2 og 42. {a, b, 47, Sverige} er en mængde der som elementer har bogstaverne a og b, det hele tal 47 og landenavnet Sverige. Vi har at 1 {1, 2, 42} men at 3 {1, 2, 42}. Man kan også definere mængder ved abstraktion ved mellem tuborger at definere dels hvilket univers, elementer kan tages fra, dels hvilke betingelser et element skal opfylde for at kunne være med. Eksempel Lad N være mængden af naturlige tal. {n N i N : n = i 2 } betegner mængden af kvadrattal. Overvejelse Lad N være mængden af naturlige tal. Hvad kalder man også mængden {n N i N : hvis n i, i > 1 og n > 1 så n/i N}?

28 28 KAPITEL 2. GRUNDLÆGGENDE MÆNGDELÆRE I denne fremstilling vil vi som hovedregel skrive mængder med fed skrift og altid skrive dem med Stort Begyndelsesbogstav. Elementer i mængder skrives aldrig med fed, og med ganske enkelte undtagelser (blandt andet i kapitel 1 og frem, hvor S betegner et element i mængden Kom og i kapitel 6 hvor D V betegner et element i ErkV og D P betegner et element i mængden ErkP), skrives elementer med småt begyndelsesbogstav. Så Env V er en mængde, mens env v er et element i en mængde. Man kan sammenligne mængder notationen A B betyder at ethvert element i A også er element i B (man siger at A er en delmængde af B). Sagt på en anden måde: Hvis x A så x B. Hvis man vil vise at A B, skal man derfor vise at hvis x A så x B. To mængder er ens, hvis de indeholder præcis de samme elementer, d.v.s. at de er hinandens delmængde. Så hvis man vil vise at A = B, skal man vise at A B og B A. 2.2 Funktioner En funktion f er en tilordning af værdier mellem to mængder, funktionens definitionsmængde Dm(f) og dens værdimængde V m(f), således at hver værdi i definitionsmængden tilordnes en og kun en værdi i værdimængden (en funktion er altså entydig.) Vi skriver at funktionen f har værdi y for elementet x i definitionsmængden som f(x) = y. Ofte udelader vi parenteserne og skriver blot fx = y. x kaldes her for funktionens argument. Eksempel Tilordningen t givet ved at t(1) = 2, t(2) = 3 og t(7) = 2 er en funktion med Dm(t) = {1, 2, 7} og V m(t) = {2, 3}. Eksempel Tilordningen t givet ved at Dm(t) = {1, 2} og V m(t) = {7, 8} hvor t(1) = 7, t(1) = 8, og t(2) = 7 er ikke en funktion, for t er ikke entydig (flere værdier er defineret for t(1).) Partielle og totale funktioner Man kan betragte funktioner som ikke nødvendigvis er defineret for alle elementer i deres definitionsmængde. En sådan funktion kaldes partiel. En funktion, der er defineret for alle elementer i sin definitionsmængde, kaldes total. Overvejelse Find et eksempel på en partiel funktion over de reelle tal. Overvejelse Er totale funktioner også partielle?

29 2.3. OPERATIONER PÅ MÆNGDER 29 Eksempel Lad funktionen f have Dm(f) = {1, 2, 3, 4, 5, 6, 7} og V m(f) = {2, 3} og være defineret ved at f(1) = 2, f(2) = 3 og f(7) = 2. f er partiel, da f(3) f.eks. ikke er defineret Funktionsforskrifter Ofte definerer man en funktion ved en forskrift, d.v.s et udtryk der beskriver hvordan funktionens værdi findes for et vilkårligt argument. Eksempel Funktionen f med Dm(f) = N og V m(f) = N givet ved forskriften f(x) = x + 1 afbilder ethvert naturligt tal over i dets efterfølger. 2.3 Operationer på mængder Der findes et antal almindelige måder at danne nye mængder på ud fra gamle dette er mængdeoperationerne Foreningsmængde Lad A og B være mængder. Da betegner A B mængden der indeholder præcis de elementer som er element i A eller B (eventuelt begge steder). A B kaldes foreningsmængden af A og B. Eksempel Lad A = {1, 2} og B = {2, 3}. Da er A B = {1, 2, 3}. Overvejelse Hvis A er en endelig mængde med m elementer og B er en endelig mængde med n elementer, hvor mange elementer er der da højst i A B? Fællesmængde Lad A og B være mængder. Da betegner A B mængden der indeholder præcis de elementer som både er i A og B. A B kaldes fællesmængden af A og B. Eksempel Lad A = {1, 2} og B = {2, 3}. Da er A B = {2}. Overvejelse Hvis A er en endelig mængde med m elementer og B er en endelig mængde med n elementer, hvor mange elementer er der da højst i A B?

30 30 KAPITEL 2. GRUNDLÆGGENDE MÆNGDELÆRE Potensmængde Lad A være en mængde. Da betegner P(A) mængden der indeholder præcis alle delmængder af A. P(A) kaldes for potensmængden af A. Sommetider ser man en anden notation end P(A), nemlig 2 A. I denne bog bruger vi P-notationen. Eksempel Lad A = {1, 2}. Da er P(A) = {, {1}, {2}, {1, 2}}. Overvejelse Hvis A er en endelig mængde med m elementer, hvor mange elementer er der da præcis i P(A)? Kartesisk produkt Lad A og B være mængder. Da betegner A B mængden af ordnede par med 1.-komponent i A og 2.-komponent i B. A B kaldes det kartesiske produkt eller krydsproduktet af A og B. Eksempel Lad mængderne A = {1, 2} og B = {2, 3}. Da er det kartesiske produkt A B = {(1, 2), (1, 3), (2, 2), (2, 3)}. Man kan definere kartesisk produkt for vilkårligt mange mængder f.eks. er A B C mængden af alle 3-tupler, d.v.s. elementer på formen (a, b, c) hvor a A, b B og c C. Ofte skriver man A } {{ A } som A n. n gange Overvejelse Hvis A er en endelig mængde med m elementer og B er en endelig mængde med n elementer, hvor mange elementer er der da i A B? Funktionsrum Lad A og B være mængder. Da betegner A B mængden af funktioner fra A til B. Vi taler også om funktionsrummet mellem A og B. En funktion f fra A til B er da element i A B vi skriver I dette tilfælde skriver man også tit f A B f : A B Dette angiver at funktionen f har Dm(f) = A og V m(f) = B. Man siger også at f har typen eller funktionaliteten A B.

31 2.3. OPERATIONER PÅ MÆNGDER 31 Eksempel Lad A = {1, 2} og B = {2, 3}. Da er A B = {f 1, f 2, f 3, f 4 } hvor f 1 (1) = 2 og f 1 (2) = 2, f 2 (1) = 3 og f 2 (2) = 3, f 3 (1) = 3 og f 3 (2) = 2 samt f 4 (1) = 2 og f 4 (2) = 3. Overvejelse Lad A = {a, b, c} og B = {x, y, z}. Find A B. Overvejelse Hvis A er en endelig mængde med m elementer og B er en endelig mængde med n elementer, hvor mange elementer er der da i A B? Vi taler også om partielle funktionsrum hvis A og B er mængder, betegner A B mængden af partielle funktioner mellem A og B. Overvejelse Lad igen A = {a, b, c} og B = {x, y, z}. Find A B.

32 32 KAPITEL 2. GRUNDLÆGGENDE MÆNGDELÆRE

33 Del II Grundlæggende operationel semantik

34

35 Kapitel 3 Operationel semantik I dette kapitel skal vi se de første eksempler på operationelle semantikker, nemlig operationelle semantikker for aritmetiske og boolske udtryk. Disse eksempler er fordi de er introducerende meget enkle, men vi vil vende tilbage til principperne i dem igen og igen i resten af bogen. Operationelle semantikker skal være syntaksdirigerede, og derfor er vi først nødt til at tale om abstrakt syntaks. Dette giver os samtidig lejlighed til at introducere sproget Bims, der danner udgangspunkt for semantikkerne i resten af denne bog. Herefter følger selve eksemplerne. En operationel semantik specificerer et transitionssystem. Transitionssystemer vil vi beskrive ved brug af transitionsregler. Mod slutningen af kapitlet giver jeg en forsmag på en anvendelse af semantik, nemlig hvordan man kan tjekke påstande om den semantik, man har opstillet. 3.1 Abstrakt syntaks For at kunne beskrive programmers adfærd er vi naturligvis nødt til at kunne beskrive hvordan programmer er opbygget, d.v.s. deres syntaks. I semantik er man ikke interesseret i hvordan man analyserer et programs syntaks den slags falder inden for studiet af parsing. Man giver derfor en abstrakt syntaks, der udelukkende beskriver strukturen af de forskellige sproglige konstruktioner. Det er altså ikke den abstrakte syntaks der skal fortælle os om regler for operatorpræcedens osv. En abstrakt syntaks giver man ved at definere et antal syntaktiske kategorier og strukturen af elementerne i de syntaktiske kategorier. Strukturen angiver man ved regler på Backus-Naur-Form (BNF). Hvordan ser dette så

36 36 KAPITEL 3. OPERATIONEL SEMANTIK ud? Lad os belyse det med et eksempel Sproget Bims og dets abstrakte syntaks I resten af denne bog skal vi se på varianter af et lille sprog ved navn Bims 1. I Bims er de grundlæggende ting kommandoer, aritmetiske udtryk, boolske udtryk, variable og numeraler. Hver af disse er repræsenteret ved en syntaktisk kategori som i Tabel 3.1. Elementer i en syntaktisk kategori angiver man ved metavariable 2 i Tabel 3.1 angiver S således en kommando, b et boolsk udtryk osv. Hvis der optræder flere metavariable fra samme syntaktiske kategori sammen, forsyner man dem normalt med et indeks b 1, b 2 osv. Opbygningsreglerne er også givet i Tabel 3.1. Dog har vi ikke givet regler for Num og Var; vi vil antage at elementer i Num er numeraler i titalssystemet og elementer i Var er y, z.... Numeraler er syntaktiske betegnelser for tal, talord. Men vi er også nødt til at have en notation der tillader os at tale om numeralers betydning, nemlig tal. For at kunne skelne mellem syntaks og semantik, og især mellem numeraler og tal, vil vi i dette kapitel (og kun i dette kapitel) understrege konkrete numeraler, så 10 er et numeral i titalssystemet, mens 10 er et tal (antallet af fingre hos de fleste mennesker). I reglen a ::= n x a 1 +a 2 a 1 *a 2 a 1 -a 2 (a 1 ) kalder man højresiden n for et basiselement og højresiden a 1 +a 2 for et sammensat element. Vi kalder a 1 og a 2 for de umiddelbare bestanddele af a 1 +a 2. Overvejelse (Vigtig) Hvad er de umiddelbare bestanddele i udtrykket? Hvorfor er det ikke 3, 4, 14 og 9? (3+4)*(14+9) Bemærk at vi skriver * for at angive at der er tale om en syntaktisk konstruktør der kan bruges til opbygning af aritmetiske udtryk, ikke operatoren der multiplicerer to tal. Hvis en funktion tager syntaks som argumenter, anvender man af samme årsag normalt fede parenteser til at omslutte argumentet. F.eks. indfører vi i kapitel 13 en funktion S, der tager elementer fra Kom som argumenter så skriver man S [while b do S ]. Denne notation med fede parenteser bliver vigtig i kapitel Begrænset imperativt sprog 2 Dette udtryk bruger vi for at vi kan huske f.eks. at x i det følgende betegner en vilkårlig variabel, f.eks. y eller z

37 3.2. TRANSITIONSSYSTEMER 37 n Num Numeraler x Var Variable a Aud Aritmetiske udtryk b Bud Boolske udtryk S Kom Kommandoer S ::= x := a skip S 1 ; S 2 if b then S 1 else S 2 while b do S b ::= a 1 = a 2 a 1 < a 2 b 1 b 1 b 2 (b 1 ) a ::= n x a 1 +a 2 a 1 *a 2 a 1 -a 2 ( a 1 ) Tabel 3.1: Abstrakt syntaks for Bims Nogle konventioner i denne bog Vi vil tillade os i denne bog at antage nogle simple konventioner der gør udtryk og kommandoer lidt lettere at skrive: Vi vil af og til i boolske udtryk benytte ulighedstegnet, så vi kan skrive b 1 b 2. Dette skal læses som en forkortelse for (b 1 = b 2 ). Vi vil i kommandoer lade semikolon associere mod venstre. Så S 1 ; S 2 ; S 3 skal læses som S 1 ; (S 2 ; S 3 ), kommandoen hvis umiddelbare bestanddele er S 1 og S 2 ; S Transitionssystemer En operationel semantik definerer man ved at definere et transitionssystem. Et transitionssystem er blot en orienteret graf. Intuitionen er at en kant svarer til et programskridt, mens en knude repræsenterer et øjebliksbillede af programmet. I operationel semantik kalder man transitionssystemets knuder for konfigurationer, mens dets kanter kaldes transitioner. Nogle konfigurationer har ingen udgående transitioner; disse kaldes slutkonfigurationer. Mængden af transitioner er en mængde af par (γ 1, γ 2 ) hvor (γ, γ ) er til stede hvis der er en kant fra γ til γ. En mængde af sådanne par udgør

38 38 KAPITEL 3. OPERATIONEL SEMANTIK en binær relation over Γ, og vi kalder derfor mængden af transitioner for transitionsrelationen. γ γ 2 1 γ 4 γ 3 Figur 3.1: Eksempel på transitionssystem Vi sammenfatter disse betragtninger i nedenstående definition. Definition (Transitionssystemer) Et transitionssystem er et tripel (Γ,, T ) hvor Γ er en mængde af konfigurationer, er transitionsrelationen og T Γ er en mængde af slutkonfigurationer. Betragt transitionssystemet i Figur 3.1. Her har vi at Γ = {γ 1, γ 2, γ 3, γ 4 } = {(γ 1, γ 2 ), (γ 1, γ 4 ), (γ 2, γ 3 )} T = {γ 3, γ 4 } Man kan definere et transitionssystem ved simpelthen at tegne det som i Figur 3.1. Men dette er kun en god idé, når man har med endelige transitionssystemer at gøre. Når man betragter programmeringssprog, vil der typisk være en konfiguration for hvert eneste øjebliksbillede af et program med tilhørende variabelværdier, og en transition for hvert muligt programskridt. I det kommende afsnit vil jeg derfor beskrive hvordan man helt systematisk kan definere transitionssystemer i operationel semantik.

39 3.3. OPERATIONEL SEMANTIK FOR AUD Operationel semantik for Aud De første, simple eksempler på operationel semantik er operationelle semantikker for aritmetiske udtryk. I dette kapitel gør jeg den forsimplende antagelse at vore aritmetiske udtryk ikke indeholder variable, d.v.s. at de kan opbygges ved brug af reglen a ::= n a 1 +a 2 a 1 *a 2 a 1 -a 2 (a 1 ) Denne antagelse får vi bugt med i næste kapitel En big-step-semantik for Aud Vores første operationelle semantik er en såkaldt big-step-semantik. Vi definerer et transitionssystem, hvor hver transition svarer til een hel beregning i vores semantik. Et skridt svarer her til at evaluere et aritmetisk udtryk i eet hug. Så transitioner skal gå fra aritmetiske udtryk til deres værdier og er derfor på formen a v hvor a Aud og v Z. Hvilke transitioner skal der være? Eller, for nu at spørge på en anden måde: Hvordan udregner man et aritmetisk udtryk? Tja, hvis vi f.eks. har udtrykket (2+3)*(4+9), skal vi først udregne (2+3) og (4+9) og derefter multiplicere mellemresultaterne. Transitionen a v skal som bekendt her læses som udtryk a kan evalueres til værdien v. Da kan vi skrive Hvis a 1 v 1 og a 2 v 2 så a 1 +a 2 v hvor v = v 1 + v 2 Normalt vil man skrive dette på formen a 1 v 1 a 2 v 2 a 1 +a 2 v hvor v = v 1 + v 2 (3.1) (3.1) kalder vi en transitionsregel. Udsagnet a 1 +a 2 v kalder vi for reglens konklusion, og udsagnene a 1 v 1 og a 2 v 2 kalder vi for reglens præmisser. Bemærkningen hvor v = v 1 + v 2 kaldes for en sidebetingelse. Vi kan definere tilsvarende transitionsregler for gange-udtryk, for parentesudtryk og for udtryk der er numeraler. Transitionsreglerne giver os regler for hvilke transitioner der er mulige, og samlingen af regler definerer på denne måde transitionsrelationen ; det gælder at a evalueres til værdien v for et udtryk a og en værdi v præcis hvis vi kan konkludere udsagnet a v ved brug af transitionsreglerne.

40 40 KAPITEL 3. OPERATIONEL SEMANTIK [plus bss ] a 1 v 1 a 2 v 2 a 1 +a 2 v hvor v = v 1 + v 2 [minus bss ] a 1 v 1 a 2 v 2 a 1 -a 2 v hvor v = v 1 v 2 [mult bss ] a 1 v 1 a 2 v 2 a 1 *a 2 v hvor v = v 1 v 2 a 1 v 1 [parent bss ] (a 1 ) v 1 [num bss ] n v hvis N [n] = v Tabel 3.2: Big-step-( naturlig ) operationel semantik for Aud I Tabel 3.2 er alle transitionsreglerne angivet. Vi har antaget at der er en semantisk funktion N : Num Z som for ethvert numeral giver det tilsvarende heltal, så f.eks. N [3] = 3 og N [ 42] = 42. Bemærk at der ikke er nogen præmis i reglen [num bss ]; en sådan regel kalder man for et aksiom. At definere transitionssystemer Vi har altså her defineret en big-step-semantik i form af transitionssystemet hvor Γ = Aud Z, er defineret via reglerne i 3.2 og T = Z. Dette er vort første eksempel på en operationel semantik, som vi fremover skal se dem. Husk Definition og hvad et transitionssystem består af. Operationel semantik består nu i at definere et transitionssystem ved at Definere mængden Γ af konfigurationer og angive en delmængde heraf, T, slutkonfigurationerne Definere transitionsrelationen som værende pr. definition præcis de transitioner vi kan konkludere ved brug af en endelig mængde af transitionsregler ved at starte med aksiomerne. Bemærk at transitionsreglerne i Tabel 3.2 er syntaksdirigerede, så der er et antal regler for hver eneste sproglige konstruktion i den abstrakte syntaks. Dette er altid et krav til transitionsregler.

41 3.3. OPERATIONEL SEMANTIK FOR AUD 41 Vi kan nu bruge reglerne til at konkludere transitionen (2+3)*(4+9) 65. For vi ved pr. reglen [num bss ] at 2 2 og at 3 3. Fra reglen [plus bss ] ved vi derfor at Pr. reglen [parent bss ] har vi at (2 + 3) 5. Tilsvarende ved vi pr. reglen [num bss ] at 4 4 og at 9 9 og derfor, via reglen [plus bss ] får vi transitionen Og via reglen [parent bss ] har vi at (4+9) 13. Ved brug af [mult bss ] får vi så transitionen (2+3)*(4+9) 65. Derivationstræer og hvordan man konstruerer dem Ræsonnementet ovenfor vil vi normalt repræsentere ved et derivationstræ som i Figur 3.2, hvor alle knuder er mærket med transitioner. Bladene i dette derivationstræ er mærket med aksiomer og man går mod roden ved at anvende transitionsreglerne. Definition Lad en endelig mængde af transitionsregler R være givet og lad A R være mængden af aksiomer. Et derivationstræ er et træ hvis knuder er mærket med transitioner på en sådan måde at 1. alle blade er mærket med aksiomer (d.v.s. med elementer fra A) 2. knuden mærket k har afkom mærket p 1,..., p n hvis der findes en transitionsregel som ikke er et aksiom og er på formen p 1,..., p n k Normalt konstruerer man ikke derivationstræer på bottom-up-manér som skitseret ovenfor. Man er nemlig typisk interesseret i at finde ud af hvad et udtryk evaluerer til, og da vil man benytte en top-down-strategi: Lad os sige at vi vil finde ud af hvad (2 + 3)*(4 + 9) evaluerer til. Dette svarer til at spørge om der er en transition (2 + 3)*(4 + 9) v for et eller andet v. Og dette svarer igen til at spørge om der findes et derivationstræ med roden mærket (2 + 3)*(4 + 9) v. Kan der findes et sådant træ? Hvis der gør, må det være fordi vi har brugt [mult bss ]-reglen til sidst og har konkluderet (2+3) v 1 (4+9) v 2 (2+3)*(4+9) v hvor v = v 1 v 2 for et eller andet v 1 og et eller andet v 2. Vi skal nu finde v 1 og v 2, og skal derfor konstruere derivationstræer for (2+3) v 1 og (4+9) v 2, hvor v = v 1 + v 2.

OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8

OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8 Kursusgang 8 OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8 Matematik Arkæologi Eksempel Semantik Bims (Basic Imperative Statements / Begrænset Imperativt Sprog) Abstrakt syntaks Transitionssystemer

Læs mere

Rettelser til Pilen ved træets rod

Rettelser til Pilen ved træets rod Rettelser til Pilen ved træets rod Hans Hüttel Pr. 12. juni 2003 Nedenstående rettelser er indsamlet af mig selv, Peter Poulsen, Martin Maach og ikke mindst Lars Schunk i løbet af foråret 2003. Simple

Læs mere

Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum

Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum Hans Hüttel 14. juni 2005 Indhold 1 Centrale emner 1 2 Fuldt pensum 2 3 Reduceret pensum 3 3.1 Hvad er fjernet her?........................

Læs mere

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims 1 Opsumering fra tidligere Hvis A er kontekstfrit, S er der et p > 0 s Alle s A hvor s p kan splittes op som s = uvxyz så argument 1-3 holder A er ikke kontekstfrit, hvis for ethvert bud på p kan findes

Læs mere

Dat 2/BAIT6/SW4: Syntaks og semantik En manual for studerende

Dat 2/BAIT6/SW4: Syntaks og semantik En manual for studerende Dat 2/BAIT6/SW4: Syntaks og semantik En manual for studerende Hans Hüttel Foråret 2011 Indhold Indhold 1 1 Kurset er lavet om! 1 2 Kursets indhold 2 2.1 Kursets emner................................ 2

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

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

1 Program for forelæsningen

1 Program for forelæsningen 1 Program for forelæsningen Udvidelser af Bims (Kontrolstrukturer) Repeat-løkker For-løkker Non-determinisme God Ond parallelitet Alle emner hører under semantisk ækvivalens. 1.0.1 Fra tidligere.. Bims

Læs mere

Funktionsterminologi

Funktionsterminologi Funktionsterminologi Frank Nasser 12. 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: Dette

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

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

Funktionsterminologi

Funktionsterminologi Funktionsterminologi 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

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

Pointen med Funktioner

Pointen med Funktioner Pointen med Funktioner Frank Nasser 0. april 0 c 0080. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk: Dette er en

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

Å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

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

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

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

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

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

Polynomiumsbrøker og asymptoter

Polynomiumsbrøker og asymptoter Polynomiumsbrøker og asymptoter Frank Villa 9. marts 2012 c 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold

Læs mere

Nogle grundlæggende begreber

Nogle grundlæggende begreber BE2-kursus 2010 Jørgen Larsen 5. februar 2010 Nogle grundlæggende begreber Lidt simpel mængdelære Mængder består af elementer; mængden bestående af ingen elementer er, den tomme mængde. At x er element

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

Løsning af simple Ligninger

Løsning af simple Ligninger Løsning af simple Ligninger Frank Nasser 19. 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

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

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

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

Pointen med Differentiation

Pointen med Differentiation Pointen med Differentiation 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

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

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

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

Moduler i Standard ML

Moduler i Standard ML Moduler i Standard ML Hans Hüttel December 2001 I løbet af datalogikurset har vi haft glæde af en hel række forskellige standardmoduler som f.eks. Math, Int, Real og String. Disse moduler kan, har vi set,

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

Kapitel 4 Løkker i C#

Kapitel 4 Løkker i C# Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave

Læs mere

Algebra - Teori og problemløsning

Algebra - Teori og problemløsning Algebra - Teori og problemløsning, januar 05, Kirsten Rosenkilde. Algebra - Teori og problemløsning Kapitel -3 giver en grundlæggende introduktion til at omskrive udtryk, faktorisere og løse ligningssystemer.

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2017 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 6. april, 2017 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

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

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

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

Egenskaber ved Krydsproduktet

Egenskaber ved Krydsproduktet Egenskaber ved Krydsproduktet Frank Nasser 23. december 2011 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

Et SML-program til at finde rødder i en kontinuert funktion

Et SML-program til at finde rødder i en kontinuert funktion Et SML-program til at finde rødder i en kontinuert funktion Hans Hüttel Ole Høgh Jensen 11 januar 2002 Indhold 1 Om denne tekst 1 2 Hvad er bisektion? 1 3 Specifikation af vores program 2 4 SML-versionen

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

Andengradsligninger. Frank Nasser. 12. april 2011

Andengradsligninger. Frank Nasser. 12. april 2011 Andengradsligninger Frank Nasser 12. 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: Dette

Læs mere

Hvad er et tal? Dan Saattrup Nielsen

Hvad er et tal? Dan Saattrup Nielsen 12 Det filosofiske hjørne Hvad er et tal? Dan Saattrup Nielsen Det virker måske som et spøjst spørgsmål, men ved nærmere eftertanke virker det som om, at alle vores definitioner af tal refererer til andre

Læs mere

1 Om funktioner. 1.1 Hvad er en funktion?

1 Om funktioner. 1.1 Hvad er en funktion? 1 Om funktioner 1.1 Hvad er en funktion? Man lærer allerede om funktioner i folkeskolen, hvor funktioner typisk bliver introduceret som maskiner, der tager et tal ind, og spytter et tal ud. Dette er også

Læs mere

Guide til lektielæsning

Guide til lektielæsning Guide til lektielæsning Gefions lærere har udarbejdet denne guide om lektielæsning. Den henvender sig til alle Gefions elever og er relevant for alle fag. Faglig læsning (=lektielæsning) 5- trinsmodellen

Læs mere

Hjælp! Der er brok med mit ML-program

Hjælp! Der er brok med mit ML-program Hjælp! Der er brok med mit ML-program Hans Hüttel December 2001 Indhold 1 Formålet med denne note 1 2 Der er ere slags fejl 2 2.1 Brugerfejl............................. 2 2.2 Syntaksfejl.............................

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

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

Et udtryk på formena n kaldes en potens med grundtal a og eksponent n. Vi vil kun betragte potenser hvor grundtallet er positivt, altså a>0.

Et udtryk på formena n kaldes en potens med grundtal a og eksponent n. Vi vil kun betragte potenser hvor grundtallet er positivt, altså a>0. Konkrete funktioner Potenser Som udgangspunkt er brugen af potenser blot en forkortelse for at gange et tal med sig selv et antal gange. Hvis a Rskriver vi a 2 for a a a 3 for a a a a 4 for a a a a (1).

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

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

Køreplan Matematik 1 - FORÅR 2005

Køreplan Matematik 1 - FORÅR 2005 Lineær algebra modulo n og kryptologi Køreplan 01005 Matematik 1 - FORÅR 2005 1 Introduktion Kryptologi er en ældgammel disciplin, som går flere tusinde år tilbage i tiden. Idag omfatter disciplinen mange

Læs mere

Selvstudium 1, Diskret matematik

Selvstudium 1, Diskret matematik Selvstudium 1, Diskret matematik Matematik på første studieår for de tekniske og naturvidenskabelige uddannelser Aalborg Universitet I dette selfstudium interesserer vi os alene for tidskompleksitet. Kompleksitet

Læs mere

Henrik Bulskov Styltsvig

Henrik Bulskov Styltsvig Introduktion til Fuzzy 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

Læs mere

Sip2Sep. Gruppe d206a Jakob Svane Knudsen Mikkel Larsen Pedersen Simon Nicholas M Tinggaard Rune Leth Wejdling

Sip2Sep. Gruppe d206a Jakob Svane Knudsen Mikkel Larsen Pedersen Simon Nicholas M Tinggaard Rune Leth Wejdling Sip2Sep DAT2-projekt, Aalborg Universitet Institut for Datalogi Gruppe d206a Jakob Svane Knudsen Mikkel Larsen Pedersen Simon Nicholas M Tinggaard Rune Leth Wejdling Institut for Datalogi Titel: Sip2Sep

Læs mere

Dat 2/F6S/SW4: Syntaks og semantik En manual for studerende

Dat 2/F6S/SW4: Syntaks og semantik En manual for studerende Dat 2/F6S/SW4: Syntaks og semantik En manual for studerende Hans Hüttel Foråret 2010 Indhold Indhold 1 1 Om denne manual 1 2 Om kursets indhold 2 2.1 Hvilke emner rummer kurset?.................. 2 2.2

Læs mere

18 Multivejstræer og B-træer.

18 Multivejstræer og B-træer. 18 Multivejstræer og B-træer. Multivejs søgetræer. Søgning i multivejssøgetræer. Pragmatisk lagring af data i multivejstræer. B-træer. Indsættelse i B-træer. Eksempel på indsættelse i B-træ. Facts om B-træ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

Matematikkens metoder illustreret med eksempler fra ligningernes historie. Jessica Carter Institut for Matematik og Datalogi, SDU 12.

Matematikkens metoder illustreret med eksempler fra ligningernes historie. Jessica Carter Institut for Matematik og Datalogi, SDU 12. illustreret med eksempler fra ligningernes historie Institut for Matematik og Datalogi, SDU 12. april 2019 Matematiklærerdag, Aarhus Universitet I læreplanen for Studieretningsprojektet står: I studieretningsprojektet

Læs mere

Andengradsligninger. Frank Nasser. 11. juli 2011

Andengradsligninger. Frank Nasser. 11. juli 2011 Andengradsligninger Frank Nasser 11. juli 2011 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold 1 Introduktion

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning

Læs mere

Recollections about the Development of Pascal. Niklaus Wirth ACM, 1993

Recollections about the Development of Pascal. Niklaus Wirth ACM, 1993 Recollections about the Development of Pascal Niklaus Wirth ACM, 1993 1 Niklaus Wirth, 73 Født i Schweiz, 1934 Ph.D., University of California, Berkeley, 1963 Assistant Professor of CS, Stanford University,

Læs mere

Ordbog over Symboler

Ordbog over Symboler Ordbog over Symboler 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: Dette

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

Her er et spørgsmål, du måske aldrig har overvejet: kan man finde to trekanter med samme areal?

Her er et spørgsmål, du måske aldrig har overvejet: kan man finde to trekanter med samme areal? Her er et spørgsmål, du måske aldrig har overvejet: kan man finde to trekanter med samme areal? Det er ret let at svare på: arealet af en trekant, husker vi fra vor kære folkeskole, findes ved at gange

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

VisiRegn: En e-bro mellem regning og algebra

VisiRegn: En e-bro mellem regning og algebra Artikel i Matematik nr. 2 marts 2001 VisiRegn: En e-bro mellem regning og algebra Inge B. Larsen Siden midten af 80 erne har vi i INFA-projektet arbejdet med at udvikle regne(arks)programmer til skolens

Læs mere

Rolf Fagerberg. Forår 2013

Rolf Fagerberg. Forår 2013 Forår 2013 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: DM536 og DM537 Timer: 50% forelæsninger, 50% øvelser Forudsætninger: DM536 og DM537 Eksamenform: Skriftlig eksamen: Timer: 50% forelæsninger,

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form

Læs mere

Mat H /05 Note 2 10/11-04 Gerd Grubb

Mat H /05 Note 2 10/11-04 Gerd Grubb Mat H 1 2004/05 Note 2 10/11-04 Gerd Grubb Nødvendige og tilstrækkelige betingelser for ekstremum, konkave og konvekse funktioner. Fremstillingen i Kapitel 13.1 2 af Sydsæters bog [MA1] suppleres her med

Læs mere

Grafmanipulation. Frank Nasser. 14. april 2011

Grafmanipulation. Frank Nasser. 14. april 2011 Grafmanipulation Frank Nasser 14. 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: Dette er

Læs mere

Rolf Fagerberg. Forår 2012

Rolf Fagerberg. Forår 2012 Forår 2012 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: DM502 og DM503 Timer: 50% forelæsninger, 50% øvelser Forudsætninger: DM502 og DM503 Eksamenform: Skriftlig eksamen: Timer: 50% forelæsninger,

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 Tirsdag den 27. maj 2003, kl. 9.00 3.00 Opgave (25%) For konstanten π = 3.4592... gælder identiteten π 2 6 =

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

Sikre Beregninger. Kryptologi ved Datalogisk Institut, Aarhus Universitet

Sikre Beregninger. Kryptologi ved Datalogisk Institut, Aarhus Universitet Sikre Beregninger Kryptologi ved Datalogisk Institut, Aarhus Universitet 1 Introduktion I denne note skal vi kigge på hvordan man kan regne på data med maksimal sikkerhed, dvs. uden at kigge på de tal

Læs mere

Matematikkens filosofi filosofisk matematik

Matematikkens filosofi filosofisk matematik K Ø B E N H A V N S U N I V E R S I T E T Det Naturvidenskabelige Fakultet Matematikkens filosofi filosofisk matematik Flemming Topsøe, topsoe@math.ku.dk Institut for Matematiske Fag, Københavns Universitet

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

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

Matematisk modellering og numeriske metoder. Lektion 16

Matematisk modellering og numeriske metoder. Lektion 16 Matematisk modellering og numeriske metoder Lektion 16 Morten Grud Rasmussen 6. november, 2013 1 Interpolation [Bogens afsnit 19.3 side 805] 1.1 Interpolationspolynomier Enhver kontinuert funktion f på

Læs mere

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX IT -Eksamen Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX [Vælg en dato] Indhold Indledning... 2 Teori... 3 Hvorfor dette design... 4 Produktet... 4 Test og afprøvning... 9 Konklusion... 10 Indledning

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

[FUNKTIONER] Hvornår kan vi kalde en sammenhæng en funktion, og hvilke egenskaber har disse i givet fald. Vers. 2.0

[FUNKTIONER] Hvornår kan vi kalde en sammenhæng en funktion, og hvilke egenskaber har disse i givet fald. Vers. 2.0 MaB Sct. Knud Gymnasium, Henrik S. Hansen % [FUNKTIONER] Hvornår kan vi kalde en sammenhæng en funktion, og hvilke egenskaber har disse i givet fald. Vers..0 Indhold Funktioner... Entydighed... Injektiv...

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

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

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

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

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

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

Elementær Matematik. Funktioner og deres grafer

Elementær Matematik. Funktioner og deres grafer Elementær Matematik Funktioner og deres grafer Ole Witt-Hansen 0 Indhold. Funktioner.... Grafen for en funktion...3. grafers skæring med koordinat akser...4. To grafers skæringspunkter...4 3. Egenskaber

Læs mere

Matema10k. Matematik for hhx C-niveau. Arbejdsark til kapitlerne i bogen

Matema10k. Matematik for hhx C-niveau. Arbejdsark til kapitlerne i bogen Matema10k Matematik for hhx C-niveau Arbejdsark til kapitlerne i bogen De følgende sider er arbejdsark og opgaver som kan bruges som introduktion til mange af bogens kapitler og underemner. De kan bruges

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Nasser 9. april 20 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her.

Læs mere

Mere om differentiabilitet

Mere om differentiabilitet Mere om differentiabilitet En uddybning af side 57 i Spor - Komplekse tal Kompleks funktionsteori er et af de vigtigste emner i matematikken og samtidig et af de smukkeste I bogen har vi primært beskæftiget

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

Omskrivningsregler. Frank Nasser. 10. december 2011

Omskrivningsregler. Frank Nasser. 10. december 2011 Omskrivningsregler Frank Nasser 10. december 2011 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold 1 Introduktion

Læs mere

Regulære udtryk og endelige automater

Regulære udtryk og endelige automater Regulære udtryk og endelige automater Regulære udtryk: deklarative dvs. ofte velegnede til at specificere regulære sprog Endelige automater: operationelle dvs. bedre egnet til at afgøre om en given streng

Læs mere

Fraktaler. Mandelbrots Mængde. Foredragsnoter. Af Jonas Lindstrøm Jensen. Institut For Matematiske Fag Århus Universitet

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

Læs mere