Přeskočit na obsah
coden

Množiny a relace: stavebnice, ze které se skládají definice v AI

Množiny, podmnožiny, operace, kartézský součin, relace, ekvivalence a uspořádání — s Vennovými diagramy, maticí relace a tím, k čemu je to všechno v umělé inteligenci.

13 minut Matěj Žalmánek 2026-10-15

Série Základy AI Díl 5 z 83
  1. Mapa umělé inteligence: co je co a jak to do sebe zapadá
  2. Stručná historie umělé inteligence: od Turinga po jazykové modely
  3. Data, model, trénink, inference: základní pojmy na jednom příkladu
  4. Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relace: stavebnice, ze které se skládají definice v AI
  6. Funkce a zobrazení: proč je každý model v AI funkce
  7. Logika a důkazy: pravidla, podle kterých se v AI uvažuje
  8. Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
  9. Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
  10. Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
  11. Gradientní sestup: jak se model učí
  12. Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
  13. Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
  14. Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
  15. Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
  16. Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
  17. Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
  18. Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
  19. Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
  20. Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
  21. Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
  22. Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
  23. Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
  24. Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
  25. Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
  26. Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
  27. Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
  28. Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
  29. Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
  30. Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
  31. Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
  32. Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
  33. Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
  34. Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
  35. Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
  36. Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
  38. Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
  39. Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
  40. Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
  41. Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
  42. Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
  43. Přeučení a regularizace: proč model, který zná data nazpaměť, selže
  44. Vyhodnocení modelu: křížová validace, F1 a křivka ROC
  45. Shlukování a snížení dimenze: k-means, PCA a t-SNE
  46. Klasifikace a regrese: dvě úlohy učení s učitelem
  47. Lineární regrese: nejmenší čtverce geometricky i maticově
  48. Polynomiální a nelineární regrese: jak přímku ohnout
  49. Logistická regrese: sigmoida, šance a křížová entropie
  50. Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
  51. Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
  52. Ztrátové funkce: co přesně model minimalizuje
  53. Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
  54. Ansámbly: náhodný les a gradient boosting
  55. SVM a jádrový trik: nejširší hranice a jak ji ohnout
  56. Signál a vzorkování: proč platí Nyquistův teorém
  57. Fourierova transformace: rozklad signálu na frekvence
  58. Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
  59. Zvuk a řeč: spektrogram, melová škála a MFCC
  60. Obraz jako signál: pixely, barvy, konvoluce a hrany
  61. Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
  62. Neuronová síť od nuly: zpětné šíření chyby krok za krokem
  63. Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
  64. Konvoluční sítě: jak síť poznává obrázky
  65. Rekurentní sítě: paměť pro posloupnosti a mizející gradient
  66. LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
  67. Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
  68. Embeddingy a word2vec: jak se slovo stane vektorem
  69. Mechanismus pozornosti: jak se model naučí, kam se dívat
  70. Transformery a velké jazykové modely: architektura krok za krokem
  71. Tokenizace: jak se text rozseká na kousky pro model
  72. Předtrénování a škálování: proč větší model a víc dat funguje
  73. Doladění a RLHF: jak se z doplňovače textu stane asistent
  74. Prompty, kontext a RAG: jak modelu dát správné informace
  75. Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
  76. Generativní adversariální sítě (GAN): padělatel proti detektivovi
  77. Difúzní modely: jak se z čistého šumu stane obrázek
  78. Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
  79. Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
  80. Policy gradient a PPO: učení přímo strategie
  81. Jak funguje AI agent: jazykový model ve smyčce s nástroji
  82. Programování s AI agenty: zadání, testy a kontrola
  83. Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat

Celá osnova série 83 z 83 témat hotovo

Co si odnesete
  • Co je množina, podmnožina a kartézský součin — a proč podmnožin roste exponenciálně.
  • Co je relace, jaké má vlastnosti a jak ji nakreslit jako matici a jako graf.
  • Proč je klasifikace rozklad na třídy ekvivalence a model funkce — zvláštní relace.

Co se hodí znát předem: Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory

Množiny a relace jsou stavebnice, ze které se skládá skoro každá definice v AI. Stavový prostor je množina stavů, přechody mezi nimi jsou relace, trénovací data jsou množina dvojic a klasifikace rozděluje vstupy do tříd. Kdo rozumí těmhle dvěma pojmům, čte definice v dalších dílech jako běžný text.

Zápis symbolů (∈, ⊆, ∪, ×) jsme probrali v předchozím díle. Tady půjdeme pod povrch: co přesně znamenají, jaké mají vlastnosti a k čemu jsou v umělé inteligenci dobré.

