├── images
├── k23.png
├── k24.png
├── k331.png
├── k5.png
├── sol3.png
├── sol4.png
├── bells.jpg
├── cycle.png
├── klein.png
├── parallels.png
└── konigsberg_bridges.png
├── Makefile
├── .gitignore
├── naturals-islanders.tex
├── introduction.tex
├── README.md
├── tex2wp.py
├── temp-polynomials.tex
├── logic-god.tex
├── exercises.smpl
├── logic-applications.tex
├── naturals-partitions.tex
├── book.tex
├── naturals-inclexcl.tex
├── logic-predicates.tex
├── logic-puzzle.tex
├── naturals-choose.tex
├── naturals-counting.tex
├── sets-history.tex
├── logic-functions.tex
├── sets-functions.tex
├── naturals-permutations.tex
├── naturals-undecidability.tex
├── logic-other.tex
├── naturals-doublecounting.tex
├── tmp.tex
├── logic-basics.tex
└── sets-basics.tex
/images/k23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/k23.png
--------------------------------------------------------------------------------
/images/k24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/k24.png
--------------------------------------------------------------------------------
/images/k331.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/k331.png
--------------------------------------------------------------------------------
/images/k5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/k5.png
--------------------------------------------------------------------------------
/images/sol3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/sol3.png
--------------------------------------------------------------------------------
/images/sol4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/sol4.png
--------------------------------------------------------------------------------
/images/bells.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/bells.jpg
--------------------------------------------------------------------------------
/images/cycle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/cycle.png
--------------------------------------------------------------------------------
/images/klein.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/klein.png
--------------------------------------------------------------------------------
/images/parallels.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/parallels.png
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | all:
2 | pdflatex book.tex
3 |
4 | clean:
5 | rm -f book.aux book.log book.pdf book.toc
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *~
2 | *.log
3 | book.aux
4 | book.out
5 | book.pdf
6 | book.synctex.gz
7 | book.toc
8 | out.txt
9 |
--------------------------------------------------------------------------------
/images/konigsberg_bridges.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xHellerx/Math-tutorial/HEAD/images/konigsberg_bridges.png
--------------------------------------------------------------------------------
/naturals-islanders.tex:
--------------------------------------------------------------------------------
1 | \section{Голубоглазые островитяне}
2 |
3 | Последний пример применения индукции многими считается самым контринтуитивным чуть ли не во всей математике.
4 |
5 | \begin{example}
6 | На острове живёт 1000 человек с идеальным логическим складом ума. Из них 100 имеет голубые глаза, и 900~--- карие. Религия запрещает им знать свой цвет глаз и рассказывать другим о цвете глаз. Никаких отражающих поверхностей на острове нет. Если кто-то вдруг узнает свой цвет глаз, то он обязан в ближайшую ночь устроить публичное ритуальное самоубийство.
7 |
8 | В какой-то момент на остров приезжает путешественник, который не знаком с местной религией, но тем не менее довольно успешно вливается в местный коллектив. И однажды он случайно на общем собрании в ходе своей речи невзначай упоминает:
9 |
10 | ---[...] и я был очень удивлён увидеть здесь, в столь отдалённом уголке, голубоглазых людей [...]
11 |
12 | Вопрос: сколько осталось жить голубоглазым и/или кареглазым островитянам?
13 | \end{example}
14 |
15 | Казалось бы, ничего произойти не должно. Островитяне не узнали ничего нового: путешественник им сказал лишь то, что на острове есть голубоглазые люди, но ведь все и так уже видели до этого голубоглазых. Однако, не всё так просто.
16 |
17 |
18 |
--------------------------------------------------------------------------------
/introduction.tex:
--------------------------------------------------------------------------------
1 | \chapter*{Введение}
2 | \addcontentsline{toc}{chapter}{Введение}
3 |
4 | Эта книга изначально замышлялась как простой учебник для новичков в математике. После первых двух глав (которые планировалось сделать коротким введением и обзором, но в итоге они разрослись на сотню страниц) стало понятно, что этот учебник понимают только единицы. Увы. Тем не менее, учебник я продолжаю писать и буду по мере возможностей его перерабатывать, чтобы сделать более доступным для понимания.
5 |
6 | Пока можно порекомендовать обращаться к отдельным главам учебника и читать материал поверхностно. Если что-то понятно~--- замечательно. Если непонятно~--- не беда. Либо это вам и не нужно, либо прочитаете то же самое в другом месте на более простом, менее научном языке. Несмотря на сложность, я считаю, что в принципе чтение его может оказаться полезным, в том числе и совсем новичкам.
7 |
8 | Учебник пишется на чистом энтузиазме, распространяется свободно и без ограничений.
9 |
10 | Для скачивания всегда доступна последняя версия pdf-файла здесь: \url{http://heller.ru/tutorial.pdf}
11 |
12 | Исходные коды в \LaTeX{} могут быть скачаны на GitHub: \linebreak
13 | \url{http://github.com/xHellerx/Math-tutorial}
14 |
15 | Учебнику всегда требуется помощь с поиском ошибок в тексте (опыт показывает, что их полно) и с общей критикой. Также требуется помощь с вёрсткой. Если вы хорошо разбираетесь в \LaTeX, я был бы признателен за помощь с оформлением, так как у меня у самого с этим очень плохо. Ещё было бы полезно распространение информации о курсе. Посоветуйте его в своём блоге, своим студентам, родителям и соседям.
16 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Учебник по математике
2 | =====================
3 |
4 | Автор - Роман Добровенский.
5 |
6 | heller@heller.ru
7 |
8 | http://heller.ru
9 |
10 | 2012-2013, Москва
11 |
12 |
13 | Об этой книге
14 | -------------
15 |
16 | Эта книга изначально замышлялась как простой учебник для новичков в математике. После первых двух глав (которые планировалось сделать коротким введением и обзором, но в итоге они разрослись на сотню страниц) стало понятно, что этот учебник понимают только единицы. Увы. Тем не менее, учебник я продолжаю писать и буду по мере возможностей его перерабатывать, чтобы сделать более доступным.
17 |
18 | Пока можно порекомендовать обращаться к отдельным главам учебника и читать материал поверхностно. Если что-то понятно - замечательно. Если непонятно - не беда. Либо это вам и не нужно, либо прочитаете то же самое в другом месте на более простом, менее научном языке. Несмотря на сложность, я считаю, что в принципе чтение его может оказаться полезным, в том числе и самым новичкам.
19 |
20 | Учебник пишется на чистом энтузиазме, распространяется свободно и без ограничений.
21 |
22 | Для скачивания всегда доступна последняя версия pdf-файла здесь: http://heller.ru/tutorial.pdf
23 |
24 | В репозитории находятся исходные коды в LaTeX.
25 |
26 | Учебнику всегда требуется помощь с поиском ошибок в тексте (опыт показывает, что их полно) и с общей критикой. Также требуется помощь с вёрсткой. Если вы хорошо разбираетесь в LaTeX, я был бы признателен за помощь с оформлением, так как у меня у самого с этим очень плохо. В-третьих, было бы полезно распространение информации о курсе. Посоветуйте его в своём блоге, своим студентам, родителям и соседям.
27 |
--------------------------------------------------------------------------------
/tex2wp.py:
--------------------------------------------------------------------------------
1 | import re
2 |
3 | # Todo:
4 | # corollary environment
5 |
6 | def convert(filename):
7 | with open(filename, encoding="utf-8") as src:
8 | with open("out.txt", "w", encoding="utf-8") as dst:
9 | for line in src:
10 | line = re.sub(r"~", " ", line)
11 | line = re.sub(r"---", "—", line)
12 | line = re.sub(r"\$", "$$", line)
13 | line = re.sub(r"\${2,}", "$$", line)
14 | line = re.sub(r"<<", "«", line)
15 | line = re.sub(r">>", "»", line)
16 | line = re.sub(r"\\S", "§", line)
17 | line = re.sub(r"\\end\{exercise\}", "", line)
18 | line = re.sub(r"\\end\{thm\}", "", line)
19 | line = re.sub(r"\\end\{proof\}", "$$\square$$", line)
20 | line = re.sub(r"\\end\{example\}", "", line)
21 | line = re.sub(r"\\end\{definition\}", "", line)
22 | line = re.sub(r"\\term\{(.+?)\}", "\g<1>", line)
23 |
24 | line = re.sub(r"\\sstirling\{(.+?)\}\{(.+?)\}",
25 | r"\\genfrac{\\{}{\\}}{0pt}{}{\1}{\2}",
26 | line)
27 |
28 | oldlen = len(line)
29 | line = re.sub(r"\\begin\{exercise\}",
30 | "\nУпражнение.", line)
31 | line = re.sub(r"\\begin\{thm\}",
32 | "\nТеорема.", line)
33 | line = re.sub(r"\\begin\{proof\}",
34 | "Доказательство.", line)
35 | line = re.sub(r"\\begin\{example\}",
36 | "\nПример.", line)
37 | line = re.sub(r"\\begin\{definition\}",
38 | "\nОпределение.", line)
39 | if oldlen != len(line):
40 | line = line.rstrip()
41 | line += " "
42 | dst.write(line)
43 |
44 |
--------------------------------------------------------------------------------
/temp-polynomials.tex:
--------------------------------------------------------------------------------
1 | Завершим мы этот параграф двумя довольно отвлечёнными результатам, которые интересны нам скорее не сами по себе (хотя они имеют применения), а с точки зрения нового для нас вида доказательств, которые полезно иметь ввиду.
2 |
3 | \begin{thm}
4 | $${m+n \choose k} = \sum_{i=0}^k {m\choose i}{n\choose k-i}$$
5 | \end{thm}
6 | \begin{proof}
7 | Используем разложение $(1+x)^{m+n}$ по теореме 3.26:
8 | \begin{align*}
9 | \sum_{k=0}^{m+n}{m+n \choose k}x^k & = (1+x)^{m+n} \\
10 | & = (1+x)^m(1+x)^n \\
11 | & = \left(\sum_{k=0}^m{m\choose k}x^k\right) \left(\sum_{i=0}^n {n\choose i}x^i\right) \\
12 | & = \sum_{k=0}^m\sum_{i=0}^n{m\choose k}{n\choose i}x^{i+k} \\
13 | & = \sum_{k=0}^{m+n} \left( \sum_{i=0}^k {m\choose i}{n\choose k-i} \right) x^k
14 | \end{align*}
15 | \end{proof}
16 |
17 | \begin{thm}
18 | $$\sum_{k=0}^n \fstirling{n}{k}x^k = x^{\lceil n \rceil}$$
19 | где $x$ ~--- некоторая переменная.
20 | \end{thm}
21 | \begin{proof}
22 | В левой и правой частях (после раскрытия всех скобок) стоят \term{многочлены}, то есть выражения вида
23 | $$a_n x^n + a_{n-1}x^{n-1} + \ldots + a_{0}$$
24 | Величины $\{a_i\}$ называются коэффициентами многочлена. Мы покажем, что слева и справа в утверждении теоремы эти коэффициенты совпадают. Пусть
25 | $$x^{\lceil n \rceil} = \sum_{k=0}^n a_{n, k} x^k$$
26 | Это же самое можно переписать следующим образом:
27 | \begin{align*}
28 | x^{\lceil n \rceil} &= (x+n-1)x^{\lceil n-1 \rceil} = (x+n-1)\sum_{k=0}^{n-1}a_{n-1, k}x^k \\
29 | & = \sum_{k=1}^n a_{n-1, k-1} x^k + (n-1)\sum_{k=0}^{n-1}a_{n-1,k} x^k \\
30 | & = a_{n-1,0} + a_{n-1, n-1}x^n + \sum_{k=1}^{n-1} (a_{n-1,k-1} + (n-1) a_{n-1, k})x^k
31 | \end{align*}
32 | Из последнего выражения мы видим, что
33 | $$a_{n, k} = a_{n-1, k-1} + (n-1)a_{n-1, k}$$
34 | то есть что коэффициенты при $x$ в выражении $x^{\lceil n \rceil}$ удовлетворяют тому же рекурсивному тождеству, которое позволяет нам вычислять числа Стирлинга (теорема~3.20). Осталось доказать, что начальные значения так же совпадают, но это очевидно: при раскрытии скобок для $x^{\lceil n \rceil}$ получаем в явном виде, что $a_{n, n} = 1$ и $a_{n, 0} = 0$, что завершает доказательство.
35 | \end{proof}
--------------------------------------------------------------------------------
/logic-god.tex:
--------------------------------------------------------------------------------
1 | \section{О боге}
2 |
3 | \begin{thm}
4 | Бог существует.
5 | \end{thm}
6 | \begin{proof}
7 | Это доказательство принадлежит Гёделю, которого мы уже неоднократно поминали в нашем курсе. Некоторые исследователи считают\footnote{<>, Christopher G. Small}, что попытка доказать существование Бога было одним из главных движущих стимулов для Гёделя заниматься логикой. Достоверно известно, что Гёдель был ревностным католиком, но, видимо, отлично понимал, что вещи, высказываемые в церкви, совершенно смехотворны с точки зрения логической обоснованности и никакого умного человека не убедят. Поэтому он пытался привести строгое доказательство. Рассуждения на тему доказательства существования Бога у него появились в ранних черновиках и занимался он этим доказательством на протяжении всей жизни. Само доказательство он так и не опубликовал, вероятно, считая его неполноценным и неубедительным, и та форма, в которой доказательство сейчас приводится в многочисленных источниках, восстановлена по его черновикам после смерти и комментариям его студентов, с некоторыми из которых он обсуждал доказательство.
8 |
9 | Я думаю, что привести здесь это доказательство будет довольно интересно и познавательно <<для общего развития>>. В конце концов есть подозрения, что современная логика развивалась во многом с целью развития именно этого доказательства, также оно является неплохим примером применения модальной логики. Сегодня вариации этого доказательства появляются с завидной регулярностью, и когда в новостях иногда проскакивает что-нибудь вроде <<математики доказали существование Бога>>~--- это вовсе не журналистская утка, это появление одного из вариантов подобного доказательства.
10 |
11 | Прежде чем мы перейдём к формальному доказательству, я разъясню базовые идеи Гёделя.
12 |
13 | Во-первых, Гёдель опирается на идею о том, что любой объект обладает некоторыми \term{свойствами}, которые его целиком описывают. Это довольно простая идея: те же физики, когда получают новую частицу, тщательно описывают её в каждом мельчайшем аспекте. По этому описанию мы всегда можем понять о какой частице идёт речь. Договоримся, что запись $Fx$ будет означать, что объект $x$ обладает свойством $F$. Таким образом $F$ является предикатом.
14 |
15 | Определим объединение ($F\lor H$) и пересечение ($F \land H$) свойств следующим образом:
16 | $$\Box \forall x, (F\land H) x \leftrightarrow \Box \forall x, Fx\land Hx$$
17 | $$\Box \forall x, (F\lor H) x \leftrightarrow \Box \forall x, Fx\lor Hx$$
18 |
19 |
20 | Набор свойств (предикатов) $\textbf{F}$ мы будем обозначать жирным шрифтом. Свойство, являющееся объединением всех свойств набора $\textbf{F}$ будем обозначать как $\bigvee\textbf{F}$, а свойство-пересечение как $\bigwedge\textbf{F}$. Набор всех свойств объекта $x$ обозначим как $\textbf{X}$, а \term{сущностью} этого объекта назовём свойство $X = \bigvee \textbf{X}$.
21 |
22 |
23 | \end{proof}
24 |
--------------------------------------------------------------------------------
/exercises.smpl:
--------------------------------------------------------------------------------
1 | \paragraph{Упражнения}\mbox{}\\
2 | \small
3 | 1. Покажите, какие из следующих высказываний верны, какие ложны, какие могут быть как верны так и ложны, а какие не могут быть классифицированы таким образом и соответственно не рассматриваются классической логикой:
4 |
5 | а) Все люди смертны.
6 |
7 | б) Луна --- спутник земли.
8 |
9 | в) За что?.
10 |
11 | г) На улице поют птички.
12 |
13 | д) Чем бы дитя не тешилось, лишь бы не руками.
14 |
15 | е) Небо чаще зеленое, нежели синее.
16 |
17 | ж) Планеты солнечной системы движутся вокруг Солнца.
18 |
19 | з) В средних векаю люди играли в Sony Playstation.
20 |
21 | и) Курс доллара падает по отношению к рублю.
22 |
23 | к) У читателя учебника последняя модель Айфона.
24 |
25 | 2. Задание то же самое, что и в задаче 1, но теперь учитывайте логические связки (все предложения ниже удовлетворяют классической логике):
26 |
27 | a) Все люди смертны, и луна --- спутник земли.
28 |
29 | б) На улице поют птички, и небо чаще зеленое, чем синее.
30 |
31 | в) Либо планеты солнечной системы движутся вокруг Солнца, либо небо чаще зеленое, чем синее.
32 |
33 | г) Курс доллара падает по отношению к рублю или у читателя последняя модель Айфона.
34 |
35 | д) Все люди бессмертны.
36 |
37 | е) В средних веках люди не играли в Sony Playstation.
38 |
39 | ж) Сказать что земля крутится вокруг Солнца --- все равно что сказать что люди смертны.
40 |
41 | з) Вращение земли вокруг Солнца и смерность людей, связанные операцией эквиваленции --- истинное высказывание.
42 |
43 | и) Изучение математики --- свет, а изучение всего остального не нужно.
44 |
45 | к) У каждых родителей есть сын или дочь.
46 |
47 | л) У каждых родителей есть либо сын либо дочь.
48 |
49 | 3. Задание то же, но теперь вместо словестных логических связок будут использоваться логические операции, записанные на языке логики:
50 |
51 | а) Мальчики любят играть в войнушку $\wedge$ девочкам интересны куклы.
52 |
53 | б) Все идет по плану $\oplus$ что-то здесь не так.
54 |
55 | в) $\neg$ Земля врящается вокруг Солнца
56 |
57 | г) По улице бродят медведи $\vee$ по улице не бродят медведи.
58 |
59 | д) Автор учебника просто дурит вам голову $\wedge$ надо срочно бросать это читать.
60 |
61 | е) Не все птички умеют петь как соловьи $\wedge \neg$ cлоны живут на северном полюсе.
62 |
63 | ж) Дорогу надо переходить на зеленый $\oplus$ дорогу надо переходить на красный $\oplus$ дорогу надо переходить на желтый.
64 |
65 | з) Не осталось сил $\wedge$ не осталось ощущения боли $\wedge$ тоска изъела душу $\wedge$ все катится в пропасть $\wedge$ это уже не первый раз.
66 |
67 | и) Молодым везде у нас дорога $\vee$ старикам везде у нас почет?
68 |
69 | к) Солнце красного цвета $\leftrightarrow$ люди смертны.
70 |
71 | 4. Теперь мы абстрагируемся от смысла самих высказываний, и будем лишь рассматривать их значение истинности. Установите, какие из следующих высказываний истинны, а какие ложны:
72 |
73 | a) $(1 \wedge 0) \vee (0 \leftrightarrow 0)$
74 |
75 | б) $0 \oplus (1 \vee 0)$
76 |
77 | в) $1 \wedge 1 \wedge (0 \leftrightarrow \neg 1)$
78 |
79 | г) $\neg 0 \wedge (1 \oplus 0)$
80 |
81 | д) $\neg (1 \vee 0) \wedge \neg (0 \wedge 1)$
82 |
83 | \normalsize
84 |
--------------------------------------------------------------------------------
/logic-applications.tex:
--------------------------------------------------------------------------------
1 | \section{Зачем это всё?}
2 |
3 | В популярных книгах мотивационные вступления обычно принято писать в самом начале, чтобы человек понимал, что он и зачем изучает. В книгах по чистой математике это не принято, поскольку никаких практических применений материал почти никогда не находит, и читают математики книги просто для извлечения их них знаний. Само содержание книги~--- уже мотивация.
4 |
5 | Тем не менее, какие-то общие слова о том, зачем всё изложенное нужно, я всё же могу сказать.
6 |
7 | Я как автор учебника рассматривал для себя аж сразу пять причин, по которым я включил эту главу в курс:
8 |
9 | \begin{enumerate}
10 | \item Классическая логика является формальной основой для 99\% современной математики. На практике правила вывода, модели и логические операции математики почти никогда не применяются, но тем не менее, чтобы сформулировать аксиомы теории множеств, логика необходима. Мне хотелось показать читателю как все же строится современная математика, и чтобы иметь эту возможность, я сделал небольшой экскурс в логику.
11 | \item Есть буквально пара мест даже в классических областях институтской математики, где формальная логика встречается (в основном это касается кванторов и законов де Моргана). В институте правда все обычно ограничивается словами «этот значок означает „для любого“». Знать более подробно что же это такое все же полезно.
12 | \item Несмотря на то, что логика вроде бы как-то стоит особняком от остальной математики, есть все же несколько теорем, которые интересны широким слоям населения. Доказательство их в курсе также надеюсь будет приятным занятием.
13 | \item Математическая логика в современном мире является довольно базовым знанием, которое в скором времени скорее всего будут преподавать во всех школах. Простой пример: любая база данных является множеством, а пользователь, задавая вопрос базе данных, на самом деле на специализированном языке формулирует предикат. Эту операцию выполняет часто и продвинутый бухгалтер и юрист, и финансист, только они чаще всего не знают слов типа «подмножество» и «предикат». Понимание логики и теории множеств может здорово упростить им работу, если они захотят более подробно изучать работу с базами данных (что не сложно). Можно привести более сложные примеры с языками программирования, но это уже в общем-то дебри относительно нашего курса, поэтому не будем углубляться. Просто скажем, что все же эти знания пусть и не в чистом виде, но могут оказаться полезны.
14 | \item Из всего, что я могу написать в этой книге, с одной стороны логика в значительной степени абстрактна, с другой же стороны она сравнительно проста и позволит расширять в дальнейшем набор примеров, которые мы будем использовать. Данная глава на мой взгляд является довольно не плохой тренировкой для мозгов.
15 | \end{enumerate}
16 |
17 | Если уйти от контекста книги с нашими узкими целями и говорить о более академических направлениях, то основное практическое применение логики (за вычетом философии и оснований математики, о чем я упоминал) --- это попытки разработки систем автоматического доказательства теорем. Ситуация здесь двоякая --- с одной стороны пока не существует никакой адекватной автоматизированной системы автоматических доказательств и работа в этом направлении вроде бы идёт не особо успешно. С другой стороны в качестве частных случаев были примеры компьютерного доказательств сложных теорем именно методами логики, которые человек до этого доказать оказывался не способен. Правда, эти доказательства оказываются небольшой гигантской последовательностью символов, которые формально с точки зрения логики верны, но интуитивно совершенно непонятны. Поэтому такого рода доказательства значительная часть математиков не признает.
18 |
19 | Также применения изложенный материал имеет в электронных схемах. Происходящее там уже правда мало походит на логику --- $1$ означает наличие заряда, а $0$ его отсутствие, а логические операции в этом случае превращаются уже в чистую арифметику. Об этом в этом курсе будет параграф в третьей главе.
20 |
21 | Какие-то ещё применения логики встречаются в разработках искусственного интеллекта, где окружающий мир описывается набором высказываний, и компьютер знает какие действия как на эти высказывания влияют. При наличии информации об окружающем мире и конечной цели (или недостающей информации), компьютер может самостоятельно построить последовательность действий, необходимую для достижения результата. В ограниченных количествах подобные технологии вроде бы даже применяются где-то в робототехнике, но это скорее единичные случаи, нежели постоянная практика.
22 |
--------------------------------------------------------------------------------
/naturals-partitions.tex:
--------------------------------------------------------------------------------
1 | \section{Разбиения множеств}
2 |
3 | Когда мы выбираем из $n$ элементов $k$ элементов, мы на самом деле разбиваем множество на 2 части: ту, которую мы выбрали (она содержит $k$ элементов), и ту, которую оставили ($n-k$ элементов). Эту идею можно обобщить: можно выбирать элементы множества не в два подмножества, а в произвольное число $m$ подмножеств, где в $i$-е подмножество попадает $k_i$ элементов. При этом должно выполняться соотношение $k_1+k_2+\ldots+k_m = n$. Эта идея чуть более формально отражена в следующих определениях.
4 |
5 | \begin{definition}
6 | \term{Упорядоченным разбиением} множества $[n]$ на $m$ подмножеств называется отображение $f:[n]\to[m]$. Мы говорим, что упорядоченное разбиение имеет \term{тип} $(k_1, k_2, \ldots, k_m)$, если $|f^{-1}(i)| = k_i$.
7 | \end{definition}
8 |
9 | \begin{definition}
10 | Число упорядоченных разбиений множества $[n]$ типа $(k_1, k_2, \ldots k_m)$ называется \term{мультиномиальным коэффициентом} и обозначается как
11 | $$n \choose k_1; k_2;\ldots; k_m$$
12 | \end{definition}
13 |
14 | \begin{exercise}
15 | Сколько можно получить различных слов путём перестановки букв в слове <<математика>>? Если теперь взять произвольно слово, то сколько слов можно получить различными перестановками?
16 | \end{exercise}
17 |
18 | \begin{thm}
19 | $${n \choose k_1; k_2;\ldots; k_m} = \frac{n!}{k_1!k_2!\ldots k_m!}$$
20 | \end{thm}
21 | \begin{proof}
22 | Выберем вначале $k_1$ элемент, способов сделать это $n\choose k_1$. Из оставшихся элементов теперь выберем во второе множество $k_2$ элементов, способов сделать это $n-k_1\choose k_2$. Продолжая рассуждать таким же образом, получаем
23 | \begin{align*}
24 | {n \choose k_1; k_2;\ldots; k_m} & = {n\choose k_1}{n-k_1\choose k_2}{n-k_1-k_2\choose k_3}\ldots{n-k_1-\ldots k_{m-1}\choose k_m} \\
25 | &= \frac{n!}{k_1!(n-k_1)!}\cdot\frac{(n-k_1)!}{k_2!(n-k_1-k_2)!}\cdot\frac{(n-k_1-k_2)!}{k_3!(n-k_1-k_2-k_3)!}\cdot\ldots\\
26 | &=\frac{n!}{k_1!k_2!\ldots k_m!}
27 | \end{align*}
28 | \end{proof}
29 |
30 | \begin{thm}
31 | $$(x_1+x_2\ldots x_m)^n = \sum_{k_1+\ldots + k_m = n}{n\choose k_1;k_2;\ldots;k_m}x_1^{k_1}x_2^{k_2}\ldots x_m^{k_m}$$
32 | Здесь суммирование ведётся по всем возможным наборам чисел $\{k_i\}$, дающим в сумме $n$.
33 | \end{thm}
34 | \begin{proof}
35 | Аналогично доказательству теоремы 3.26. Проведите его самостоятельно.
36 | \end{proof}
37 |
38 | \begin{exercise}
39 | Покажите, что теорема 3.26 является частным случаем для теоремы 3.29.
40 | \end{exercise}
41 |
42 | \begin{exercise}
43 | Покажите, что в теореме 3.29 будет ровно $n + k - 1 \choose n$ слагаемых.
44 | \end{exercise}
45 |
46 | \begin{definition}
47 | \term{Числами Стирлинга второго рода} $\sstirling{n}{k}$ называется количество способов разбить множество $[n]$ на $k$ подмножеств.
48 | \end{definition}
49 |
50 | Я обращу внимание на то, что в определении чисел Стирлинга второго рода речь идёт уже о неупорядоченных разбиениях. Например, если рассматривать множество $\{a, b, c, d\}$, то с точки зрения чисел Стирлинга разбиения $(\{a, b\}, \{c, d\})$ и $(\{c, d\}, \{a, b\})$ будут эквивалентны, а с точки зрения мультиномиального коэффициента~--- нет.
51 |
52 | \begin{exercise}
53 | Докажите, что $\sstirling{4}{2} = 8$, но в то же время
54 | $$\sum_{i=0}^4 {4\choose i;(4-i)} = 16$$
55 | \end{exercise}
56 |
57 | \begin{exercise}
58 | Выразите $\sstirling{n}{k}$ через мультиномиальные коэффициенты.
59 | \end{exercise}
60 |
61 | \begin{definition}
62 | \term{Числами Белла} $B(n)$ называется количество способов разбить множество $[n]$ на подмножества.
63 | \end{definition}
64 |
65 | Речь опять же идёт о неупорядочнных разбиениях.
66 |
67 | \begin{thm}
68 | $$B(n) = \sum_{k=1}^n\sstirling{n}{k}$$
69 | \end{thm}
70 | \begin{proof}
71 | Очевидно.
72 | \end{proof}
73 |
74 | \begin{exercise}
75 | Докажите, что $\sstirling{n}{2} = 2^{n-1} - 1$.
76 | \end{exercise}
77 |
78 | Значения $\sstirling{n}{1} = \sstirling{n}{n} = 1$ настолько очевидны, что даже не заслуживают отдельного упражнения. Остальные значения, как и в случае чисел Стирлинга первого рода и количества сочетаний, могут быть вычислены рекурсивно.
79 |
80 | \begin{thm}
81 | $$\sstirling{n}{k} = \sstirling{n-1}{k-1} + k\sstirling{n-1}{k}$$
82 | \end{thm}
83 | \begin{proof}
84 | Рассмотрим элемент $n$ множества $[n]$. При разбиении $[n]$ на подмножества $n$ может войти в отдельное подмножество мощности 1, либо же войти в состав более крупного подмножества. В первом случае количество таких разбиений будет $\sstirling{n-1}{k-1}$~--- количество разбиений без учёта элемента $n$. Во втором случае мы опять же строим разбиение множества $[n-1]$, но уже на $k$ подмножеств. Нам остаётся лишь выбрать в какое из этих $k$ подмножеств добавить элемент $n$. Получаем $k\sstirling{n-1}{k}$.
85 | \end{proof}
86 |
87 | Числа Белла так же допускают рекурсивное определение, хотя и не особо удобное.
88 |
89 | \begin{thm}
90 | $$B(n+1) = \sum_{k=0}^n{n \choose k} B(k)$$
91 | \end{thm}
92 | \begin{proof}
93 | Пусть элемент $n+1$ при некотором разбиении множества $[n+1]$ попал в множество размера $k$. Есть $n\choose k - 1$ способов выбрать это множество, оставшиеся элементы можно разбить на подмножества $B(n+1-k)$ способами. Поскольку $k$ может быть произвольным от 1 до $n+1$, получаем
94 | \begin{align*}
95 | B(n+1) & = \sum_{k=1}^{n+1}{n\choose k-1}B(n+1-k)\\
96 | & = \sum_{k=1}^{n+1}{n\choose n-k+1}B(n-k+1) \\
97 | & = \sum_{k=0}^{n}{n\choose k}B(k)
98 | \end{align*}
99 | \end{proof}
100 |
101 | Чтобы эта формула работала, нужно положить $B(0) = 1$ (чтобы увидеть это, примените 3.32 к значению $B(1)$), что соответствует интуиции: существует лишь одно разбиение пустого множества на подмножества, которое само является пустым множеством.
102 |
103 | \begin{exercise}
104 | Докажите, что для $n>2$ выполняется оценка
105 | $$n! < \sstirling{2n}{n} < (2n)!$$
106 | Вероятно, вначале будет целесообразно, пользуясь 3.31, доказать, что $B(n) < n!$ при $n>3$.
107 | \end{exercise}
108 |
--------------------------------------------------------------------------------
/book.tex:
--------------------------------------------------------------------------------
1 | \documentclass[a5paper,10pt,pagesize,DIV=classic]{scrbook}
2 | \usepackage{cmap}
3 | \usepackage[T2A]{fontenc}
4 | \usepackage[pass]{geometry}
5 |
6 | \usepackage{graphicx}
7 | \usepackage{float}
8 | \graphicspath{{images/}}
9 |
10 | \usepackage[utf8]{inputenc}
11 | \usepackage[english,russian]{babel}
12 | \usepackage{tikz}
13 | \usetikzlibrary{calc, shapes, arrows}
14 | \usepackage{calc}
15 |
16 | \usepackage[raggedright,small]{titlesec}
17 | \usepackage[dotinlabels]{titletoc}
18 |
19 | %\titlelabel{\thetitle.\quad\thispagestyle{fancy}}
20 |
21 | \usepackage{ccaption}
22 | \captiondelim{. }
23 |
24 | \usepackage[bookmarks=false, a4paper, colorlinks, unicode, pdfstartview=FitH, pdftex]{hyperref}
25 | \hypersetup{
26 | plainpages=true,
27 | linkcolor=blue,
28 | citecolor=red,
29 | menucolor=blue,
30 | pdfnewwindow=true
31 | }
32 |
33 | \clubpenalty=10000
34 | \widowpenalty=10000
35 |
36 | \lccode`\-=`\-
37 | \lccode`\+=`\+
38 | \defaulthyphenchar=127
39 | \hfuzz=1.5pt
40 |
41 | \usepackage{amsmath}
42 | \usepackage{amssymb}
43 | \usepackage{amsthm}
44 | \usepackage{amstext}
45 | \usepackage{hyperref}
46 |
47 |
48 | %% use this instead of slhape or textit for inline definitions %%
49 | \newcommand{\term}[1]{\textit{#1}}
50 |
51 | %% definitions of functions %%
52 | \newcommand{\Mod}{\operatorname{Mod}}
53 |
54 | %% srirling numbers
55 | \DeclareRobustCommand{\fstirling}{\genfrac{[}{]}{0pt}{}}
56 | \DeclareRobustCommand{\sstirling}{\genfrac{\{}{\}}{0pt}{}}
57 |
58 | %% definition for theorems, excercies, etc. %%
59 | \theoremstyle{plain}
60 | \newtheorem{thm}{Теорема}[chapter]
61 | \newtheorem{corollary}{Следствие}
62 | \newtheorem{lemma}{Лемма}
63 |
64 | \newtheorem*{Euclids}{Теорема Евклида}
65 | \newtheorem*{EuclidsLemma}{Лемма Евклида}
66 | \newtheorem*{Bezus}{Соотношение Безу}
67 | \newtheorem*{FTA}{Основная теорема арифметики}
68 | \newtheorem*{GodelsCompleteness}{Теорема Гёделя о полноте}
69 | \newtheorem*{HandshakesLemma}{Лемма о рукопожатиях}
70 |
71 | \theoremstyle{definition}
72 | \newtheorem{exercise}{Упражнение}[chapter]
73 | \newtheorem{problem}{Задача}[chapter]
74 | \newtheorem{example}{Пример}[chapter]
75 | \newtheorem{definition}{Определение}[chapter]
76 |
77 | %% itemize use dashes instead of bullets%%
78 | \def\labelitemi{---}
79 |
80 |
81 | %% define lcm operator
82 | \DeclareMathOperator{\lcm}{lcm}
83 |
84 |
85 | \begin{document}
86 |
87 | \title{Учебник по математике}
88 | \author{Роман Добровенский\\ \\ \url{heller@heller.ru}\\ \url{http://heller.ru}}
89 | \date{2012--2014, Москва}
90 | \maketitle
91 |
92 | \tableofcontents
93 |
94 | \input{introduction}
95 |
96 | \chapter{Логика}
97 | Первая глава даёт неформальное описание основных законов логики. Главная цель~--- дать какую-то интуицию об излагаемых понятиях и о принципах логических выводов, прежде чем мы всё это формализуем и используем в конце второй главы. Если вам не особо интересны основания математики, то вы можете сразу переходить к середине третьей главы и читать более прикладные вещи, обращаясь сюда по мере необходимости как к справочнику.
98 |
99 | Наиболее важными являются первый и четвёртый параграфы. Остальные параграфы имеют факультативный характер и не обязательны к прочтению.
100 |
101 | \input{logic-basics}
102 | \input{logic-functions}
103 | \input{logic-puzzle}
104 | \input{logic-predicates}
105 | \input{logic-intuition}
106 | \input{logic-paradoxes}
107 | %\input{logic-other}
108 | %\input{logic-god}
109 | \input{logic-formalism}
110 | \input{logic-applications}
111 |
112 |
113 | \chapter{Множества}
114 | В этой главе очень формально и кратко будут изложены основные понятия множеств. Запомнить и понять сходу всё, что здесь написано, очень сложно, поэтому лучшей стратегией будет поверхностно ознакомиться с содержимым главы, а затем возвращаться к ней по мере необходимости как к справочному материалу. Важными параграфами являются 1, 2 и 4. Остальные можно пропустить, если будут возникать трудности при прочтении.
115 |
116 | \input{sets-basics}
117 | \input{sets-relations}
118 | \input{sets-graphs}
119 | \input{sets-functions}
120 | \input{sets-formalism}
121 | %\input{sets-incompleteness}
122 | \input{sets-history}
123 |
124 |
125 | \chapter{Натуральные числа}
126 | В этой части наконец-то вводится понятие натурального числа. Основные две темы ~--- само понятие натурального числа (включая минимум из теории чисел) и комбинаторика. Базовые комбинаторные формулы сами по себе часто оказываются полезны в самых разных областях математики, так же на них легко и приятно отрабатывать основные навыки работы с базовыми математическими объектами. В более абстрактные области мы уйдём со следующей главы, эта же глава будет во многом простая, расслабляющая и лёгкая для чтения (возможно, кроме первого параграфа, который в принципе многим читателям будет необязателен).
127 |
128 | \input{naturals-definitions}
129 | \input{naturals-counting}
130 | \input{naturals-arithm}
131 | \input{naturals-div}
132 | \input{naturals-pigeonhole}
133 | \input{naturals-induction}
134 | %\input{naturals-islanders}
135 | \input{naturals-permutations}
136 | \input{naturals-choose}
137 | \input{naturals-partitions}
138 | \input{naturals-inclexcl}
139 | \input{naturals-doublecounting}
140 | \input{naturals-othernumbers}
141 | %\input{naturals-voting}
142 | \input{naturals-undecidability}
143 |
144 | \chapter{Базовые понятия алгебры}
145 | В этой части мы будем расширять понятие натурального числа. Вначале мы дополним натуральные числа отрицательными, чтобы мы всегда имели возможность вычитать одно из другого, получив множество целых чисeл $\mathbb{Z}$. Затем мы расширим его до понятия дробей, чтобы всегда можно было делить. Это множество рациональных чисел $\mathbb{Q}$. Его мы дополним до вещественных чисел $\mathbb{R}$, чтобы можно было вычислять корни. По ходу дела мы познакомимся с такими понятиями как группа, кольцо, поле, гомоморфизм, что станет очень важным в дальнейшем.
146 |
147 | \input{algebra-binaryoperations}
148 | \input{algebra-groups}
149 |
150 | \end{document}
151 |
--------------------------------------------------------------------------------
/naturals-inclexcl.tex:
--------------------------------------------------------------------------------
1 | \section{Включения-исключения}
2 |
3 | Вот задачка, которая как-то попалась мне в младшем возрасте на олимпиаде по математике, а затем многократно попадалась в разных книжках с занимательными примерами по математике.
4 |
5 | Есть класс, в котором известно, что все ученики ходят в какие-то секции. Известно, что 12 учеников ходят на плавание (и, возможно на что-то ещё), 13 на карате, 12 на шахматы, 6 одновременно на плавание и на карате, 6 на карате и шахматы, 2 на шахматы и плавание и 2 ходят во все три секции. Сколько всего учится детей в классе?
6 |
7 | Мы не будем решать эту задачу, а сразу перейдём к общему случаю. Пусть у нас есть семейство множеств $\{A_i\}$, нам известны мощности каждого из них, а так же мощности любых их пересечений. Необходимо найти мощность объединения этих множеств.
8 |
9 | Напомню, что в~\S~3.1 мы ввели понятие характеристической функции $\chi_A(x)$. Эта функция принимает значение 0, если $x\not\in A$ и 1, если $x\in A$. Нам потребуются дополнительные факты о ней:
10 |
11 | \begin{thm}
12 | \begin{enumerate}
13 | \item Пусть $A\subset U$, тогда $|A| = \sum_{x\in U} \chi_A(x)$
14 | \item $\chi_{A^C}(x) = 1 - \chi_A(x)$
15 | \item $\chi_{A\cap B}(x) = \chi_A(x)\chi_B(x)$
16 | \end{enumerate}
17 | \end{thm}
18 | \begin{proof}
19 | В качестве упражнения.
20 | \end{proof}
21 |
22 | \begin{thm}
23 | $$\left|\bigcup_{i=1}^n A_i \right|= \sum_{i=1}^n|A_i| - \sum_{i>}. $$
19 |
20 | Подставляя вместо $x$ и $y$ конкретных людей, мы получим истинное или ложное высказывание.
21 |
22 | Выражения типа $P(x, y)$ называются \term{предикатами}. Предикаты не обязательно имеют два параметра — их число может быть произвольным.
23 |
24 | \begin{definition}
25 | Множество $A$ называется \term{подмножеством} множества $B$ (обозначение: $A \subset B$), если любой элемент из $A$ содержится также и в множестве $B$.
26 | \end{definition}
27 |
28 | Например, множество всех мужчин является подмножеством множества всех людей, а множество учеников 6 «Б» класса школы №469 является подмножеством всех школьников, которое, в~свою очередь, также является подмножеством всех людей.
29 |
30 | Понятия подмножества и предиката находятся в тесной взаимосвязи. С одной стороны, любой предикат определяет подмно\-жест\-во: если $P(x)$ определён на множестве $A$, то множество элементов, для которых $P(x)=1$, образует подмножество множества $A$, которое обозначается как $ \{ x \in A|P(x) = 1 \} $.
31 |
32 | С другой стороны, если нам задано $A \subset B$, то мы всегда можем определить предикат $P(x) = (x\in A)$, который будет однозначно характеризовать подмножество $A$.
33 |
34 | Таким образом, если $A$ — множество всех мужчин, $B$ — множество всех людей, то это подмножество находится во взаимно однозначном соответствии с предикатом $P(x)$, который истинен тогда, когда $x$ — мужчина.
35 |
36 | Предположим теперь, что некоторый предикат $P(x)$ подразумевает, что в качестве $x$ в него можно подставлять элементы множества $S$.
37 |
38 | \begin{definition}
39 | Запись $\forall x\in S, P(x)$ означает, что высказывание $P(x)$ истинно для всех элементов $x \in S$.
40 | \end{definition}
41 |
42 | \begin{definition}
43 | Запись $\exists x\in S, P(x)$ означает, что существует такой элемент $x\in S$, для которого $P(x)$ истинно.
44 | \end{definition}
45 |
46 | Символ $\forall$ называется квантором всеобщности, а символ $\exists$ квантором существования. Само слово «квантор» переводится на английский как «quantifier» (и является однокоренным с ним), которое в свою очередь происходит от «quantity», что переводится как «количество».
47 |
48 | \begin{example}
49 | Пусть $H$ — множество людей. Предикат $A(x, y)$ означает, что $x$ является предком $y$. Тогда запись $\forall y\in H \mbox{ } \exists x \in H, A(x, y)$ читается как «для любого человека $x$ найдётся такой человек $y$, что он будет предком для $x$» или, по-людски, «У любого человека есть предок».
50 | \end{example}
51 |
52 | \begin{example}
53 | Пусть $K$ — множество ключей и $L$ — множество замков. Высказывание $O(k, l)$ означает, что ключ $k$ открывает замок $l$. Тогда запись $\forall l\in L \mbox{ } \exists k \in K, O(k, l)$ означает, что для каждого замка найдётся ключ.
54 | \end{example}
55 |
56 | Когда из контекста и так понятно, какие множества имеются в~виду, то указание на конкретное множество, из которого выбирается переменная, необязательно. В дальнейшем мы будем часто опускать указание множества после квантора.
57 |
58 | Важно заметить, что порядок, в котором мы задаём кванторы для переменных, очень существенен. Если бы в прошлых примерах мы поменяли порядок следования кванторов, то смысл этих записей резко бы изменился. Так, запись $\exists x \forall y \in H, A(x, y)$ означает, что существует некоторый человек, который является предком для любого другого человека (то есть фактически это библейское утверждение о «первом человеке», что-то вроде Адама), а запись $\exists k \forall l, O(k, l)$ означает, что существует ключ, который открывает все замки.
59 |
60 | Эта оговорка относится лишь к случаю смены порядка для последовательных кванторов разного вида. В то же время можно утверждать, что, например, $\forall x \forall y, P(x, y) = \forall y \forall x, P(x, y)$ и аналогично для квантора существования. Интуитивно это можно понять из такого примера: $x$ принадлежит множеству мужчин, $y$ принадлежит множеству женщин, а $P(x, y)$ обозначает, что $x$ может (теоретически) жениться на $y$. Очевидно, что в данном случае совершенно не важно, в каком порядке мы указываем кванторы всеобщности.
61 |
62 | Самое распространённое и часто применяемое свойство кванторов — это закон де Моргана, который на этот раз формулируется так:
63 |
64 | \begin{enumerate}
65 | \item $\neg \exists x, P(x) = \forall x, \neg P(x)$
66 | \item $\neg \forall x, P(x) = \exists x, \neg P(x)$
67 | \end{enumerate}
68 |
69 | В принципе, для этого закона можно придумать нечто вроде доказательства. Пусть $A = \{a, b, \ldots, z\}$ — некоторое конечное множество. Тогда, очевидно, запись с кванторами можно представить следующим образом:
70 |
71 | \begin{enumerate}
72 | \item $\forall x \in A, P(x) = P(a) \wedge P(b) \wedge \ldots \wedge P(z)$
73 | \item $\exists x \in A, P(x) = P(a) \vee P(b) \vee \ldots \vee P(z)$
74 | \end{enumerate}
75 |
76 | Отрицание обоих частей этих равенств и применение привычного нам закона де Моргана даёт нам желаемый результат.
77 |
78 | Проблема с этим рассуждением в том, что сами множества могут состоять из бесконечно большого числа элементов, и тогда мы не сможем так запросто расписать наш квантор. Тем не менее, правило де Моргана довольно интуитивно понятно \mbox{(если} вы, конечно, последовали моему совету в первом параграфе). Например, первое правило можно словами проговорить так: \mbox{если} неверно, что для любого $x$ выполняется $P(x)$, то существует хотя бы один $x$, для которого этого нарушается. А это уже \mbox{довольно} очевидно, и поэтому правила де Моргана мы можем принять за аксиомы. А для неверующих в дальнейшем я всё же покажу, как можно избавиться от ограничения в виде «не можем расписать квантор для бесконечного множества». Но это будет намного \mbox{позже.}
79 |
80 |
81 | \begin{exercise} Докажите (необязательно строго, можно и интуитивным рассуждением) следующие соотношения:
82 | \begin{enumerate}
83 | \item $\forall x, (P(x) \wedge Q(x)) = (\forall x, P(x))\wedge (\forall x, Q(x))$
84 | \item $\exists x, (P(x) \vee Q(x)) = (\exists x, P(x))\vee (\exists x, Q(x))$
85 | \item $\forall x, (P(x) \wedge Q) = (\forall x, P(x))\wedge Q$
86 | \item $\exists x, (P(x) \wedge Q) = (\exists x, P(x))\wedge Q$
87 | \item $\forall x, (P(x) \vee Q) = (\forall x, P(x))\vee Q$
88 | \item $\exists x, (P(x) \vee Q) = (\exists x, P(x))\vee Q$
89 | \end{enumerate}
90 | \end{exercise}
91 |
92 | В качестве примера приложения этих формул докажем такую несложную теорему:
93 |
94 | \begin{thm}$\forall x, (P(x)\to Q) = (\exists x, P(x))\to Q$.\end{thm}
95 | \begin{proof}Всё совершенно прямолинейно:
96 | \begin{align*}
97 | \forall x, (P(x)\rightarrow Q) &= \forall x, (\neg P(x) \vee Q) \\
98 | &= (\forall x, \neg P(x)) \vee Q \\
99 | &= (\neg\exists x, P(x))\vee Q \\
100 | &= (\exists x, P(x))\rightarrow Q
101 | \end{align*}
102 | \end{proof}
103 |
104 | \begin{exercise}
105 | Докажите, что $$\forall x, (P\to Q(x)) = P\to (\forall x, Q(x)).$$
106 | \end{exercise}
107 |
108 | \begin{exercise}Продемонстрируйте, что в остальных случаях квантор уже нельзя так запросто «выносить за скобки», то есть приведите примеры, когда отчётливо видно следующее:
109 | \begin{enumerate}
110 | \item $\exists x,(P(x)\wedge Q(x))\not=(\exists x, P(x))\wedge (\exists x,Q(x))$
111 | \item $\forall x, (P(x) \vee Q(x)) \not= (\forall x, P(x))\vee (\forall x, Q(x))$
112 | \item $\forall x, (P(x) \oplus Q) \not= (\forall x, P(x))\oplus Q$
113 | \item $\exists x, (P(x) \oplus Q) \not= (\exists x, P(x))\oplus Q$
114 | \end{enumerate}
115 | \end{exercise}
116 |
--------------------------------------------------------------------------------
/logic-puzzle.tex:
--------------------------------------------------------------------------------
1 | \section{Самая сложная логическая задача}
2 |
3 | В качестве примера построения логической функции, удовлетворяющей заданным критериям, мы рассмотрим довольно безумную задачку, которая даже имеет собственное название, и называется она, ни много ни мало, «Самой сложной логической задачей» («The Hardest Logic Puzzle Ever»). Её автор~--- известный логик и философ Джорд Булос.
4 |
5 | \begin{problem}
6 | Довелось нам повстречаться с тремя богами. Они всезнающие и могут отвечать на вопросы, которые предполагают ответ «да» или «нет», причём один из богов всегда отвечает правду, один всегда врёт, а третьему вообще наплевать — он отвечает на вопросы как чёрт на душу положит. Дополнительная проблема в том, что хоть русским они и владеют, но говорить на нём ниже их достоинства. Вместо «да» и «нет» они говорят «ня» и «ми», причём что из этого что означает — неизвестно. Такой вот божественный язык. У нас есть возможность задать этим богам три вопроса, подразумевающих ответ «да» или «нет». Задавать вопросы можно в произвольном порядке, можно задавать разные или одинаковые вопросы. Каждый вопрос адресуется только одному богу. В результате после всех трёх вопросов вы должны точно указать, где бог вранья, где бог правды и где бог случая. Как это сделать?
7 | \end{problem}
8 |
9 | В принципе, изложенного в курсе до сих пор материала уже достаточно для того, чтобы решить эту головоломку. Вы можете подумать над ней некоторое количество времени и лишь потом читать дальше. Либо можете сразу читать.
10 |
11 | При общении с богами нам необходимо получать понятные для нас ответы на вопросы. При общении со случайным богом мы ничего достоверно узнать не можем, поэтому в первую очередь мы будем выяснять, кто из них случайный. Это, однако, нам ещё только предстоит в дальнейшем — для начала нам надо понять, каким образом сформулировать вопрос так, чтобы ответ на него и бога правды, и бога лжи одновременно давал нам какие-то полезные сведения.
12 |
13 | Чтобы было проще, решим для начала упрощённую версию этой задачи. Упрощения будут следующими:
14 |
15 | \begin{enumerate}
16 | \item Боги всё же отвечают по-русски, и мы можем точно интерпретировать их ответ.
17 | \item Богов всего два — бог правды и бог лжи. Случайного бога нет.
18 | \item Нам надо выяснить истинность некоторого высказывания, задав только один вопрос.
19 | \end{enumerate}
20 |
21 | Такая упрощённая задача как-то попалась сыну моего начальника на окружной олимпиаде по математике — только там речь шла не о богах, а о двух братьях, и у них надо было выяснить, какая дорога из двух правильная.
22 |
23 | Обозначим через $a$ тот факт, что мы общаемся с богом правды, а через $\gamma$ высказывание, истинность которого нам необходимо установить. Мы хотим каким-то образом реализовать функцию $f$, представленную в таблице 1.7.
24 |
25 | \begin{table}[h]
26 | \centering
27 | \begin{tabular}{cc|c}
28 | $a$ & $\gamma$ & $f$ \\
29 | \hline
30 | 0 & 0 & 0 \\
31 | 0 & 1 & 1 \\
32 | 1 & 0 & 0 \\
33 | 1 & 1 & 1
34 | \end{tabular}
35 | \caption{Требуемая функция в упрощённой задаче о богах}
36 | \end{table}
37 |
38 | То есть мы должны получить ответ «да» лишь в том случае, когда $\gamma$ истинно. Мы могли бы задать одному из двух богов следующий вопрос: «Верно ли, что $f$ истинно?». Однако нам известно, что если мы говорим с богом лжи ($a = 0$), то он на все вопросы будет давать противоположный ответ, поэтому нам \mbox{надо} задавать вопрос про истинность функции, которая в случае разговора с богом лжи принимает значение, противоположное $f$. Обозначим её через $q$. Её значения приведены в таблице 1.8.
39 |
40 | \begin{table}[h]
41 | \centering
42 | \begin{tabular}{cc|cc}
43 | $a$ & $\gamma$ & $f$ & $q$ \\
44 | \hline
45 | 0 & 0 & 0 & 1 \\
46 | 0 & 1 & 1 & 0 \\
47 | 1 & 0 & 0 & 0 \\
48 | 1 & 1 & 1 & 1
49 | \end{tabular}
50 | \caption{Функция $q$, учитывающая, что один из богов врёт.}
51 | \end{table}
52 |
53 | Теперь, если мы будем задавать произвольному богу вопрос «верно ли $q$?», то оба бога будут отвечать «да» в том и только в том случае, когда верно интересующее нас $\gamma$. На человеческом языке этот вопрос можно сформулировать так: «Верно ли, что и $\gamma$, и то, что ты бог правды, либо одновременно верно, либо одновременно неверно?». Сложно и косноязычно, но, тем не менее, это вполне себе ответ на нашу задачу.
54 |
55 | Теперь понятно, как действовать и в первоначальном случае. Теперь в качестве параметров функции ответа надо добавить ещё одно высказывание $b$, истинное в случае, когда «ня» означает русское «да». В случае, когда $b = 0$, нам надо ещё один раз подменить значения $0$ и $1$, чтобы ответ «ня» звучал в точности тогда, когда истинно $\gamma$:
56 |
57 | \begin{table}[h]
58 | \centering
59 | \begin{tabular}{ccc|ccc}
60 | $a$ & $b$ & $\gamma$ & $f$ & $q$ & $p$ \\
61 | \hline
62 | 0 & 0 & 0 & 0 & 1 & 0 \\
63 | 0 & 0 & 1 & 1 & 0 & 1 \\
64 | 0 & 1 & 0 & 0 & 1 & 1 \\
65 | 0 & 1 & 1 & 1 & 0 & 0 \\
66 | 1 & 0 & 0 & 0 & 0 & 1 \\
67 | 1 & 0 & 1 & 1 & 1 & 0 \\
68 | 1 & 1 & 0 & 0 & 0 & 0 \\
69 | 1 & 1 & 1 & 1 & 1 & 1
70 | \end{tabular}
71 | \caption{Требуемая функция для первоначальной задачи.}
72 | \end{table}
73 |
74 | Теперь на вопрос «Правда ли, что верно $p$?», как бог правды, так и бог вранья будут отвечать «ня» в том и только в том случае, когда верно высказывание $\gamma$.
75 |
76 | В устной форме, конечно, вопрос этот будет звучать слишком длинно и нелепо. Я приведу лишь начало вопроса: «Верно ли одновременно, что ты бог лжи, „ня“ означает „нет“ и $\gamma$ неверно, либо что одновременно ты бог лжи, „ня“ означает „да“ и $\gamma$ неверно, либо что одновременно...» — ну и так далее, продолжаем словами надиктовывать ДНФ. Выглядит такой вопрос убого, но это тем не менее решение, и, согласитесь, если бы это был вопрос жизни и смерти, то вас даже такое решение устроило бы.
77 |
78 | Приведённое выше высказывание можно упростить. Например, по таблице истинности можно заметить, что $p = (a \leftrightarrow b) \leftrightarrow \gamma$. Можно было бы задать наш вопрос, исходя из этого представления, и он был бы короче, но пришлось бы как-то явно оговаривать, в каком смысле мы имеем в виду эквивалентность (смотрите замечание в первом параграфе об ассоциативности импликации и о том, что $(a\leftrightarrow b)\leftrightarrow c$ и $a \leftrightarrow b \leftrightarrow c$ традиционно интерпретируются по-разному).
79 |
80 | Есть и более остроумный способ сформулировать вопрос. Опять же, проще понять этот способ, если сначала рассмотреть ситуацию, когда боги отвечают на русском языке. Вопрос тогда будет звучать так: «Что бы ты мне ответил, если бы я спросил тебя о верности $\gamma$?». С богом правды всё понятно — он бы ответил правду. Бог обмана же попадает с этим вопросом в ловушку — на наш вопрос он соврал бы, но именно в такой постановке вопроса он вынужден соврать ещё раз, и по правилу двойного отрицания он вынужден дать правдивый ответ.
81 |
82 | Аналогичную идею можно использовать и когда боги отвечают «ня» или «ми». В этом случае вы можете задать такой вопрос: «Если бы я тебя спросил об истинности $\gamma$, ответил бы ты „ня“?» По таблице истинности вы можете убедиться в том, что ответ «ня» всегда однозначно будет указывать на истинность $\gamma$.
83 |
84 | Из возможности поставить вопрос по-разному и трюка с двойным отрицанием можно вынести нравственный урок: не всегда хорошо известный способ, логично следующий из теории, приводит к лучшему ответу. Часто (чаще всего) то, что пишут в книгах или рассказывают на уроках, приводит к уродливым решениям, а чтобы найти какой-то более оптимальный подход, приходится проявлять фантазию.
85 |
86 | Теперь, когда мы умеем вытаскивать информацию из бога правды и бога лжи, не зная, кто из них кто, и не зная их языка, мы можем приступать к окончательному решению задачи.
87 |
88 | Когда мы задаём первый вопрос, всегда существует шанс, что мы задаём его богу случайности, и по его ответу мы не можем судить об истинности утверждения, которое нас интересует. Поэ\-то\-му в первую очередь нам надо узнать, какой бог не является случайным, и мы можем это сделать, задав богу вопрос о случайности какого-либо другого бога.
89 |
90 | Вопрос может звучать так: «Правда ли, что бог, на которого я сейчас показываю пальцем, случаен?» И показываем при этом пальцем на какого-то другого бога, не на того, к которому мы обращаемся. Вопрос, понятно, мы задаём не напрямую, а изворотисто, в форме, найденной выше. Я просто уже не отвлекаюсь на мелочи, так как сейчас они и так понятны.
91 |
92 | Если на наш вопрос о случайности бога мы получим ответ «да», мы можем однозначно сказать, что второй оставшийся бог~--- либо бог правды, либо бог лжи, но никак не бог случая. Дальше мы можем задавать вопросы гарантированно неслучайному богу, на этот раз рассчитывая на верный ответ в любом случае. Важно, что это работает даже в случае, когда мы изначально обращаемся к случайному богу — поскольку выбор мы делаем среди оставшихся двух богов, как бы бог случая ни ответил, мы всегда в точности можем определить одного неслучайного бога.
93 |
94 | Когда один из неслучайных богов установлен, мы уже ему можем задать вопрос о случайности бога, которому мы задавали первый вопрос. Из ответа на этот вопрос мы будем точно знать, какой бог случайный, а какие два нет.
95 |
96 | Последний, третий вопрос мы будем задавать не случайному богу о честности одного из богов. Ответ на этот вопрос окончательно расставит точки над тем, какой бог правдив, какой лжив, а какой случаен.
97 |
98 | А это ровно то, что требовалось по условию задачи.
99 |
--------------------------------------------------------------------------------
/naturals-choose.tex:
--------------------------------------------------------------------------------
1 | \section{Сочетания}
2 |
3 | <<$k$-сочетание>>~--- это просто другое название для термина <<$k$-элементное подмножество>>, которое по историческим причинам (хотя многие считают, что так удобнее) принято в комбинаторике. Нас будет интересовать количество $k$-сочетаний взятых из множества $[n]$.
4 |
5 | \begin{definition}
6 | \term{Биномиальным коэффициентом} $n \choose k$ называется число сочетаний из $[n]$ по $k$.
7 | \end{definition}
8 |
9 | Вместо обозначения ${n \choose k}$ в российской и французской литературе исторически чаще используется обозначение $C^k_n$, однако оно кажется мне менее удобным в случаях если вместо величин $n$ и $k$ используются какие-то длинные выражения. По этой причине мы будем придерживаться общемирового обозначения.
10 |
11 | Значения ${n \choose 1} = n$ и ${n \choose n} = 1$ очевидны. Также удобно полагать, что ${n \choose 0} =1$ (пустое множество всего одно, соответственно есть лишь один способ его выбрать).
12 |
13 | \begin{exercise}
14 | На листочке в клетку начерчен прямоугольник со сторонами $m$ и $n$. Мы двигаемся из левого нижнего угла прямоугольника в правый верхний, сдвигаясь за шаг либо на одну клетку вверх, либо на одну клетку вправо. Сколько всего существует таких путей? Сведите задачу к вычислению количества сочетаний, как их считать я расскажу ниже.
15 | \end{exercise}
16 |
17 | \begin{exercise}
18 | Будем считать, что в условиях прошлой задачи $m=n$. Сколько существует путей из левого нижнего угла в правый верхний таких, что они не пересекают диагонали квадрата? (Подсказка: возьмите путь, пересекающий диагональ, и отразите его начало до пересечения относительно этой диагонали).
19 | \end{exercise}
20 |
21 | \begin{thm}
22 | $$\sum_{k=0}^n{n \choose k} = 2^n$$
23 | \end{thm}
24 | \begin{proof}
25 | В левой части этого выражения строит общее количество всех подмножеств множества $[n]$. В правой части на самом деле написано то же самое: $2^n$ есть мощность булеана, как вы видели в~\S~3.1.
26 | \end{proof}
27 |
28 | \begin{thm}
29 | $${n \choose k} = {n \choose n-k}$$
30 | \end{thm}
31 | \begin{proof}
32 | Выбрать $k$ элементов из множества $[n]$ это всё равно что выбрать $n-k$ элементов, которые мы оставим в множестве.
33 | \end{proof}
34 |
35 | \begin{thm}
36 | $${n \choose k} = {n-1 \choose k-1} + {n - 1 \choose k}$$
37 | \end{thm}
38 |
39 | \begin{proof}
40 | Рассмотрим все $k$-сочетания из множества $[n]$. Сам элемент $n$ может либо принадлежать выбранному подмножеству, либо не принадлежать. В первом случае количество сочетаний будет равно $n-1\choose k$, во втором случае, поскольку один элемент сочетания уже фиксирован, это будет величина $n-1\choose k - 1$.
41 | \end{proof}
42 |
43 | Последняя теорема, как и в случае чисел Стирлинга, позволяет вычислять биномиальные коэффициенты. Однако, для сочетаний мы можем записать и явную формулу.
44 |
45 | \begin{definition}
46 | \term{$k$-размещением} мы назовём некоторый упорядоченный набор, состоящий из некоторых $k$ элементов множества $[n]$. Количество размещений из $n$ по $k$ будем обозначать как $n^{\lfloor k\rfloor}$.
47 | \end{definition}
48 |
49 | \begin{thm}
50 | $$n^{\lfloor k \rfloor} = \frac{n!}{(n-k)!}$$
51 | \end{thm}
52 | \begin{proof}
53 | Доказательство практически дублирует доказательство для количества перестановок. На первую позицию мы можем поставить один из $n$ элементов. На вторую позицию один из оставшихся $n-1$ элементов. На третью~---один из $n-2$ элементов. Однако в отличии от перестановок, теперь нам надо разместить лишь $k$ элементов, а не все $n$, поэтому мы этот процесс оборвём на $k$-том шаге. В итоге получаем выражение
54 | $$n^{\lfloor k \rfloor} = n (n-1) (n-2) \ldots (n-k+1)$$
55 | Если это выражение умножить и разделить на $(n-k)!$, получим утверждение теоремы.
56 | \end{proof}
57 |
58 | Само обозначение $n^{\lfloor k \rfloor}$ на самом деле почти всегда используется просто для обозначения произведения $k$ подряд убывающих чисел. Эту величину часто называют \term{убывающим факториалом}. В полной аналогии вводится и \term{возрастающий факториал}:
59 | $$n^{\lceil k \rceil} = n(n+1)(n+2)\ldots(n+k-1)$$
60 |
61 | \begin{exercise}
62 | Покажите, что $n^{\lfloor k \rfloor} = (n-k+1)^{\lceil k \rceil}$
63 | \end{exercise}
64 |
65 | \begin{thm}
66 | $${n \choose k} = \frac{n!}{k!(n-k)!}$$
67 | \end{thm}
68 | \begin{proof}
69 | $k$-расстановку мы можем получить, вначале выбрав $k$-элементное подмножество $[n]$, а затем упорядочив его. Всего существует $n\choose k$ способов выбрать такое подмножество. Способов упорядочить выбранное~--- $k!$. Таким образом получаем соотношение
70 | $$n^{\lfloor k \rfloor} = k!{n\choose k}$$
71 | Поделив обе части на $k!$ и подставив выражение для $n^{\lfloor k \rfloor}$, получаем утверждение теоремы.
72 | \end{proof}
73 |
74 | \begin{exercise}
75 | Теоремы 3.22 и 3.23 можно доказать, пользуясь явным представлением биномиального коэффициента, полученным в 3.25. Сделайте это.
76 | \end{exercise}
77 |
78 | \begin{exercise}
79 | Чему равно $$\sum_{k=m}^n k^{\lfloor m\rfloor} {n\choose k}$$
80 | \end{exercise}
81 |
82 | \begin{exercise}
83 | Докажите, что $${n\choose m}{n-m\choose k} = {n\choose k}{n-k\choose m}$$
84 | \end{exercise}
85 |
86 | \begin{exercise}
87 | Докажите, что $${n\choose k-1}{n\choose k+1} \le {n\choose k}{n\choose k}$$
88 | \end{exercise}
89 |
90 | \begin{thm}
91 | $$(x+y)^n = \sum_{k=0}^n {n \choose k} x^{n-k} y^k$$
92 | \end{thm}
93 | \begin{proof}
94 | Давайте вначале для наглядности распишем степень подробно:
95 | $$(x+y)(x+y)\ldots(x+y)$$
96 | Раскроем все скобки (если пока не понятно как, то потренируйтесь на каких-то частных случаях типа $n=3$). Раскрытие скобок можно интерпретировать так, что из каждой скобки мы выбираем либо $x$, либо $y$. Все слагаемые в полученной сумме будут иметь вид $x^iy^j$, $i+j=n$ с каким-то коэффициентом, появляющимся за счёт того, что некоторые слагаемые вида $x^iy^j$ появляются несколько раз.
97 |
98 | Слагаемое $x^n$ появится лишь один раз в случае, если из всех скобок мы выберем $x$. Слагаемое $x^{n-1}y$ появляется, если мы выбираем $x$ из всех скобок, кроме одной. Эту одну скобку, из которой мы выбираем $y$, мы можем выбрать одним из $n$ способов. По аналогии $x^{n-2}y^2$ появится $n\choose 2$ раз, поскольку мы выбираем уже две скобки, из которых мы возьмём $y$. Продолжая по аналогии приходим к утверждению теоремы.
99 | \end{proof}
100 |
101 | \begin{exercise}
102 | Приведённую теорему можно доказать по индукции. Будет полезным проделать это самостоятельно.
103 | \end{exercise}
104 |
105 | Приведённая теорема даёт нам ещё один способ подсчитать количество подмножеств множества $[n]$:
106 |
107 | $$\sum_{k=0}^n {n \choose k} = \sum_{k=0}^n {n \choose k}1^{n-k}1^k = (1+1)^n = 2^n$$
108 |
109 | \begin{exercise}
110 | Докажите равенство
111 | $$3^n = \sum_{k=0}^{n} 2^k {n \choose k}$$
112 | \end{exercise}
113 |
114 | Последняя задача в свете теоремы 3.26 решается элементарно, однако я замечу, что такие задачи часто даются на олимпиадах для тех школьников, которые ещё по возрасту не могут знать таких теорем. Предполагается, что школьники могут доказать утверждение по индукции (и некоторые действительно могут). Это одна из причин по которой автор ненавидит олимпиадные задачки и <<задачки на логику>>, которые часто дают на собеседованиях~--- большинство таких задач изначально появляются как тривиальные следствия каких-то более общих результатов, а потом уже задним числом оказывается, что задачу в общем-то можно было бы решить и пользуясь лишь школьной математикой. Однако если сравнивать пользу от решения такой задачи по индукции с пользой от изучения общей теоремы, то последнее явно выигрывает, хотя и не помогает на собеседованиях и олимпиадах.
115 |
116 | Сочетания часто используются также вот в каком ключе. Предположим, мама нам сказала: <<Пойди в магазин и купи $n$ каких-нибудь пирожков>>. Мы приходим в магазин, а там продаётся $k$ наименований пирожков. Сколько всего способов у нас есть удовлетворить мамин запрос? Задача в такой постановке приводит нас к понятию \term{сочетаний с повторениями}, поскольку искомые наборы могут содержать повторяющиеся элементы.
117 |
118 | Для решения задачи предположим, что пирожки разного вида мы разложили по разным пакетам (я видел, что в ларьках у метро именно так часто и делают). Схематически мы будем разделять пакеты вертикальной чертой $|$, а пирожки (или, более общо, элементы множества), кружочками $\circ$. Для примера давайте считать, что у нас всего имеется $k=5$ видов пирожков, а купили мы $n=6$ пирожков, причём из них было два пирожка первого вида, три третьего и один четвёртого. Остальных пирожков мы не покупали. На схеме это будет выглядеть как
119 | $$|\circ\circ||\circ\circ\circ|\circ||$$
120 | Теперь мы можем догадаться, как подсчитать общее количество различных сочетаний с повторениями: достаточно просто подсчитать общее количество возможных схем такого вида. В схеме, приведённой выше, если отбросить крайние чёрточки $|$, получится $n+k-1$ различных позиций, на которых могут стоять чёрточки либо кружки. Причём мы точно знаем, что кружков всего будет $n$ штук, а чёрточек $k-1$. Чтобы получить какую-то конкретную схему, нам надо выбрать $n$ позиций под кружки, а остальные позиции мы занимаем чёрточками. Итого для количества сочетаний с повторениями мы имеем выражение
121 | $${n+k-1 \choose n} = {n+k-1\choose k - 1}$$
122 |
123 | \begin{exercise}
124 | Докажите, что существует $2^{n-1}$ способов представить число $n$ в виде суммы ненулевых слагаемых. Задача довольно сложная, поэтому дам некоторые наводки. Вначале следует разобрать случай, когда имеется ровно $k$ слагаемых. Подход здесь может быть аналогичным задаче с булочками выше, но надо учитывать то, что чтобы слагаемые были ненулевыми, мы не можем поставить подряд две черты, не поставив между ними кружок. Способов сделать это $n-1\choose k -1$ (докажите!). Отсюда уже довольно легко выводится и результат первоначальной задачи.
125 | \end{exercise}
126 |
--------------------------------------------------------------------------------
/naturals-counting.tex:
--------------------------------------------------------------------------------
1 | \section{Позиционные системы счисления}
2 |
3 | После того как мы определили понятие натурального числа, встаёт вопрос о том, как натуральные числа записывать. Пока мы ввели только символы 0, 1, 2, 3 и 4 для нескольких чисел. Мы могли бы продолжить процесс и дальше (пока продолжим этот ряд последовательно символами 5, 6, 7, 8, 9, A), однако довольно быстро возникает проблема: множество $\mathbb{N}$ бесконечное, и соответственно символов нам потребуется бесконечно много, что, видимо, невозможно. Нам нужен способ, который позволит записывать любое натуральные число используя конечное число символов.
4 |
5 | Пусть у нас есть некоторое число $n$, которое надо записать. Выберем некоторое произвольное $b > 0$, которое будем называть основанием нашей системы счисления и поделим одно на другое с остатком:
6 | \begin{equation}\label{eq:n0}
7 | n = q_0b + r_0
8 | \end{equation}
9 | Здесь $r_0 < b$ и $q_0 < n$. Поделим теперь на $b$ с остатком значение $q_0$: $$q_0 = q_1b + r_1$$ и подставим это выражение в \eqref{eq:n0}:
10 | \begin{equation}\label{eq:n1}
11 | n = (q_1b + r_1)b + r_0 = q_1b^2 + r_1b + r_0
12 | \end{equation}
13 |
14 | Аналогично можно представить $q_1 = q_2b + r_2$ подставив его в \eqref{eq:n1}, затем $q_2$, $q_3$ и так далее. Легко увидеть, что последовательность $\{q_i\}$ с каждым следующим элементом убывает, и, стало быть, в какой-то момент найдётся такое $k$, что $q_k = 0$. На этом процесс прекратится и мы получим такое выражение для $n$:
15 | \begin{equation}\label{eq:nk}
16 | n = r_kb^k + r_{k-1}b^{k-1} +\ldots + r_1b + r_0
17 | \end{equation}
18 |
19 | В этом выражении важно то, что каждое из значений $r_i$ оказывается меньше чем $b$, и при этом набора $\{r_i\}$ вполне достаточно для того, чтобы однозначно идентифицировать любое число. В этом и заключается основная идея позиционных систем счисления. Число $b$ определяет количество символов, необходимых для представления числа в системе с основанием $b$.
20 |
21 | В компьютерах применяется так называемая двоичная система счисления, в которой $b=2$ и используются лишь два символа для записи чисел: 0 и 1. Это обусловлено тем, что на физическом уровне в вычислительных системах довольно просто отличить два принципиально различных состояния друг от друга: есть напряжение в проводе/нет напряжения, луч отражается от диска под большим углом/под маленьким, сектор на диске намагничен/не намагничен. И так далее. Возможно, конечно, и более детальное различение физических систем, например мы могли бы различать не просто наличие напряжения, но и его величину: слабое оно или сильное в дополнение к тому, если ли оно вообще. В этом случае $b$ было бы равно трём, и иногда это действительно используется, но технически это часто осуществляется сложнее, поэтому почти всегда используется $b=2$.
22 |
23 | Рассмотрим пример. Как представить число $A$ в двоичной системе? (Напомню, что за $A$ мы обозначили число, следующее за числом 9). Проделывая процедуру с делением, описанную в начале параграфа, мы приходим к записи
24 | $$A = 1\cdot 2^3 + 0\cdot 2^2 + 1\cdot 2 + 0$$
25 | Здесь $r_3 = 1, r_2 = 0, r_1 = 1, r_0 = 0$. Можно кратко записать это как упорядоченный набор: $(1, 0, 1, 0)$, или же даже ещё короче, опустив скобки и запятые: 1010. Это и есть двоичное представления числа A. Чтобы не путать системы счисления, удобно также обозначать основание рядом с числом. В нашем случае получится $1010_2$. Впрочем, иногда нам будет удобно пользоваться и записью $(1, 0, 1, 0)_2$, так что следует иметь её ввиду, по крайней мере в течение ближайших нескольких параграфов. Количество символов, необходимых для представления числа, мы будем называть разрядностью, а выражение $r_ib^i$ $i$-ым разрядом. Иногда нам будет удобно считать, что число имеет больше разрядов чем необходимо, тогда старшие разряды будут иметь значение 0. Таким образом число $1010_2$ можно было бы эквивалентно записать как $00001010_2$. Потенциально мы можем считать, что слева в записи числа стоит бесконечное число нулей~--- это соображение часто упрощает рассуждения и мы будем пользоваться им ниже.
26 |
27 | В повседневной жизни чаще всего применяется десятичная система счисления, в которой $b=A$ и помимо 0 и 1 используются также символы 2, 3, 4, 5, 6, 7, 8, 9. Рассмотрим, для примера, как представить число $10011001_2$ в десятичной системе счисления. Повторяя ещё раз процедуру деления с остатком, получаем:
28 | $$10011001_2 = 1\cdot A^2 + 5\cdot A + 3 = 153_A$$
29 |
30 | Рассматривая этот пример, у вас могут возникнуть сомнения по поводу того, как я это вычислил. Ответ тут очень простой: я использовал инженерный калькулятор, который умеет работать с разными системами счисления. Впрочем, даже без калькулятора можно было бы удостовериться в верности данного выражения. Самый простой способ поделить $a$ на $b$ с остатком заключается в многократном вычитании $b$ из $a$ до тех пор, пока результат не окажется меньше $b$. Этот способ легко понять, но он крайне неэффективен: для его реализации вам потребуется уже не калькулятор, а полноценный компьютер. Тем не менее вычислить это возможно. Пока мы остановимся на этом способе и на самом факте того, что это можно как-то вычислить, а в следующем параграфе я продемонстрирую более эффективный способ деления с остатком, который позволит провести все вычисления используя лишь ручку и клочок бумажки.
31 |
32 | Везде далее, если не будет оговорено обратное, мы будем использовать десятичную систему счисления, при этом обозначать её мы не будем никак специально, то есть вместо $123_{10}$ мы будем ограничиваться записью $123$.
33 |
34 | В качестве последнего примера рассмотрим шестнадцатеричную систему счисления ($b=16$), часто используемую программистами. В ней помимо символов десятичной системы применяются также символы $A, B, C, D, E, F$. Рассмотрим пример того, как можно понять десятичное значение числа в шестнадцатеричной записи:
35 | $$ABF_{16} = A\cdot 16^2 + B\cdot 16 + F = 10\cdot 256 + 11 \cdot + 15 = 2751$$
36 |
37 | Причина, по которой программисты любят шестнадцатеричную систему счисления, заключается в том, что она очень легко переводится в двоичную систему счисления и обратно. По сути для этого надо знать лишь представление в двоичной системе 16-ти цифр. Для примера выше мы уже видели, что $A_{16} = 1010_2$, также легко увидеть, что $B_{16} = 1011_2$ и $F_{16} = 1111_2$. Чтобы получить отсюда двоичную запись, достаточно объединить двоичные записи для отдельных шестнадцатеричных цифр: $$ABF_{16} = 1010\:1011\:1111_2$$
38 |
39 | Возможность такого представления основывается на следующей несложной общей теореме (сложнее понять формулировку, чем доказать), доказательство которой мы оставим в качестве упражнения читателю (впрочем, я бы пока рекомендовал отложить это упражнение и вернуться к нему после прочтения следующего параграфа):
40 | \begin{thm}
41 | Записи в системах счисления с основаниями $b$ и $c = b^k$ связаны следующим образом: $$(d_{kn},\dots, d_0)_b = ((d_{kn}, \ldots, d_{(k-1)n + 1})_b, \dots, (d_{2k}, \dots, d_{k+1})_b , (d_k, \dots, d_0)_b)_c$$
42 | \end{thm}
43 |
44 | В компьютерной памяти чаще всего двоичные значения 0 и 1 (их называют битами) объединены в группы по восемь бит (число восемь берётся из соображений, близких к только что упомянутой теореме). Такая группа бит называется байтом. Во многих системах один байт представляет собой один печатный символ. Если же рассматривать байт как число, что его значения могут варьироваться от 0 до 255 (всего 256 различных значений), и таким образом каждому символу можно сопоставить некоторое числовое значение. Всего у нас может быть максимум 256 символов.
45 |
46 | Если рассматривать не один, а сразу последовательность байт, то их можно считать числом, записанном в 256-ричной системе счисления. Это часто применяется в компьютерах для записи больших чисел. Если рассматривать два байта, то их максимальным значением может быть 65535. Если считать за символ не один байт, а два байта, то это значит, что наша система сможет поддерживать 65535 символов, что хватит даже китайцам с несколькими их диалектами, Египтянам, латинянам и евреям. Если нам и этого мало, то можно рассматривать четырёхбайтные значения. В этом случае мы сможем записать число 4294967295, то есть четыре байта позволяют записывать девятизначные числа и некоторые десятизначные. С точки зрения символов мы сможем уместить сюда не только все распространённые в мире языки, но и все вымершие языки, смайлики, музыкальные обозначения, математические знаки, несколько вариантов древней клинописи и так далее. Если нам и этого не хватит, то можно взять 8-байтные целые, которые позволят работать с 19-значными числами.
47 |
48 | Если мы будет рассматривать текст как последовательность символов, то мы также эту последовательность можем интерпретировать как некоторое большое число. Например, для кодирования английского текста чаще всего применяется стандарт ASCII, устанавливающий какой букве соответствует какое число. Букве F в нём соответствует число 70, а букве o~--- 111 (ASCII использует только 1 байт для кодирования символов). Как число слово Foo в ASCII можно представить следующим образом:
49 | $$Foo = 70 \cdot 256^2 + 111 \cdot 256 + 111 = 4587520 + 28416 + 111 = 4616047$$
50 |
51 | Подобное отношение к тексту позволяет применять к нему математические функции. Например, многие криптосистемы представляют собой лишь некоторые арифметические действия над числами и даже не догадываются о том, что пользователь рассматривает данные как текст. Самым ярким примером является криптосистема RSA, на которой сейчас построена значительная доля всей криптографии, используемой на практике, и которую мы рассмотрим в четвёртой главе. Используя действия над числами можно также сжимать данные, чтобы они занимали меньше места. Этот подход называется арифметическим кодированием и мы также рассмотрим его в четвёртой главе. В четвёртом параграфе этой главы мы будем рассматривать математические формулы как обычный текст, который в свою очередь мы будем рассматривать как обычное число. Довольно неожиданным образом это позволит сделать нам важные фундаментальные выводы относительно всей математики в целом.
52 |
53 |
--------------------------------------------------------------------------------
/sets-history.tex:
--------------------------------------------------------------------------------
1 | \section{История}
2 |
3 | Изложенный выше строгий аксиоматический подход применялся на самом деле далеко не всегда в математике. Первым его применил Евклид в своей книге «Начала» около 300 года до нашей эры, где сформулировал пять аксиом, из которых выводил все остальные геометрические теоремы. Формулировались эти аксиомы следующим образом (не точно, но нам в дальнейшем будет удобно ссылаться на них в этом виде; на деле аксиомы Евклида дошли до нас в различных формулировках):
4 |
5 | 1. Через любые две точки возможно провести прямую, причём только одну.
6 |
7 | 2. Из точки, не лежащей на прямой, возможно опустить на неё перпендикуляр.
8 |
9 | 3. Пусть задана прямая и отмеченная на ней точка, а так же некоторый отрезок; тогда от этой точки можно отмерить ещё две точки на прямой ровно на расстоянии заданного отрезка.
10 |
11 | 4. Пусть задана точка и отрезок; тогда можно задать окружность с центром в этой точке и с радиусом, равным данному отрезку.
12 |
13 | 5. Пусть есть прямая и точка на ней не лежащая; тогда через эту точку возможно провести прямую, параллельную заданной, и притом только одну.
14 |
15 | Конечно Евклид не формулировал свои теоремы так строго как это делали выше мы, и не использовал никакого специального логического формализма. Тем не менее он был первым, кто вообще подошёл к математике строго. До него геометрия была набором разрозненных фактов слабо связанных между собой и не имела единого начала. Проводились строгие доказательства, но опирались эти доказательства часто на довольно интуитивные представления, а не на какие-то строго доказанные из аксиом утверждения.
16 |
17 | Надо сказать, что сама аксиоматика Евклида по нынешним меркам была довольно отвратительна. Во-первых, конечно, она была не полна (и не могла быть полна, поскольку натуральные числа возможно определить геометрически). В первоначальной формулировке геометрии Евклида было невозможно доказать следующее простое утверждение: «Пусть есть две окружности, центры которых располагаются ближе друг к другу, чем их удвоенные радиусы. Пересекаются ли эти окружности?». Утверждение очевидное, если нарисовать чертёж, но аксиомы Евклида его доказать не позволяют.
18 |
19 | Аксиомы Евклида позднее многократно расширялись, и наиболее полное расширение аксиом Евклида ныне принадлежит Гильберту и состоит из 20 аксиом. Впрочем, современная геометрия целиком стоит на фундаменте теории множеств и векторной алгебры, и то что раньше называлось аксиомами в новых реалиях является простенькими теоремами, которые можно доказать.
20 |
21 | Из пяти аксиом Евклида последняя пятая вызывала большие сомнения. «Параллельность» означает отсутствие пересечения где-либо, в том числе «далеко-далеко». Если внимательно присмотреться, то пятая аксиома является единственной, которая неявно опирается на представление о бесконечности: как бы далеко мы не ушли от первоначальной точки, мы никогда не увидим пересечения прямых. Но поскольку прямая — это объект бесконечный, то нам надо убедиться, что пересечения нет нигде в бесконечности.
22 |
23 | Сегодня понятие бесконечности довольно привычно всем в силу школьной программы и научной фантастики, но во времена Древней Греции понятие бесконечности было в новинку. Причём важно, что если сегодня мы принимаем формальный подход, где мы говорим о переменных и константах, а аксиомы — это просто формулы, сформированные по нашим правилам вывода, то в древние времена математики пытались описывать реальный мир. И если сегодня мы безоговорочно принимаем понятие прямой как объект бесконечной протяжённости, то древние греки пытались ответить на вопрос могут ли существовать такие объекты в реальности.
24 |
25 | По этой причине многие люди, да и сам Евклид, очень недолюбливали пятую аксиому. Сам Евклид в своих «Началах» откладывал использование пятой аксиомы до последнего, и первые 28 теорем доказаны без использования её. Та часть геометрии, которую возможно рассматривать без привлечения пятой аксиомы, получила позже название «абсолютной геометрии».
26 |
27 | Саму же пятую аксиому долгое время пытались доказать (и иногда опровергнуть) опираясь на первые четыре аксиомы. Успехов на этом поприще никто не добился.
28 |
29 | В 1829 году Лобачевский в своей работе «О началах геометрии» первым предположил, что на самом деле пятая аксиома скорее всего не может быть доказана вообще никаким образом из первых четырёх, и что в этом предположении возможно вместо пятой аксиомы принять противоположное утверждение: «Пусть есть прямая и точка на ней не лежащая; тогда через эту точку возможно провести любое количество прямых, параллельных заданной». Развивая геометрию, опираясь на альтернативной пятой аксиоме, он развил полноценную геометрическую теорию, правда он так и не смог доказать её непротиворечивость или независимость пятой аксиомы от первых четырёх. Сам Лобачевский также считал именно Евклидову геометрию «правильной», а свою же теорию он сам называл «воображаемой геометрией», хотя и видел в ней перспективы для практического применения.
30 |
31 | Первым доказал состоятельность геометрии Лобачевского итальянский математик Эудженио Бертрами в своей работе 1868 года. Модель, которая в России чаще всего носит название модели Клейна, выглядит как диск, в пределах которого и изображаются прямые:
32 |
33 | \includegraphics{klein.png}
34 |
35 | Эта модель предполагает, что наше пространство на самом деле как бы ограничено, и поэтому в силу именно ограниченности мы можем изобразить какое угодно количество прямых, не пересекающих заданную и проходящих через заданную точку. Единственный сложный вопрос в этой модели в измерении расстояния. При движении к краю окружности масштаб длин должен увеличиваться, чтобы модель удовлетворяла 3 и 4 аксиомам, и одно и то же расстояние в центре диска Клейна и на его краю будет выглядеть сильно по-разному.
36 |
37 | Эта модель интересна тем, что она целиком формулируется в терминах геометрии Евклида. То есть модель геометрии Лобачевского получается из непротиворечивости геометрии Евклида: если непротиворечива евклидова геометрия, то непротиворечивой окажется и геометрия Лобачевского, хотя обе они содержат противоречащую друг другу аксиому. Позже выяснилось, что геометрия Лобачевского является не только интересным теоретическим построением но имеет физический смысл: скорости в теории относительности Эйнштейна описываются как раз законами геометрии Лобачевского.
38 |
39 | Я к сожалению забыл называние и автора интересной книжки о вымышленном мире, который представлял собой шар в евклидовой геометрии, населённый людьми. Этот шар подчинялся следующему закону: чем ближе человек находился к границе шара, тем меньше он становился по размеру и тем большими для него оказывались расстояния. Эти вымышленные человечки проводили физические эксперименты, и таким образом выяснили, что их вселенная бесконечна и подчиняется законам геометрии Лобачевского. То что на самом деле они живут в евклидовом шаре с особыми свойствами они никаким образом понять не могли.
40 |
41 | Как подобный шар и подобные люди могут быть описаны математически мы увидим позже, но сама подобная интерпретация довольно интересна тем, что показывает ограниченность возможности познания: как эти сферические люди ни будут пытаться, они никогда не смогут выяснить что находится за пределами их шара и ничего не узнают о геометрии Евклида, которой на самом деле подчиняется их мир.
42 |
43 | Нам же этот пример с геометриями интересен прежде всего тем, что он является хорошей демонстрацией неполноты теории: в абсолютной геометрии утверждение пятой аксиомы является невыводимым, и его можно в результате принять как ещё одну аксиому, либо же можно принять как аксиому противоположное утверждение, и оно так же будет непротиворечиво.
44 |
45 | Но все сказанное до сих пор относилось лишь к геометрии. Аксиоматизация арифметики натуральных чисел происходила гораздо позднее, чем геометрии, и вплоть до XIX века манипуляции с натуральными числами была неформализованы, и далеко не все видели в такой формализации вообще необходимость. Математик Леопольд Кронекер говорил: «Бог создал натуральные числа, а всё прочее — дело рук человеческих». На сегодняшний день самой известной формализацией (после изложенной мной в этой главе) является система аксиом Пеано, изложенная им в 1889 году в его книге «Принципы арифметики представленные новым методом».
46 |
47 | Его аксиомы определяли множество натуральных чисел с помощью константы $0$ и операции инкремента $S$, однако как конкретно выглядят эти константы и операция на языке теории множеств не указывалось, а вместо этого формулировался ряд довольно косвенных свойств, которые были достаточны для определения арифметики:
48 |
49 | 1) Равенство чисел определялось как отношение эквивалентности.
50 |
51 | 2) Для любого $n\in\mathbb{N}$ формула $S(n) = 0$ определялась как ложная.
52 |
53 | 3) $S$ объявлялась инъективной функцией.
54 |
55 | 4) Оговаривался принцип индукции: если $\phi(0)$ истинно и $\forall n\in\mathbb{N}, \phi(n)\rightarrow \phi(S(n))$, то $\forall n\in\mathbb{N}, \phi(n)$.
56 |
57 | Операции сложения и умножения чисел определялись следующим образом:
58 |
59 | 5) $a+0 = a$
60 |
61 | 6) $a+S(b) = S(a + b)$
62 |
63 | 7) $a0 = 0$
64 |
65 | 8) $aS(b) = ab + a$
66 |
67 | Этих аксиом и определений оказывалось достаточным для доказательства всех базовых арифметических свойств.
68 |
69 | {\bfseries Упражнение.} Докажите из аксиом Пеано коммутативность умножения $ab=ba$.
70 |
71 | Долгое время производились попытки доказать непротиворечивость и полноту аксиом Пеано. Эти попытки были окончательно разбиты в 1931 году, когда Гёдель представил свои теоремы о неполноте. Здесь надо сказать, что Гёдель доказывал теоремы несколько не в том виде и несколько не так, как я представил их в прошлом параграфе. Он был нацелен именно на аксиомы Пеано и использовал в основном аппарат математической логики, а не теории множеств, как это сделал я. Впрочем, у нас не стояло задачи сформулировать максимально строго теорему Гёделя, а лишь понять её следствия, существенные для большинства математиков.
72 |
73 | Для определения натуральных чисел аксиомы Пеано сегодня полностью вытеснены более удобными определениями ZFC. Определение сложения и умножения аксиом Пеано тем не менее осталось довольно полезным, поскольку оно обобщается, и с помощью них можно удобно определять операции над числами более общего вида, так называемыми ординалами.
74 |
75 | ZFC сейчас является базой для 99\% всей существующей математики, хотя детали аксиом и правил вывода чаще всего не используются и большинство математиков с ними не знакомы. Вообще основания математики в виде логики и теории множеств существуют довольно отдельно от остальной математики. Терминология теории множеств используется просто как удобный язык, а из логики математики вообще редко прибегают к чему-либо.
76 |
77 | Изначально математическая логика развивалась больше как интересное философское направление, позже она постепенно прилаживалась для формализации аксиоматических систем, с развитием компьютерной техники были надежды, что она может стать основой для искусственного интеллекта, но на деле эти надежды оказались сильно преувеличенными. Сейчас математическая логика живёт в значительной степени отдельно от остальной математики и какие-то логические результаты лишь изредка вырываются в мир «большой математики». Пожалуй сколько-нибудь значимыми для широких кругов математиков являются лишь рассмотренные в прошлом параграфе теоремы Гёделя, а так же теорема Лёвенгейма-Скулема, которую мы сможем понять лишь позже. Впрочем, даже эти результаты мало кому известны и используются главным образом не сами они, а их следствия.
78 |
--------------------------------------------------------------------------------
/logic-functions.tex:
--------------------------------------------------------------------------------
1 | \section{Представление функций}
2 |
3 | В прошлом параграфе мы определили с помощью таблиц истинности пять логических операций. Нам никто не мешает определить и другие операции, задав их таблицу истинности, причём им не обязательно иметь один или два параметра — можно и больше, никто не запрещает. Для примера рассмотрим операцию (удобней, наверное, называть её функцией) $f$ с тремя параметрами, описанную в таблице 1.4. Записывать эту операцию мы будем как $f(a, b, c)$. По таблице легко находить её значения при конкретных параметрах, например: $f(0,0,1) = 0$ или $f(1,0,1) = 1$.
4 |
5 | \begin{table}[h]
6 | \centering
7 | \begin{tabular}{ccc|c}
8 | $a$&$b$&$c$&$f$\\
9 | \hline
10 | 0&0&0&1\\
11 | 0&0&1&0\\
12 | 0&1&0&1\\
13 | 0&1&1&0\\
14 | 1&0&0&1\\
15 | 1&0&1&1\\
16 | 1&1&0&0\\
17 | 1&1&1&0
18 | \end{tabular}
19 | \caption{Представление булевой функции с тремя параметрами}
20 | \end{table}
21 |
22 | Какой физический смысл данной функции/операции? Пока никакого — мы делаем то, что мы делаем, просто потому, что мы можем это делать. В математике часто так поступают, а применение это всё находит позже.
23 |
24 | Теперь давайте поймём, как определить эту же самую функцию, выразив её через уже известные нам логические операции.
25 |
26 | Для начала рассмотрим более простую функцию $g_0$, которая имеет значение $1$ только при наборе параметров $g_0(1, 0, 1)$, а во всех остальных случаях её значением будет $0$. Легко догадаться, что такая функция в точности представляется как: $$g_0(a, b, c) = a\land \neg b \land c.$$ Рассмотрим также функцию $g_1(a, b, c)$, которая принимает значение $1$ только на наборе аргументов $g_1(0, 0, 0)$. Её, соответственно, можно представить как: $$g_1(a, b, c) = \neg a \land \neg b \land \neg c.$$
27 |
28 | Теперь рассмотрим функцию $h$, которая принимает значение~$1$ на обоих наборах параметров $(1, 0, 1)$ и $(0, 0, 0)$. Это можно сформулировать так: значение функции $h$ истинно, когда истинно значение хотя бы одной из функций $g_0$ и $g_1$. Сказанное дословно переносится на язык математической логики следующим образом: $$h(a, b, c) = g_0(a, b, c) \lor g_1(a, b, c).$$
29 |
30 | Подставив сюда выражения для $g_0$ и $g_1$, получаем: $$h(a, b, c) = (a\land \neg b \land c) \lor (\neg a \land \neg b \land \neg c).$$
31 |
32 | Продолжая рассуждать таким же образом, можно прийти и к выражению для функции $f$, заданной выше таблицей истинности: $$f(a, b, c) = (\neg a \land \neg b \land \neg c) \lor (\neg a \land b \land \neg c)\lor (a \land \neg b \land \neg c) \lor (a\land \neg b \land c). $$
33 |
34 | Легко видеть, как получается такое представление: мы просто перечисляем все строки таблицы истинности, в которых функция принимает значение $1$, соединяя параметры функции операцией И (если значение параметра $0$, то перед ним добавляем отрицание), а сами наборы, при которых функция истинна, соединяя операцией ИЛИ. То есть если у нас есть таблица истинности, всегда возможно особо не думая записать, чему эта функция равна, используя только операции И, ИЛИ и НЕ.
35 |
36 | Такая развёрнутая форма записи функций называется \term{дизъюнктивной нормальной формой} (ДНФ). Запоминать это не нужно — за пределами этого параграфа данный термин нам больше не понадобится. Суть такого представления заключается в том, что функция выражается как дизъюнкция (операция ИЛИ) некоторого количества конъюнктов (параметров функции, объединённых операцией И).
37 |
38 | Можно получить и другое представление, если вначале выразить по нашей схеме не саму функцию, а её отрицание:
39 | $$\neg f(a, b, c) = (\neg a \land \neg b \land c) \lor (\neg a \land b \land c) \lor (a\land b\land \neg c) \lor (a\land b \land c).$$
40 |
41 | Теперь можно взять отрицание этого выражения и, используя закон де Моргана, получить такое выражение:
42 | $$f(a, b, c) = (a \lor b \lor \neg c)\land(a\lor \neg b\lor \neg c)\land(\neg a\lor \neg b\lor c)\land(\neg a\lor\neg b\lor \neg c).$$
43 |
44 | Мы здесь фактически перевернули знаки $\land$ и $\lor$, а также ко~всем высказываниям применили операцию отрицания — это, по сути, как раз и есть закон де Моргана. Проведите эти рассуждения подробнее самостоятельно.
45 |
46 | Новую форму записи также легко получить по таблице истинности, особо не задумываясь над смыслом операции — мы делаем всё то же самое, что и в прошлый раз, но только на этот раз перечисляем не единицы таблицы, а нули, и везде подменяем И на ИЛИ и наоборот, а вхождения параметров в нашу формулу снабжаем отрицанием.
47 |
48 | Такая форма записи называется \term{конъюнктивной нормальной формой} (КНФ), и представляет она из себя конъюнкцию (операция И) некоторого количества дизъюнктов (параметров функции, объединённых операцией ИЛИ).
49 |
50 | В случае функции $f$ оба подхода оказались практически одинаковыми. В разных случаях, однако, какой-то из них может оказаться короче --- в зависимости от того, какие значения наша функция принимает чаще.
51 |
52 | Рассмотрим импликацию:
53 |
54 | \begin{table}[h]
55 | \centering
56 | \begin{tabular}{cc|c}
57 | $a$&$b$&$a\rightarrow b$\\
58 | \hline
59 | 0&0&1 \\
60 | 0&1&1 \\
61 | 1&0&0 \\
62 | 1&1&1
63 | \end{tabular}
64 | \caption{Таблица истинности для импликации}
65 | \end{table}
66 |
67 | Для этой операции описанные нами подходы представления функции дают следующие результаты:
68 |
69 | \subparagraph{ДНФ:} $a \rightarrow b = (\neg a\land \neg b)\lor(\neg a \land b)\lor(a\land b)$
70 |
71 | \subparagraph{КНФ:} $a\rightarrow b = \neg a \lor b$
72 |
73 | \subparagraph{} КНФ здесь оказывается удобнее. Также этот подход можно рассматривать как альтернативу методикам доказательств, представленных в первом параграфе.
74 |
75 | \begin{exercise} Запишите КНФ и ДНФ для операций «исключающее ИЛИ» и «эквиваленция».\end{exercise}
76 |
77 | Вообще же следовать каждый раз именно такой схеме чаще всего оказывается расточительно. Если посмотреть вни\-ма\-тельнее на таблицу истинности для $f$, то можно заметить, что в случае истинности $a$ функция принимает истинное значение при ложном $b$, и значение $c$ там уже не важно. При ложности же $a$ нам важно лишь значение $c$ и не важно $b$. С учётом этих наблюдений функция $f$ может быть записана совсем просто: $$f(a, b, c) = (\neg a\land \neg c) \lor (a \land \neg b)$$
78 |
79 | Получается гораздо красивее, чем было. Обычно в курсах логики значительная часть времени посвящается как раз упрощению формул. Мы могли бы рассмотреть много примеров и типичные приёмы, но вряд ли это окажется сильно полезно. Если вам когда-либо придётся заниматься подобной ерундой (что сомнительно), могу лишь посоветовать подходить к задаче творчески, а не искать универсальных подходов.
80 |
81 | Нас же сейчас из всего сказанного больше интересует принципиальная возможность построения КНФ и ДНФ для произвольной формулы. Из наших рассуждений непосредственно следует такая простенькая теорема:
82 |
83 | \begin{thm}Любая логическая функция может быть представлена с помощью операций <<И>>, <<ИЛИ>> и <<НЕ>>.\end{thm}
84 |
85 | Данные операции можно называть базисом нашей логической системы (неформально говоря, базис~--- это некий набор компонентов, из которых можно собрать любой другой объект, оговорённый в нашей системе). Однако базис этот не единственный, можно придумать и другие наборы функций, через которые \mbox{также} можно будет выразить любую логическую операцию. Примером служит следующая теорема:
86 |
87 | \begin{thm}Любая логическая функция может быть представлена с помощью операций <<И>>, <<исключающее ИЛИ>> и константы 1.\end{thm}
88 |
89 | \begin{proof}Операции ИЛИ и НЕ можно представить через $\land$, $\oplus$ и $1$:
90 |
91 | Представление ИЛИ: $a\lor b = a \oplus b \oplus (a\land b)$
92 |
93 | Представление НЕ: $\neg a = a \oplus 1$
94 |
95 | Ну а поскольку через функции ИЛИ, НЕ и И мы можем представить любую функцию, то отсюда понятно, что и через И, XOR и 1 мы также можем представить любую функцию.\end{proof}
96 |
97 | Таким образом $\land$, $\oplus$ и $1$ также являются базисом нашей логической системы, который часто называется базисом Жегалкина. При работе в базисе Жегалкина оказываются удобными следующие соглашения о записи и названии логических операций:
98 |
99 | \begin{enumerate}
100 | \item $a\land b$ записывается просто как $ab$ и называется умножением,
101 | \item $a \oplus b$ записывается как $a + b$ и называется сложением.
102 | \end{enumerate}
103 |
104 | С этими соглашениями основные свойства логических операций будут выглядеть так:
105 |
106 | \begin{enumerate}
107 | \item $a\lor b=a + b +ab$,
108 | \item $\neg a = a + 1$,
109 | \item $a(b+c) = ab + ac$,
110 | \item $aa = a$,
111 | \item $a + a = 0$.
112 | \end{enumerate}
113 |
114 | Эти формулы легко запоминаются и с ними оказывается очень просто работать (позже мы увидим, что такая запись и названия операций имеют и более глубинный смысл). Для примера выразим в базисе Жегалкина, следуя нашим соглашениям, импликацию: $$a \rightarrow b = \neg a \lor b = (1 + a) + b + b(1 + a) = 1 + a + b + b + ab = 1 + a + ab$$
115 |
116 | Здесь мы сократили $b+b$.
117 |
118 | \begin{exercise} Выведите формулу для эквиваленции: $$a \leftrightarrow b = 1 + a + b$$\end{exercise}
119 |
120 | \begin{exercise} Выведите формулу для упомянутой ранее функции $f$.\end{exercise}
121 |
122 | \begin{exercise} Докажите, что любая логическая функция может быть выражена с помощью лишь одной операции «штрих Шеффера», которая определяется как $a|b = \neg(a\land b) = 1 + ab$. (Использование значений $1$ или $0$ в записи тоже недопустимо.)\end{exercise}
123 |
124 | Часто возникает и обратная задача --- зная какие-то свойства логической функции, определить её значения истинности в таблице. В следующем параграфе мы рассмотрим большую и сложную задачу, на первый взгляд с формальной логикой никак не связанную, которая решается как раз путём построения логической функции, удовлетворяющей заданным критериям. Пока же, как простой пример, мы построим таблицу истинности для импликации --- я уже упоминал, что она в значительной степени является следствием не каких-то логических соображений, а скорее формальной нужды. Сейчас мы уже готовы это продемонстрировать. Значения импликации, если рассматривать её как логическое следствие, для истинной посылки очевидны:
125 |
126 | \begin{table}[h]
127 | \centering
128 | \begin{tabular}{cc|c}
129 | $a$ & $b$ & $a \to b$ \\
130 | \hline
131 | 0 & 0 & ? \\
132 | 0 & 1 & ? \\
133 | 1 & 0 & 0 \\
134 | 1 & 1 & 1
135 | \end{tabular}
136 | \caption{Неполная таблица истинности для импликации}
137 | \end{table}
138 |
139 | Чтобы определить значения в оставшихся ячейках, обозначенных символом <>>, необходимо рассмотреть, какими свойствами должно обладать логическое следствие, и проверить, какие ограничения эти свойства накладывают на таблицу истинности. Самое логичное требование к импликации, которое мы уже приво\-ди\-ли в первом параграфе --- это требование транзитивности: \mbox{<<Если} из $a$ следует $b$ и из $b$ следует $c$, то из $a$ следует $c$>>. Формально это свойство записывается так: $$((a\to b) \land (b \to c)) \to (a\to c).$$
140 |
141 | Если подставить в это выражение вместо $a$ и $b$ истину ($1$), а вместо $c$ --- ложь ($0$), то, вычисляя (как в первом параграфе) значение истинности для логических связок, нам известных, мы сведём свойство транзитивности к следствию $0 \to 0$, и это выражение обязано быть истинным, если мы хотим, чтобы свойство транзитивности выполнялось для импликации. Если теперь, зная, что $(0 \to 0) = 1$, подставить вместо $a$ и $c$ истину, а вместо $b$ ложь, то мы получим, что также должно быть истинным и выражение $0 \to 1$. Это завершает построение таблицы истинности для импликации. Таким образом, её таблица истинности --- это в некотором смысле вынужденная таблица, в противном случае импликация не удовлетворяла бы тем свойствам, которые мы ожидаем от операции логического следствия.
142 |
--------------------------------------------------------------------------------
/sets-functions.tex:
--------------------------------------------------------------------------------
1 | \section{Функции}
2 |
3 | {\bfseries Определение.} {\slshape Функцией}, или {\slshape отображением}, из множества $A$ во множество $B$ (обозначение $f:A\to B$) называется множество упорядоченных пар $f\subset A\times B$, таких что для любого $a\in A$ найдётся единственный $b\in B$, такой что $(a, b) \in f$.
4 |
5 | Если $(a, b) \in f$, то это часто записывается как $f(a) = b$ или как $f:a \mapsto b$. Множество всех функций $\{f: A\to B\}$ обозначается как $B^A$.
6 |
7 | {\bfseries Определение.} Если $f:A \to B$, то множество $A$ называется {\slshape областью определения} функции $f$ и обозначается как $\mathrm{Dom} f$.
8 |
9 | Область определения может представлять собой декартово произведение нескольких множеств. В этом случае говорят, что функция является {\slshape функцией нескольких переменных}, где каждое множество соответствует отдельной переменной.
10 |
11 | {\bfseries Определение.} Если $f:A \to B$, то множество $B$ называется {\slshape областью значений} функции $f$ и обозначается как $\mathrm{Codom} f$.
12 |
13 | {\bfseries Пример.} Логические операции И, ИЛИ, Исключающее ИЛИ, импликация и эквиваленция рассматриваемые нами ранее, являются функциями $f:B\times B \to B$ (это всё функции нескольких переменных), где $B = \{0, 1\}$. Функция НЕ является функцией типа $f: B \to B$.
14 |
15 | {\bfseries Пример.} Объединение и пересечение множеств являются функциями типа $f: S \times S \to S$, где $S$ — некоторое множество, состоящее из других множеств.
16 |
17 | {\bfseries Пример.} Любой предикат $F$, заданный на некотором множестве $S$ является функцией типа $F: S \to B$, где $B = \{0, 1\}$.
18 |
19 | Если говорить о чистой интуиции, то понятие функции имеет две основных трактовки. Первая — это некоторый объект, который по заданному элементу множества $A$ каким-то образом выдаёт какой-то элемент множества $B$. Иногда он берет его из таблицы, иногда есть какая-то формула, по которой можно этот самый $b$ вычислить, иногда какая-то написанная на компьютере программа, которая по $a$ даёт $b$. Если у нас есть некоторое физическое устройство (например, чёрный ящик) с клавиатурой, свалившееся из космоса, которое при наборе какого-то числа даёт в ответ другое число, и мы не знаем как именно оно это делает — это все равно тоже функция.
20 |
21 | Мы можем привести множество примеров функций в быту. Если $A$ — множество женатых мужчин, а $B$ — замужних женщин, то функция, сопоставляющая каждому мужчине в соответствие его жену, является функцией вида $f: A\to B$. Если у нас например есть база данных, в которую мы можем вводить имена мужчин, а она отдаёт нам в ответ имена их жён, то эта база данных как раз и будет реализовывать данную функцию.
22 |
23 | Можно рассмотреть множество рабочих дней, прошедших от начала торгов на Нью-Йоркской фондовой бирже, и каждому дню сопоставить лидеров роста и падения. Если дни обозначить за $D$, а компании за $C$, то такое сопоставление будет функцией вида $D\to C\times C$.
24 |
25 | В дальнейшем мы будем временами приводить примеры из кодирования и криптографии. Шифрование и кодирование — это тоже функции. Если $T$ — множество всех возможных текстов, а $B^\infty$ — множество последовательностей нулей и единиц (как это принято в компьютере на низком уровне), кодирование — это функция $f:T\to B^\infty$. Задачей теории кодирования является построение такой функции $f$, чтобы она обладала какими-то полезными свойствами, например чтобы запись была максимально краткой, либо чтобы она была устойчива к ошибкам, и в случае каких-то сбоев можно было восстановить весь текст и по фрагменту кодировки.
26 |
27 | Если $K$ — множество ключей, а $C$ — множество шифровок, то шифрование сводится к реализации функции шифрования $E: T\times K \to C$ и дешифрования $D: C\times K \to T$, которые должны быть выбраны таким образом, чтобы не зная ключа $k\in K$ нельзя было восстановить исходный текст $t \in T$ по шифру $c \in C$.
28 |
29 | Если $A$ — множество карточных мастей, а $B$ — множество достоинств карт, то функция, которая ставит каждой карте в соответствие её достоинство, имеет вид $f: A\times B \to B$ и может быть записана формулой как $f: (a, b) \mapsto b$.
30 |
31 | Второй интуитивный смысл, который часто имеют функции — это установление соответствия между различными объектами, которое говорит нам что-либо о свойствах этих объектов. Пусть, например, множество $A$ состоит из упорядоченных элементов $a> применения перестановок может показаться непривычным, но это стандартная форма записи функций, как мы узнали во второй главе. Вот так например можно получить позицию единицы в искомой перестановке:
12 |
13 | $$(\pi\circ\rho) (1) = \pi(\rho(1)) = \pi(5) = 2$$
14 |
15 | Хотя для композиции функций принято обозначение $\pi\circ\rho$, для умножения перестановок мы будем опускать символ $\circ$ и писать просто $\pi\rho$.
16 |
17 | Из того, что перестановка~--- это функция, сразу следует ассоциативность перемножения перестановок (см.~\S2.4): для любых $\rho, \pi, \delta$ мы имеем тождество
18 | $$(\rho\pi)\delta = \rho(\pi\delta) = \rho\pi\delta$$
19 |
20 | \begin{exercise}
21 | Покажите, что умножение перестановок не коммутативно, то есть что в общем случае $\rho\pi \not= \pi\rho$
22 | \end{exercise}
23 |
24 | \begin{exercise}
25 | Придумайте сами каких-нибудь перестановок и поэкспериментируйте с ними.
26 | \end{exercise}
27 |
28 | \begin{thm}\label{thm:perminv}
29 | $(\rho\pi)^{-1} = \pi^{-1}\rho^{-1}$
30 | \end{thm}
31 | \begin{proof}
32 | $$(\rho\pi)(\pi^{-1}\rho^{-1}) = \rho(\pi\pi^{-1})\rho^{-1} = \rho\rho^{-1} = 1_{[n]}$$
33 | \end{proof}
34 |
35 | Если вам здесь что-то стало не очень понятно или сложно~--- перечитайте~\S2.4, все обозначения и термины являются непосредственным отражением того, что обсуждалось когда мы говорили об обыкновенных функциях.
36 |
37 | Подсчитаем мощность множества $S_n$. На первую позицию мы можем поставить один из $n$ доступных нам элементов. На вторую позицию мы можем выбрать один из оставшихся $n-1$ элементов (итого способов расставить первые два элемента $n(n-1)$). Затем на третью позицию мы можем поставить один из $n-2$ элементов (итого имеем $n(n-1)(n-2)$ расстановок). Продолжая так до конца, на последнюю $n$-ю позицию мы ставим один оставшийся элемент. Для формулировки полученного результата полезно следующее обозначение:
38 |
39 | \begin{definition}
40 | Факториалом $n!$ называется величина $$n(n-1)(n-2)\ldots 2\cdot 1$$
41 | Так же считаем, что $0! = 1$.
42 | \end{definition}
43 |
44 | Значение для $0!$ оправдано с той точки зрения, что на пустом множестве формально можно задать единственную функцию, которая так же будет биекцией (хоть она ничего и не отображает, формально она есть; см. аналогию с $n^0$ в~\S1).
45 |
46 | Рассуждения, приведенные выше, теперь можно сформулировать таким образом:
47 |
48 | \begin{thm}\label{thm:symgrpord}
49 | $|S_n| = n!$
50 | \end{thm}
51 |
52 | \begin{exercise}
53 | Докажите, что при разложении на простые множители значения $n!$, множитель $p$ встретится ровно
54 | $$\sum_{i=1}^\infty \left\lfloor {n \over p^i} \right\rfloor$$
55 | раз, где как обычно через $\lfloor {a\over b}\rfloor$ обозначается целая часть от деления $a$ на $b$.
56 | \end{exercise}
57 |
58 | Помимо представления перестановки в виде строки, их удобно рассматривать в виде \term{циклов}. Рассмотрим опять перестановку $\rho = 45231$. Мы видим, что при этой перестановке 1 переходит на позицию 5, 5 переходит на позицию 2, 2 на позицию 3, 3 на 4, которая переходит опять на позицию 1. Эти переходы записываются строкой чисел в круглых скобках: $\rho = (15234)$. Здесь за каждым числом $x$ следует число $\rho(x)$. Последнее значение переходит на позицию, обозначенную первым числом, что замыкает цикл.
59 |
60 | Рассмотрим теперь перестановку $\pi = 35124$. Здесь $\pi(1) = 3$ и $\pi(3) = 1$, что даёт цикл $(13)$. Сюда, однако, вошли не все элементы множества. Рассмотрим оставшиеся элементы: $\pi(2) = 4$, $\pi(4) = 5$, $\pi(5) = 2$, что даёт цикл $(245)$. Итого перестановка представляется в виде произведения двух циклов: $\pi = (13)(245)$.
61 |
62 | Количество элементов в цикле мы будем называть его длиной. Если какой-то элемент $x$ отображается сам в себя (то есть $\pi(x) = x$), то мы будем говорить, что перестановка имеет цикл длины 1 $(x)$.
63 |
64 | \begin{exercise}
65 | Пусть $\sigma$~--- некоторая перестановка и $(x y \ldots z)$~--- некоторый цикл. Докажите, что
66 | $$\sigma(x y \ldots z)\sigma^{-1} = (\sigma x \:\: \sigma y \ldots \sigma z)$$
67 | (Подсказка: рассмотрите как эта перестановка действует на элемент $\sigma x$).
68 | \end{exercise}
69 |
70 | \begin{definition}
71 | \term{Типом перестановки} называется набор $(c_1, c_2, \ldots, c_n)$ , где $c_k$~--- количество циклов длины $k$ заданной перестановки.
72 | \end{definition}
73 |
74 | \begin{definition}
75 | \term{Циклической перестановкой} $[n]$ называется перестановка типа $(0, 0, \ldots, 0, 1)$, то есть перестановка, состоящая из единственного цикла, сдвигающего все элементы.
76 | \end{definition}
77 |
78 | \begin{example}
79 | Типом перестановки $\pi$, используемой выше, будет $(0, 1, 1, 0, 0)$, типом перестановки $\rho$~--- $(0, 0, 0, 0, 1)$. Тривиальная перестановка $1_{[n]}$, которая оставляет все элементы на месте, имеет тип $(n, 0, 0, 0, 0)$, то есть она состоит из $n$ циклов вида $(a)$.
80 | \end{example}
81 |
82 | \begin{exercise}
83 | Покажите, что для любого типа $(c_1, c_2, \ldots, c_n)$ всегда выполнено соотношение
84 | $$\sum_{i=1}^n ic_i = n$$
85 | \end{exercise}
86 |
87 | \begin{thm}
88 | Существует
89 | $${n!\over c_1!c_2!\ldots c_n!1^{c_1}2^{c_2}\ldots n^{c_n}}$$
90 | перестановок типа $(c_1, c_2, \ldots, c_n)$
91 | \end{thm}
92 | \begin{proof}
93 | В качестве рабочего примера будем считать, что мы ищем все перестановки типа $(1, 2, 1, 0, 0, 0, 0, 0)$ множества $[8]$.
94 |
95 | Вначале выпишем произвольную строку чисел, являющуюся перестановкой $[n]$ (например, 18356724), способов сделать это $n!$. Расставим теперь в этой записи круглые скобки по очереди: вначале $c_1$ скобок с одним элементом внутри, затем $c_2$ скобок с двумя элементами внутри, потом $c_3$ с тремя элементами внутри и так далее. Для нашего примера получится запись
96 | $$(1)(83)(56)(724)$$
97 | Таким образом мы получаем одну из возможных перестановок требуемого типа. Однако, не только первоначально выписанная перестановка даёт нам такое циклическое представление. Во-первых, если мы поменяем местами любые два цикла длины $k$, то мы получим отличное представление той же самой перестановки. Например, мы можем поменять местами две перестановки длины 2:
98 | $$(1)(56)(83)(724)$$
99 | Это ровно та же самая перестановка, но получающаяся из другой строки. Таким образом, поскольку у нас имеется $c_k$ циклов длины $k$, нам необходимо поделить общее количество первоначальных перестановок на $c_k!$.
100 |
101 | Во-вторых, каждая из перестановок может быть циклически сдвинута на k элементов. Например, мы так могли бы сдвинуть наш пример, получив тот же результат:
102 | $$(1)(56)(38)(472)$$
103 | Опять же это та же самая перестановка. Для каждого цикла длины $k$ мы имеем $k$ способов произвести такой сдвиг. По этой причине имеющееся у нас количество искомых перестановок надо поделить на $k^{c_k}$ для каждой длины цикла $k$.
104 | \end{proof}
105 | \begin{corollary}
106 | Существует $(n-1)!$ циклических перестановок множества $[n]$.
107 | \end{corollary}
108 | \begin{proof}
109 | В качестве упражнения.
110 | \end{proof}
111 |
112 | \begin{exercise}
113 | \term{Порядком перестановки} $|\pi|$ называется такое число $n$, что $\pi^n = 1_{[n]}$ (то есть под $\pi^n(x) = x$ подразумевается $n$-кратное применение перестановки $\pi$). Докажите, что для перестановки $\pi$ типа $(c_1, \ldots, c_n)$ выполняется соотношение
114 | $$|\pi| = \lcm\{c_i\}$$
115 | \end{exercise}
116 |
117 | \begin{definition}
118 | \term{Транспозицией} называется перестановка типа $(n-2, 1, 0, \ldots, 0)$, то есть это перестановка, меняющая местами лишь два элемента.
119 | \end{definition}
120 |
121 | \begin{exercise}
122 | Докажите, что любая перестановка может быть представлена композицией транспозиций.
123 | \end{exercise}
124 |
125 | Ясно, что представление в виде транспозиций неоднозначно, причём может отличаться даже количество транспозиций, используемых для представления перестановки, например:
126 |
127 | $$(13)(34) = (23)(14)(24)(23)$$
128 |
129 | Интересно, однако, что количество транспозиций для любой заданной перестановки всегда либо чётное, либо нечётное. Это не совсем очевидно и требует доказательства, которое предсталено следующим определением с прилагающимися упражнениями.
130 |
131 | \begin{definition}
132 | \term{Инверсией} перестановки называется такая пара $i \pi(j)$.
133 | \end{definition}
134 |
135 | Инверсии~--- это такие пары элементов, которые при применении перестановки меняют свой относительный порядок. Например, для перестановки 35124 имеется 5 инверсий: 3 и 1, 3 и 2, 5 и 1, 5 и 2, 5 и 4. Инверсии имеют важное значение при анализе быстродействия компьютерных алгоритмов, однако нас само количество инверсий интересовать не будет, нас будет интересовать лишь то, чётное это количество или нет.
136 |
137 | \begin{definition}
138 | Перестановка называется \term{чётной} (\term{нечётной}), если она имеет \term{чётное} (соответственно \term{нечётное}) число инверсий.
139 | \end{definition}
140 |
141 | \begin{exercise}
142 | Докажите, что любая транспозиция~--- это нечётная перестановка.
143 | \end{exercise}
144 |
145 | \begin{exercise}
146 | Докажите, что произведение чётных перестановок даёт чётную перестановку, произведение нечётных~--- тоже чётную, а произведениче чётной и нечётной перестановки~--- нечётную перестановку.
147 | \end{exercise}
148 |
149 | Тривиальная перестановка, которая оставляет все элементы на месте, чётная. Если умножить её на транспозицию~--- получаем нечётную перестановку. Умножная её на транспозицию ещё раз~--- опять получаем чётную перестановку. Поскольку любая перестановка однозначно либо чётная либо нечётная, то, рассуждая по индукции, приходим к ожидаемому: любая перестановка всегда представлена в виде транспозиций либо чётным их числом, либо нечётным.
150 |
151 | \begin{exercise}\label{ex:sgnpermgrp}
152 | Докажите, что для любого $n>1$ количество чётных и нечётных перестановок на $[n]$ одинаково.
153 | \end{exercise}
154 |
155 | Пока мы рассмотрели понятие чётности перестановок лишь в качестве упражнения, но довольно скоро вы увидите, что оно играет весьма важную теоретическую роль.
156 |
157 | \begin{exercise}
158 | Докажите, что любая чётная перестановка может быть представлена в виде произведения циклов длины 3.
159 | \end{exercise}
160 |
161 | \begin{exercise}
162 | Докажите, что с помощью перестановок $(12)$ и $(12\ldots n)$ возможно представить любую перестановку множества $[n]$.
163 | \end{exercise}
164 |
165 | \begin{definition}
166 | \term{Беззнаковым числом Стирлинга первого рода} $\fstirling{n}{k}$ называется количество перестановок множества $[n]$, содержащих ровно $k$ циклов.
167 | \end{definition}
168 |
169 | Слово <<беззнаковый>> мы будем опускать, поскольку пока оно не имеет для нас никакого смысла (он проявится позже). Прямо из определения следует такое простое соотношение:
170 |
171 | \begin{thm}
172 | $$\sum_{k=1}^n \fstirling{n}{k} = n!$$
173 | \end{thm}
174 | \begin{proof}
175 | В качестве упражнения.
176 | \end{proof}
177 |
178 | Выше мы уже фактически доказали, что $\fstirling{n}{1} = (n-1)!$. Так же очевидно, что $\fstirling{n}{n} = 1$. Для вычисления остальных значений поможет следующая рекурсивная формула.
179 |
180 | \begin{thm}
181 | $$\fstirling{n}{k} = \fstirling{n-1}{k-1} + (n-1)\fstirling{n-1}{k}$$
182 | \end{thm}
183 | \begin{proof}
184 | Рассмотрим какой-нибудь один отдельно взятый элемент $x$ множества $[n]$. Под действием перестановки с $k$ циклами $x$ может либо оставаться на месте, либо куда-то передвигаться. Перестановок, когда $x$ остаётся на месте, ровно $\fstirling{n-1}{k-1}$ штук. Если же $x$ куда-то передвигается, то мы можем рассмотреть перестановку множества $[n-1]$ с $k-1$ циклами: в эту перестановку, записанную в виде циклов, достаточно лишь вставить элемент $x$ после какого-нибудь другого элемента. Всего нам доступно $n-1$ позиций для вставки.
185 | \end{proof}
186 |
187 | По этой формуле с помощью компьютера можно сравнительно легко находить числа Стирлинга. Конечно, сами по себе они мало интересны и вряд ли вам придётся когда-либо их вычислять. Интреснее то, как они сочетаются с другими объектами математики, к чему мы вернёмся в последующих главах нашей книги.
188 |
189 | \begin{exercise}
190 | Посадил злой вертухай сотню гномиков в тюрьму, каждого пронумеровал и поставил условия:\\
191 | — Завтра каждый из вас по одному будет заходить в специальную камеру, где будет лежать сотня пронумерованных конвертов. В каждом конверте — какой-то номер (просто все числа от одного до ста, разложенные по конвертам случайным образом). Каждый из вас будет иметь право открыть ровно 50 конвертов, чтобы найти свой номер. Если все вы найдете свои номера — освобожу. Если хотя бы один ошибется — казню всех.\\
192 | Гномики после обсуждения общей стратегии больше никак общаться не смогут и вообще друг друга не увидят. Конверты после каждого гномика закрываются обратно, так что входящий в камеру гномик не имеет никакой информации о том, что нашли или не нашли другие гномики и какие конверты они открывали.
193 |
194 | Гномикам надо придумать стратегию как искать свой номер, чтобы найти. Если открыть просто наугад 50 из 100 конвертов, то вероятность найти свой номер весьма мала (пополам на пополам). Учитывая, что гномиков сто штук, то их общие шансы при случайной стратегии оказываются вообще ничтожны. Надо поэтому придумать какую-то альтернативную стратегию. (По хорошему в этой задаче еще надо проанализировать в конце полученное решение, но этого пока я от читателя не требую, поскольку я не рассказывал методов, которые позволяют это делать; впрочем, вы можете попытаться дать грубые оценки).
195 | \end{exercise}
196 |
--------------------------------------------------------------------------------
/naturals-undecidability.tex:
--------------------------------------------------------------------------------
1 | \section{Невычислимое, недоказуемое}
2 |
3 | В этом параграфе мы поговорим о совсем отвлечённых темах. Можно было бы это всё не рассказывать, но мне изложенное кажется очень уж удивительным, поэтому не могу молчать. Разговор будет совершенно не формальным, а больше ознакомительным. Материал этого параграфа не является необходимым для дальнейшего чтения учебника, так что если что-то станет совсем не понятно, то это можно смело пропускать. Впрочем, если вы поймёте изложенное, то, думаю, получите от этого удовольствие.
4 |
5 | Предположим, что у нас есть какое-то логическое утверждение, зависящее от натурального числа $P(n)$. Это утверждение, предположим, можно легко проверить для любого конкретного числа, но не понятно верно ли оно для любого числа.
6 |
7 | Например, можно рассмотреть \term{гипотезу Гольдбаха} о том, что любое чётное число может быть представлено в виде суммы двух простых чисел (так, например, $50=19+31$ или $100=11+89$). Для любого конкретного чётного числа можно довольно легко перебором подобрать его разложение на сумму двух простых чисел. По крайней мере, всегда у людей это получалось. А вот возможно ли это сделать в общем случае, то есть если получится представить в виде суммы двух простых вообще любое чётное число~--- вопрос, на который наука пока не нашла ответа.
8 |
9 | Или вот можно рассмотреть \term{последовательности Коллатца}. Начальный элемент последовательности~--- это произвольное натуральное число, которое мы обозначим как $K_0$. $K_{n+1}$ получается из $K_n$ по следующему правилу: если $K_n$ чётное, то $K_{n+1}=\frac{K_n}{2}$. Если $K_n$ нечётное, то $K_{n+1} = 3K_n + 1$. Например, если за $K_0$ принять число 15, то мы получаем следующую последовательность:
10 | $$15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1$$
11 | Как видим, последовательность пришла в единицу. До сих пор с какого бы числа люди не начинали писать последовательность Коллатца, она всегда приходит в единицу, но приходит ли она в единицу всегда, или всё же есть исключения~--- никто не знает, это открытый вопрос математики.
12 |
13 | Интуитивно должно казаться ясным, что чтобы ответить на такие вопросы, не достаточно перебрать просто большое количество вариантов. В обоих упомянутых проблемах математики перебрали уйму чисел (фактически все числа, на которые хватило вычислительных возможностей), но примера, чтобы какое-то число не раскладывалось в сумму двух простых или чтобы последовательность Коллатца для него не приходила в единицу, так и не нашли. Доказывает ли это что-либо? Конечно нет, потому что чисел, которых математики не проверили, куда больше~--- их ещё целая бесконечность, а проверена лишь малая конечная часть.
14 |
15 | Так вот. Примерно 50 лет тому назад было доказано, что на самом деле для почти любого утверждения достаточно проверить лишь конечное число случаев. То есть если вплоть до некоторого номера $M$ нам не встретятся чётные числа, не представимые в виде суммы двух простых, или не встретится последовательность Коллатца, не приходящая в единицу, то такие числа нам не встретятся вовсе никогда.
16 |
17 | \begin{thm}
18 | Для установления истинности почти любого утверждения $P(n)$ достаточно проверить лишь истинность конечного числа утверждений $P(n)$ для $n$ от 1 до некоторого $M$.
19 | \end{thm}
20 | \begin{proof}
21 | Давайте представим себя на минуточку программистами. Мы хотим найти такое число $f\in\mathbb{N}$, что $P(f)$ окажется неверным, то есть мы ищем контрпример к нашей гипотезе.
22 |
23 | Будем считать, что мы можем написать программу для проверки утверждения $P$ для любого конкретного номера (это предположение и составляет значение слова <<почти>> в формулировке теоремы). Напишем программу, которая будем перебирать все числа подряд начиная единицей и которая остановится лишь когда она найдёт такое $f\in\mathbb{N}$, что $P(f)$ не выполняется. Возможно, что мы не найдём его никогда и тогда программа будет работать бесконечно долго, а это значит, что у нас есть время попить чай и поразмышлять.
24 |
25 | Код нашей программы имеет конечную длину, обозначим её N. Если рассмотреть все возможные программы длины $N$, то среди них найдутся конечно же те, которые будут работать бесконечно долго (можно сказать, что они <<зависнут>>) и те, которые в итоге остановятся. Обозначим за $B_N$ самое долгое время работы программы длины $N$ (на английском эти числа называются Busy Beaver Numbers по фольклорным причинам, а как это адекватно переводится на русский, я и не знаю). Как вычислить это самое $B_N$ не очень понятно, но такое число вполне определено. Предположим пока, что мы его знаем.
26 |
27 | Посмотрим на часы, сколько уже работает наша программа по поиску контрпримера, пока мы пили чай? Что? Уже дольше, чем $B_N$? Но ведь $B_N$ это самое долгое время, которое может работать программа, которая останавливастся. Значит мы знаем, что программа не остановится уже никогда, то есть контрпример не будет найден. Утверждение об истинности $P$ можно считать доказанным, программу можно выключать.
28 |
29 | Конечно же, наша программа за конечное время $B_N$ успела проверить лишь конечное число вариантов от 1 до некоторого $M$, но из рассуждений, приведенных выше, следует, что нам этого каким-то образом оказалось достаточно для того, чтобы утверждать об истинности $P$ для совсем любого $n$. В чём тут подвох? Подвоха тут нет.
30 | \end{proof}
31 |
32 | Задумайтесь на секундочку: почти любой сложный вопрос математики, касающийся натуральных чисел, может быть установлен путём перебора конечного числа вариантов. Будь то теорема Ферма, гипотеза Гольдбаха, Коллатца или кого ещё: достаточно проверить конечное число случаев. Не знаю как вам, но на меня в своё время этот факт произвёл неизгладимое впечатление.
33 |
34 | Насколько этот результат практичен? На самом деле совершенно не практичен. Во-первых, не понятно как вычислить значение $B_N$. Во-вторых, даже если мы его вычислим для какого-то $N$, то оно наверняка окажется настолько гигантским, что вряд ли поместится в наш калькулятор. Так что выгоды мы из этого всего извлечь судя по всему не сможем, увы. Но сам факт!
35 |
36 | Логично было бы, если бы после изложения этого результата я тут же показал бы, как считать числа $B_n$, однако сейчас мы уйдём в сторону и я покажу как эти числа ещё можно было бы использовать, если бы они были в нашем распоряжении.
37 |
38 | Попробуем написать такую программу, которая будет анализировать другую программу, и говорить нам о том, зависнет она или же нормально остановится. Можно рассматривать такую программу как функцию $H:P\to\{0,1\}$, где $P$~--- множество всех возможных программ. 0 означает, что программа зависнет, 1 что остановится.
39 |
40 | При условии, что мы можем написать программу, вычисляющую $B_n$, мы нашу задачу можем очень легко решить. Пусть нам дана программа $x$ длины $n$, для которой надо установить остановится ли она. Поскольку программа~--- это просто описание каких-то действий, мы можем заставить выполнять эти действия не компьютер, а нашу программу $H$, то есть мы как бы будем симулировать выполнение программы $x$ внутри программы $H$. Это не сложно технически, но я не буду углубляться в детали как это реализуется. Если вы знакомы с компьютерными технологиями, то наверняка слышали про интерпретаторы, виртуализацию, виртуальные машины и подобное. Это именно то, это возможно и это не особо сложно.
41 |
42 | По ходу выполнения программы $x$, программа $H$ будет считать, как долго $x$ работает. Если вдруг окажется, что программа $x$ работает дольше, чем время $B_n$, то мы знаем, что она не закончится, и $H$ останавливает $x$, выдавая нам результат 0. Если же $x$ остановится сама раньше, то $H$ даст результат 1. Вроде всё.
43 |
44 | А теперь давайте напишем такую программу $A$, которая так же будет принимать на вход какую-то другую программу $x$, затем будет запускать на ней программу $H$, и если $H(x)=1$, то $A$ будет зависать (например, начнёт считать все натуральные числа подряд), а если же $H(x)=0$, то она будет возвращать какой-то результат. Такую программу так же легко написать.
45 |
46 | Попробуем понять какой результат мы получим, если на вход программе $A$ мы дадим её же саму, то есть попробуем выполнить $A(A)$. Что будет? Предположим, что $H(A)=0$, тогда программа $A$ должна завершиться, вернув результат. Но это противоречит тому, что $H(A)=0$. Из этого противоречия видно, что $H(A)\not=0$. Пусть теперь $H(A)=1$, но тогда $A$ должна зависнуть, что противоречит тому, что $H(A)=1$, а значит $H(A)\not=1$. Как так? $H$ оказывается не равно ни одному своему возможному значению!
47 |
48 | Это противоречие означает, что программа $H$ не может быть написана, не существует такой программы и существовать не может. Но как так, ведь мы же чётко указали, как её можно написать! Если вглядеться, то при описании работы программы $H$ мы опирались на то, что мы можем как-то вычислить числа $B_n$, но мы не показывали этого. И это единственный момент во всём рассуждении, который мы никак не обосновали. Значит, числа $B_n$ вычислить невозможно.
49 |
50 | Тот факт, что есть такая функция $B$, которая вполне определена, но которую невозможно вычислить, может показаться невероятным. На самом деле если подумать, то это довольно не сложно. Из определения функции $B$ мы могли бы попробовать вычислить $B(n)$, запустив одновременно все возможные программы длины $n$, и, заведя таймер, пытаясь понять, какое самое большое время работы программы. Однако с учетом того, что есть программы, которые зависают, мы никогда не узнаем, когда таймер пора выключать, хотя конечно же такой момент во времени существует. Это и есть пример того, что функцию невозможно вычислить.
51 |
52 | Мы получили два результата.
53 |
54 | \begin{thm}
55 | Невозможно написать программу, которая бы могла по коду другой программы определить остановится ли она или зависнет.
56 | \end{thm}
57 | \begin{thm}
58 | Числа $B_n$ невычислимы. Другими словами невозможно определить максимальное время, которое может работать независающая программа длины $n$.
59 | \end{thm}
60 |
61 | Приведённые рассуждения можно вывернуть ещё и вот под каким углом. Напишем программу $E$, которая будет проверять истинность произвольного утверждения $x$ путём последовательного перебора всех возможных доказательств (программа может начинать с коротких доказательств и постепенно переходить к более длинным, так что такая программа определённо может быть написана). Если предположить, что всё можно доказать или опровергнуть, то через какое-то время наша программа либо найдёт доказательство для $x$, либо доказательство для $\neg x$.
62 |
63 | Используя эту программу, однако, мы опять же легко можем написать пресловутую программу $H$ проверяющую, остановится ли программа $y$ или нет. Просто вместо запуска программы $y$ и ожидания времени $B_n$ мы на этот раз будем искать доказательство остановки или зависания $y$. Поскольку мы уже знаем, что программа $H$ не может существовать, наше предположение, что программа $E$ всегда либо найдёт доказательство $x$ либо $\neg x$ так же не верно. Это значит, что существуют такие утверждения $x$, которые невозможно ни доказать ни опровергнуть. Как вы вероятно помните, это есть ни что иное как теорема Гёделя о неполноте:
64 |
65 | \begin{thm}
66 | Существуют утверждения, которые невозможно ни доказать ни опровергнуть.
67 | \end{thm}
68 |
69 | Я упомянул, что числа $B_n$ окажутся скорее всего довольно большими. Оказывается, мы можем примерно прикинуть насколько именно большими они будут.
70 |
71 | \begin{thm}
72 | Числа $B_n$ с ростом $n$ растут быстрее, чем любая последовательность, которую мы могли бы вычислить.
73 | \end{thm}
74 | \begin{proof}
75 | Предположим, что это не так, и что существует некоторая последовательность $x_n$ такая, что мы можем её вычислить и что $B_n\le x_n$. Но тогда мы можем запустить все программы длины $n$ и останавливать их как только они отработают время $x_n$. Среди программ, остановившихся раньше, выберем ту, что работала дольше. Время, которое она работала~--- это и есть $B_n$. Но это значит, что мы смогли их вычислить, а это противоречит теореме 3.51. Значит, такой последовательности $x_n$ всё же не существует.
76 | \end{proof}
77 |
78 | \begin{exercise}
79 | Если предположить, что мы имеем в нашем распоряжения числа $B_n$ и неограниченный вычислительный ресурс, проверка истинности произвольных утверждений может всё равно вызывать трудности. Гипотеза Коллатца является как раз таким примером. Если наша программа поиска контрпримера не остановилась за время $B_n$, то она не остановится действительно никогда, но это может иметь разное значение: либо она нашла такое $m$, что последовательность Коллатца для него будет бесконечной (и соответственно программа будет бесконечно долго вычислять её значения), либо же что она такого $m$ никогда не найдёт. Таким образом мы не получили из работы программы никакой полезной информации. Однако простая модификация алгоритма поиска контрпримера может всё таки дать нам способ понять, найден ли контрпример, либо же он не будет найден никогда. Придумайте эту модификацию.
80 | \end{exercise}
81 |
82 | \begin{exercise}
83 | \term{Великая теорема Ферма} (на английском её называют последней теоремой) утверждает, что уравнение
84 | $$x^n + y^n = z^n$$
85 | не имеет решений для $n>2$. Покажите, как можно было бы её доказать при неограниченном вычислимом ресурсе и известных $B_n$.
86 | \end{exercise}
87 |
88 | У Великой теоремы Ферма интересная история. Ферма сформулировал её в 1637 году в виде пометки на полях книги, которую он читал. Там же он указал, что он нашёл элементарное доказательство этой теоремы, но поскольку места недостаточно, он его приводить не будет. В итоге первое доказательство этой теоремы появилось только в 1994 году (спустя 356 лет!) и занимало оно 130 страниц. В этом доказательстве спустя год была найдена ошибка, которую ещё год исправляли. В итоге финальное доказательство без ошибки было представлено лишь в 1996 году. Такая вот история.
89 |
90 | В заключение этого параграфа я замечу, что, конечно, всё написанное здесь очень неформально. Из написанного мной совершенно, например, не понятно каким образом компьютерные программы увязываются с аксиоматикой натуральных чисел и теорией множеств. Так же совершенно не понятно что именно из себя представляют сами программы. Использовать в качестве модели реальные компьютеры и реальные языки программирования не получится, так как в реальных системах есть много факторов, которые мешают идеализированному математическому описанию вычислительного процесса: механизмы мультипоточности, пайплайнинг, всякие мьютексы, графический интерфейс, ввод-вывод и вот всё подобное не дают оставляют возможности рассуждать о вычислениях абстрактно.
91 |
92 | Чтобы избавиться от всех мешающих факторов реальных компьютеров используется модель \term{машины Тьюринга}, которая представляет собой видимо самую простую модель компьютера. Я не буду её описывать, но если вы хотите понять как примерно устроен формализм того, что я здесь изложил, вы можете поискать статьи о ней и о том, как она соответствует реальным вычислительным машинам, рекурсивным функциям и понятию множеств. Так же рекомендую почитать трагичную и важную биографию самого Алана Тьюринга: будучи блестящим учёным, работающим в области вычислимости и криптографии (значительным образом, благодаря именно его работе союзники могли перехватывать шифрованные сообщения Германии во Вторую Мировую войну; теорема~3.50 так же была сформулирована и доказана именно им), он был обвинён в гомосексуальных связях и принуждён к химической кастрации и употреблению гормональных таблеток <<для лечения гомосексуализма>>. Закончилась история лишением его всех военных наград и званий, а так же полным запретом на занятия наукой. Итогом таких мер по борьбе с гомосексуализмом стал его суицид.
93 |
94 | Сегодня ему ставят памятники, его именем названа самая престижная награда в области компьютерных наук. На этой трагичной ноте мы и закончим эту главу.
95 |
--------------------------------------------------------------------------------
/logic-other.tex:
--------------------------------------------------------------------------------
1 | \section{Другие логики}
2 |
3 | Та логика, которую мы рассматривали до сих пор, сама по себе на самом деле не имеет никакой монополии на то, чтобы быть единственно верной. Она удобна и правдоподобна почти во всех ветвях математики, однако помимо неё существует множество других разновидностей логики. В этом параграфе мы ознакомимся с некоторыми из них очень кратко и главным образом неформально, исключительно для того, чтобы у читателя сложилось какое-то впечатление. В дальнейшем эта логика нам в курсе не понадобится (кроме единичных необязательных задач), так что даже без этого параграфа дальнейший материал будет понятен. Однако краткий неформальный экскурс в различные ветви формальной логики может быть полезен для кругозора и приятен для ума.
4 |
5 | Всё что мы рассматривали до сих пор называется \term{классической логикой}, которая характеризуется правилами вывода, приведёнными в таблице~1.10 (а также правила обобщения и сведения к частному для кванторов, что мы пока договорились отложить на время). Внутри самой классической логики также есть градация: если не рассматривать кванторы, то такая логика будет называться \term{логикой высказываний}, а вместе с кванторами она называется \term{логикой первого порядка}. Эта логика допускает выражения вида $\forall x, P(x)$, но не допускает выражений $\forall P, P(x)$. Если допустить последнее (то есть разрешить не только выражения типа <<для любого объекта $x$>>, но и выражения <<для любого предиката $P$>>), то такая логика будет называться \term{логикой второго порядка}. Но всё это разновидности классической логики. В математике практически всегда дело ограничивается классической логикой первого порядка.
6 |
7 | В этой главе у нас пойдёт речь о неклассической логике. Простейший пример, когда возникает нужда в такой логике~--- это компьютерные базы данных. Базу данных можно представить себе как набор таблиц с какой-то информацией. Для определённости будем считать, что мы имеем таблицу участников накопительной программы в косметическом салоне. Среди прочих данных в таблице участников имеется графа <<возраст>>, который участники программы могут сообщать, а могут и нет. То есть эта графа может быть пустой. Это вполне реальная ситуация и любая база данных обычно имеет специально выделенное значение \texttt{NULL}, которым забиваются те данные, которыми мы не располагаем или которые вообще не определены.
8 |
9 | Пусть предикат $Y(a, b)$ означает, что участник акции $a$ моложе участника акции $b$. Этот предикат не вызывает вопросов до тех пор, пока мы сравниваем участников, которые сообщили возраст. А что должна вывести программа, если мы задали ей вычислить этот предикат для участников, которые свой возраст не сообщили? Значение этого предиката не определено и мы приходим к необходимости помимо истины (1) и лжи (0) ввести также понятие неопределённости ($U$) в нашу логику.
10 |
11 | Когда мы ввели новое логическое значение, мы должны определить как с этим значением будут работать логические операции. Сделать это возможно многими способами, самый простой и естественный из которых называется \term{логикой Клини} и именно она чаще всего реализована в базах данных. Чаще всего в учебниках для программистов на неё ссылаются просто как на \term{тернарную (или третичную) логику}, но это не совсем корректно: тернарной логикой называется любая логика, в которой есть три значения истинности. Значения истинности приведены в таблицах 1.10, 1.11, 1.12 и 1.13.
12 |
13 | \begin{table}[h]
14 | \centering
15 | \begin{tabular}{c | c}
16 | $a$ & $\neg b$ \\
17 | \hline
18 | 0 & 1 \\
19 | U & U\\
20 | 1 & 0
21 | \end{tabular}
22 | \caption{Связка <<НЕ>> в логике Клини}\label{table:kleene-not}
23 | \end{table}
24 |
25 | \begin{table}[h]
26 | \centering
27 | \begin{tabular}{c | c c c}
28 | $\land$ & 0 &U &1 \\
29 | \hline
30 | 0 & 0 & 0 & 0 \\
31 | U & 0 & U & U\\
32 | 1 & 0 & U & 1
33 | \end{tabular}
34 | \caption{Связка <<И>> в логике Клини}\label{table:kleene-and}
35 | \end{table}
36 |
37 | \begin{table}[h]
38 | \centering
39 | \begin{tabular}{c | c c c}
40 | $\lor$ & 0 &U &1 \\
41 | \hline
42 | 0 & 0 & U & 1 \\
43 | U & U & U & 1\\
44 | 1 & 1 & 1 & 1
45 | \end{tabular}
46 | \caption{Связка <<ИЛИ>> в логике Клини}\label{table:kleene-or}
47 | \end{table}
48 |
49 | \begin{table}[h]
50 | \centering
51 | \begin{tabular}{c | c c c}
52 | $\to$ & 0& U& 1 \\
53 | \hline
54 | 0 & 1 & 1 & 1 \\
55 | U & U & U & 1\\
56 | 1 & 0 & U & 1
57 | \end{tabular}
58 | \caption{Импликация в логике Клини}\label{table:kleene-or}
59 | \end{table}
60 |
61 | Проработайте эти таблицы и попытайтесь понять почему они именно такие, а не какие-то другие.
62 |
63 | Однако надо иметь ввиду, что это не единственный вариант тернарной логики. Самый распространённый альтернативный вариант~--- это \term{логика Лукаcевича}, которая отличается от логики Клини лишь тождеством $U\to U = 1$. Проблема логики Клини в том, что никакое предложение в нём не может быть всегда истинным. Например, в классической логике мы имели полезнейший закон де Моргана
64 | $$\neg(a \land b) \leftrightarrow \neg a \lor \neg b$$
65 | а в логике Клини он уже не работает, если вспомнить, что эквивалентность задаётся как
66 | $$(a \leftrightarrow b) = (a\to b)\land (b\to a)$$
67 | Более того: в логике Клини нет вообще ни одной тавтологии. Логика же Лукасевича хоть и не сохраняет все законы классической логики (это было бы и невозможно), она по крайней мере сохраняет часть тавтологий.
68 |
69 | \begin{exercise}
70 | Докажите в логике Лукасевича, что
71 | $$(a\lor b) \leftrightarrow (a \to b) \to b$$
72 | \end{exercise}
73 |
74 | \begin{exercise}
75 | Докажите в логике Лукасечива закон де Моргана.
76 | \end{exercise}
77 |
78 | \begin{exercise}
79 | Докажите в логике Лукасевича закон двойного отрицания
80 | $$\neg\neg a = a$$
81 | \end{exercise}
82 |
83 | \begin{exercise}
84 | Докажите, что в логике Лукасевича не работает закон исключённого третьего
85 | $$a\lor \neg a = 1$$
86 | \end{exercise}
87 |
88 | \begin{exercise}
89 | Докажите, что в логике Лукасевича не работает закон противоречия
90 | $$a\land \neg a = 0$$
91 | \end{exercise}
92 |
93 | \begin{exercise}
94 | Докажите, что в логике Клини нет ни одной тавтологии, использующей только переменные и приведённые логические операции (если мы будем вводить новые операции, то мы очевидно можем подогнать тавтологии под бесполезные операции~--- это не интересно совершенно).
95 | \end{exercise}
96 |
97 | \begin{exercise}
98 | Не смотря на то, что логика Клини не имеет тавтологий, она допускает естественные правила вывода.Покажите, например, что сохраняется правило дедукции
99 | $$p, p\to q\vdash q$$
100 | \end{exercise}
101 |
102 | В классической логике и логиках Клини и Лукасевича мы задали сами логические значения и правила, которыми они связаны. На самом деле мы могли бы задать совершенно произвольные логические значения и функции, лишь бы они были нам как-то полезны. Такой подход называется \term{семантическим}, поскольку мы изначально отталкиваемся от конкретного содержания логики, и лишь затем строим правила логического вывода.
103 |
104 | Тем не менее, этот подход не лишён недостатков, одним из которых является то, что часто конкретные логические значения, которые может принимать наша логика, нам не ясны, либо они слишком сложны. В этом случае мы можем воспользоваться \term{синтаксическим} подходом к определению логики, который предполагает, что мы задаём лишь правила вывода теорем, но никак не говорим об истинности значений. Последнее упражнение в частности демонстрирует, что хоть мы и не имеем в логике Клини никаких тавтологий, это не мешает нам выводить теоремы пользуясь правилами вывода.
105 |
106 | \begin{exercise}
107 | Докажите, что не существует никакой тернарной логики, в которой работали бы все утверждения теоремы~1.1.
108 | \end{exercise}
109 |
110 | \begin{exercise}
111 | Приведите пример четверичной логики (то есть логики, в которой помимо 1 и 0 существуют ещё некие неравные логические значения $\alpha$ и $\beta$), удовлетворяющей всем утверждениям теоремы~1.1.
112 | \end{exercise}
113 |
114 | Последнее упражнение демонстрирует, что одним и тем же синтаксическим правилам может соответствовать на самом деле множество семантик. Для классической логики высказываний мы в следующей главе покажем, как можно ввести бесконечное количество семантических интерпретаций, все из которых будут удовлетворять всем утверждениям теоремы~1.1. Таким образом получается, что синтаксический подход к логике оказывается в некотором смысле более богатым: даже не зная того заранее, мы всегда описываем потенциально гораздо более широкий класс возможных логик. Впрочем, есть и обратная сторона медали: в конкретной модели работать гораздо проще, чем применять только синтаксические правила преобразования формул, как мы убедились в прошлом параграфе.
115 |
116 | Здесь нет строгого закона, но обычно логику на основе логических значений строят люди, преследующие прикладную цель, поскольку с ней проще работать и они хорошо понимают предметную область, которую собираются исследовать. Логику же на основе правил вывода строят люди, которым важна чистота и строгость выкладок безотносительно какой-либо физической интерпретации, то есть главным образом философы и математики, занимающиеся основаниями науки.
117 |
118 | В качестве наиболее простого для восприятия конкретного примера синтаксического построения логики рассмотрим \term{модальную логику}. С точки зрения интуиции в этой логике существует три разновидности истинности: \term{необходимая истина} ($\Box p$), \term{возможная истина} ($\diamondsuit p$) и \term{фактическая истина} ($p$). Неформально это можно интерпретировать как возможность вообразить себе альтернативы. Вот, например, сегодня я очень сильно замёрз, пусть это высказывание $p$. Это фактическая истина~--- я это прочувствовал на себе, это правда. Но теоретически это могло бы быть и по-другому: например, я мог бы не торчать в Москве, а полететь на далёкие острова в эмиграцию. Поэтому нельзя сказать, что то что я сегодня мёрз весь день является какой-то необходимой истиной: могло бы быть и по-другому. В то же время если рассмотреть высказывание $q$ <<в открытом космосе нельзя дышать без скафандра>>, то это истина необходимая, поэтому мы это обозначим как $\Box q$.
119 |
120 | Возможная истина~--- это истина, которая теоретически возможна или была бы возможна при каких-то обстоятельствах. Например, рассмотрим высказывание <<американцы первыми запустили человека в космос>>, которое обозначим как $r$. Фактически, это не правда, поэтому мы пишем $\neg r$. В то же время мы легко можем представить себе ситуацию, при которой американцы обогнали бы СССР в космической гонке: это не есть что-то предопределённое природой, это могло случиться. Поэтому мы можем также написать $\diamondsuit r$.
121 |
122 | Сформулируем правила вывода модальной логики. Во-первых, они вбирают в себя все правила вывода классической логики из таблицы~1.10. Во-вторых, мы дополним их правилами для модальных операторов:
123 |
124 | \begin{enumerate}
125 | \item $\Box p \vdash \neg \diamondsuit \neg p$
126 | \item $\diamondsuit p \vdash \neg \Box \neg p$
127 | \item N-правило: если $A$~--- набор аксиом (необходимых истин) и $A\vdash p$, то $A\vdash \Box p$
128 | \item K-правило: $\Box (p\to q) \vdash (\Box p) \to (\Box q)$
129 | \item T-правило: $\Box p \vdash p$
130 | \item 5-правило: $\diamondsuit p \vdash \Box \diamondsuit p$
131 | \end{enumerate}
132 |
133 | Рекомендую вам попытаться понять на интуитивном уровне что означает каждая из этих аксиом.
134 |
135 | Аксиоматик модальной логики существует много разных, между ними есть маленькие и большие философские разногласия. Система аксиом, которую я привёл, называется $S5$-аксиоматикой и она наиболее часто встречается. Название это главным образом историческое, так же как и названия правил N, K, T и 5.
136 |
137 | Возникает вопрос: а почему мы ввели именно правила вывода и сказали, что эта логика определяется синтаксически, вместо того, чтобы просто задать какие-то дополнительные логические значения и работать с ними так же как мы работали с классической логикой в самом начале этой книги? На самом деле задать какой-то набор логических значений для модальной логики было бы невозможно и мы можем это продемонстрировать.
138 |
139 | Во-первых, двух значений было бы не достаточно в любом случае. Возьмём любое фактически истинное высказывание $p = 1$. Каким логическим значением должно обладать выражение $\Box p$? В терминах только истинности и ложности на этот вопрос явно нельзя ответить.
140 |
141 | Аналогично можно увидеть, что нам не хватит и трёх логических значений. Если к истине и лжи добавить неопределённое значение U, и мы знаем, что истинны одновременно высказывания $p$ и $\diamondsuit \neg p$, то какое должно быть значение истинности для $\diamondsuit p$? Если считать это высказывание истинным, то мы придём к тому, что любое высказывание, начинающееся с символа $\diamond$ будет истинным. Задать его ложным было бы вроде как вообще не правильным. Если определить его за $U$, то тогда любое выражение с операторами $\diamondsuit$ или $\Box$ будет иметь это значение, что лишает модальную логику смысла.
142 |
143 | \begin{table}[h]
144 | \centering
145 | \begin{tabular}{c | c c c}
146 | $a$ & $\neg a$ & $\Box a$ & $\diamondsuit a = \neg\Box\neg a$ \\
147 | \hline
148 | 0 & 3 & 0 & 0 \\
149 | 1 & 2 & 0 & 3 \\
150 | 2 & 1 & 0 & 3 \\
151 | 3 & 0 & 3 & 3
152 | \end{tabular}
153 | \caption{Попытка модальной конечнозначной логики}\label{table:kleene-or}
154 | \end{table}
155 |
156 | Предположим, что всё же мы можем свести модальную логику к логическим значениям, если рассмотреть четвертичную логику: 0 для необходимой ложности, 1 для возможной ложности, 2 для возможной истинности и 3 для необходимой истинности. Здесь легко поставить таблицу для таблицы истинности операторов $\Box$ и $\diamondsuit$ (таблица~1.15).
157 |
158 | Вроде бы пока все значения кажутся логичными и сходятся. Попробуем определить таблицу истинности для $\land$ (таблица~1.16). Основная масса значений в таблице очевидна, но что делать со связкой $2\land 3$? Их никак нельзя определить так, чтобы это соответствовало нашим интуитивным представлениям о модальности. Если $p=2$, то очевидно $p\land\neg p = 0$ по закону противоречия. В то же время если взять два независимых высказывания $p=1$ и $q=2$, то $p\land q$ хоть и непонятно чему должно быть равно, но это явно никак не 0, поскольку если оба высказывания возможно истинны и не зависимы друг от друга, то вероятно они могут быть фактически истинными и одновременно.
159 |
160 | \begin{table}[h]
161 | \centering
162 | \begin{tabular}{c | c c c c}
163 | $\land$ & 0 &1 &2 & 3 \\
164 | \hline
165 | 0 & 0 & 0 & 0 & 0\\
166 | 1 & 0 & 1 & ? & 1\\
167 | 2 & 0 & ? & 2 & 2\\
168 | 3 & 0 & 1 & 2 & 3
169 | \end{tabular}
170 | \caption{Связка <<И>> в модальной логике}\label{table:kleene-or}
171 | \end{table}
172 |
173 | Такие рассуждения приводят нас к заключению, что для модальную логику не удастся задать кратко через таблицы истинности с конечным числом значений и нам остаются только правила вывода.
174 |
175 | Есть также большой соблазн определить необходимо истинные предложения как утверждения, которые могут быть доказаны. Такой подход также не срабатывает
176 |
177 |
178 | Самым известным примером логики, которая не описывается подобным тривиальным способом семантически, является \term{интуиционистская логика}, появившаяся в начале прошлого столетия как попытка уйти от скользких моментов классической логики. Основная идея этой логики заключается в том, чтобы пользоваться лишь теми правилами вывода, которые никак не предполагают, что каждое утверждение может быть лишь в двух состояниях: либо истинным либо ложным, а вместо этого опираться лишь на уже доказанные утверждения.
179 |
180 | Как один из примеров давайте рассмотрим закон исключённого третьего. Классическая логика говорит, что для любого предложения $p$ либо оно само, либо $\neg p$ истинно. Предположим первое, и в этом предположении докажем некое утверждение $q$. Теперь предположим $\neg p$ и докажем отсюда некоторое предложение $r$ (оба доказательства могут быть длинными и сложными и само утверждение может быть нетривиальным). Закон исключённого третьего из классической логики утверждает, что у нас в любом случае будет истинно либо $r$ либо $q$, но это может вызвать сомнения. Что, если ни $p$ ни $\neg p$ в принципе недоказуемы в нашей системе аксиом? Тогда мы не можем доказать $p \lor \neg \neg p$, но в классической логике мы принимаем это как аксиому и доказываем отсюда теоремы. Кто-то скажет, что это нормально, а кто-то усомнится.
181 |
182 | Подобная ситуация возникает и с двойным отрицанием. Если мы каким-то образом доказали формулу $\neg\neg p$, то в классической логике это автоматически означает истинность $\neg p$. Интуиционистская логика же предполагает, что даже при доказанной $\neg\neg p$ сама истинность $p$ может быть по-прежнему неустановленной. Максимум, что говорит доказанное $\neg\neg p$ о самом $p$, так это то что $p\neg$
183 |
--------------------------------------------------------------------------------
/naturals-doublecounting.tex:
--------------------------------------------------------------------------------
1 | \section{Двойной счёт}
2 |
3 | Напомню, что в графе степенью вершины $\deg(v)$ мы назвали количество рёбер, ей инцидентных.
4 |
5 | \begin{thm}
6 | Пусть $V$~--- множество вершин некоторого графа, $e$~--- количество его рёбер. Тогда
7 | $$\sum_{v\in V}\deg(v) = 2e$$
8 | \end{thm}
9 | \begin{proof}
10 | Мы можем пересчитать все рёбра графа двумя способами: собственно, пересчитывая сами рёбра (получим в этом случае $e$), либо же пересчитывая вершины и складывая степени $\deg{v}$. В этом случае, правда, получится, что каждое ребро мы учтём два раза, поскольку каждое ребро инцидентно ровно двум вершинам.
11 | \end{proof}
12 |
13 | Это элементарное доказательство является простейшим примером доказательства методом \term{двойного счёта}. Приём этот выглядит всегда одинаково: мы берём некоторый набор объектов и считаем его двумя разными способами, получая в итоге одно и то же значение, но записанное в разном виде. По большому счёту рекурсивные формулы для вычисления числа сочетаний, чисел Белла и чисел Стирлинга, а так же формулы их сумм, доказывались нами именно методом двойного счёта, только мы не произносили этого слова. Остаток этого параграфа мы посвятим разбору ещё нескольких подобных примеров.
14 |
15 | \begin{thm}
16 | $$\sum_{k=0}^m {m\choose k}{w\choose n-k} = {m+w\choose n}$$
17 | \end{thm}
18 | \begin{proof}
19 | Пусть у нас имеется $m$ мужчин и $w$ женщин. Нам надо выбрать из них группу $n$ человек. Очевидно, что это можно сделать $m+w\choose n$ способами. С другой стороны, мы можем отдельно рассмотреть все варианты, когда мы выбираем $k$ мужчин и $n-k$ женщин, что даёт нам левую часть.
20 | \end{proof}
21 |
22 | \begin{corollary}
23 | $$\sum_{k=0}^n{n\choose k}^2 = {2n\choose n}$$
24 | \end{corollary}
25 | \begin{proof}
26 | Достаточно положить $m=w=n$ и заметить, что ${n\choose k}={n\choose n-k}$.
27 | \end{proof}
28 |
29 | \begin{thm}
30 | $$\sum_{k=q}^n{n\choose k}{k\choose q} = 2^{n-q}{n\choose q}$$
31 | \end{thm}
32 | \begin{proof}
33 | Левую часть можно интерпретировать как количество способов выбрать различные подмножества $[n]$ с по крайней мере $q$ элементами, и затем в этих множествах выделить ещё некоторые $q$ элементов. Правая часть даёт ровно ту же самую величину, но в этом случае мы вначале выбираем $q$ помеченных элементов из $[n]$, а затем добавляем к полученному набору один из $2^{n-q}$ подмножеств, составленных из оставшихся элементов.
34 | \end{proof}
35 |
36 | \begin{thm}
37 | $$k!\sstirling{n}{k} = k^n - {k \choose 1}(k-1)^n + {k\choose 2}(k-2)^n -\ldots$$
38 | \end{thm}
39 | \begin{proof}
40 | Справа, как мы увидели в конце прошлого параграфа, перечислено количество сюръекций $[n]\to[k]$. Однако, их можно перечислить и по-другому. Пусть $f$~--- некоторая сюръекция, тогда прообразы $f^{-1}(1)$, $f^{-1}(2)$,~... не пусты и задают некоторое разбиение множества $[n]$ на $k$ подмножеств. Таких разбиений существует $\sstirling{n}{k}$ штук. В то же время если $\rho$~--- некоторая перестановка на $[k]$, то $\rho\circ f$ так же задаёт то же самое разбиение множества $[n]$, хотя сюръекция уже будет другой. Поскольку мы имеем $k!$ таких перестановок $[k]$, общее количество сюръекций может быть так же определено как $k!\sstirling{n}{k}$.
41 | \end{proof}
42 |
43 | \begin{thm}
44 | $$\sum_{k=1}^n k^2 = {n(n+1)(2n+1)\over 6}$$
45 | \end{thm}
46 | \begin{proof}
47 | Я уже предлагал доказать это утверждение по индукции самостроятельно в упражнении 3.38 по индукции. Сейчас мы докажем эту формулу используя метод двойного счета. Искомую сумму обозначим за $S_n$.
48 |
49 | Из того, что $(n+1)^2 = n^2 + 2n + 1$ следует, что каждое следующее слагаемое в сумме $S_n$ равняется предыдущему, увеличенному на $2n+1$. Первый элемент этой суммы 1. Второй элемент суммы по этому разложению мы можем записать как 1+3. Третий элемент как 1+3+5. Продолжая по аналогии, мы можем составить таблицу~3.2:
50 |
51 | \begin{table}[h]
52 | \centering
53 | \begin{tabular}{ccccccc}
54 | $1^2$ & $2^2$ & $3^2$ & $4^2$ & $5^2$ & $\ldots$ & $n^2$ \\
55 | \hline
56 | 1 & 1 & 1 & 1 & 1 & $\vdots$ & 1 \\
57 | & 3 & 3 & 3 & 3 & $\vdots$ & 3 \\
58 | & & 5 & 5 & 5 & $\vdots$ & 5 \\
59 | & & & 7 & 7 & $\vdots$ & 7 \\
60 | & & & & 9 & $\vdots$ & 9 \\
61 | & & & & & & $\vdots$ \\
62 | & & & & & & $2n-1$ \\
63 | \end{tabular}
64 | \caption{Элементы суммы $S_n$}
65 | \end{table}
66 |
67 | Первоначальную сумму можно интерпретировать таким образом, что мы вначале в этой таблице складываем стобцы, а затем складываем результаты. Однако, мы можем поступить и по-другому, складывая вначале строки. Если считать строки начиная с верхней, то $i$-ая строка будет состоять из чисел $2i-1$, которых всего будет $n-i+1$ штук. Таким образом получаем:
68 | \begin{align*}
69 | S_n & = \sum_{i=1}^n (n-i+1)(2i-1)\\
70 | & = \sum_{i=1}^n (2in - n - 2i^2 + i + 2i - 1) \\
71 | & = (2n+3)\sum_{i=1}^n i - 2\sum_{i=1}^n i^2 - n(n+1) \\
72 | & = (2n+3){n(n+1)\over 2} - 2S_n - n(n+1)
73 | \end{align*}
74 | Здесь мы в последней строчке воспользовались формулой для треугольных чисел. Слагаемое $2S_n$ можно <<перенести>> в левую часть уравнения. Получаем:
75 | \begin{align*}
76 | 3S_n = {n(n+1)(2n+1)\over 2}
77 | \end{align*}
78 | Разделив теперь обе части на 3 получаем результат.
79 | \end{proof}
80 |
81 | Мы до сих пор не сталкивались с переносом слагаемых в уравнениях, это доказательство~--- первый случай. Школьное правило гласит, что любое слагаемое может быть перенесено в другую часть уравнения с противоположным знаком. Это действительно так и я на всякий случай объясню почему. Пусть у нас есть сумма
82 | \begin{equation}\label{ndc:1}
83 | x+y = z
84 | \end{equation}
85 | Знак равенства по сути означает, что слева и справа стоят одинаковые значения, только записанные по-разному. А раз они одинаковые, то применив к ним одинаковые операции, мы так же получим одинаковые значения. Например, мы по этим соображениям можем умножать обе части уравнения на одно и то же число, возводить в одинаковую степень и, в том числе, вычитать из обоих частей одно и то же значение. Вычтя из \eqref{ndc:1} значение $y$ получаем
86 | $$x + y - y = z - y$$
87 | но поскольку $y-y=0$, окончательно получаем
88 | $$x = z - y$$
89 | По сути мы получили то что утрвеждает школьное правило: <<перенесли>> $y$ в другую сторону со сменой знака.
90 |
91 | Вернёмся, однако, к двойному счёту. Очень легко можно получить следующую интересную формулу (довольно, правда, бесполезную) для суммы степеней.
92 |
93 | \begin{thm}
94 | $$\sum_{i=1}^n i^k = \sum_{j=1}^n {n \choose j}\sstirling{k+1}{j}(j-1)!$$
95 | \end{thm}
96 | \begin{proof}
97 | Рассмотрим множество последовательностей длины $k+1$, таких, что все элементы в ней положительны и не превосходят $n$, причём последний элемент последовательности по совместительству максимален.
98 |
99 | С одной стороны, если максимальный элемент последовательности $i$ (он же и последний), то оставшиеся $k$ элементов мы можем выбрать произвольным образом от 1 до $i$. Итого получаем $i^k$ таких последовательностей. Учитывая, что $i$ произвольно, сумма, данная в утверждении теоремы слева, перечисляет все интересующие нас последовательности.
100 |
101 | С другой стороны мы можем предположить, что всего последовательность состоит из $j$ различных чисел (они могут повторяться). Способов выбрать эти числа $n\choose j$. После этого всю последовательность мы должны разбить на $j$ групп, элементы в каждой из которых будут равны. Итого таких разбиений имеется $\sstirling{k+1}{j}$. Нам осталось присвоить этим группам элементов значения из выбранных $j$ чисел. Учитывая, что последнее число всегда максимально, нам остаётся назначить $j-1$ значение, а способов сделать это столько же, сколько существует перестановок, то есть $(j-1)!$.
102 | \end{proof}
103 |
104 | \begin{definition}
105 | Граф называется \term{связным}, если в нём существует путь между любыми двумя вершинами.
106 | \end{definition}
107 |
108 | \begin{definition}
109 | \term{Деревом} называется связный граф без циклов.
110 | \end{definition}
111 |
112 | Деревья часто применяются в компьютерных системных поиска. Самый распространённый вариант~--- это двоичные деревья поиска, которые представляют собой следующую структуру: каждая вершина дерева обладает некоторым значением и, возможно, тремя гранями, называемых ветвями. Одна ветвь ведёт в направлении корня, другая ветвь, называемая левой, ведёт ко всем вершинам со значениями, меньшими чем текущее, а вторая ветвь, называемая правой, ведёт к большим значениям. Если предположить, что значения~--- это строки, то их порядок может восприниматься как алфавитный. Пример такого бинарного дерева поиска представлен на рисунке 3.11.
113 |
114 | \tikzset{
115 | treenode/.style = {align=center, inner sep=0pt, text centered,
116 | font=\sffamily},
117 | arn_n/.style = {treenode, rectangle, black, font=\sffamily\bfseries, draw=white,
118 | fill=white},% arbre rouge noir, noeud noir
119 | }
120 |
121 | \begin{figure}[h]
122 | \centering
123 | \begin{tikzpicture}[->,level/.style={sibling distance = 5cm/#1,
124 | level distance = 1.5cm}]
125 | \node [arn_n] {Николай}
126 | child{ node [arn_n] {Евгения}
127 | child{ node [arn_n] {Авдотья}}
128 | child{ node [arn_n] {Жанна}}
129 | }
130 | child{ node [arn_n] {Роман}
131 | child{ node [arn_n] {Ольга}}
132 | child{ node [arn_n] {Света}}
133 | }
134 | ;
135 | \end{tikzpicture}
136 | \caption{Бинарное дерево поиска}
137 | \end{figure}
138 |
139 | Предположим, что в дереве на рисунке 3.11 так же в каждом узле дерева записан телефон, и что мы захотели найти телефон Ольги. Если бы мы просматривали все телефоны подряд, то в случае их упорядоченности по алфавиту, прежде чем мы наткнулись бы на Олин телефон, нам пришлось бы проверить шесть записей. Однако, вместо этого мы могли бы искать телефон в дереве, двигаясь от корня: вначале мы увидели бы, что имя Ольга должно идти после имени Николай, что значит, что мы должны искать по правой ветви от корня, где мы встречаем имя Роман. Ольга идёт раньше Романа по алфавиту, поэтому мы продолжаем искать её в левой ветви, где и находим её телефон. Итого нам потребовалось три шага поиска: вдвое быстрее чем при последовательном переборе.
140 |
141 | \begin{exercise}
142 | Пусть мы ищем телефон Фиофанта. Покажите, что при последовательном поиске нам потребовалось бы 7 шагов, чтобы убедиться, что такого телефона нет, а при поиске в дереве всего 3 шага.
143 | \end{exercise}
144 |
145 | \begin{exercise}
146 | Пусть у нас теперь имеется дерево, в котором записано 2147483647 телефонных номеров. Например, это может база данных ФСБ или ещё какая. Покажите, что используя бинарное дерево поиска, мы можем найти любой телефон (или убедиться, что его нет в базе) максимум за 31 шаг.
147 | \end{exercise}
148 |
149 | Последнее упражнение показывает, что использование деревьев может здорово упростить поиск информации (зачастую ускорение получается в миллионы раз). Собственно очень похожим образом устроены почти все базы данных, и без деревьев не было бы ни компании Google, ни, наверное, вообще компьютерной техники в современном её виде. Чтобы уметь анализировать скорость работы алгоритмов, нам прежде всего необходимо уметь пересчитывать все деревья.
150 |
151 | Бинарные деревья~--- это в общем-то частный случай дерева. Как перечислить все возможные деревья поиска мы поймём позже в нашем курсе (мы изучим общие подходы), а пока что же мы перечислим просто все возможные деревья с $n$ вершинами. При изучении следующего доказательства важно иметь ввиду следующие уточнения постановки задачи, которые мы подразумеваем:
152 | \begin{enumerate}
153 | \item Дерево не обладает корнем; все вершины равнозначны;
154 | \item Вершины деревьев имеют определённые метки (данные от 1 до $n$), то есть даже если два дерева имеют одинаковую форму внешне, но вершины имеют разные именования, мы рассматриваем эти деревья как различные;
155 | \item Каждая вершина может иметь произвольное количество инцидентных рёбер;
156 | \item Рёбра, в отличие от бинарного дерева поиска, никак не упорядочены, то есть понятия <<левое>> или <<правое>> тут не имеет значения.
157 | \end{enumerate}
158 |
159 | Если изменить любое из этих условий, то формула для количества деревьев будет уже совершенно другой, но пока мы не будем рассматривать эти случаи.
160 |
161 | \begin{table}[h]
162 | \centering
163 | \begin{tabular}{c|ccccc}
164 | $x$ & 1 & 2 & 3 & 4 & 5 \\
165 | \hline
166 | $f(x)$ & 4 & 1 & 1 & 2 & 4
167 | \end{tabular}
168 | \caption{Пример функции $f$}
169 | \end{table}
170 |
171 | \begin{thm}
172 | Существует $n^{n-2}$ деревьев с $n$ вершинами.
173 | \end{thm}
174 | \begin{proof}
175 | Подсчитаем количество функций $f:[n]\to[n]$ двумя способами. С одной стороны количество таких функций $n^n$, это тривиальная теорема, рассмотренная нами в~\S~3.1. Попробуем теперь подсчитать количество функций $f$, сопоставив каждой функции некоторое дерево. Это довольно сложное рассуждение, поэтому будем рассматривать его на примере функции $f$, значения которой заданы в таблице~3.3. Пусть
176 | $$C = \{x \in[n]| \exists k\ f^k(x) = x\}$$
177 | то есть это множество таких элементов $x$ из $[n]$, что применяя к ним $f$ последовательно несколько раз, мы в какой-то момент получим тот же $x$. Для функции из нашего примера $C = \{1,2,4\}$.
178 |
179 | Если упорядочить по возрастанию элементы $C$ и рассмотреть ограничение на нём $f|_C$, то эта функция будет действовать как перестановка $C$, которую мы можем записать строкой (в примере будет $f|_C = 412$). Теперь, выбрав в качестве вершин графа элементы $[n]$, мы можем соединить вершины из $C$ в порядке, заданном перестановкой. Элементы $[n]\backslash C$ пока правда остаются изолированными. Чтобы сформировать из них дерево, для каждого значения $x\in [n]\backslash C$, если $f(x)=y$ добавим ребро $xy$. Для функции из примера это будут рёбра 31 и 54. Получившееся дерево изображено на рисунке~3.12.
180 |
181 | \begin{figure}[h]
182 | \centering
183 | \begin{tikzpicture}
184 | \def\point{node [circle, draw, fill, inner sep = 0, minimum size = .1cm] }
185 | \draw (0, 0) \point (p1) {};
186 | \draw (1cm, 0cm) \point (p2) {};
187 | \draw (0cm, 1cm) \point (p3) {};
188 | \draw (-1cm, 0cm) \point (p4) {};
189 | \draw (-1cm, -1cm) \point (p5) {};
190 |
191 | \node [below] at (p1) {1};
192 | \node [right] at (p2) {2 (конец)};
193 | \node [left] at (p3) {3};
194 | \node [left] at (p4) {(начало) 4};
195 | \node [right] at (p5) {5};
196 |
197 | \draw (p1) -- (p2);
198 | \draw (p1) -- (p3);
199 | \draw (p1) -- (p4);
200 | \draw (p4) -- (p5);
201 | \end{tikzpicture}
202 | \caption{Дерево, построенное по функции $f$}
203 | \end{figure}
204 |
205 | Надо теперь показать, что и для каждого дерева мы можем задать функцию. Это делается в полной аналогии: вначале выбираем в дереве условные <<начало>> и <<конец>> (внимание!) и находим путь от начала к концу. Вершины этого пути задают множество $C$, а последовательность вершин перестановку $f|_C$. Для вершин $x$, не вошедших в этот путь, в качестве значения $f(x)$ выбираем следующую вершину по пути от $x$ до <<конца>> дерева.
206 |
207 | Остаётся лишь заметить, что заданная конструкция даёт нам не просто дерево, а дерево с выбранными <<началом>> и <<концом>>. У дерева с $n$ вершинами есть $n^2$ способов определить начало и конец, поэтому количество произвольных деревьев в $n^2$ раз меньше, чем количество функций $[n]\to[n]$. (По-хорошему так же надо более чётко указать, что соответствие деревьев и функций в данном случае действительно однозначное, но это не сложно и я оставляю это в качестве упражнения читателю).
208 | \end{proof}
209 |
210 | Приведу для обшего развития несколько упражений на деревья. Эти задачи используют разные техники, которые мы рассматривали, и решаться могут по-разному. В задачах под деревьями будут пониматься бинарные деревья с корнем. \term{Листьями} мы будем называть вершины без потомков. Рёбра деревьев будут неупорядочены, но листья (и только они) будут иметь метки.
211 |
212 | \begin{exercise}
213 | Докажите, что дерево с $n$ листьями, описанное выше, будет иметь $2n-2$ рёбер.
214 | \end{exercise}
215 |
216 | \begin{exercise}
217 | Докажите, что деревьев указанного вида с $n$ листьями существует
218 | $$(2n - 1)!!$$
219 | штук, где $n!!$ обозначает \term{двойной факториал}:
220 | $$n!! = n\cdot (n-2) \cdot (n-4) \cdot\ldots$$
221 | \end{exercise}
222 |
223 | \begin{exercise}
224 | Рассморим множество $[n]$. Сколько существует способов разбить это множество на пары? (Если $n$ нечётное, то один элемент должен остаться без пары).
225 | \end{exercise}
226 |
227 | \begin{exercise}
228 | Докажите, что для чётного $n=2k$
229 | $$n!! = 2^kk!$$
230 | \end{exercise}
231 |
232 | \begin{exercise}
233 | Создал боженька $n$ бесполых бессмертных существ и сказал им: <<Плодитесь и размножайтесь!>> Зачать ребёнка (опять же бесполого и бессмертного) может любая пара существ, если они не являются родственниками. <<Родственниками>> существа являются лишь в том случае, если они потомки одного и того же подмножества $n$ первоначальных существ. Сколько всего существ наплодится таким образом?
234 | \end{exercise}
235 |
--------------------------------------------------------------------------------
/tmp.tex:
--------------------------------------------------------------------------------
1 | \section{Принцип Дирихле}
2 |
3 | Предположим, что у нас есть $n$ клеток и $n+1$ голубь и мы рассадили голубей по клеткам. Довольно очевидно, что в одной из клеток окажется по крайней мере два голубя. Впервые это тривиальные наблюдение сделал и начал использовать в математике немецкий математик Дирихле в XIX веке. С тех пор это наблюдение называется в России <<принципом Дирихле>>, а за пределами бывшего СССР <<принципом голубиных гнёзд>> (pigeonhole principle). Прежде чем перейти к более сложным примерам применения этих принципов, переформулируем утверждение на языке множеств.
4 |
5 | \begin{thm}
6 | Пусть $A$ и $B$ такие множества, что $|A|>|B|$, и дана функция $f:A\to B$. Тогда функция $f$ не является инъективной.
7 | \end{thm}
8 | \begin{proof}
9 | Для инъективной функции $|f(A)| = |A|$, однако в нашем случае это противоречит условию $|A|>|B|$, поскольку $f(A)\subset B$.
10 | \end{proof}
11 |
12 | \begin{exercise}
13 | Утверждение принципа Дирихле тривиально в терминах множеств и отображений. А сможете ли вы доказать этот принцип, используя только аксиоматику Пеано?
14 | \end{exercise}
15 |
16 | Введем обозначение $\lceil {m\over n} \rceil = \min\{k|kn\ge m\}$. Эта операция называется \term{потолок} и интуитивно представляет собой результат деления $m$ на $n$ с округлением в большую сторону: если число не делится без остатка, то к частному прибавляется единица.
17 |
18 | \begin{exercise}
19 | Пусть теперь у нас $m$ голубей и $n$ клеток. Докажите, что в одной из клеток окажется по крайней мере $\lceil{m\over n}\rceil$. Эта теорема называется \term{обобщённым принципом Дирихле}.
20 | \end{exercise}
21 |
22 | Рассмотрим теперь ряд простых применений принципа Дирихле. Частично они позаимствованы из Википедии, частично из замечательной книги <>.
23 |
24 | \begin{example}
25 | Пусть в ящике лежит большое число белых, чёрных и красных носков. Когда мы вытаскиваем носок, мы не видим его цвет до тех пор, пока не вытащим его. Сколько надо достать носков, прежде чем мы гарантированно получим пару одного цвета?
26 | \end{example}
27 |
28 | Пусть множество $A$~--- это те носки, которые мы достали из ящика. Пусть далее множество $B$~--- это множество цветов носков. В нашем случае $|B|=3$. Каждый носок имеет цвет, что соответствует отображению $f:A\to B$. В задаче требуется, чтобы у нас минимум два носка обладали одним цветом, то есть чтобы функция $f$ не была инъективной. По принципу Дирихле это достигается когда $|A|>|B|$. Таким образом нам достаточно взять $$|A|=|B|+1 = 4$$ носков для того, чтобы гарантированно найти пару одинаковых цветов.
29 |
30 | \begin{exercise}
31 | На праздник пришло $n$ человек. Какие-то из этих людей поздоровались за руку. Докажите, что всегда найдётся такая пара людей, которые совершили одинаковое число рукопожатий.
32 | \end{exercise}
33 |
34 | Данное утверждение называется <<леммой о рукопожатиях>> и может быть сформулировано более абстрактно для графов:
35 |
36 | \begin{definition}
37 | \term{Степенью} вершины графа называется число рёбер, инцидентных ей.
38 | \end{definition}
39 |
40 | \begin{HandshakesLemma}
41 | В любом графе найдутся две вершины с одинаковой степенью.
42 | \end{HandshakesLemma}
43 |
44 | \begin{example}
45 | Давайте докажем, что в Москве найдётся по крайней мере два человека с одинаковым числом волос на голове.
46 |
47 | Пусть $A$~--- множество жителей Москвы, $B$~--- множество чисел, соответствующих возможному числу волос на голове. Точно мы это множество определить видимо не можем, но по крайней мере можем дать грубую оценку $|B|<1000000$. Однако жителей Москвы явно больше. Опять же мы не знаем этого точно, но крайней мере $|A|>1000000$, откуда следует то отображение $A\to B$ не может быть инъективным и найдутся два жителя с одинаковым числом волос.
48 | \end{example}
49 |
50 | \begin{example}
51 | Рассмотрим последовательность чисел 1, 11, 111, 1111, $\ldots$ и докажем, что в этой последовательности найдётся число, которое делится на 123.
52 |
53 | Вначале обозначим элементы этой последовательности как $a_i$ и заметим, что их можно записать как
54 | $a_i = \sum_{k=0}^{i-1}10^k$
55 |
56 | Предположим теперь, что числа, которое делится на 123, в этой последовательности нет. Рассмотрим тогда последовательность остатков от деления на 123 элементов этой последовательности:
57 | $$1, 11, 111, 4, 41, 42, 52, 29, \ldots$$
58 |
59 | В этой последовательности обязательно найдутся два одинаковых числа, поскольку остаток от деления на 123 может максимум равняться 122, поэтому по принципу Дирихле уже среди первых 123 элементов мы встретим повторение. Пусть это будут остатки от деления чисел $a_i$ и $a_j$ на 123 (для определённости пусть $i>j$), которые мы обозначим за $r$:
60 | $$a_i = 123q_i + r$$
61 | $$a_j = 123q_j + r$$
62 | Вычтя из первого равенства второе, имеем
63 | \begin{equation}\label{np:1}
64 | a_i - a_j = 123(q_i - q_j)
65 | \end{equation}
66 | Однако если вспомнить определение $a_i$ то легко увидеть, что
67 | \begin{align*}
68 | a_i - a_j &= \sum_{k=0}^{i-1}10^k - \sum_{k=0}^{j-1}10^k \\&= \sum_{k=j}^{i-1}10^k \\&= 10^j\sum_{k=0}^{i-j}10^k \\&= 10^j a_{i-j}
69 | \end{align*}
70 | Сопоставляя это с \eqref{np:1}, получаем
71 | $$10^j a_{i-j} = 123(q_i - q_j)$$
72 | Здесь правая часть делится на 123, а значит на 123 должна делится и левая часть. Однако $10^j$ и $a_{i-j}$ взаимопросты и более того $10^j$ не делится на 123. Отсюда следует, что $123|a_{i-j}$, что и требовалось.
73 | \end{example}
74 |
75 | \begin{example}
76 | Докажем, что за последнюю тысячу лет у читателя был такой предок $A$, который одновременно является предком и отца и матери некоторого другого предка $P$ читателя.
77 |
78 | У читателя есть отец и мать (2 человека). У них у каждого так же в свою очередь есть по отцу и матери~--- это дедушки и бабушки читателя, всего их $4=2^2$ человека. У них в свою очередь есть свои мамы и папы (прабабушки и прадедушки), которых всего $8=2^3$ человек. Легко увидеть закономерность: $i$-е поколение предков читателя состоит из $2^i$ человек. Если грубо предположить, что поколения сменяются каждые 25 лет, то за 1000 лет поколения успели смениться 40 раз, и того за 1000 лет читатель имел
79 | $$\sum_{i=1}^{40} 2^i = 2^{41} - 1$$
80 | предков. Последнее равенство легко следует из свойств двоичной системы счисления (проверьте!).
81 |
82 | В то же время население нашей планеты в данный момент меньше чем $10^{10}$, а в прошлые года оно было ещё меньше. Как самая грубая верхняя оценка количества людей живущих на земле в последнюю 1000 лет можно взять величину $40\cdot 10^10$~--- она намного выше реального количества людей, проживавших на земле, но однако даже эта оценка не превосходит величины $2^{41} - 1$, в чём легко убедиться, взяв в руки калькулятор.
83 |
84 | Рассуждение будет понятнее, если посмотреть на генеалогическое дерево на рисунке~3.3.
85 |
86 | \begin{figure}[h]
87 | \centering
88 | \begin{tikzpicture}
89 | \def\point{node [circle, draw, fill, inner sep = 0, minimum size = .1cm] }
90 | \draw (0, 0) \point (p0) {};
91 | \draw (-1cm, .5cm) \point (p1) {};
92 | \draw (1cm, .5cm) \point (p2) {};
93 | \draw (-1.5cm, 1cm) \point (p3) {};
94 | \draw (-.5, 1cm) \point (p4) {};
95 | \draw (.5cm, 1cm) \point (p5) {};
96 | \draw (1.5cm, 1cm) \point (p6) {};
97 | \draw (-1.7cm, 1.5cm) \point(p7) {};
98 | \draw (-1.3cm, 1.5cm) \point(p8) {};
99 | \draw (-.7cm, 1.5cm) \point(p9) {};
100 | \draw (-.3cm, 1.5cm) \point(p10) {};
101 | \draw (.3cm, 1.5cm) \point(p11) {};
102 | \draw (.7cm, 1.5cm) \point(p12) {};
103 | \draw (1.3cm, 1.5cm) \point(p13) {};
104 | \draw (1.7cm, 1.5cm) \point(p14) {};
105 |
106 | \node [below] at (p0) {читатель ($i=0$)};
107 | \node [left] at (p1) {мама ($i = 1$)};
108 | \node [right] at (p2) {папа};
109 | \node [left] at (p3) {($i=2$)};
110 | \node [left] at (p7) {($i=3$)};
111 |
112 | \draw (p0) -- (p1);
113 | \draw (p0) -- (p2);
114 | \draw (p1) -- (p3);
115 | \draw (p1) -- (p4);
116 | \draw (p2) -- (p5);
117 | \draw (p2) -- (p6);
118 | \draw (p3) -- (p7);
119 | \draw (p3) -- (p8);
120 | \draw (p4) -- (p9);
121 | \draw (p4) -- (p10);
122 | \draw (p5) -- (p11);
123 | \draw (p5) -- (p12);
124 | \draw (p6) -- (p13);
125 | \draw (p6) -- (p14);
126 | \end{tikzpicture}
127 | \caption{Генеалогическое дерево}
128 | \end{figure}
129 |
130 | Сравнение общего количества людей на земле с количеством предков даёт нам понять, что исходя из принципа Дирихле некоторые вершины этого дерева неминуемо должны совпасть, поскольку людей на земле за 1000 лет жило меньше, чем это дерево могло бы иметь вершин в случае, если бы приведённое утверждение было ложным. Это ровно то, что требовалось доказать.
131 | \end{example}
132 |
133 | \begin{example}
134 | Мистер и миссис Смит пригласили к себе в гости четыре пары. Некоторые из приглашённых были друзьями мистера Смита, а некоторые друзьями миссис Смит. Когда гости прибыли, те, кто знали друг друга ранее, пожали руки. Когда всё это произошло мистер Смит говорит: <<Как интересно! Если не считать меня, то здесь никто не поздоровался за руку одинаковое количество раз>>. Вопрос: сколько раз пожала руку миссис Смит?
135 |
136 | На первый взгляд задача кажется абсолютно нерешаемой. Тем не менее, проявив стойкость, мы можем её решить опять же с помощью всё того же принципа Дирихле. Начинает задача поддаваться решению, если мы изобразим её в виде графа.
137 |
138 | \begin{figure}[h]
139 | \centering
140 | \begin{tikzpicture}
141 | \def\point{node [circle, draw, fill, inner sep = 0, minimum size = .1cm] }
142 | \draw (-1.76cm, 2.42cm) \point (smith) {};
143 | \draw (0, 3cm) \point (p8) {};
144 | \draw (1.76cm, 2.43cm) \point (p7) {};
145 | \draw (2.85cm, 0.93cm) \point (p6) {};
146 | \draw (2.85, -0.93cm) \point (p5) {};
147 | \draw (1.76cm, -2.43cm) \point (p4) {};
148 | \draw (0, -3cm) \point (p3) {};
149 | \draw (-1.76cm, -2.43cm) \point(p2) {};
150 | \draw (-2.85cm, -.93cm) \point(p1) {};
151 | \draw (-2.85cm, .93cm) \point(p0) {};
152 |
153 | \node [left] at (smith) {м.Смит};
154 | \node [above] at (p8) {8};
155 | \node [above] at (p7) {7};
156 | \node [above] at (p6) {6};
157 | \node [above] at (p5) {5};
158 | \node [above] at (p4) {4};
159 | \node [above] at (p3) {3};
160 | \node [above] at (p2) {2};
161 | \node [above] at (p1) {1};
162 | \node [above] at (p0) {0};
163 |
164 | \end{tikzpicture}
165 | \caption{Граф гостей четы Смит}
166 | \end{figure}
167 |
168 | Каждый человек на вечеринке у нас будет представлен отдельной вершиной. Ребра графа будут соответствовать рукопожатиям. Семейные пары будем выделять рамкой. На начальном этапе нам известно лишь, что все присутствующие кроме мистера Смита совершили различное количество рукопожатий. Максимальное количество рукопожатий, которые могло быть совершено~--- 8 (всего десять гостей, причём со своим спутником никто не здоровается, отсюда максимум восемь рукопожатий). Поэтому все вершины мы можем пронумеровать числами от 0 до 8, и одну вершину мы обозначим просто как Смит~--- мы не знаем сколько рукопожатий он совершил. Самих гостей мы будем нумеровать так же, то есть когда мы будем говорить фразу <<пятый гость>>, то мы будем подразумевать гостя, который совершил пять рукопожатий. Получившийся граф представлен на рис.~3.4.
169 |
170 | \begin{figure}[h]
171 | \centering
172 | \begin{tikzpicture}
173 | \def\point{node [circle, draw, fill, inner sep = 0, minimum size = .1cm] }
174 | \draw (-1.76cm, 2.42cm) \point (smith) {};
175 | \draw (0, 3cm) \point (p8) {};
176 | \draw (1.76cm, 2.43cm) \point (p7) {};
177 | \draw (2.85cm, 0.93cm) \point (p6) {};
178 | \draw (2.85, -0.93cm) \point (p5) {};
179 | \draw (1.76cm, -2.43cm) \point (p4) {};
180 | \draw (0, -3cm) \point (p3) {};
181 | \draw (-1.76cm, -2.43cm) \point(p2) {};
182 | \draw (-2.85cm, -.93cm) \point(p1) {};
183 | \draw (-2.85cm, .93cm) \point(p0) {};
184 |
185 | \node [left] at (smith) {м.Смит};
186 | \node [above] at (p8) {8};
187 | \node [above] at (p7) {7};
188 | \node [above] at (p6) {6};
189 | \node [above] at (p5) {5};
190 | \node [right] at (p4) {4};
191 | \node [below] at (p3) {3};
192 | \node [left] at (p2) {2};
193 | \node [above] at (p1) {1};
194 | \node [above] at (p0) {0};
195 |
196 | \draw (p8) -- (smith);
197 | \draw (p8) -- (p1);
198 | \draw (p8) -- (p2);
199 | \draw (p8) -- (p3);
200 | \draw (p8) -- (p4);
201 | \draw (p8) -- (p5);
202 | \draw (p8) -- (p6);
203 | \draw (p8) -- (p7);
204 |
205 | \draw[dashed] (0, 3.2cm) -- (.4cm, 2.8cm) -- (-2.9cm, .68cm) -- (-3.3cm, .92cm) -- cycle;
206 | \end{tikzpicture}
207 | \caption{Граф гостей четы Смит}
208 | \end{figure}
209 |
210 | Рассмотрим поближе 8-го гостя. Он не поздоровался лишь с одним человеком с одной стороны, и с другой стороны он очевидно не здоровался со своим спутником. Так же мы знаем точно, что он не здоровался с нулевым гостем, так как нулевой гость не совершил вообще ни одного рукопожатия. Соответственно нулевой гость и есть его спутник. Со всеми остальными гостями он поздоровался. Полученный результат изображён на рисунке~3.5.
211 |
212 | \begin{figure}[h]
213 | \centering
214 | \begin{tikzpicture}
215 | \def\point{node [circle, draw, fill, inner sep = 0, minimum size = .1cm] }
216 | \draw (-1.76cm, 2.42cm) \point (smith) {};
217 | \draw (0, 3cm) \point (p8) {};
218 | \draw (1.76cm, 2.43cm) \point (p7) {};
219 | \draw (2.85cm, 0.93cm) \point (p6) {};
220 | \draw (2.85, -0.93cm) \point (p5) {};
221 | \draw (1.76cm, -2.43cm) \point (p4) {};
222 | \draw (0, -3cm) \point (p3) {};
223 | \draw (-1.76cm, -2.43cm) \point(p2) {};
224 | \draw (-2.85cm, -.93cm) \point(p1) {};
225 | \draw (-2.85cm, .93cm) \point(p0) {};
226 |
227 | \node [left] at (smith) {м.Смит};
228 | \node [above] at (p8) {8};
229 | \node [above] at (p7) {7};
230 | \node [above] at (p6) {6};
231 | \node [above] at (p5) {5};
232 | \node [right] at (p4) {4};
233 | \node [below] at (p3) {3};
234 | \node [left] at (p2) {2};
235 | \node [above] at (p1) {1};
236 | \node [above] at (p0) {0};
237 |
238 | \draw (p8) -- (smith);
239 | \draw (p8) -- (p1);
240 | \draw (p8) -- (p2);
241 | \draw (p8) -- (p3);
242 | \draw (p8) -- (p4);
243 | \draw (p8) -- (p5);
244 | \draw (p8) -- (p6);
245 | \draw (p8) -- (p7);
246 |
247 | \draw (p7) -- (smith);
248 | \draw (p7) -- (p2);
249 | \draw (p7) -- (p3);
250 | \draw (p7) -- (p4);
251 | \draw (p7) -- (p5);
252 | \draw (p7) -- (p6);
253 |
254 | \draw[dashed] (0, 3.2cm) -- (.4cm, 2.8cm) -- (-2.9cm, .68cm) -- (-3.3cm, .92cm) -- cycle;
255 | \draw[dashed] (1.76cm, 3cm) -- (2.5cm, 2.5cm) -- (-3cm, -1.3cm) -- (-3.2cm, -.65cm) -- cycle;
256 |
257 | \end{tikzpicture}
258 | \caption{Граф гостей четы Смит}
259 | \end{figure}
260 |
261 | Теперь рассмотрим 7-го гостя. Он не поздоровался за руку с двумя гостями, один из которых~--- его партнёр, а вторым должен быть нулевой гость (нулевой гость не может быть партнёром 7-го гостя, так как мы уже выяснили, что нулевой и восьмой гости образуют пару). Глядя на граф мы так же видим, что первый гость поздоровался с восьмым гостем, но так как нам известно, что он в принципе поздоровался лишь с одним человеком, то он не мог поздороваться с седьмым гостем. Значит, первый и седьмой гости образуют пару, и седьмой гость поздоровался со всеми кроме нулевого и первого гостя. Это отображено на рисунке~3.6.
262 |
263 | \begin{figure}[h]
264 | \centering
265 | \begin{tikzpicture}
266 | \def\point{node [circle, draw, fill, inner sep = 0, minimum size = .1cm] }
267 | \draw (-1.76cm, 2.42cm) \point (smith) {};
268 | \draw (0, 3cm) \point (p8) {};
269 | \draw (1.76cm, 2.43cm) \point (p7) {};
270 | \draw (2.85cm, 0.93cm) \point (p6) {};
271 | \draw (2.85, -0.93cm) \point (p5) {};
272 | \draw (2cm, -2.8cm) \point (p4) {};
273 | \draw (0, -3cm) \point (p3) {};
274 | \draw (-1.76cm, -2.43cm) \point(p2) {};
275 | \draw (-2.85cm, -.93cm) \point(p1) {};
276 | \draw (-2.85cm, .93cm) \point(p0) {};
277 |
278 | \node [left] at (smith) {м.Смит};
279 | \node [above] at (p8) {8};
280 | \node [above] at (p7) {7};
281 | \node [above] at (p6) {6};
282 | \node [right] at (p5) {5};
283 | \node [right] at (p4) {4};
284 | \node [below] at (p3) {3};
285 | \node [left] at (p2) {2};
286 | \node [above] at (p1) {1};
287 | \node [above] at (p0) {0};
288 |
289 | \draw (p8) -- (smith);
290 | \draw (p8) -- (p1);
291 | \draw (p8) -- (p2);
292 | \draw (p8) -- (p3);
293 | \draw (p8) -- (p4);
294 | \draw (p8) -- (p5);
295 | \draw (p8) -- (p6);
296 | \draw (p8) -- (p7);
297 |
298 | \draw (p7) -- (smith);
299 | \draw (p7) -- (p2);
300 | \draw (p7) -- (p3);
301 | \draw (p7) -- (p4);
302 | \draw (p7) -- (p5);
303 | \draw (p7) -- (p6);
304 |
305 | \draw (p6) -- (smith);
306 | \draw (p6) -- (p3);
307 | \draw (p6) -- (p4);
308 | \draw (p6) -- (p5);
309 |
310 | \draw (p5) -- (smith);
311 | \draw (p5) -- (p4);
312 |
313 | \draw[dashed] (0, 3.2cm) -- (.4cm, 2.8cm) -- (-2.9cm, .68cm) -- (-3.3cm, .92cm) -- cycle;
314 | \draw[dashed] (1.76cm, 3cm) -- (2.5cm, 2.5cm) -- (-3cm, -1.3cm) -- (-3.2cm, -.65cm) -- cycle;
315 | \draw[dashed] (2.85cm, 1.4cm) -- (3.3cm, 0.9cm) -- (-2.2cm, -3cm) -- (-2.26cm, -2cm) -- cycle;
316 | \draw[dashed] (3cm, -0.5cm) -- (3.3cm, -1.1cm) -- (-.02cm, -3.5cm) -- (-.43cm, -2.5cm) -- cycle;
317 |
318 | \end{tikzpicture}
319 | \caption{Граф гостей четы Смит}
320 | \end{figure}
321 |
322 | Совершенно аналогичным образом мы можем показать, что шестой гость не здоровался с госями 0, 1 и 2 и что 2-ой гость является его спутником. Отсюда можно аналогично получить, что пятый гость не здоровался с гостями 0, 1, 2 и 3, и что третий гость является его спутником. Результат представлен на рисунке~3.7
323 |
324 | Теперь мы нашли пару для всех людей, кроме четвёртого. Единственная возможная пара для четвёртого человека~--- это мистер Смит, поэтому четвёртый человек и есть миссис Смит, и она пожала руку ровно четырём людям.
325 | \end{example}
326 |
327 | Для последнего упражнения этого параграфа опять введём новую нотацию: будем обозначать через $a\Mod b$ остаток от деления $a$ на $b$.
328 |
329 | \begin{exercise}
330 | Пусть $n$ и $m$~--- взаимопростые числа и пусть нам известно, что
331 | $$x\Mod n = a$$
332 | $$x\Mod m = b$$
333 | Докажите используя принцип Дирихле, что это уравнение всегда имеет ровно одно решение $x$, меньшее $mn$.
334 | \end{exercise}
335 |
--------------------------------------------------------------------------------
/logic-basics.tex:
--------------------------------------------------------------------------------
1 | \section{Базовые понятия}
2 |
3 | \term{Высказыванием} мы будем называть любую осмысленную фразу русского языка. Например: «На улице идёт дождь», «Девки гуляют по улице», <<Вася тонировал свою \glqqшестёрку\grqq>>. В рамках науки математической логики мы, правда, ограничимся лишь теми высказываниями, про которые можно однозначно судить, \term{истинны} они или \term{ложны} (мы можем этого не знать, но важно, что сама постановка фразы допускает однозначную трактовку высказывания).
4 |
5 | Истинные высказывания мы будем обозначать символом $1$, а ложные~--- символом $0$. В общем-то, нас даже не будет интересовать сам физический смысл высказывания, лишь его истинность~--- справедливость всех логических законов и операций, о~которых мы будем говорить, не зависит от содержания самих высказываний и оперирует лишь с понятием истинности.
6 |
7 | Сами высказывания мы будем обозначать какими-нибудь буквами какого-нибудь алфавита (использовать ли заглавные или строчные, английские или греческие символы, совершенно не принципиально~--- в разных частях курса мы будем использовать разные соглашения, исходя из соображений удобства). Например, запись $a = 1$ обозначает, что $a$~--- это некоторое истинное высказывание. Повторюсь, что смысл высказывания нас не интересует, оно может быть по сути любым, лишь бы было истиной.
8 |
9 | Определим теперь простейшие логические операции (они же называются логическими связками). Пусть для начала высказывание $a$ имеет конкретный смысл «на улице идёт дождь», а высказывание $b$ имеет смысл «на улице много машин». К этим двум высказываниям можно применить логическую связку (операцию) «И», и в итоге мы получим высказывание «на улице идёт дождь и много машин».
10 |
11 | На языке математики логическая связка «И» обозначается символом $\land$, а результат применения этой связки к нашим двум высказываниям записывается как $a\land b$. (Научно «И» \mbox{также} называется \term{конъюнкцией}, но это знать и помнить совершенно не обязательно.) Давайте теперь рассмотрим истинность этого высказывания. Если это правда, что на улице много машин, и также правда, что на улице идет дождь, то и наше высказывание «на улице много машин и идёт дождь» будет правдой. Если же хотя бы одно из этих утверждений ложно, то и наша фраза $a \land b$ будет ложной: если на улице нет дождя, то не является правдой и составное высказывание «на улице идёт дождь и много машин».
12 |
13 | Определение логической связки «И» можно резюмировать следующей таблицей:
14 |
15 | \begin{table}[h]
16 | \centering
17 | \begin{tabular}{c c | c}
18 | $a$ & $b$ & $a \land b$ \\
19 | \hline
20 | 0 & 0 & 0 \\
21 | 0 & 1 & 0 \\
22 | 1 & 0 & 0 \\
23 | 1 & 1 & 1
24 | \end{tabular}
25 | \caption{Определение логической связки <<И>>}\label{table:logic-and}
26 | \end{table}
27 |
28 |
29 | Подобные таблицы называются таблицами истинности. В них перечислены все возможные логические значения интересующих нас высказываний и результат применения к ним логической связки. Что-то типа таблицы умножения.
30 |
31 | В полной аналогии с операцией «И» можно определить следующие базовые операции:
32 |
33 | \begin{itemize}
34 | \item Операция «ИЛИ», она же «И/ИЛИ», она же \term{дизъюнкция} (запоминать это слово не нужно), обозначается как $\lor$. Выражение $a\lor b$ истинно, когда истинно хотя бы одно из высказываний $a$ или $b$.
35 | \item Операция «Исключающее ИЛИ», по-английски называется «eXclusive OR», или кратко «XOR». По-русски её для краткости часто называют «ксор» или --- в глагольной форме --- «ксорить», хотя слово это, конечно, сленговое и совершенно непечатное. Обозначается данная операция как $\oplus$. Высказывание $a \oplus b$ истинно только тогда, когда истинно лишь одно из высказываний $a$ или $b$, но не оба сразу.
36 | \item Операция «Эквиваленция». Обозначается как $a \leftrightarrow b$. Высказывание $a \leftrightarrow b$ истинно, когда $a$ и $b$ либо одновременно истинны, либо одновременно ложны.
37 | \item Операция «НЕ», она же «Отрицание». Обозначается как $\neg$. Высказывание $\neg a$ истинно тогда, когда $a$ ложно, и наоборот.
38 | \item Операция <<Импликация>>, она же <<Следствие>>. Обозначается как $a \to b$. Высказывание $a \to b$ истинно либо когда одновременно и $a$, и $b$ истинны, либо когда $a$ ложно.
39 | \end{itemize}
40 |
41 | Всё сказанное, возможно, станет более понятно, когда мы выразим все операции одной таблицей истинности:
42 |
43 | \begin{table}[h]
44 | \centering
45 | \begin{tabular}{cc|cccccc}
46 | $a$ & $b$ & $a\land b$ & $a\lor b$ & $a\oplus b$ & $a\leftrightarrow b$ & $\neg a$ & $a \to b$\\
47 | \hline
48 | 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 \\
49 | 0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 \\
50 | 1 & 0 & 0 & 1 & 1 & 0 & 0 & 0 \\
51 | 1 & 1 & 1 & 1 & 0 & 1 & 0 & 1
52 | \end{tabular}
53 | \caption{Сводная таблица истинности логических операций}
54 | \end{table}
55 |
56 | Обратите внимание на то, что в естественном языке фраза «на улице идёт дождь или много машин» не особо хорошо определена~--- непонятно, имеется ли в виду «или то, или другое» (исключающее <<ИЛИ>>), или же «и то, и другое». В математике эти два смысла строго разграничены операциями $\lor$ и $\oplus$.
57 |
58 | Также стоит уточнить смысл операции эквиваленции~--- она в~действительности ничего не говорит о реальной связи между высказываниями, лишь об их истинности. Так, любые два заведомо ложных высказывания оказываются эквивалентны: «Компьютеры не умеют умножать числа» $\leftrightarrow$ «Солнце вращается вок\-руг Земли». То же и с заведомо истинными высказываниями: «Компьютеры считают лучше людей» $\leftrightarrow$ «Земля вращается вок\-руг Cолнца». Это может несколько сбивать с толку поначалу, но более ясен смысл эквиваленции станет несколько позже, когда мы будем говорить о моделях.
59 |
60 | Определение импликации может показаться довольно непонятным, по крайней мере сразу не ясно, почему именно при ложном $a$ должно быть истинно любое следствие $a\to b$. Такое определение действительно не слишком логично, и причины такого определения связаны скорее не с самой логикой, а с формальной необходимостью. Откуда растут корни именно такого \mbox{определения,} мы рассматрим в следующем параграфе, а также в двух параграфах о теориях, пока же примем определение импликации просто как есть и будем относиться к ней как к~арифметической операции без какой-либо специальной мотивации.
61 |
62 | Используя перечисленные операции, можно задавать и довольно сложные высказывания, например, что-то вроде такого:
63 | $$
64 | ((a \lor b) \leftrightarrow (c \land a)) \oplus b.
65 | $$
66 |
67 | Круглыми скобками мы обозначаем порядок, в котором выполняются операции. Если для каждого из высказываний $a$, $b$ и~$c$ определить, истинно оно или ложно, то по таблице истинности можно определить, истинно ли всё высказывание.
68 |
69 | Пусть, например, $a$ истинно, в то время как $b$ и $c$ ложны. Тогда, подставив вместо этих высказываний $1$ и $0$ в приведённую формулу и воспользовавшись правилами из таблицы истинности, можно установить истинность и всего высказывания:
70 | $$
71 | ((1 \lor 0) \leftrightarrow (0 \land 1)) \oplus 0 = (1 \leftrightarrow 0) \oplus 0 = 0 \oplus 0 = 0.
72 | $$
73 |
74 | В итоге наше высказывание оказалось ложно при данных значениях истинности для $a$, $b$ и $c$. Если же, например, все три высказывания будут ложными, то всё высказывание окажется истинным:
75 | $$
76 | ((0 \lor 0) \leftrightarrow (0 \land 0)) \oplus 0 = (0 \leftrightarrow 0) \oplus 0 = 1 \oplus 0 = 1.
77 | $$
78 |
79 | Приведённые примеры скорее напоминают безумную арифметику с двумя цифрами, нежели логику, и наделить каким-то бытовым смыслом приведённые формулы, кажется, уже сложно, но подобные примеры необходимы для того, чтобы понять, как вообще со всеми этими понятиями работать. Позже мы будем рассматривать более осмысленные примеры, пока же мы слишком мало знаем и привести что-то осмысленное сложно.
80 |
81 | Однако пора доказать нашу первую теорему.
82 |
83 | \begin{thm} Для логических операций справедливы следующие законы:
84 |
85 | \subparagraph{Ассоциативность:}
86 | \begin{enumerate}
87 | \item $(a \land b) \land c = a \land (b \land c)$,
88 | \item $(a \lor b) \lor c = a \lor (b \lor c)$,
89 | \item $(a \oplus b) \oplus c = a \oplus (b \oplus c)$.
90 | \end{enumerate}
91 |
92 | \subparagraph{Коммутативность:}
93 | \begin{enumerate}
94 | \item $a \land b = b \land a$,
95 | \item $a \lor b = b \lor a$,
96 | \item $a \oplus b = b \oplus a$,
97 | \item $a \leftrightarrow b = b \leftrightarrow a$.
98 | \end{enumerate}
99 |
100 | \subparagraph{Дистрибутивность:}
101 | \begin{enumerate}
102 | \item $a \land (b \lor c) = (a \land b) \lor (a \land c)$,
103 | \item $a \lor (b \land c) = (a \lor b) \land (a \lor c)$,
104 | \item $a \land (b \oplus c) = (a \land b) \oplus (a \land c)$.
105 | \end{enumerate}
106 |
107 | \subparagraph{Двойное отрицание:}
108 | \begin{enumerate}
109 | \item $\neg\neg a = a$.
110 | \end{enumerate}
111 |
112 | \subparagraph{Закон исключенного третьего:}
113 | \begin{enumerate}
114 | \item $a \lor \neg a = 1$,
115 | \end{enumerate}
116 |
117 | \subparagraph{Закон противоречия:}
118 | \begin{enumerate}
119 | \item $a \land \neg a = 0$,
120 | \end{enumerate}
121 |
122 | \subparagraph{Законы де Моргана:}
123 | \begin{enumerate}
124 | \item $\neg (a \land b) = (\neg a) \lor (\neg b)$,
125 | \item $\neg (a \lor b) = (\neg a) \land (\neg b)$.
126 | \end{enumerate}
127 |
128 | \subparagraph{Ещё по мелочам:}
129 | \begin{enumerate}
130 | \item $a \land 1 = a$,
131 | \item $a \land 0 = 0$,
132 | \item $a \lor 1 = 1$,
133 | \item $a \lor 0 = a$,
134 | \item $a \oplus 0 = a$,
135 | \item $a \oplus 1 = \neg a$,
136 | \item $\neg (a \oplus b) = (a \leftrightarrow b)$,
137 | \item $a \oplus \neg a = 1$,
138 | \item $a\land a = a$,
139 | \item $a \lor a = a$,
140 | \item $a \oplus a = 0$,
141 | \item $a \land (\neg a \lor b) = a \land b$,
142 | \item $a \lor (\neg a \land b) = a \lor b$.
143 | \end{enumerate}
144 |
145 | \subparagraph{Для импликации:}
146 | \begin{enumerate}
147 | \item $a \rightarrow b = b \vee \neg a$
148 | \item $\neg(a \rightarrow b) = a \wedge \neg b$
149 | \item $a \rightarrow a$
150 | \item $a \leftrightarrow b = (a \rightarrow b) \wedge (b\rightarrow a)$
151 | \item Транзитивность: $((a \rightarrow b) \wedge (b \rightarrow c)) \rightarrow (a \rightarrow c)$
152 | \item $(a \vee b) \wedge (\neg a \vee c) \rightarrow b \vee c$
153 | \item $(a \rightarrow b \wedge c) \rightarrow (a \rightarrow b)$
154 | \item $a \rightarrow b = \neg b \rightarrow \neg a$
155 | \end{enumerate}
156 | \end{thm}
157 |
158 | \begin{proof}
159 | Каждую из формул я доказывать не буду, поскольку все они доказываются аналогично и я настоятельно рекомендую провести доказательство самостоятельно. Я лишь продемонстрирую на отдельных примерах, как это делается.
160 |
161 | Подходов тут существует три:
162 | \begin{itemize}
163 | \item Интуитивный. Ассоциативность и коммутативность операций «И» и «ИЛИ» на самом деле очевидна. Вообще, конечно, говорить «очевидно» в математике мы не имеем права, поскольку очевидное часто оказывается неверным и наоборот. Однако в подобных, совсем уж тривиальных случаях, строго доказывать каждую теорему будет утомительно. Если утверждение теоремы у вас не вызывает сомнения, и вы знаете, как его можно строго проверить~--- можно и не париться.
164 | \item Выводить одно из другого, применяя к начальной формуле другие сформулированные нами формулы. Например, вот как можно вывести последнюю формулу в нашем списке, воспользовавшись дистрибутивностью:
165 | $$
166 | a \lor (\neg a \land b) = (a \lor \neg a) \land (a \lor b) = 1 \land (a \lor b) = a \lor b.
167 | $$
168 |
169 | \item Самый тупой и простой способ~--- просто перебрать все возможные варианты, построив таблицу истинности. В таблице 1.3 демонстрируется, как таким образом возможно доказать закон дистрибутивности. Собственно, что и требовалось доказать (следующий за этим предложением значок будет всегда в дальнейшем означать конец доказательства).
170 |
171 | \begin{table}[h]
172 | \centering
173 | \begin{tabular}{ccc|cc|ccc}
174 | $a$&$b$&$c$&$b\lor c$&$a\land(b\lor c)$&$a\land b$&$a\land c$&$(a\land b)\lor(a\land c)$\\
175 | \hline
176 | 0&0&0&0&0&0&0&0\\
177 | 0&0&1&1&0&0&0&0\\
178 | 0&1&0&1&0&0&0&0\\
179 | 0&1&1&1&0&0&0&0\\
180 | 1&0&0&0&0&0&0&0\\
181 | 1&0&1&1&1&0&1&1\\
182 | 1&1&0&1&1&1&0&1\\
183 | 1&1&1&1&1&1&1&1
184 | \end{tabular}
185 | \caption{Доказательство дистрибутивности логических операций}
186 | \end{table}
187 |
188 | \end{itemize}
189 | \end{proof}
190 |
191 | К сожалению, то, что перебор нам тут помог доказать что-то~--- редкое исключение. Кроме как для почти тривиальных логических соотношений метод перебора в математике не годится, поскольку обычно перебирать придётся слишком много значений, с чем никакой компьютер не справится. И это в лучшем случае~--- часто значений, которые придётся перебрать, будет вооб\-ще беско\-неч\-но много, или даже ещё больше.
192 |
193 | Из приведённой теоремы важно выделить законы ассоциативности и дистрибутивности. Закон ассоциативности по сути утверждает, что для перечисленных операций не важно, в каком порядке расставлять скобки и, соответственно, применять операции (чуть более строго мы это обсудим в третьей главе). По этой причине круглые скобки для ассоциативных операций можно вооб\-ще опускать, и следующие выражения оказываются совершенно равнозначны:
194 | $$
195 | (a \lor (b \lor c)) \lor d = (a \lor b) \lor (c \lor d) = a \lor b \lor c \lor d
196 | $$
197 |
198 | Закон коммутативности же означает, что нам не важен порядок участвующих в выражении высказываний. В совокупности с ассоциативностью это говорит также, что мало того, что мы можем опускать скобки, мы ещё и порядок можем путать:
199 | $$
200 | (a \lor (b \lor c)) \lor d = b \lor d \lor c \lor a.
201 | $$
202 |
203 | На фоне этого может оказаться странным поведение эквиваленции. Как легко убедиться, если построить таблицу истинности, операция эквивалентности тоже является ассоциативной:
204 | $$
205 | (a \leftrightarrow b) \leftrightarrow c = a \leftrightarrow (b \leftrightarrow c).
206 | $$
207 |
208 | Тем не менее, если мы будем применять её в таком виде, опустив круглые скобки, то результат может оказаться неожиданным:
209 | $$
210 | (1 \leftrightarrow 0 \leftrightarrow 0) = ((1 \leftrightarrow 0) \leftrightarrow 0) = (0 \leftrightarrow 0) = 1.
211 | $$
212 |
213 | Это несколько противоречит интуитивному представлению о понятии «эквивалентность». Нам хотелось бы иметь возможность писать $a \leftrightarrow b \leftrightarrow c$ и ожидать, что данное высказывание будет истинным лишь в том случае, когда все три высказывания либо одновременно истинны, либо одновременно ложны. Это было бы логично.
214 |
215 | В математике так и поступают. Если в последовательных операциях эквивалентности не указываются скобки, то имеется в виду следующее:
216 | $$
217 | a \leftrightarrow b \leftrightarrow c = (a \leftrightarrow b) \land (b \leftrightarrow c).
218 | $$
219 |
220 | Именно по этой причине закон ассоциативности для эквивалентности обычно не рассматривается. Такая странность возникает из-за некоторой неточности привычного человеческого языка, когда мы, произнося одни и те же слова, можем иногда подразумевать довольно разные логические операции. Это во многом сродни неточности слова «или»: из-за этого нам пришлось разграничивать операции $\lor$ и $\oplus$. Здесь нет никакого парадокса или противоречия~--- это просто надо иметь в виду.
221 |
222 | Также замечания заслуживает закон де Моргана. Он на самом деле обобщается на любое количество высказываний. Для примера продемонстрируем простейшую ситуацию:
223 | $$
224 | \neg(a \lor b \lor c) = \neg(a \lor (b \lor c)) = \neg a \land \neg (b \lor c) = \neg a \land \neg b \land \neg c.
225 | $$
226 |
227 | Аналогично можно распространить этот закон на любое количество высказываний (даже бесконечное). Как это сделать строго математически, мы обсудим в дальнейшем в нашем курсе, пока же можно просто попробовать развить какую-то интуицию относительно этого закона.
228 |
229 | Пусть высказывание $a$ означает, что Тане нравятся бритые мальчики, а высказывание $b$ означает, что Тане нравятся мальчики в спортивных штанах. Предположим, однако, что Таня не дура какая-нибудь, и для неё верно высказывание:
230 | $$
231 | \neg(a \land b) = \text{«Тане не нравятся бритые мальчики в спортштанах»}
232 | $$
233 |
234 | (На всякий случай сообщу, что автор текста сам бреется налысо и имеет в гардеробе зауженные спортштаны.)
235 |
236 | Приведённое высказывание, однако, не подразумевает, что Тане не подойдёт бритый мужчина в костюме, или же патлатый спортсмен~--- данное высказывание говорит лишь о том, что для нее неприемлемо сочетание «лысый + спортштаны». Довольно косноязычно, но можно всё же утверждать следующее:
237 |
238 | \begin{quote}
239 | «Таню устроил бы парень, который хотя бы не лысый или хотя бы не носит спортштаны».
240 | \end{quote}
241 |
242 | Если вдуматься, то это ровно та же самая фраза, которую мы назвали первоначально, но она просто перефразирована. И она дословно выражается как $\neg a \lor \neg b$, а это как раз то, что мы ожидали получить по закону де Моргана. Если добавить к первоначальным двум высказываниям ещё какие-то высказывания, характеризующие предпочтения Тани, то мы получим тот же закон де Моргана, но уже для многих высказываний.
243 |
244 | Подобные интуитивные соображения можно придумать для любой формулы нашей первой теоремы, и хорошо бы это проде\-лать~--- это полезно. С тем же законом де Моргана я впервые столкнулся лет 10 назад (правда не в мат. логике, а в теории вероятностей, которую я пытался читать без какой-либо начальной подготовки), и в книжке, которую я читал, всё, что о нём было сказано, что это «очевидно». Сейчас уже стыдно признаваться, но над этим «очевидным» утверждением мне тогда пришлось поломать голову, прежде чем я смог согласиться с автором в том, что это действительно так.
245 |
246 | Из всего списка приведённых в теореме 1.1 утверждений интересно выделить те, что касаются импликации. При том, что таблица истинности для импликации может показаться довольно странной, она обладает весьма логичными свойствами, которые характерны для интуитивного понятия <<следствия>>. Например, закон транзитивности является отражением простого логического закона: если из $a$ следует $b$, а из $b$ следует $c$, то из $a$ следует $c$. Аналогично равенство $a \rightarrow b = \neg b \rightarrow \neg a$ означает, что если из $a$ следует $b$, и нам известно, что $b$ ложно, то отсюда следует ложность $a$. Таким образом, введённое определение импликации действительно в каком-то смысле отражает операцию <<следствие>>, как мы её понимаем на интуитивном уровне. Эти идеи мы будем развивать в следующих параграфах.
247 |
248 | Читателю же я рекомендую доказать каждую из формул приведённой теоремы и подумать больше не над самим фактом справедливости формулы, а над интуитивной интерпретацией.
249 |
250 |
251 |
--------------------------------------------------------------------------------
/sets-basics.tex:
--------------------------------------------------------------------------------
1 | \section{Основные понятия}
2 |
3 | В прошлой главе мы уже упоминали вскользь множества, сейчас же займёмся ими более плотно. Вспомним во-первых то что уже определяли ранее:
4 |
5 | \begin{definition}
6 | \term{Множеством} называется неупорядоченный набор различимых объектов, называемых \term{элементами} множества.
7 | \end{definition}
8 |
9 | Это определение не является строгим математическим, а скорее аппелирует к интуиции. Строгую аксиоматизацию мы дадим~в~\S2.5, а пока же будем опираться на неформальные рассуждения.
10 |
11 | Задать множества можно многими способами, самый простой из которых заключается в перечислении элементов множества. Например, множество всех гласных английского алфавита можно записать как $V = \{a, e, i, o, u\}$. Можно было бы впрочем описать его и просто словами: «$V$ — это множество гласных английского алфавита». Суть от этого не поменялась бы.
12 |
13 | Обратим внимание на слова «неупорядоченный» и «различимые», которые фигурируют в определении. Неупорядоченность означает, что $\{a, e, i, o, u\} = \{u, o, a, e, i\}$, то есть нам не важно в каком порядке множество задано, важен лишь его состав. «Различимость» говорит о том, что набор элементов $\{a, a, e, e, i\}$ множеством в математическом смысле уже не является — множество не может по определению содержать совершенно одинаковые объекты, которые мы не можем различить.
14 |
15 | В первой главе мы уже сталкивались со многими понятиями, которые являются множествами (могут рассматриваться как множества), и которые могут быть хорошими примерами: множество логических значений $\{0, 1\}$, множество всех формул, множество моделей заданной теории $\mathrm{Mod}(T)$, множество логических функций и так далее. Из более приземлённых примеров можно рассматривать множество всех звёзд на небе, множество учащихся младших классов, множество монет у меня в кармане.
16 |
17 | Отдельного упоминания заслуживает следующее тривиальное, но очень важное множество:
18 |
19 | \begin{definition}
20 | Множество $\varnothing=\{\}$, не содержащее ни одного элемента, называется \term{пустым множеством}.
21 | \end{definition}
22 |
23 | Если $x$ является элементом множества $S$, то это обозначается как $x \in S$. Если не является, то это обозначается как $x \not\in S$.
24 |
25 | Пустое множество таким образом можно охарактеризовать следующим логическим утверждением: $\forall x\ x \not \in \varnothing$.
26 |
27 | Второе определение, которое было давно в первой главе, это определение подмножества:
28 |
29 | \begin{definition}
30 | Множество $A$ называется \term{подмножеством} множества $B$ (обозначение $A\subset B$), если любой элемент из $A$ содержится так же и во множестве $B$.
31 | \end{definition}
32 |
33 | На языке логики это определение можно записать так:
34 | $$\forall x\ (x\in A\rightarrow x\in B)$$
35 |
36 | Очевидно следующее простое свойство: $\forall X\ \varnothing\subset X$, то есть пустое множество является подмножеством любого другого множества. Это может быть непонятно исходя из интуитивного словесного определения, но идеально вписывается в приведённую логическую формулу для подмножеств: высказывание $x\in\emptyset$ всегда ложно, следовательно, импликация $x\in\varnothing \rightarrow X$, всегда истинна, чем бы не являлось $X$. Это демонстрирует преимущество строгих логических формулировок над интуитивными определениями: определение на языке логики всегда позволяет однозначно ответить на ряд вопросов, которые в противном случае могут даже не иметь смысла. По этой причине (а так же в качестве упражнения для мозга) последующие определения мы будем давать сразу и на языке логики, и на обычном человеческом языке.
37 |
38 | Так же полезно вспомнить, что каждое подмножество может быть задано некоторым предикатом, и по каждому подмножеству можно построить предикат, хотя и не однозначно. Множества, заданные предикатами, записываются так: $\{x \in A|P(x)\}$ — так описывается подмножество множества $A$, для элементов которых оказывается истинным предикат $P$.
39 |
40 | \begin{definition}
41 | Множества $A$ и $B$ называются \term{равными}, если они состоят из одних и тех же элементов:
42 | $$A=B \leftrightarrow \forall x\ (x\in A \leftrightarrow x\in B)$$
43 | \end{definition}
44 |
45 | Кто читал первую главу, знает, что
46 | $$(x\in A \leftrightarrow x\in B) = (x \in A \rightarrow x \in B) \wedge (x \in B \rightarrow x \in A)$$
47 | поэтому можно сформулировать следующее свойство:
48 |
49 | \begin{thm}
50 | $A=B$ тогда и только тогда, когда $A\subset B$ и $B \subset A$.
51 | \end{thm}
52 |
53 | \begin{definition}
54 | \term{Объединением} множеств $A$ и $B$ ($A\cup B$) называется множество, которое содержит элементы обоих множеств:
55 | $$\forall x\ (x\in A \vee x \in B \leftrightarrow x\in A\cup B)$$
56 | \end{definition}
57 |
58 | Понятно, что если какие-то элементы входят одновременно и во множество $A$ и во множество $B$, то в объединение множеств они войдут лишь в единственном экземпляре:
59 |
60 | \begin{example}
61 | Пусть $A = \{a, b, c, d\}$ и $B = \{b, c, d, e, f\}$. Тогда
62 | $$A\cup B = \{a, b, c, d, e, f\}$$
63 | \end{example}
64 |
65 | \begin{definition}
66 | \term{Пересечением} множеств $A$ и $B$ ($A\cap B$) называется множество, которое содержит лишь те элементы, которые принадлежат сразу обоим множествам:
67 | $$\forall x, (x\in A \wedge x \in B \leftrightarrow x\in A\cap B)$$
68 | \end{definition}
69 |
70 | \begin{example}
71 | Пусть $A = \{a, b, c, d\}$ и $B = \{b, c, d, e, f\}$. Тогда $A\cap B = \{b, c, d\}$
72 | \end{example}
73 |
74 | \begin{figure}[h]
75 | \centering
76 | \def\seta{(-1,0) circle (2)}
77 | \def\setb{(1,0) circle (2)}
78 | \begin{tikzpicture}
79 | \tikzstyle{element}=[minimum size=1mm, font=\large]
80 | \begin{scope}[even odd rule]
81 | \clip \seta;
82 | \fill[fill=red] \setb;
83 | \end{scope}
84 | \draw \seta;
85 | \draw \setb;
86 | \foreach \t/\x/\y in { z/-3/-2, x/3/-2, y/3/2, a/-2/0, b/-.1/1, c/.3/0, d/-.2/-1,
87 | e/2/.5, f/1.5/-.5 }
88 | \node[element] (\t) at (\x,\y) {$\t$};
89 | \end{tikzpicture}
90 | \caption{Пересечение двух множеств}
91 | \end{figure}
92 |
93 | Операции над множествами можно наглядно изобразить с помощью так называемых \term{кругов Эйлера}. Рисунок~2.1 изображает круги Эйлера для примера, который я только что привёл. Здесь $x$, $y$ и $z$ — это просто некоторые элементы, которые не вошли ни в одно из множеств. Всегда при работе со множествами (да и вообще всегда) важно рассматривать не только объекты, с которыми мы непосредственно работаем, но и внешние факторы. Красным цветом обозначено пересечение двух множеств, представляемых кругами.
94 |
95 | \begin{exercise}
96 | Нарисуйте круги Эйлера для объединения множеств (какую часть рисунка надо закрасить цветом?)
97 | \end{exercise}
98 |
99 | \begin{definition}
100 | Множества называются \term{непересекающимися}, если $A\cap B = \varnothing$ (то есть множества не имеют общих элементов). В противном случае множества называются пересекающимися.
101 | \end{definition}
102 |
103 | \begin{example}
104 | Множества $\{a, b, c\}$ и $\{d, e, f\}$ не пересекаются. Множества $\{a, b\}$ и $\{b, c\}$ пересекаются, и их пересечением является множество $\{b\}$.
105 | \end{example}
106 |
107 | \begin{definition}
108 | \term{Разностью} множеств $A\setminus B$ называется множество, содержащее все те элементы $A$, которые не содержатся в $B$:
109 | $$\forall x\ (x \in A\cap B \leftrightarrow x\in A \wedge x \not \in B)$$
110 | \end{definition}
111 |
112 | \begin{example}
113 | Пусть $A = \{a, b, c, d\}$ и $B = \{b, c, d, e, f\}$. Тогда $A\setminus B = \{a\}$
114 | \end{example}
115 |
116 | \begin{exercise}
117 | Нарисуйте круги Эйлера для разности множеств.
118 | \end{exercise}
119 |
120 | \begin{definition}
121 | \term{Симметрической разностью} $A\bigtriangleup B$ называется множество $(A\setminus B)\cup (B\setminus A)$, то есть множество элементов, принадлежащих либо $A$, либо $B$, но не их пересечению:
122 | $$\forall x\ (x\in A\bigtriangleup B \leftrightarrow x\in A \oplus x\in B)$$
123 | \end{definition}
124 |
125 | \begin{example}Пусть $A = \{a, b, c, d\}$ и $B = \{b, c, d, e, f\}$. Тогда
126 | $$A\bigtriangleup B = \{a, e, f\}$$
127 | \end{example}
128 |
129 | \begin{exercise}
130 | Нарисуйте круги Эйлера для симметрической разности множеств.
131 | \end{exercise}
132 |
133 | Часто при работе со множествами, мы держим в уме, что все элементы нашего множества являются элементами некоторого другого более крупного множества, содержащего все возможные объекты рассматриваемой нами задачи. Например, если мы говорим о множестве звёзд на небе, то мы можем держать в уме так же множество всех звёзд вообще, а не только видимых нам. Если мы говорим о множестве учеников десятого класса школы N469, то как более общее множество мы можем подразумевать множество вообще всех учеников этой школы, либо же множество всех школьников страны, либо же множество всех людей. Смотря что за задачу мы решаем. Поэтому оказывается полезным ввести следующее определение:
134 |
135 | \begin{definition}
136 | \term{Универсальным множеством}, или \term{универсумом}, называется множество всех возможных элементов, имеющих смысл в решаемой задаче.
137 | \end{definition}
138 |
139 | \begin{example}
140 | Если посмотреть на круги Эйлера, приведённые выше для иллюстрации объединения множеств и считать, что на картинке представлены все интересные нам элементы, то там универсумом в этом случае является множество
141 | $$U = \{a, b, c, d, e, f, x, y, z\}$$
142 | \end{example}
143 |
144 | \begin{definition}
145 | \term{Дополнением} множества $A$ (обозначается как $A^C$) называется множество элементов универсума, не принадлежащих множеству $A$:
146 | $$\forall x\ x\in A^C \leftrightarrow x\in U \wedge x \not \in A$$
147 | где $U$ — универсум. Это же можно записать и без упоминания универсума, если предположить, что мы держим его «в уме»:
148 | $$\forall x\ x\in A^C \leftrightarrow x\not \in A$$
149 | \end{definition}
150 |
151 | Понятно, что для операции дополнения необходимо строгое задание универсума, иначе она теряет смысл.
152 |
153 | \begin{example}
154 | Пусть $U = \{a, b, c, d, e, f, x, y, z\}$ и $A = \{a, b, c, d\}$. Тогда $A^C = \{e, f, x, y, z\}$
155 | \end{example}
156 |
157 | \begin{exercise}
158 | Нарисуйте круги Эйлера для дополнения.
159 | \end{exercise}
160 |
161 | Основные понятия мы определили, теперь надо разобраться с их свойствами. Однако прежде чем мы сформулируем нашу первую теорему о множествах, сделаем такое существенное наблюдение: практически все логические операции и операции над множествами находятся в соответствии друг с другом и операции над множествами определяются просто через логические операции. Так, логическое И задаёт пересечение множеств. Логическое ИЛИ — объединение. Исключающее ИЛИ — симметрическую разность. Отрицание высказываний — дополнение множеств. Эквиваленция — равенство множеств. Импликация — подмножества. В некотором смысле можно так же провести аналогию между универсумом и истинным высказыванием, а так же пустым множеством и ложным высказыванием.
162 |
163 | Для продвинутых читателей, которые целиком осилили и поняли первую главу, отмечу, что сильно извратившись определить можно не только операции над множествами через операции над высказываниями, но и наоборот. Пусть, например, у нас есть теория $T_0$ и формулы $\phi$ и $\psi$. Пусть у нас так же есть теория $T_1$, для которой известно, что $\mathrm{Mod}(T_1) = \mathrm{Mod}(T_0, \phi) \cup \mathrm{Mod}(T_0, \psi)$. Тогда можно показать (сделайте это самостоятельно), что теория $T_1 = T_0 \cup \{\phi\vee \psi\}$ будет иметь как раз требуемое множество моделей (хотя такая теория может быть конечно не единственна), и именно через свойства моделей при добавлении формул можно определить логическое ИЛИ. Нечто аналогичное мы делали, когда определяли понятие импликации. Нечто аналогичное можно сделать и для всех других логических операций.
164 |
165 | \begin{thm}Для операций над множествами справедливы следующие законы:
166 | \subparagraph{Ассоциативность:}
167 | \begin{enumerate}
168 | \item $(A \cap B) \cap C = A \cap (B \cap C)$
169 | \item $(A \cup B) \cup C = A \cup (B \cup C)$
170 | \item $(A \bigtriangleup B) \bigtriangleup C = A \bigtriangleup (B \bigtriangleup C)$
171 | \end{enumerate}
172 | \subparagraph{Коммутативность:}
173 | \begin{enumerate}
174 | \item $A \cap B = B \cap A$
175 | \item $A \cup B = B \cup A$
176 | \item $A \bigtriangleup B = B \bigtriangleup A$
177 | \item $A = B$ равносильно $B = A$.
178 | \end{enumerate}
179 | \subparagraph{Дистрибутивность:}
180 | \begin{enumerate}
181 | \item $A \cap (B \cup C) = (A \cap B) \cup (A \cap C)$
182 | \item $A \cup (B \cap C) = (A \cup B) \cap (A \cup C)$
183 | \item $A \cap (B \bigtriangleup C) = (A \cap B) \bigtriangleup (A \cap C)$
184 | \end{enumerate}
185 | \subparagraph{Двойное дополнение:}
186 | \begin{enumerate}
187 | \item $(A^C)^C = A$
188 | \end{enumerate}
189 | \subparagraph{Законы де Моргана:}
190 | \begin{enumerate}
191 | \item $(A \cap B)^C = A^C \cup B^C$
192 | \item $(A \cup B)^C =A^C \cap B^C$
193 | \end{enumerate}
194 | \subparagraph{Еще по мелочам (здесь $U$ — универсальное множество):}
195 | \begin{enumerate}
196 | \item $A \cap U = A$
197 | \item $A \cap \varnothing = \varnothing$
198 | \item $A \cup U = U$
199 | \item $A \cup \varnothing = A$
200 | \item $A \bigtriangleup \varnothing = A$
201 | \item $A \bigtriangleup U = A^C$
202 | \item $A \cap A^C = \varnothing$
203 | \item $A \cup A^C = U$
204 | \item $A \bigtriangleup A^C = U$
205 | \item $A\cap A = A$
206 | \item $A\cup A = A$
207 | \item $A \bigtriangleup A = \varnothing$
208 | \item $A \cap (A^C \cup B) = A \cap B$
209 | \item $A \cup (A^C \cap B) = A \cup B$
210 | \end{enumerate}
211 | \subparagraph{Новенькое для отрицания:}
212 | \begin{enumerate}
213 | \item $A \setminus B = A \cap B^C$
214 | \end{enumerate}
215 | \subparagraph{Свойства подмножеств:}
216 | \begin{enumerate}
217 | \item Если $A \not \subset B$, то $A$ и $B^C$ пересекаются.
218 | \item $A \subset A$
219 | \item Транзитивность: $A \subset B \wedge B \subset C \rightarrow A \subset C$ (думаю на всякий случай это свойство полезно проговорить словами: если $A\subset B$ и $B\subset C$, то $A\subset C$)
220 | \item $A \subset B\cap C \rightarrow A \subset B$
221 | \item Если $A \subset B$, то $B^C \subset A^C$ и наоборот.
222 | \end{enumerate}
223 | \end{thm}
224 | \begin{proof}Во-первых, как можно заметить, все эти свойства дублируют соответствующие свойства для логических операций. Такой вот поворот событий. Некоторые свойства пришлось немного переформулировать (в основном в части с импликацией), одно свойство добавилось для разности множеств, несколько свойств потеряли смысл в теории множеств либо стали неинтересны. Но в целом мы имеем то же самое один в один.
225 |
226 | Доказательства всех этих свойств оказываются совершенно элементарны и сводятся, как можно догадаться, к простой переформулировке на языке логики. Давайте докажем, например, свойство~10 (мы здесь активно используем задание подмножеств предикатами, которые в нашем случае являются простой логической формулой, а так же дистрибутивность из теоремы~1.1):
227 | \begin{align*}
228 | A \cap (B \bigtriangleup C) &= \{x|x\in A \wedge x \in B\bigtriangleup C\} \\
229 | & = \{x|x\in A \wedge (x \in B \oplus x \in C)\}\\
230 | & = \{x|(x\in A \wedge x \in B) \oplus (x \in A \wedge x \in C)\}\\
231 | & = \{x|(x\in A \cap B) \oplus (x \in A \cap C)\} \\
232 | & = \{x|x\in (A \cap B) \bigtriangleup (A \cap C)\}\\
233 | & = (A \cap B) \bigtriangleup (A \cap C)
234 | \end{align*}
235 |
236 | Что и требовалось. Как видно из этих рассуждений, операции над множествами и операции над высказываниями — это действительно очень близкие понятия, которые во многом отражают одно и то же, только под разным углом.
237 |
238 | Остальные свойства докажите самостоятельно в качестве упражнения, а так же нарисуйте круги Эйлера для этих свойств — они должны дать довольно не плохую интуицию относительно свойств множеств (и заодно логики).
239 | \end{proof}
240 |
241 | В завершение параграфа определим ещё одну операцию, которая уже не имеет никакого прообраза в логике.
242 |
243 | \begin{definition}
244 | \term{Булеаном} множества $A$ (обозначается $2^A$) называется множество всех его подмножеств.
245 | \end{definition}
246 |
247 | \begin{example}
248 | Пусть $A = \{a, b, c\}$. Тогда
249 | $$2^A = \{\varnothing, \{a\}, \{b\}, \{c\}, \{a, b\}, \{a, c\}, \{b, c\}, A\}$$
250 | \end{example}
251 |
252 | Обратите внимание, что всегда $\varnothing \in 2^A$ и $A\in 2^A$. Так же обратите внимание на то, что булеан, сам являясь множеством, содержит в качестве своих элементов другие множества. Это ничему не противоречит — элементами множеств могут быть и другие множества, почему бы и нет?
253 |
254 | Важно отметить такой нюанс: если $a \in A$, то $\{a\} \in 2^A$, но $a \not \in 2^A$. Это довольно очевидно: $a\not = \{a\}$, ведь множество состоящее из одного элемента и сам этот элемент логически разные сущности. Это примерно как яблоко и яблоко в пакете являются разными объектами.
255 |
256 | Понятие булеана будет активно использоваться нами в дальнейшем, а пока мы рассмотрим опять же аналогию булеана с логикой (это только для дотошных читателей). Пусть $A$ — некоторое одноэлементное множество. Тогда $2^A = \{\varnothing, A\}$.Теперь, если рассматривать наши операции над множествами, ограничившись лишь этим булеаном, то если назвать $\emptyset$ ложью, а $A$ истиной, то наша аналогия между логическими операциями и операциями над множествами станет уже не примерной, а совершенно однозначной.
257 |
258 | Таким образом можно считать, что логика — это в некотором смысле частный случай теории множеств, которая в свою очередь является обобщением логики. Если рассматривать $A$, который состоит из многих элементов, то можно говорить, что $2^A$ — это модель нечёткой логики, где $A$ — истинное высказывание, $\varnothing$ — ложное высказывание, а остальные множества являются истинными высказываниями лишь с некоторой степенью вероятности. Это далеко не самый удобный подход для определения нечёткой логики, и на практике математиками не используется наверное никогда, кроме очень узких областей, однако мы будем иногда обращаться к этому примеру в качестве иллюстраций и более интуитивного понимания отдельных понятий.
259 |
260 | Так же у дотошного читателя может возникнуть определённый дискомфорт от той последовательности изложения, которую он до сих пор наблюдает: говоря о логике и предикатах мы ввели понятие множеств, говоря о множествах мы во всю опирались на логику. Это как в России: чтобы получить работу по специальности, надо иметь опыт работы по этой специальности, а чтобы получить опыт, надо проработать по этой специальности. Такие ситуации допустимы в быту, но не в науке, поэтому порочные круги необходимо разрывать.
261 |
262 | Пока я стараюсь дать просто интуицию о множествах, поскольку строгое формальное изложение без порочных кругов и без начальной интуиции вряд ли окажется сильно полезно и понятно читателю. Поэтому пока мы оставим все как есть, а формальное изложение проведём в конце главы, где уже окончательно расставим все на свои места и избавимся от всех неточностей и нечёткости в определениях.
263 |
--------------------------------------------------------------------------------