Boolesk algebra. En abstype för booleska uttryck

Relevanta dokument
Utsagor (Propositioner) sammansatta utsagor sanningstabeller logisk ekvivalens predikat (öppna utsagor) kvantifierare Section

MA2047 Algebra och diskret matematik

Sanningsvärdet av ett sammansatt påstående (sats, utsaga) beror av bindeord och sanningsvärden för ingående påståenden.

Kap. 7 Logik och boolesk algebra

MATEMATIKENS SPRÅK. Avsnitt 1

MATEMATIKENS SPRÅK. Syftet med denna övning är att med hjälp av logik lära oss att uttrycka matematik mer exakt,

Logik och kontrollstrukturer

p /\ q r DD1350 Logik för dataloger Kort repetition Fö 3 Satslogikens semantik

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

MATEMATIKENS SPRÅK. Syftet med denna övning är att med hjälp av logik lära oss att uttrycka matematik mer exakt, lära oss

7, Diskreta strukturer

Semantik och pragmatik

Vad är det? Översikt. Innehåll. Vi behöver modeller!!! Kontinuerlig/diskret. Varför modeller??? Exempel. Statiska system

Logisk semantik I. 1 Lite om satslogik. 1.1 Konjunktioner i grammatisk bemärkelse. 1.2 Sant och falskt. 1.3 Satssymboler. 1.

Semantik och pragmatik

Programkonstruktion. Tentamen,

Programkonstruktion. Tentamen,

DD1350 Logik för dataloger. Fö 2 Satslogik och Naturlig deduktion

Formell logik Kapitel 3 och 4. Robin Stenwall Lunds universitet

Hur implementera algoritmerna på maskinnivå - datorns byggstenar

Varför är logik viktig för datavetare?

Programkonstruktion. Tentamen,

Programmeringsmetodik DV1, Programkonstruktion del 1 Tentamen,

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

ANDREAS REJBRAND NV3ANV Matematik Matematiskt språk

Logik. Boolesk algebra. Logik. Operationer. Boolesk algebra

Tentamen i. TDDC67 Funktionell programmering och Lisp

Tommy Färnqvist, IDA, Linköpings universitet. 1 Kursadministration 1. 2 Introduktion Varför logik? Satslogik... 2

Föreläsningsanteckningar och övningar till logik mängdlära

Digital- och datorteknik

7, Diskreta strukturer

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

729G06 Logik FÖRELÄSNING 1 ANDERS MÄRAK LEFFLER IDA/HCS

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

En introduktion till logik

Datorlingvistisk grammatik I Institutionen för lingvistik och filologi Oktober 2007 Mats Dahllöf

Objektorienterad programmering Föreläsning 4

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Logik. Dr. Johan Hagelbäck.

Semantik och pragmatik (Serie 4)

Grundläggande logik och modellteori

Semantik och pragmatik (Serie 3)

JavaScript del 3 If, Operatorer och Confirm

Formell logik Kapitel 5 och 6. Robin Stenwall Lunds universitet

Visual Basic, en snabbgenomgång

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

MA 11. Hur starkt de binder. 2 Reella tal 3 Slutledning 4 Logik 5 Mängdlära 6-7 Talteori 8 Diofantiska ekvationer 9 Fördjupning och kryptografi

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Induktion och rekursion

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

FUZZY LOGIC. Christopher Palm chrpa087

Lite om bevis i matematiken

Grundläggande logik och modellteori

Booleska variabler och översättning mellan programuttryck och booleska variabler

SI-möte #10, Programkonstruktion och Datastrukturer

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

A B A B A B S S S S S F F S F S F S F F F F

Logik: sanning, konsekvens, bevis

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

729G11 Artificiell Intelligens Marcus Johansson Marjo581. Fuzzy logic. Marcus Johansson Marjo581

Inledande programmering med C# (1DV402) Summera med while"-satsen

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Anteckningar i. Inledande Matematik

John Perrys invändning mot konsekvensargumentet

Jesper Carlström 2008 (reviderad 2009)

Induktion och rekursion

TDIU01 (725G67) - Programmering i C++, grundkurs

Föreläsning Datastrukturer (DAT037)

