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 True → True
True and False → False
False and True → False
False and False → False
True or True → True
True or False → True
False or True → True
False or False → False
not True → False
not False → True
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 == True → a
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 True → a
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 False → False
Hvis vi bruker operatoren and på variabelen a og en variabel som er False, er resultatet False, uavhengig av a.
a or True → True
Hvis vi bruker operatoren or på variabelen a og en variabel som er True, er resultatet True, uavhengig av a.
a or False → a
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 True → False |
not (True and False) → not False → True |
not (False and True) → not False → True |
not (False and False) → not False → True |
| not a or not b | not True or not True → False or False → False |
not True or not False → False or True → True |
not False or not True → True or False → True |
not False or not False → True or True → True |
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.
-
-
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.
- a == True er det samme som a.
-
Kilder
-
- Matthes A. (2019). Python Crash Course. no starch press