1. Co je množina

Definice — množina a prvek

Množina je výchozí pojem, který se dál nerozkládá (podobně jako bod v geometrii): je to soubor navzájem různých objektů, kterým říkáme její prvky. Pro množinu A a libovolný objekt x píšeme

x ∈ A — „x je prvkem A“,   x ∉ A :⇔ ¬(x ∈ A) — „x není prvkem A“.

Od množiny požadujeme dvě věci:

  1. pro každý objekt x platí právě jedno z tvrzení x ∈ A, x ∉ A — o členství je vždy jednoznačně rozhodnuto;
  2. množina je plně určena svými prvky — nic dalšího (pořadí, počet opakování) k ní nepatří; přesně to říká definice rovnosti níže.
Laicky řečeno

Množina je pytel, do kterého něco dáte. Zajímá nás jen to, co v pytli je — ne v jakém pořadí jste to tam dali, ani kolikrát. Dvě kuličky téže barvy jsou pro množinu jedna barva.

Množinu zapíšeme buď výčtem prvků ve složených závorkách — A = {1, 2, 3} nebo {↑, →, ↓, ←} — nebo vlastností, kterou prvky splňují: {x ∈ ℕ : x je sudé}. Pro A = {1, 2, 3} platí 2 ∈ A a 5 ∉ A. Zápis vlastností umí popsat i nekonečné množiny a v AI se používá skoro vždy: „množina všech stavů, ze kterých se dá dojít do cíle“.

Definice — rovnost množin

Nechť A a B jsou množiny. A a B jsou si rovny, píšeme A = B, právě když

∀x : (x ∈ A ⇔ x ∈ B).

Množiny jsou tedy stejné, právě když mají přesně tytéž prvky.

Laicky řečeno

Dva pytle jsou stejné, když je v nich totéž. Proto {1, 2, 2} = {2, 1} = {1, 2}: na pořadí ani na opakování nezáleží.

Definice — mohutnost a prázdná množina

Prázdná množina ∅ je množina, pro kterou platí

∀x : x ∉ ∅,

tj. nemá žádný prvek. Podle definice rovnosti je jen jedna.

Nechť A je množina. A je konečná, právě když A = ∅, nebo existují n ∈ ℕ a navzájem různé objekty a1, …, an (ai ≠ aj pro i ≠ j) takové, že A = {a1, …, an}. Mohutnost konečné množiny je číslo

|A| := n,   |∅| := 0,

tedy počet jejích prvků.

Laicky řečeno

Mohutnost je odpověď na otázku „kolik toho je v pytli“: |{1, 2, 3}| = 3. Prázdná množina je prázdný pytel — pořád je to množina, jen v ní nic není.

2. Podmnožiny a potenční množina

Z jedné množiny můžeme vybírat menší. K tomu potřebujeme tři pojmy, které na sebe navazují: podmnožinu, vlastní podmnožinu a potenční množinu.

Definice — podmnožina

Nechť A a B jsou množiny. A je podmnožinou B, píšeme A ⊆ B, právě když

∀x : (x ∈ A ⇒ x ∈ B).

Každý prvek A je tedy i prvkem B. Zápor píšeme A ⊄ B; podle negace kvantifikátorů to znamená ∃x : x ∈ A ∧ x ∉ B.

Laicky řečeno

Podmnožina je výběr z pytle: vezmete některé věci z B a dáte je do menšího pytle A. Nic, co v B není, do A přidat nesmíte. Tak {1, 3} ⊆ {1, 2, 3}, ale {1, 4} ⊄ {1, 2, 3}, protože 4 v původní množině není. Každá množina je podmnožinou sama sebe a prázdná množina je podmnožinou každé množiny.

Definice — vlastní podmnožina

Nechť A a B jsou množiny. A je vlastní podmnožinou B, píšeme A ⊂ B, právě když

A ⊆ B ∧ A ≠ B.

V B tedy existuje aspoň jeden prvek, který v A není. (Některé učebnice píší ⊂ i pro obyčejnou podmnožinu; v této sérii znamená ⊂ vždy vlastní podmnožinu.)

Laicky řečeno

Vlastní podmnožina je výběr, ve kterém aspoň něco chybí. {1, 3} ⊂ {1, 2, 3}, ale {1, 2, 3} vlastní podmnožinou sebe sama není — vzali jste úplně všechno.

Definice — potenční množina

Nechť A je množina. Potenční množina množiny A je množina

𝒫(A) := {S : S je množina ∧ S ⊆ A}.