Filosofisk Logik (FTEA21:4) föreläsningsanteckningar/kompendium. v. 2.0, den 29/ III. Metalogik 17-19

T1-modulen Lektionerna Radioamatörkurs OH6AG OH6AG. Bearbetning och översättning: Thomas Anderssén, OH6NT Heikki Lahtivirta, OH2LH

LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P

Sats. Om t är en rätvinklig triangel så är summan av kvadraterna på kateterna i t lika med kvadraten på hypotenusan.

1 Suddig logik och gitter

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

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

Något om logik och logisk semantik

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Föreläsning Datastrukturer (DAT036)

Finns det tillräckligt med information för att bestämma hur många av eleverna som fick 1 poäng? Vad tycker du?

TDIU01 - Programmering i C++, grundkurs

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Grundläggande logik och modellteori (5DV102)

Viktiga frågor att ställa när ett argument ska analyseras och sedan värderas:

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

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Filosofisk logik Kapitel 18. Robin Stenwall Lunds universitet

Tommy Färnqvist, IDA, Linköpings universitet. 2 Strukturer Domäner Tolkningar... 3

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Översikt över Visual Basic

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Generiska konstruktioner. Kursbokens kapitel 13

Datatyp - mera. Begreppet värde, igen. Ett slags mått på en egenskap, eller något fenomen. Ska ges en bred tolkning!

KRITISKT TÄNKANDE I VÄRDEFRÅGOR. 8: Repetition

Transkript:

Boolesk algebra Boolesk algebra är en algebra där man räknar med sanningsvärden istället för tal, dvs värdena sant (T) och falskt (F). Räknesätten kallas för konnektiv. De konnektiv vi tittar på här är: A, icke-a, är sant om A är falskt och vice versa. Kallas även negation. A B, A och B, är sant om både A och B är sanna, men falskt annars. Kallas även konjunktion. A B, A eller B, är sant om minst en av A och B är sanna, och falsk annars. Kallas även disjunktion. A B, A implicerar B. Sant om antingen: A är falsk A är sann, och B är sann Falsk annars. Kallas även implikation. A B, A är ekvivalent med B. Är sant om både A och B har samma sanningsvärde. Några exempel: T F =T T F = F =T A A =T, där A betecknar ett godtyckligt uttryck. Varför är det alltid sant oavsett A? En abstype för booleska uttryck En abstrakt datatyp boolexp för att representera booleska uttryck enligt ovan i SML följer här nedan. Uppgiften består i att, givet den abstrakta datatypen, skriva en funktion som har följande specifikation: (* truthvalue(e,f) TYPE: boolexp * (string -> bool) -> bool PRE: f är väldefinierad för alla variabelnamn i e POST: Sanningsvärdet av uttrycket e, där f definierar sanningsvärdet av alla variabler i e, så att variabeln v har sanningsvärde f(v). *) Funktionen truthvalue ska ligga utanför den abstrakta datatypen, dvs den har inte direkt tillgång till datarepresentationen utan måste använda sig av gränssnittsfunktionerna. av Johannes Åman Pohjola 1/5 ingen copyright inga licenser allt tillhör alla

(* REPRESENTATION CONVENTION: Representerar olika sorters booleska uttryck. TExp representerar uttrycket "sant" FExp representerar uttrycket "falskt" VARExp representerar variabeluttryck NOTExp representerar negationsuttryck ORExp representerar ett disjunktionsuttryck ANDExp representerar ett konjunktionsuttryck IMPExp representerar ett implikationsuttryck IFFExp representerar ett ekvivalensuttryck REPRESENTATION INVARIANT: - *) datatype exptype = TExp FExp VARExp NOTExp ORExp ANDExp IMPExp IFFExp (* REPRESENTATION CONVENTION: Representerar ett booleskt uttryckt. T representerar sant F representerar falskt VAR(s) representerar sanningsvärdet av variabeln s NOT(e) representerar "icke-e" OR(e1,e2) representerar uttrycket "e1 eller e2" AND(e1,e2) representerar uttrycket "e1 och e2" IMP(e1,e2) representerar uttrycket "e1 implicerar e2" IFF(e1,e2) representerar uttrycket "e1 om och endast om e2" REPRESENTATION INVARIANT: - *) abstype boolexp = T F VAR of string NOT of boolexp OR of boolexp*boolexp AND of boolexp*boolexp IMP of boolexp*boolexp IFF of boolexp*boolexp with (* maketrue() TYPE: unit -> boolexp POST: Ett uttryck som alltid är sant *) fun maketrue() = T av Johannes Åman Pohjola 2/5 ingen copyright inga licenser allt tillhör alla

