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

Relevanta dokument
Logik. Boolesk algebra. Logik. Operationer. Boolesk algebra

Logik och kontrollstrukturer

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

Introduktion till logik

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

Logik. Dr. Johan Hagelbäck.

Digital- och datorteknik

Switch. En switch har två lägen. Sluten/Till (Closed/On) Öppen/Från (Open/Off) Sluten. Öppen. Symbol. William Sandqvist

MATEMATIKENS SPRÅK. Avsnitt 1

F5 Introduktion till digitalteknik

Digital Design IE1204

F5 Introduktion till digitalteknik

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

Styrteknik: Grundläggande logiska funktioner D2:1

EDA Digital och Datorteknik 2010/2011

Satslogik grundläggande definitioner 3. Satslogik. Uppgift 1. Satslogikens syntax (välformade formler) Satslogikens semantik (tolkningar)

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

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

JavaScript del 3 If, Operatorer och Confirm

Digital- och datorteknik

Övningar och datorlaborationer, Datorer i system

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

Kap. 7 Logik och boolesk algebra

Grundläggande digitalteknik

Ekvationer och system av ekvationer

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

Repetition av matematik inför kurs i statistik 1-10 p.

Följddiagram för händelsestyrda rörelser

DIGITALA TAL OCH BOOLESK ALGEBRA

IE1205 Digital Design: F4 : Karnaugh-diagrammet, två- och fler-nivå minimering

Moment 2 - Digital elektronik. Föreläsning 1 Binära tal och logiska grindar

Switchnätsalgebra. Negation, ICKE NOT-grind (Inverterare) Konjunktion, OCH AND-grind. Disjunktion, ELLER OR-grind

Definition av kombinatorisk logik Olika sätt att representera kombinatorisk logik Minimering av logiska uttryck

Hambley avsnitt 12.7 (7.3 för den som vill läsa lite mer om grindar) sann 1 falsk 0

Formella metoder. Loop-program som statetransformers. Betrakta följande problem. specifikationen.

7, Diskreta strukturer

Andragradsekvationer. + px + q = 0. = 3x 7 7 3x + 7 = 0. q = 7

EDA Digital och Datorteknik 2009/2010

Här är två korta exempel på situationer då vi tillämpar den distributiva lagen:

Mintermer. SP-form med tre mintermer. William Sandqvist

En introduktion till predikatlogik

Formell logik Kapitel 3 och 4. Robin Stenwall Lunds universitet

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

IE1205 Digital Design. F2 : Logiska Grindar och Kretsar, Boolesk Algebra. Fredrik Jonsson KTH/ICT/ES

En villkorssats är den konstruktion som finns i C++ för att göra en selektion av två alternativa sekvenser. Formen för if satsen är

Konsten att lösa icke-linjära ekvationssystem

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

Fuzzy Logic. När oskarpa definitioner blir kristallklara. Åsa Svensson. Linköpings Universitet. Linköping

Quine McCluskys algoritm

Laboration D181. ELEKTRONIK Digitalteknik. Kombinatoriska kretsar, HCMOS v 2.1

DIGITALTEKNIK I. Laboration DE1. Kombinatoriska nät och kretsar

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

Formell logik Kapitel 9. Robin Stenwall Lunds universitet

sanningsvärde, kallas utsagor. Exempel på utsagor från pass 1 är

Hur implementera algoritmerna på maskinnivå - datorns byggstenar

TATM79: Föreläsning 1 Notation, ekvationer, polynom och olikheter

Normalisering av meningar inför resolution 3. Steg 1: Eliminera alla och. Steg 2: Flytta alla negationer framför atomära formler

TDIU01 - Programmering i C++, grundkurs

Digital Design IE1204

Diskret matematik: Övningstentamen 4

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

7, Diskreta strukturer

ALGEBRA. För att få betyg GODKÄND på avsnittet Algebra krävs att du klarar denna typ av uppgifter:

Objektorienterad programmering Föreläsning 4

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder

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

IE1204 Digital Design

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

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

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor

Tentamen EDAA05 Datorer i system

2.1 Variabler. 2.2 Regler för namngivning i C. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 2

Tentamen i. TDDC67 Funktionell programmering och Lisp

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

FÖRELÄSNING 3 ANDERS MÄRAK LEFFLER IDA/HCS

Grundläggande logik och modellteori (5DV102)

Lösningsförslag till tentamen i Digitalteknik, TSEA22

Jesper Carlström 2008 (reviderad 2009)

Formell logik Kapitel 7 och 8. Robin Stenwall Lunds universitet

Grundläggande logik och modellteori

DD1350 Logik för dataloger. Fö 7 Predikatlogikens semantik

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

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Exempel på ett litet Ada-program

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Digitala system EDI610 Elektro- och informationsteknik

Induktion, mängder och bevis för Introduktionskursen på I