Jejími prvky jsou tedy právě všechny podmnožiny A (vždy i ∅ a A sama).

Věta. Nechť A je konečná množina. Pak |𝒫(A)| = 2|A| (důkaz níže).

Laicky řečeno

Potenční množina je seznam všech výběrů, které se z pytle dají udělat — včetně prázdného výběru a výběru všeho. Proč jich je 2n: u každého prvku se rozhodnete, jestli ho do výběru dáte, nebo ne. To jsou dvě možnosti pro každý prvek, pro tři prvky 2 · 2 · 2 = 23 = 8, pro deset prvků už 210 = 1024 (barvy podle vzorce níže).

Pro A = {a, b, c} je 𝒫(A) = {∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}} — celkem 8 podmnožin. Tenhle exponenciální růst potkáte v AI na každém kroku. Model, který si má vybrat, které z 50 příznaků použije, má na výběr 250 — přes biliardu možností. Proto se výběr příznaků nedělá zkoušením všech kombinací.

|𝒫(A)| = 2|A|

|𝒫(A)|
počet všech podmnožin — kolik různých výběrů z A existuje; to chceme spočítat
2
u každého prvku jsou právě dvě možnosti, „ve výběru je“ a „ve výběru není“ — proto základ 2
|A|
počet prvků = počet nezávislých rozhodnutí; nezávislé volby se násobí, a n krát vynásobená dvojka je mocnina
Počet výběrů roste exponenciálně: každý prvek navíc ho zdvojnásobí.
Věta — počet podmnožin (s důkazem)

Věta. Nechť n ∈ ℕ a A = {a1, …, an}, kde prvky a1, …, an jsou navzájem různé (tj. |A| = n). Pak |𝒫(A)| = 2n. (Pro A = ∅ je 𝒫(∅) = {∅} a |𝒫(∅)| = 1 = 20.)

Důkaz. Každé podmnožině S ⊆ A přiřadíme charakteristický vektor (b1, …, bn) ∈ {0, 1}n, kde bi = 1, právě když ai ∈ S. Různé podmnožiny mají různé vektory a každý vektor nějaké podmnožině patří — přiřazení je vzájemně jednoznačné. Podmnožin je tedy stejně jako vektorů z nul a jedniček délky n, a těch je 2 · 2 · … · 2 = 2n. ∎

Z důkazu rovnou plyne postup, jak všechny podmnožiny vypsat: projdeme čísla 0 až 2n − 1 a jejich zápis ve dvojkové soustavě čteme jako charakteristický vektor.

def vsechny_podmnoziny(prvky):          # prvky = [a1, ..., an]
    n = len(prvky)
    for k in range(2 ** n):              # k = 0, 1, ..., 2^n − 1
        yield {prvky[i] for i in range(n)
               if (k >> i) & 1}           # i-tý bit čísla k: je a_i ve výběru?
Příklad — podmnožina číslo 5 z {a, b, c}

5 = 1 · 20 + 0 · 21 + 1 · 22, tedy bity (b1, b2, b3) = (1, 0, 1).

Bit 1 u a a u c, bit 0 u b ⇒ podmnožina {a, c}.

Číslo 0 dá ∅, číslo 7 = 1112 dá celé {a, b, c} — a mezi tím je dohromady 8 čísel, tedy 8 podmnožin.

3. Operace s množinami

Definice — sjednocení, průnik, rozdíl, doplněk

Nechť A a B jsou množiny. Definujeme množiny

  1. sjednocení   A ∪ B := {x : x ∈ A ∨ x ∈ B},
  2. průnik   A ∩ B := {x : x ∈ A ∧ x ∈ B},
  3. rozdíl   A ∖ B := {x : x ∈ A ∧ x ∉ B}.

Prvek tedy leží v A ∪ B, právě když leží aspoň v jedné z množin, v A ∩ B, právě když leží v obou, a v A ∖ B, právě když leží v A, ale ne v B. Množiny s A ∩ B = ∅ se nazývají disjunktní.

Nechť navíc U je množina (základní množina, „vesmír“) a A ⊆ U. Doplněk množiny A vzhledem k U je množina

Ac := U ∖ A = {x ∈ U : x ∉ A}.

Věta (De Morganovy zákony). Nechť U je množina a A, B ⊆ U. Pak (A ∪ B)c = Ac ∩ Bc a (A ∩ B)c = Ac ∪ Bc (doplňky vzhledem k U).

Laicky řečeno

