Ve velké části předmětu BI-ZMA se budeme zabývat vlastnostmi funkcí. Zobrazení patří mezi ústřední matematické objekty. Funkce, posloupnosti, pole (v programátorském smyslu), matice, permutace, binární operace, to vše jsou příklady zobrazení.
Začněme nejprve několika motivačními příklady konceptu zobrazení.
binární hodnota | hexedecimální hodnota | znak abecedy |
---|---|---|
100 0001 | 41 | A |
100 0010 | 42 | B |
100 0011 | 43 | C |
100 0100 | 44 | D |
100 0101 | 45 | E |
100 0110 | 46 | F |
100 0111 | 47 | G |
100 1000 | 48 | H |
100 1001 | 49 | I |
100 1010 | 4A | J |
100 1011 | 4B | K |
100 1100 | 4C | L |
100 1101 | 4D | M |
100 1110 | 4E | N |
100 1111 | 4F | O |
101 0000 | 50 | P |
101 0001 | 51 | Q |
101 0010 | 52 | R |
101 0011 | 53 | S |
101 0100 | 54 | T |
101 0101 | 55 | U |
101 0110 | 56 | V |
101 0111 | 57 | W |
101 1000 | 58 | X |
101 1001 | 59 | Y |
101 1010 | 5A | Z |
Tabulka 2.1: Vybrané symboly abecedy a jejich kódy v binární a hexadecimální formě (další detaily o ASCII tabulce).
Buď \(x\) libovolné nezáporné reálné číslo. Rovnice \(z^2 = x\) má právě jedno nezáporné řešení \(z\). Toto řešení označme symbolem \(\sqrt{x}\) a nazvěme ho druhou odmocninou z \(x\). Rozeberme odstavec výše podrobněji. Dá-li nám nepřítel (uživatel) nezáporné kladné číslo \(x\), pak abychom mu vrátili \(\sqrt{x}\), musíme vyřešit rovnici \(z^2 = x\) s nezápornou neznámou \(z\). V předchozím odstavci se tvrdí, že toto řešení existuje a je dáno jednoznačně (je právě jedno).
Přistupme nyní k samotné definici zobrazení.
Nechť jsou dány dvě množiny \(A, B\) a předpokládejme, že ke každému prvku \(x\) z množiny \(A\) je jednoznačným způsobem přiřazen právě jeden prvek z množiny \(B\), který označíme \(f(x)\). Potom říkáme, že \(f\) je zobrazení množiny \(A\) do množiny \(B\), a tento fakt značíme \(f: A \to B\). Množinu \(A\) nazýváme definičním oborem zobrazení \(f\) a prvek \(f(x)\) pro dané \(x \in A\) nazýváme hodnotou zobrazení \(f\) v bodě \(x\).
Pro explicitní zdůraznění faktu, že bod \(x\) je pomocí \(f\) zobrazen na bod \(y = f(x)\), někdy používáme značení8 \(f: x \mapsto y\). V případě, že \(y = f(x)\) pro jisté \(x \in D_f\) také o \(x\) mluvíme jako o vzoru prvku \(y\) při zobrazení \(f\) a naopak o \(y\) jako o obrazu prvku \(x\) při zobrazení \(f\). Definiční obor zobrazení \(f: A \to B\) často značíme symbolem \(D_f\), případně \(D(f)\). Ilustrace k definici zobrazení je uvedena na obrázku č. 2.4.
Rozlišování mezi zobrazením a hodnotou zobrazení je běžné i v programovacích jazycích. Například v Pythonu můžeme jediným příkazem vytvořit funkci \(f\) působící na svém argumentu předpisem \(f(x) = x + 10\),
f = lambda x: x + 10
f
je nyní uložen objekt typu funkce, příkaz type(f)
nám vrátí function
. f
má smysl samo o sobě (an sich). Teprve voláme-li funkci f
na konkrétním argumentu, získáme funkční hodnotu. Například položíme-li x=3
po vyhodnocení f(x)
dostaneme 13
.
Je-li \(f: A \to B\) zobrazení, pak množina \(B\) nutně nemusí být jeho oborem hodnot. Tento pojem zavádíme níže v definici č. 2.17. Například \(\sin\) většinou chápeme jako zobrazení \(\mathbb{R} \to \mathbb{R}\), ale obor hodnot funkce \(\sin\) je \(\langle -1,1 \rangle\), což jistě není celá reálná osa.
Rovnost mezi dvěma zobrazeními zavádíme následovně.
Máme-li dvě zobrazení \(f: A \to B\) a \(g: A \to B\) pak říkáme, že se rovnají a píšeme \(f = g\), právě když pro každé \(x \in A = D_f = D_g\) platí \(f(x) = g(x)\).
Jinak řečeno, dvě zobrazení \(A \to B\) se rovnají, právě když se rovnají jejich definiční obory (jakožto množiny) a ve všech bodech tohoto společného definičního oboru mají stejné funkční hodnoty.
Mějme tři zobrazení \(f,g\) a \(h\) s definičními obory \begin{equation*} D_f = \mathbb{R}, \quad D_g = \langle 0,+\infty), \quad D_h = \langle 0,+\infty)\end{equation*} dané předpisy \begin{align*} f(x) &= x, \quad x \in D_f, \\ g(x) &= x, \quad x \in D_g, \\ h(x) &= |x|, \quad x \in D_h.\end{align*} Která jsou si vzájemně rovna?
Zobrazení tedy zobrazuje prvky ze svého definičního oboru na jiné prvky ze svého oboru hodnot. Často bývá výhodné neuvažovat pouze o jednotlivých prvcích, ale rovnou o množinách prvků, které jsou zobrazovány, případně na které se zobrazuje. Proto zavádíme následující pojmy.
Nechť jsou dány dvě množiny \(A\) a \(B\) a zobrazení \(f: A \to B\). Je-li \(E \subset A\), pak množinu9 \begin{equation*} f(E) \ceq \href{Množina všech prvků tvaru \(f(x)\) kde \(x\) probíhá celou množinu \(E\).}{\class{mathpopup}{\big\{ f(x)\in B \mid x \in E \big\}}}\end{equation*} nazveme obrazem množiny \(E\) při zobrazení \(f\). Množinu \(f(A)\) nazveme oborem hodnot zobrazení \(f\). Je-li \(G \subset B\), potom množinu \begin{equation*} f^{-1}(G) \ceq \href{Množina všech \(x\) z množiny \(A\) takových, že \(f(x)\) patří do množiny \(G\).}{\class{mathpopup}{\big\{ x \in A \mid f(x) \in G \big\}}}\end{equation*} nazveme vzorem množiny \(G\) při zobrazení \(f\).
Symbol pro vzor množiny, \(f^{-1}(G)\), je nutno chápat jako nedělitelný. Netvrdíme nic o existenci inverzního zobrazení (tj. \(f^{-1}\), viz definici č. 2.26 níže). Všimněte si, že obrazem jednoprvkové množiny \(\{x\}\) pro nějaké \(x \in A\) je \(f(\{x\}) = \{f(x)\}\) a tedy jednoprvková množina.
Obrázek 2.4: Zobrazení množiny \(A\) do množiny \(B\). Oborem hodnot zobrazení \(f\) je množina \(f(A)\), tj. obraz definičního oboru \(A\) při zobrazení \(f\).
Koncept obrazu množiny při zobrazení je často využívaný v programovacích jazycích podporujících funkcionální paradigma. Například množinu10 všech druhých mocnin všech přirozených čísel mezi \(0\) a \(5\) v Pythonu vytvoříme příkazem11
[ n ** 2 for n in range(6) ]
map(lambda x: x ** 2, range(6))
Podle dodatečných vlastností zobrazení vyčleňujeme následující tři důležité typy.
Zobrazení \(f: A \to B\) je
Na obrázku č. 2.4 můžeme o prvních dvou typech zobrazení uvažovat také graficky takto: u prostého zobrazení nikdy „nemíří dvě šipky z různých bodů množiny \(A\) do jednoho bodu v množině \(B\)“, u zobrazení na pak „vede alespoň jedna šipka do každého bodu množiny \(B\)“. Pomocí kvantifikátorů lze tyto podmínky zapsat následovně: \begin{align*} f \text{ je prosté}\qquad& \overset{\text{def}}{\Longleftrightarrow}& & (\forall x_1,x_2 \in A)\Big( (x_1 \neq x_2) \, \Rightarrow \, \big(f(x_1) \neq f(x_2)\big) \Big), \\ f \text{ je na}\qquad& \overset{\text{def}}{\Longleftrightarrow}& & (\forall y \in B)(\exists x \in A) (f(x) = y).\end{align*} Při ověřování prostoty zobrazení častěji využíváme ekvivalentní formulaci13: \begin{equation*} f \text{ je prosté} \qquad \Longleftrightarrow \qquad (\forall x_1,x_2 \in A)\Big(\big(f(x_1) = f(x_2)\big) \, \Rightarrow \, (x_1 = x_2) \Big).\end{equation*}
Buď \(A\) libovolná množina. Zobrazení \(\mathrm{id}_A: A \to A\) definované předpisem \begin{equation*} \mathrm{id}_A(x) \ceq x, \quad x\in A,\end{equation*} nazýváme identické zobrazení. Zobrazení \(\mathrm{id}_A\) je injektivní, surjektivní a tedy i bijektivní.
Zobrazení \(f: \mathbb{N} \to \mathbb{N}\) definované předpisem \(f(n) \ceq n^2\) pro každé \(n \in \mathbb N\) je prosté, ale není na. Skutečně, splňují-li \(n,m \in \mathbb{N}\) rovnost \(f(n) = f(m)\), pak \(n^2 = m^2\) a díky kladnosti i \(n = m\). Zobrazení nemůže být na, protože například pro \(m = 3\) neexistuje přirozené číslo \(n\in\mathbb{N}\) splňující \(n^2 = 3\).
Mějme zobrazení \(f: \mathbb{Z} \times \mathbb{Z} \to \mathbb{Z} \times \mathbb{Z}\) definované předpisem14 \(f(m,n) := (m - n, m \cdot n)\). Toto zobrazení není prosté, protože například \(f(1,0) = (1,0) = f(0,-1)\). Pokusme se ověřit surjektivitu, tedy zda pro libovolnou dvojici \((k,\ell) \in \mathbb{Z} \times \mathbb{Z}\) existuje dvojice \((m,n) \in \mathbb{Z} \times \mathbb{Z}\) splňující \(f(m,n) = (k,\ell)\), tedy \begin{equation*} m - n = k \quad \text{a} \quad mn = \ell.\end{equation*} Vyjádřením \(m\) z první rovnice a dosazením do druhé dostáváme kvadratickou rovnici pro \(n\), \begin{equation*} n^2 + kn - \ell = 0.\end{equation*} Tato má řešení \(n_\pm = \frac{1}{2}\big(-k \pm \sqrt{k^2 + 4\ell} \big)\). Tento výraz není vždy celé číslo. Konkrétně například pokud zvolíme \((k,\ell) = (0,-1)\) dostaneme \(n_\pm = \pm i\). Dvojice \((0,-1)\) tedy neleží v oboru hodnot zobrazení \(f\), který tak není celá množina \(\mathbb{Z} \times \mathbb{Z}\) a zobrazení tedy není na.
Nyní se zaměříme na způsoby jak lze ze zobrazení vyrábět nová zobrazení. Ukážeme si nejprve operace zúžení a skládání.
Buď \(f: A \to B\) a \(M \subset A\). Zobrazení \(g: M \to B\) definované předpisem \(g(x) \ceq f(x)\) pro každé \(x\in M\) nazýváme zúžením zobrazení \(f\) na množinu \(M\). Zapisujeme \(g = f \big|_M\).
Uvažme zobrazení \({\color{red}f}: \mathbb{R} \to \mathbb{R}\) definované pro každé \(x\in \mathbb R\) předpisem \(f(x) = x^2\) a jeho zúžení \(\color{blue}g = f\big|_{\mathbb R^+_0}\). Grafy těchto funkcí jsou znázorněny na obrázku č. 2.5.
Obrázek 2.5: Zde pro definiční obory platí \(D_f = \mathbb{R}\) a \(D_g = \langle 0,+\infty)\). Na průniku definičních oborů se funkční hodnoty rovnají a zobrazení \(\color{blue}g\) je proto zúžením zobrazení \(\color{red}f\).
Nová zobrazení můžeme také vytvářet pomocí operace skládání. Ovšem pouze pokud jsou zobrazení správného typu.
Nechť \(E \subset B\) a nechť \(f: A \to B\) a \(g: E \to C\) jsou zobrazení. Označíme-li \(D_{g\circ f} = f^{-1}(E) \subset A\), pak definujeme složené zobrazení \(g \circ f : D_{g\circ f} \to C\) předpisem \begin{equation*} (g \circ f)(x) \ceq g\big( f(x) \big)\end{equation*} pro všechna \(x \in D_{g\circ f}\).
O definičním oboru složeného zobrazení pouze víme, že \(D_{g\circ f} \subset A\). V případě, že \(f(A) \cap E = \emptyset\), nastane situace \(D_{g\circ f} = \emptyset\). Názorně je tato situace uvedena na obrázku č. 2.6. O zobrazení \(g\) se často mluví jako o vnějším a o \(f\) jako o vnitřním zobrazení složeného zobrazení \(g \circ f\).
Libovolná dvě zobrazní tedy nelze složit. Musíme zajistit, aby vnitřní zobrazení nevracelo hodnoty mimo definiční obor vnějšího zobrazení. Tento požadavek přesně vystihuje definice č. 2.25, pro názornost můžeme výraz pro \(D_{g\circ f}\) rozepsat (zachováváme značení z definice č. 2.25): \begin{equation*} D_{g\circ f} = f^{-1}(E) = \{ x\in A \mid f(x) \in E = D_g \}.\end{equation*}
Obrázek 2.6: Složené zobrazení.
Přirozeně se nabízí otázka, jestli můžeme „změnit směr“ zobrazení \(f: A \to B\). Přesněji, jestli zadanému prvku z oboru hodnot zobrazení \(f\) můžeme jednoznačně přiřadit nějaký prvek v definičním oboru \(D_f = A\). To lze zřejmě pouze v případě, že každý prvek v oboru hodnot zobrazení \(f\) má právě jeden vzor, čili když zobrazení je prosté. Je-li tedy \(f: A \to B\) prosté zobrazení, pak každému prvku \(x\) z oboru hodnot \(f(A)\) lze přiřadit právě jedno \(y\) z množiny \(A\) tak, že \(x = f(y)\). Takto získané zobrazení nazýváme inverzním a značíme \(f^{-1}\).
Je-li \(f: A \to B\) prosté zobrazení, pak inverzní zobrazení \(f^{-1}: f(A) \to A\) definujeme pro každé \(x \in f(A)\) předpisem \(f^{-1}(x) = y\), kde \(y\) je takový prvek \(A\), že \(x = f(y)\).
Z definice ihned plynou vztahy \(f^{-1} \circ f = \mathrm{id}_{A}\) a \(f \circ f^{-1} = \mathrm{id}_{f(A)}\), přičemž \(f^{-1}\) je jediné zobrazení, které tuto dvojici podmínek splňuje. K ilustraci tohoto pojmu také uvádíme obrázek č. 2.7.
Obrázek 2.7: Prosté zobrazení \(f: A \to B\) a jeho inverze \(f^{-1}: f(A) \to A\).
Uvažme zobrazení \(f: \mathbb{N} \to \mathbb{Z}\) definované předpisem15 \begin{equation*} f(n) = (-1)^n \left\lfloor \frac{n}{2} \right\rfloor ,\quad n\in\mathbb{N}.\end{equation*} Toto zobrazení je prosté a na. Inverzní zobrazení \(f^{-1}: \mathbb Z \to \mathbb N\) je dáno předpisem \begin{equation*} f^{-1}(m) = \begin{cases} 2m, & m \geq 1, \\ 1-2m, & m\leq 0, \end{cases}\end{equation*} pro libovolné celočíselné \(m\).