Maurice Karnaugh. Karnaugh-diagrammet gör det enkelt att minimera Boolska uttryck! William Sandqvist

Matematiska uppgifter

Uttryck och villkor. Föreläsning 2

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

TDIU01 - Programmering i C++, grundkurs

Efternamn förnamn pnr programkod

Föreläsning 3: Ekvationer och olikheter

*UXSS YQLQJ±/RJLNPHGWLOOlPSQLQJDUYW

Beräkning med ord. -hur en dator hanterar perception. Linköpings universitet Artificiell intelligens Erik Claesson

Lektion 8: Konstruktion av semantiska tablåer för PTL-formler

Transkript:

Vad är Boolesk algebra Lite förenklat kan man säga att Boolesk algebra är räkneregler konstruerade av den engelske matematikern Gerge Boole för att kunna räkna med logiska uttryck. I den booleska algebran finns som i normal algebra möjligheten att räkna med variabler. Det som skiljer en boolesk variabel från en normal variabel är att den bara kan anta värdena 0 eller 1. Värdet 0 brukar vi säga betyder falskt och 1 brukar tolkas som sant. Precis som i vanlig algebra finns även inom den booleska algebran ett antal räkneoperationer som man kan utföra på variablerna. I vanlig algebra finns operationerna +, -, *, / o.s.v. inom boolesk algebra finns bara operationerna +, * och. + brukar man kalla eller, * kallar vi och och brukar vi benämna icke (eng. or, and, not). Räknereglerna för dessa operationer skiljer sig från vanlig algebra. Följande regler gäller för eller : 0+0=0 0+1=1 1+0=1 1+1=1 Följande regler gäller för och : 0*0=0 0*1=0 1*0=0 1*1=1 För icke gäller följande regler: 1 =0 0 =1 Booleska variabler och översättning mellan programuttryck och booleska variabler Ett uttryck med booleska variabler och booleska operationer brukar man kalla ett booleskt uttryck t.ex. är p+q ett booleskt uttryck om p och q är booleska variabler. De booleska variablerna kan tilldelas värden precis som vanliga variabler med den skillnaden att det värde de tilldelas måste vara sant eller falskt. p=(x=3) är en giltig tilldelning där p blir sann (d.v.s. 1) om x=3 annars blir p falsk (d.v.s. 0) däremot är p=x+3 inte en giltig tilldelning, eftersom vi inte kan avgöra om x+3 är sant eller falskt. Ofta brukar vi skriva pq i stallet för p*q. I boolesk algebra utvärderas alltid icke först därefter och och sist utvärderas eller. I vissa fall kan man vilja ha en annan utvärderingsordning (presendensordning) i dessa fall använder man parenteser. Uttryck inom parenteser utvärderas alltid först. För att översätta en logisk programrad till en boolesk satts kan man gå till väga enligt följande:

Antag att vi har programraden x=3 or y=4 Ta först alla enkla uttryck som du kan svara sant eller falsk på och tilldela dessa till en variabel. I exemplet ovan skulle vi ha gjort följande tilldelningar: p=(x=3) q=(y=4) Ersätt sedan dessa uttryck med variablerna d.v.s. uttrycket ovan blir p or q Nästa steg blir att ersätta operatorerna or, and och not med motsvarande booleska operatorer d.vs or blir +,and blir * och not blir. Uttrycket ovan skulle alltså bli p+q. För mer komplicerade uttryck gör man likadant, men där kan antalet variabler bli många om man har otur. Ytterligare ett exempel: Antag programraden (x<3 or x=y+3 and x<3) or not z=x Låt p=x<3 q=(x=y+3) r=(z=x) alltså (p or q and p)or not r blir efter ersättning av operatorer (p+qp)+r (Kom ihåg regeln att q*p kan skrivas qp). Sanningstabeller I bland kan ett booleskt uttryck vara komplicerat och därför svår att få en överskådlig bild över. I dessa lägen brukar man använda sanningstabeller för att kunna avgöra i vilka lägen ett uttryck är sant eller falskt. I en sådan tabell brukar man börja med de enskilda variablerna för att sedan sätta i hop dessa till mer och mer komplicerade uttryck tills man når det uttryck man hade från början. Exempel : Gör en sanningstabell för p+q p q p+q 0 0 0 0 1 1 1 0 1 1 1 1 Detta exempel är mycket elementärt och nyttan av sanningstabeller framgår inte tydligt eftersom det går lätt att utvärdera uttrycket i huvudet. Om vi i stället tar ett mer komplicerat uttryck kommer nyttan att framgå tydligare.