Sjednocení je „buď, nebo, nebo obojí“, průnik „obojí zároveň“, rozdíl „tohle, ale ne tamto“ a doplněk „všechno ostatní“. De Morganův zákon říká, že „není pravda, že prší nebo sněží“ je totéž jako „neprší a nesněží“.

A B A ∪ B — sjednocení
A B A ∩ B — průnik
A B A ∖ B — rozdíl
A B Ac — doplněk

V praxi AI se s průniky počítá třeba při hodnocení modelu. Když P je množina e-mailů, které model označil jako spam, a S množina e-mailů, které spam skutečně jsou (obě konečné a neprázdné), pak přesnost (precision) je |P ∩ S|/|P| — kolik z označených byl opravdu spam — a úplnost (recall) |P ∩ S|/|S| — kolik spamu model zachytil.

přesnost = |P ∩ S|/|P|  úplnost = |P ∩ S|/|S|

|P ∩ S|
zásahy — e-maily, které model označil a spam opravdu jsou; v čitateli obou vzorců, protože obě míry počítají jen úspěchy
|P|
všechno, co model označil; dělíme tím, když se ptáme „můžu označení věřit?“ — falešné poplachy zvětší jmenovatel a přesnost klesne
|S|
všechen skutečný spam; dělíme tím, když se ptáme „nic neuteklo?“ — přehlédnutý spam zvětší jmenovatel a úplnost klesne
Stejný čitatel, jiný jmenovatel: přesnost měří chyby navíc, úplnost chyby vynechané.
Věta — princip inkluze a exkluze (s důkazem)

Věta. Nechť A a B jsou konečné množiny. Pak |A ∪ B| = |A| + |B| − |A ∩ B|.

Důkaz. A ∪ B se skládá ze tří disjunktních částí: A ∖ B, A ∩ B a B ∖ A. Přitom |A| = |A ∖ B| + |A ∩ B| a |B| = |B ∖ A| + |A ∩ B|. Součet |A| + |B| tedy obsahuje všechny tři části, ale průnik dvakrát; jedno odečtení |A ∩ B| to napraví. ∎

|A ∪ B| = |A| + |B| − |A ∩ B|

|A ∪ B|
kolik prvků je aspoň v jedné z množin — to chceme
|A|
započítá všechno z A, včetně společné části
|B|
započítá všechno z B — a společnou část podruhé
− |A ∩ B|
oprava: průnik jsme sečetli dvakrát, tak ho jednou odečteme, aby každý prvek platil jednou
Příklad — přesnost, úplnost a Jaccardův index

Model označil |P| = 50 e-mailů, skutečného spamu je |S| = 40 a v obou množinách je |P ∩ S| = 36 e-mailů.

Barvy podle vzorce přesnosti a úplnosti:

přesnost = 36/50 = 0,72 — 14 označených e-mailů byl falešný poplach,

úplnost = 36/40 = 0,90 — 4 spamy model propustil.

Podle inkluze a exkluze (barvy podle jejího vzorce) |P ∪ S| = 50 + 40 − 36 = 54. Poměr průniku a sjednocení je Jaccardův index (v počítačovém vidění IoU, „intersection over union“, kterým se hodnotí, jak dobře rámeček detektoru sedí na objekt): pro konečné množiny P, S, z nichž aspoň jedna je neprázdná,

J(P, S) := |P ∩ S|/|P ∪ S| = 36/54 = 2/3 ≈ 0,667.

4. Kartézský součin a n-tice

Definice — uspořádaná dvojice a kartézský součin

Nechť a, b jsou libovolné objekty. Uspořádaná dvojice (a, b) je objekt s první složkou a a druhou složkou b, pro který platí: pro všechny objekty a, b, c, d

(a, b) = (c, d) ⇔ a = c ∧ b = d.

Na rozdíl od množiny {a, b} = {b, a} tedy na pořadí záleží. (Čistě množinově se dvojice zavádí jako (a, b) := {{a}, {a, b}} — Kuratowského definice, která právě tuhle vlastnost má.)

Nechť A a B jsou množiny. Kartézský součin A a B je množina

A × B := {(a, b) : a ∈ A ∧ b ∈ B}.

Jsou-li A, B konečné, platí |A × B| = |A| · |B|.

Obecně: nechť n ∈ ℕ a A1, …, An jsou množiny. n-tice (a1, …, an) má vlastnost (a1, …, an) = (b1, …, bn) ⇔ ∀i ∈ {1, …, n} : ai = bi a

A1 × … × An := {(a1, …, an) : ai ∈ Ai pro i = 1, …, n},   An := A × … × A (nkrát).

