Boolsk algebra

I artikkelen om sammenlikningsoperatorer lærer vi at boolske variablerer variabler som bare kan ha verdiene True og False.

I artikkelen om logiske operatorer lærer vi reglene for å bruke de logiske operatorene and, or og not på boolske variabler:

True and TrueTrue
True and FalseFalse
False and TrueFalse
False and FalseFalse

True or TrueTrue
True or FalseTrue
False or TrueTrue
False or FalseFalse

not TrueFalse
not FalseTrue

Disse reglene er eksempler på boolsk algebra, det vil si regneregler for boolske variabler.

Vi skal nå presentere noen flere regneregler som gir mulighet for forenklinger og omskrivinger. Hvis a og b er boolske variabler, har vi at

a == Truea

I stedet for å skrive for eksempel if (x < 0) == True kan vi skrive if x < 0. 

a == False → not a

I stedet for å skrive for eksempel if (x < 0) == False kan vi skrive if not x < 0.

a and Truea

Hvis vi bruker operatoren and på variabelen a og en variabel som er True, er resultatet lik verdien til a. Det vil si True hvis a er True, og False hvis a er False.

a and FalseFalse

Hvis vi bruker operatoren and på variabelen a og en variabel som er False, er resultatet False, uavhengig av a.

a or TrueTrue

Hvis vi bruker operatoren or på variabelen a og en variabel som er True, er resultatet True, uavhengig av a.

a or Falsea

Hvis vi bruker operatoren or på variabelen a og en variabel som er False, er resultatet lik verdien til a. Det vil si True hvis a er True, og False hvis a er False.

not not a → a

Dobbelt bruk av not endrer ikke verdien til a.

For operatorene and og or gjelder den distributive lov vi kjenner fra matematikken. Hvis vi bruker and eller or på et uttrykk i parentes, tilsvarer det å bruke and eller or på hver verdi i parentesen.

a and (b or c) → (a and b) or (a and c)

a or (b and c) → (a or b) and (a or c)

For operatoren not gjelder imidlertid egne distributive lover.

not (a and b) → not a or not b

and skifter til or når vi bruker not på et uttrykk i parentes.

For eksempel kan uttrykket if not(x < 0 and y < x) angis som if not x < 0 or not y < x.

not (a or b) → not a and not b

or skifter til and når vi bruker not på et uttrykk i parentes.

For eksempel kan uttrykket if not(x < 0 or y < x) angis som if not x < 0 and not y < x.

Regler i boolsk algebra er lette å bevise fordi variablene bare kan ha to verdier, True og False. Vi kan bruke det som kalles uttømmende bevis, og vise at to uttrykk gir samme resultat i alle kombinasjonsmuligheter.

Eksempel 1:

Vi skal bevise at not (a and b) og not a or not b er det samme. Vi setter opp alle kombinasjonsmulighetene i en såkalt sannhetstabell:

a True True False False
b True False True False
not (a and b) not (True and True)
not TrueFalse
not (True and False)
not FalseTrue
not (False and True)
not FalseTrue
not (False and False)
not FalseTrue
not a or not b not True or not True
False or FalseFalse
not True or not False
False or TrueTrue
not False or not True
True or FalseTrue
not False or not False
True or TrueTrue

Vi ser at resultatet er likt i alle 4 tilfeller.

Siden det ikke spiller noen rolle hva som er a og hva som er b, er det strengt tatt nok å sjekke 3 tilfeller:

        • a og b er begge True.
        • Den ene av a og b er True og den andre er False.
        • a og b er begge False.

Oppgave 1:

Bevis følgende ved å sette opp sannhetstabeller:

      • a == True er det samme som a.
         
      • not (a or b) er det samme som not a and not b.

Se løsningsforslag

Kilder

    • Matthes A. (2019). Python Crash Course. no starch press