(* maketrue() TYPE: unit -> boolexp POST: Ett uttryck som alltid är sant *) fun makefalse() = F (* makevar(s) TYPE: string -> boolexp POST: Ett uttryck för sanningsvärdet av variablen s *) fun makevar(s) = VAR(s) (* makenot(e) Exp POST: icke-e *) fun makenot(e) = NOT(e) (* makeor(e1,e2) POST: Uttrycket "e1 eller e2" *) fun makeor(e1,e2) = OR(e1,e2) (* makeand(e1,e2) POST: Uttrycket "e1 och e2" *) fun makeand(e1,e2) = AND(e1,e2) (* makeimp(e1,e2) POST: Uttrycket "e1 implicerar e2" *) fun makeimp(e1,e2) = IMP(e1,e2) (* makeiff(e1,e2) POST: Uttrycket "e1 om och endast om e2" *) fun makeiff(e1,e2) = IFF(e1,e2) (* makeiff(e1,e2) POST: Uttrycket "e1 om och endast om e2" *) fun makeiff(e1,e2) = IFF(e1,e2) (* istrue(e) POST: true omm e är uttrycket "sant" *) fun istrue(e) = e = T (* isfalse(e) POST: true omm e är uttrycket "falskt" *) fun isfalse(e) = e = F av Johannes Åman Pohjola 3/5 ingen copyright inga licenser allt tillhör alla

(* isvar(e) POST: true omm e är ett variabeluttryck *) fun isvar(var _) = true isvar _ = false (* isor(e) POST: true omm e är en disjunktion *) fun isor(or _) = true isor _ = false (* isand(e) POST: true omm e är en konjunktion *) fun isand(and _) = true isand _ = false (* isnot(e) POST: true omm e är en negation *) fun isnot(not _) = true isnot _ = false (* isimp(e) POST: true omm e är ett implikationsuttryck *) fun isimp(imp _) = true isimp _ = false (* isiff(e) POST: true omm e är ett ekvivalensuttryck *) fun isiff(iff _) = true isiff _ = false (* gettype(e) TYPE: boolexp -> exptype POST: Den sorts uttryck som e är *) fun gettype T = TExp gettype F = FExp gettype(var _) = VARExp gettype(or _) = ORExp gettype(and _) = ANDExp gettype(imp _) = IMPExp gettype(iff _) = IFFExp gettype(not _) = NOTExp (* getvar(e) TYPE: boolexp -> string option POST: Variabelns namn, om e är ett variabeluttryck. av Johannes Åman Pohjola 4/5 ingen copyright inga licenser allt tillhör alla

end NONE annars. *) fun getvar(var s) = SOME s getvar _ = NONE (* getnot(e) Exp option POST: Negationen av e, om e är ett negationsuttryck. NONE annars. *) fun getnot(not e) = SOME e getnot _ = NONE (* getleft(e) Exp option POST: e:s vänsterled om e är ett konnektiv, NONE annars. *) fun getleft(or(l,_)) = SOME l getleft(and(l,_)) = SOME l getleft(imp(l,_)) = SOME l getleft(iff(l,_)) = SOME l getleft _ = NONE (* getright(e) Exp option POST: e:s högerled om e är ett konnektiv, NONE annars. *) fun getright(or(_,r)) = SOME r getright(and(_,r)) = SOME r getright(imp(_,r)) = SOME r getright(iff(_,r)) = SOME r getright _ = NONE (* compare(e1,e2) TYPE: boolexp * boolexp -> bool POST: true omm e1 och e2 är exakt samma uttryck *) fun compare(e1:boolexp,e2) = e1 = e2 av Johannes Åman Pohjola 5/5 ingen copyright inga licenser allt tillhör alla