Mängder och logik
Kunna använda mängdoperationer och logiska konnektiv och läsa formella definitioner.
Förkunskaper
Intuition
En mängd är en samling saker utan ordning och utan dubbletter. {1, 2, 3} är samma mängd som {3, 1, 2}.
| Operation | Symbol | Betyder | Exempel |
|---|---|---|---|
| Union | allt som finns i minst en | ||
| Snitt | det som finns i båda | ||
| Differens | i A men inte i B | ||
| Tillhör | x är med i A | ||
| Delmängd | allt i A finns i B |
Logiken är samma sak fast för påståenden:
| Symbol | Sant när | |
|---|---|---|
| OCH | båda är sanna | |
| ELLER | minst en är sann (inte «antingen eller») | |
| INTE | påståendet är falskt | |
| MEDFÖR | om det första är sant måste det andra vara det |
Den vanligaste missuppfattningen: matematiskt ELLER är inkluderande. «Kaffe eller te» i matematiken tillåter båda.
Formellt
Implikation är den svåraste. är falsk endast när är sann och falsk:
| S | S | S |
| S | F | F |
| F | S | S |
| F | F | S |
De två sista raderna förvånar: «om månen är av ost så är 2+2=5» är sann, eftersom förutsättningen är falsk. Ett löfte som aldrig utlöses bryts inte.
De Morgans lagar — används konstant i både logik och kod:
I Python: not (a and b) är samma sak som (not a) or (not b). Att negera en sammansatt villkorsats vänder också konnektivet — det är den vanligaste buggen när man förenklar en if-sats.
Kvantorer gör det möjligt att skriva definitioner:
| Symbol | Uttal | Betyder |
|---|---|---|
| «för alla» | gäller varje element | |
| «det finns» | minst ett element uppfyller det |
Definitionen av en delmängd blir då: .
Negation av kvantorer vänder dem: . Motsatsen till «alla svanar är vita» är inte «inga svanar är vita» utan «det finns en svan som inte är vit». Det är exakt varför ett enda motexempel räcker för att falsifiera ett påstående — och varför testning fungerar.
Kod
A = {1, 2, 3, 4}
B = {3, 4, 5}
print(A | B) # {1, 2, 3, 4, 5} union
print(A & B) # {3, 4} snitt
print(A - B) # {1, 2} differens
print(A ^ B) # {1, 2, 5} symmetrisk differens (i exakt en)
print(3 in A, {1, 2} <= A) # True True (tillhör, delmängd)
# De Morgan i praktiken
for a in (True, False):
for b in (True, False):
assert (not (a and b)) == ((not a) or (not b))
assert (not (a or b)) == ((not a) and (not b))
print("De Morgan håller")
# Kvantorer: all() är ∀, any() är ∃
tal = [2, 4, 6, 8]
print(all(x % 2 == 0 for x in tal)) # True ∀x: x är jämnt
print(any(x > 7 for x in tal)) # True ∃x: x > 7
# Negation vänder kvantorn — motexemplet
print(not all(x > 3 for x in tal), next(x for x in tal if not x > 3)) # True 2
# Mängder används på riktigt hela tiden i dataarbete
traning = {"a1", "a2", "a3", "a4"}
test = {"a4", "a5"}
lackage = traning & test
print(f"läckage: {lackage or 'inget'}") # läckage: {'a4'}
Sista exemplet är inte påhittat: att kontrollera traning & test är den snabbaste kontrollen mot dataläckage som finns, och den tar en rad.
Behärskning innebär
- Använder union, snitt, differens och komplement
- Använder OCH, ELLER, INTE och implikation korrekt
- Läser definitioner med ∀ och ∃
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Matteboken (Mattecentrum) — fri läsning, ideell förening
- Khan Academy — matematik — CC BY-NC-SA 3.0
- Python-dokumentationen (PSF-licens) — PSF