Laicky řečeno

Kartézský součin je tabulka všech kombinací. Tři trička a dvoje kalhoty dávají 3 · 2 = 6 oblečení. Souřadnice bodu v rovině jsou dvojice z ℝ × ℝ = ℝ2.

Kartézský součin je v AI všude. Trénovací data s učitelem jsou podmnožina X × Y — dvojice (vstup, správná odpověď). Fotka 28 × 28 pixelů je bod v ℝ784. A u úlohy prohledávání je přechodová funkce definovaná na S × A — na dvojicích (stav, akce).

Příklad — kolik je dvojic (stav, akce)

Robot na mřížce 3 × 3 má |S| = 9 stavů (políček) a |A| = 4 akce {↑, →, ↓, ←}.

|S × A| = |S| · |A| = 9 · 4 = 36.

Tabulka, která má pro každou dvojici (stav, akce) jedno číslo — třeba odhad, jak dobrá je ta akce v tom stavu — má tedy 36 políček. Proč se počty násobí: ke každému z 9 stavů lze přidat kteroukoli ze 4 akcí, takže dvojice tvoří 9 řádků po 4.

5. Relace

Definice — relace

Nechť A a B jsou množiny. Binární relace mezi A a B je libovolná množina R, pro kterou

R ⊆ A × B.

Pro a ∈ A a b ∈ B píšeme a R b :⇔ (a, b) ∈ R a čteme „a je v relaci R s b“.

Relace mezi A a A, tj. R ⊆ A × A, se nazývá relace na množině A.

Laicky řečeno

Relace je seznam dvojic, které „k sobě patří“. Kdo je čí rodič, které město má přímé spojení s kterým, který stav vede do kterého. Nic víc — jen seznam dvojic.

Relaci na malé množině můžeme nakreslit dvěma způsoby. Vezměme relaci „a dělí b“ (b je násobkem a) na množině {1, …, 6}. Jako matici: v řádku a a sloupci b je tečka, když a dělí b. A jako orientovaný graf: šipka z a do b.

sloupec b (prvek 1–6) řádek a (prvek 1–6) 123456 1 2 3 4 5 6

matice: řádek a, sloupec b

1 2 3 4 5 6

graf: šipka a → b (bez smyček a → a)

Relace „a dělí b“ na množině {1, …, 6} dvojic v relaci: 14

Relace má 14 dvojic. V AI potkáte obě podoby: matice relace je to, s čím počítá počítač (matice sousednosti grafu, matice podobnosti), graf je to, co si nakreslí člověk. Přechody mezi stavy v prohledávání jsou relace na množině stavů a graf k nejbližších sousedů ze šíření štítků je relace „je mezi nejbližšími“.

Definice — matice relace

Nechť n ∈ ℕ, A = {a1, …, an} je množina s navzájem různými prvky a1, …, an a R ⊆ A × A relace na A. Matice relace R (vzhledem k tomuto očíslování prvků) je tabulka M ∈ {0, 1}n×n o n řádcích a n sloupcích s prvky

Mij := 1, je-li ai R aj,   Mij := 0 jinak,   pro i, j = 1, …, n.

Počet dvojic v relaci je počet jedniček v matici: ∑i=1n ∑j=1n Mij = |R|.

Věta — kolik je relací

Věta. Nechť A a B jsou konečné množiny. Pak mezi A a B existuje přesně 2|A| · |B| relací.

Důkaz. Relace je libovolná podmnožina A × B, relací je tedy |𝒫(A × B)| = 2|A × B| = 2|A| · |B|. ∎

Na {1, …, 6} je 6 · 6 = 36 možných dvojic a 236 = 68 719 476 736 relací. „Dělí“ je jedna z nich — ta se 14 jedničkami v matici.

6. Vlastnosti relací

Definice — vlastnosti relace na množině

Nechť A je množina a R ⊆ A × A relace na A. Relace R je

  1. reflexivní, právě když ∀a ∈ A : a R a;
  2. symetrická, právě když ∀a, b ∈ A : (a R b ⇒ b R a);
  3. antisymetrická, právě když ∀a, b ∈ A : ((a R b ∧ b R a) ⇒ a = b);
  4. tranzitivní, právě když ∀a, b, c ∈ A : ((a R b ∧ b R c) ⇒ a R c).

Antisymetrie není opak symetrie: relace „=“ je symetrická i antisymetrická zároveň.

Laicky řečeno