Exempel: Gör en sanningtabell för (p*q+p) +(p ) p q p*q p*q+p p (p*q+p) (p ) (p*q+p) + (p ) 0 0 0 0 1 1 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1 1 1 1 1 1 0 0 1 1 Som framgår av tabellen ovan är uttrycket sant för samtliga värdekombinationer av p och q om detta hade varit ett villkor i en program loop hade vi antingen hoppat över loopblocket helt eller snurrat för alltid i loopen men det hade varit svårt att se detta bara genom att titta på uttrycket. Bevis med hjälp av sanningstabeller Ett annat användningsområde för sanningstabeller är att vi kan använda dem för att bevisa att två olika booleska uttryck ger samma resultat. Exempel: Visa att (pq) =p +q p q p q pq (pq) p +q 1 1 0 0 1 0 0 1 0 0 1 0 1 1 0 1 1 0 0 1 1 0 0 1 1 0 1 1 Som framgår av tabellen ovan ger (pq) samma resultat som p +q för samtliga tänkbara värden av p och q. Vi har alltså visat att (pq) =p +q. Detta bevissätt kan vara bra att kunna bland annat för att kontrollera att de reduceringar man gjort av ursprungliga uttryck verkligen är rätt.( se. Förenkling av booleska uttryck)

Förenkling av booleska uttryck I bland kan man råka ut för att ett uttryck är mer komplicerat än det behöver vara t.ex. kan man ha kommit fram till ett uttryck i sitt program genom att bara lägga till fler och fler uttryck till ett loop- eller vilkorsuttryck. Uttryck som konstruerats på detta sätt kan ofta förenklas. Boolesk algebra innehåller en hel del regler om hur man får förenkla dessa regler kan du se i bilaga 1 (Lägg särskiljt märke till reglerna 17 och 18. De kallas för de Morgans lagar och används ofta i tekniska sammanhang). Tabellen kan se lite begränsad ut men det är så att varje variabel kan bytas ut mot ett mer sammansatt uttryck. Som du kommer i håg från den vanliga algebran så kan man utveckla uttryck t.ex. om vi har uttrycket z=y+1 och y=x^2+x+1 så kan vi skriva z=x^2+x+1+1. På samma sätt är det med boolesk algebra t.ex. antag uttrycket p+1 och p= q+rq så kan vi skriva (q+rq)+1 och fortfarande få samma uttryck. Därför är förenklingsreglerna kraftfullare än man först tror. Hur går man då till väga? Låt oss börja med ett exempel och försöka att förenkla uttrycket (p*q+p) +(p ) ( Det är samma uttryck som vi använde för att konstruera en av sanningstabellerna ovan). Låt oss börja. (p*q+p) +(p ) = (p*q+p) +p = (1) ((p+p)*(p+q)) +p = (7) ((p+p) +(p+q) )+p = (17) (p +(p+q) )+p = (8) (p +p q )+p = (18) ((p +p )*(p +q ))+p = (7) (p *(p +q ))+p = (17) (p+p )*(p+(p +q ) = (7) 1*(p+(p +q ) = (14) p+(p +q ) = (11) (p+p ) + q = (4) 1+q = (14) 1 (13)

Resultatet är samma som vi kom fram till tidigare d.v.s. uttrycket är sant för samtliga värden som p och q kan anta. Värdena inom parenteser är de regler som används vid förenklingen. Man kan alltid kontrollera om en förenkling är riktig genom att konstruera en sanningstabell för det ursprungliga uttrycket och en sanningstabell för det den förenkling man kommit fram till och sedan jämföra resultaten av dessa tabeller om resultaten för uttrycken i de bägge tabellerna är lika är uttrycken det också och vi har kommit fram till ett korrekt resultat vid förenklingen. Metoden ovan garanterar inte att vi når ett minimalt uttryck men vi kommer åtminstone fram till ett mindre komplext uttryck och ju enklare ett uttryck är desto mindre är chanserna för att vi gör något fel när vi skall realisera det i ett programspråk. Vad som nu återstår för att behärska detta är övning och åter övning. Nedan finns ett antal övningsuppgifter som du kan börja med. För den som är intresserad av hur man når fram till ett minimalt uttryck hänvisar vi till litteratur om karnaugh-diagram, men detta är utanför denna kurs område. Övningar: Rita sanningstabell för följande booleska uttryck: a) (p+q)*r b) pqr c) ((p+q) *r ) + pq d) ((p+q)(p+r)) e) (p *q ) +(pq) Visa med hjälp av sanningstabell följande likheter. a) p+qr = (p+q)(p+r) b) p(q+r) = pq+pr c) (p+q) = p q Förenkla följande uttryck a) p( q +r)+q b) (pq)(p+q) c) ((p+q)(p+r)) d) (p *q ) +(pq) e) p qr + pq r + pqr + pqr Översätt och förenkla följande uttryck med hjälp av boolesk algebra. Efter förenkling översätt dem tillbaka till ursprungsspråket. a) x=1 and y=3 or x=1 and y=4 b) Minpost = i or Minpost = x and Minpost = i c) x<2 or y=3 and x<2 or y>3 d) not(not x=y or not (x=y and z<i or z<i)) or z<i