Reflexivní: každý je v relaci sám se sebou. Symetrická: funguje to oběma směry. Antisymetrická: oběma směry jen tehdy, když jde o totéž. Tranzitivní: když vede cesta z a do b a z b do c, vede i přímo z a do c.

Pro relace na množině {1, …, 6} to vypadá takto — a z kombinace vlastností se pozná, o jaký druh relace jde:

RelaceReflexivníSymetrickáAntisymetrickáTranzitivní
a ≤ banoneanoano
a dělí banoneanoano
stejný zbytek po dělení 3anoanoneano
|a − b| = 1 („sousedé“)neanonene
Příklad — jak se vlastnost ověří nebo vyvrátí

Na matici relace se vlastnosti čtou přímo: reflexivní ⇔ na diagonále jsou samé jedničky (Mii = 1), symetrická ⇔ matice je souměrná podle diagonály (Mij = Mji), antisymetrická ⇔ mimo diagonálu nikdy nejsou jedničky na obou místech Mij a Mji.

Abychom vlastnost vyvrátili, stačí jediný protipříklad. „Sousedé“ nejsou tranzitivní: 1 R 2 (|1 − 2| = 1) a 2 R 1, ale 1 R 1 neplatí (|1 − 1| = 0). Nejsou ani reflexivní (1 R 1 neplatí) ani antisymetrické (1 R 2 a 2 R 1, přitom 1 ≠ 2).

Abychom ji dokázali, musíme projít všechny případy. „Dělí“ je tranzitivní: když b = ka a c = lb, pak c = (kl)a, takže a dělí c.

Definice — skládání relací a tranzitivní uzávěr

Nechť A je množina a R, Q ⊆ A × A jsou relace na A. Složení relací R a Q je relace

R ∘ Q := {(a, c) ∈ A × A : ∃b ∈ A : a R b ∧ b Q c}

— „z a se dá jedním krokem R a pak jedním krokem Q dojít do c“. (Pozor, pořadí v zápisu se v literatuře liší; u funkcí znamená g ∘ f „nejdřív f“, tady R ∘ Q „nejdřív R“.)

Mocniny relace R definujeme pro k ∈ ℕ rekurzí R1 := R, Rk+1 := Rk ∘ R. Tranzitivní uzávěr relace R je relace

R+ := ⋃k=1∞ Rk = R ∪ (R ∘ R) ∪ (R ∘ R ∘ R) ∪ …

Tedy a R+ c, právě když existují k ∈ ℕ a prvky b0, …, bk ∈ A s b0 = a, bk = c a bi−1 R bi pro i = 1, …, k — z a vede do c cesta po šipkách R délky aspoň 1.

Věta. Nechť R je relace na množině A. Pak R+ je nejmenší tranzitivní relace na A, která obsahuje R: platí R ⊆ R+, R+ je tranzitivní a pro každou tranzitivní relaci T na A s R ⊆ T je R+ ⊆ T.

Laicky řečeno

Relace říká, kam se dá dojít jedním krokem, uzávěr, kam se dá dojít vůbec. V prohledávání je to rozdíl mezi „sousední stav“ a „dosažitelný stav“.

Uzávěr se počítá Warshallovým algoritmem: postupně povolí každý prvek k jako mezizastávku a doplní všechny zkratky i → k → j.

def tranzitivni_uzaver(A, M):            # M[i][j] = 1, když i R j
    for k in A:                          # k smí být mezizastávkou
        for i in A:
            for j in A:
                if M[i][k] and M[k][j]:  # cesta i → k → j ...
                    M[i][j] = 1          # ... dává dvojici (i, j)
    return M                             # n^3 kroků pro n prvků

Pro „sousedy“ na {1, …, 6} vyjde uzávěr se všemi 36 dvojicemi: po krocích o jedna se dá z každého čísla dojít do každého, i zpátky do sebe (1 → 2 → 1). Relace „dělí“ už tranzitivní je, takže se uzávěrem nezmění — zůstane 14 dvojic.

7. Ekvivalence a rozklad na třídy

Definice — ekvivalence a rozklad

Nechť A je množina a R ⊆ A × A relace na A. R je ekvivalence, právě když je reflexivní, symetrická a tranzitivní. Je-li R ekvivalence a a ∈ A, je třída ekvivalence prvku a množina

[a] := {x ∈ A : x R a}.

Nechť A je množina. Rozklad množiny A je množina 𝒮 ⊆ 𝒫(A) podmnožin A (jejím prvkům říkáme části nebo třídy), která splňuje

  1. ∀S ∈ 𝒮 : S ≠ ∅ — žádná část není prázdná;
  2. ∀S, T ∈ 𝒮 : (S ≠ T ⇒ S ∩ T = ∅) — různé části jsou disjunktní;
  3. ⋃S ∈ 𝒮 S = A, tj. ∀x ∈ A ∃S ∈ 𝒮 : x ∈ S — části pokryjí celé A.

Každý prvek A tedy leží v právě jedné části.

Věta. Nechť A je množina.

  1. Je-li R ekvivalence na A, pak množina tříd {[a] : a ∈ A} je rozklad A.
  2. Je-li 𝒮 rozklad A, pak relace x ∼ y :⇔ ∃S ∈ 𝒮 : x ∈ S ∧ y ∈ S („patří do stejné části“) je ekvivalence na A a její třídy jsou právě části 𝒮.
Laicky řečeno

Ekvivalence je „je v něčem stejný jako“ — stejná barva, stejný zbytek, stejná třída. Taková relace vždycky rozdělí množinu na přihrádky, které se nepřekrývají a dohromady pokryjí všechno. Každý prvek je přesně v jedné přihrádce.

[a] = {x ∈ A : x R a}

[a]
třída prvku a — přihrádka, do které a patří; jméno dostane podle libovolného svého člena
x ∈ A
kandidáti se berou jen z rozkládané množiny — přihrádky dělí A, nic jiného
x R a
podmínka členství: do přihrádky k a patří právě to, co je s a „stejné“
Věta — třídy se nepřekrývají (s důkazem)

Věta. Nechť A je množina, R ekvivalence na A a a, b ∈ A. Pak platí buď [a] = [b], nebo [a] ∩ [b] = ∅. Navíc a ∈ [a] pro každé a ∈ A.

Důkaz. Předpokládejme, že [a] ∩ [b] ≠ ∅, a ukážeme [a] = [b]. Pak existuje z ∈ [a] ∩ [b], tedy z R a a z R b. Ze symetrie a R z a z tranzitivity a R b. Pro každé x ∈ [a] je x R a a a R b, tedy x R b a x ∈ [b]; stejně naopak. Takže [a] = [b]. Reflexivita navíc dává a ∈ [a] — žádná třída není prázdná a každý prvek v nějaké je. ∎

Příklad — třídy zbytků po dělení 3

Na A = {0, …, 8} je x R a :⇔ x mod 3 = a mod 3, kde x mod 3 je zbytek po celočíselném dělení x třemi.

[4] = {x ∈ {0, …, 8} : x mod 3 = 4 mod 3 = 1} = {1, 4, 7} (barvy podle vzorce výše).

[1] = [7] = {1, 4, 7} — tatáž třída pod jiným jménem. Dohromady vzniknou 3 třídy po 3 prvcích: {0, 3, 6}, {1, 4, 7}, {2, 5, 8}; 3 + 3 + 3 = 9 = |A|.

třída [0] {0, 3, 6}
třída [1] {1, 4, 7}
třída [2] {2, 5, 8}
Rozklad {0, …, 8} podle zbytku po dělení 3

Tohle je přesně to, co dělá klasifikace: rozdělí množinu všech možných vstupů na třídy — spam a ne-spam, pes, kočka a papoušek. A shlukování hledá rozklad dat, aniž by mu někdo řekl, jaké třídy jsou. Výsledek k-means z dílu o druzích učení je rozklad bodů na tři třídy.

8. Uspořádání

Definice — částečné a lineární uspořádání

Nechť A je množina a R ⊆ A × A relace na A. R je částečné uspořádání, právě když je reflexivní, antisymetrická a tranzitivní. Dvojici (A, R) pak říkáme částečně uspořádaná množina.

Prvky a, b ∈ A jsou srovnatelné, právě když a R b ∨ b R a. Částečné uspořádání R je lineární (úplné), právě když jsou srovnatelné všechny dvojice:

∀a, b ∈ A : a R b ∨ b R a.

Laicky řečeno

Uspořádání říká, co je „před“ čím. U čísel podle velikosti se dá porovnat cokoliv s čímkoliv. U částečného uspořádání ne vždycky: 4 a 6 se navzájem nedělí, takže podle dělitelnosti nevíme, které je „menší“.

Částečné uspořádání se kreslí Hasseovým diagramem: menší prvky dole, větší nahoře a čára jen mezi bezprostředními sousedy — zbytek plyne z tranzitivity. Tady dělitelé čísla 12 uspořádaní dělitelností:

1234612
Dělitelé čísla 12 uspořádaní dělitelností
Definice — ostré uspořádání a pokrytí

Nechť A je množina a ≤ částečné uspořádání na A. Ostré uspořádání příslušné k ≤ je relace < na A daná pro a, b ∈ A předpisem

a < b :⇔ a ≤ b ∧ a ≠ b.

Prvek b ∈ A pokrývá prvek a ∈ A, píšeme a ⋖ b, právě když

a < b ∧ ¬∃c ∈ A : (a < c ∧ c < b),

tj. a je ostře pod b a mezi nimi neleží žádný další prvek. Hasseův diagram konečné částečně uspořádané množiny kreslí čáru (zdola nahoru) právě mezi dvojicemi a ⋖ b.

a ⋖ b ⇔ a < b ∧ ¬∃c ∈ A : a < c < b

a ⋖ b
„mezi a a b nakreslím čáru“ — to, co definujeme
a < b
ostře menší: a musí být pod b, a ne totéž — smyčky a ≤ a platí vždy, tak je nekreslíme
¬∃c ∈ A : a < c < b
nic mezi nimi: kdyby tam nějaké c bylo, vztah a < b už plyne z tranzitivity přes c a čára by byla zbytečná
def hasseuv_diagram(A, mensi):           # mensi(a, b) znamená a < b
    cary = []
    for a in A:
        for b in A:
            if mensi(a, b) and not any(mensi(a, c) and mensi(c, b) for c in A):
                cary.append((a, b))      # b pokrývá a
    return cary                          # patro prvku = nejdelší řetězec pod ním

Z diagramu je vidět, že 1 dělí všechno a 12 je dělitelné vším — ale 4 a 6 ani 2 a 3 srovnat nejde. Ostrých dvojic a < b je mezi šesti děliteli 12, diagram jich ale kreslí jen 7. Zbylých 5 — 1 < 4, 1 < 6, 1 < 12, 2 < 12 a 3 < 12 — se dají vyčíst po čarách, třeba 1 → 2 → 4. V AI se uspořádání objevují všude, kde se něco řadí nebo plánuje: pořadí výsledků vyhledávání, priority v okraji algoritmu A*, nebo závislosti mezi kroky plánu („nejdřív otevři dveře, pak projdi“). Graf návazností modulů v osnově této série je mimochodem také částečné uspořádání.

9. Funkce jako zvláštní relace

Definice — funkce

Nechť A a B jsou množiny. Funkce (zobrazení) z A do B, psáno f : A → B, je relace f ⊆ A × B, pro kterou platí

∀a ∈ A ∃! b ∈ B : (a, b) ∈ f,

kde ∃! čteme „existuje právě jedno“. Každý prvek a ∈ A je tedy v relaci s právě jedním prvkem b ∈ B; ten se značí f(a). Podrobněji o funkcích v dílu Funkce a zobrazení.

Laicky řečeno

Funkce je relace, která na každou otázku odpoví právě jednou odpovědí. „Je rodičem“ funkce není — člověk může mít víc dětí. „Má matku“ funkce je — každý má právě jednu.

Příklad — funkcí je mezi relacemi málo

Na A = {1, 2, 3} je 23 · 3 = 29 = 512 relací. Funkce musí každému ze 3 prvků vybrat právě jeden ze 3 obrazů, nezávisle na ostatních: 3 · 3 · 3 = 33 = 27 funkcí.

V matici relace to znamená: v každém řádku je právě jedna jednička. Matice „dělí“ funkcí není — v řádku 1 má šest jedniček.

Tím se kruh uzavírá: model ve strojovém učení je funkce f : X → Y, tedy zvláštní relace mezi vstupy a výstupy. Funkcím a jejich vlastnostem se věnuje další díl osnovy.

10. Shrnutí

  • Množina je soubor prvků bez pořadí a bez opakování; podmnožin n-prvkové množiny je 2n.
  • Sjednocení, průnik, rozdíl a doplněk jsou „nebo“, „a“, „ale ne“ a „všechno ostatní“; na průnicích stojí přesnost a úplnost modelu.
  • Kartézský součin dělá dvojice — z nich se skládají data (vstup, odpověď) i přechody (stav, akce).
  • Relace je množina dvojic. Ekvivalence rozkládá množinu na třídy (klasifikace, shlukování), uspořádání určuje, co je před čím.
  • Funkce je relace s právě jednou odpovědí — a model je funkce.

Máte na to jiný názor? Napište na support@coden-app.com.

Agent na vašem počítači, ovládaný z telefonu