|
Table of Contents
|
Предисловие
В този предмет ще разглеждаме математическите теории и обектите в тях (теореми, задачи, доказателства). Т.е. ще опитаме да обясним математиката с … математика (да - рекурсивно е :-/). Ще се споменават доста пъти думи като синтаксис и семантика. Ще опитам да обясня веднъж завинаги кое какво означава:
Синтаксис
Синтаксисът се грижи за начина, по който записваме нещата. Обикновенно когато се говори за синтаксис става дума за букви и думи. Буква е най-малката градивна частица която се използва, докато дума е просто последователност от букви. Не се обърквайте с аналогията от реалния свят - буква може да бъде всеки специален символ - да речем $\Rightarrow$ и $)$ - всичко зависи как си дефинираме азбуката, върху която работим.
Основни понятия при буквите и думите са неща като префикс - една дума да е начало на друга дума - например "те" е начало на "теорема", поддума - т.е. една дума да е част от друга дума - "брат" е поддума на "събратя" и т.н. Основна синтактична операция е конкатенация на две думи - получаваме нова дума, която е образувана от поставянето на всички букви от първата дума, последвани от всички букви от втората като не променяме относителната подредба на буквите - например "предлог" е конкатенация на "пред" и "лог".
Занимавахме се с подобни неща на курса по Дискретна Математика и ЕАИ - ставаше дума за формални езици, принадлежност на думи към език, регулярни езици и т.н. Тук ще използваме само най-базовите понятия.
Семантика
Семантиката се грижи за това какъв смисъл имат думите. Да разгледаме следните думи:
- a+b
- (+ a b)
- събираме променливата a с променливата b
- add eax bax
- 010010101100010001111101…
Но от семантична гледна точка тези последователности може и да са еднакви:
| a+b | C++ |
| (+ a b) | Scheme / Lisp |
| събираме променливата a с променливата b | човек |
| add eax bax | асемблер |
| 010010101100010001111101… | машинен код |
Т.е. ако кажем подходящите думи на нещо, което ги интерпретира/разбира по някакъв начин може да се окаже, че различни думи имат еднакъв смисъл.
Всъщност придаването на семантика на синтаксиса е превод от един формален език на друг. Например, ако компилаторите на C++ и Lisp получат съответната дума може би ще я преобразуват до асемблер кода, който пък ще бъде превърнат до машинен код, който накрая ще бъде изпълнен от компютър. Ако човек прочете коя да е от думите и е наясно със съответния компилатор, той ще си я преведе на "човешки език" - "събираме променливата a с променливата b" (в случая разглеждаме човешкия език като формален … за простота на изложението :)).
Важно: В доста моменти когато дефинираме семантиката за даден синтаксис може да ви се струва, че не правим нищо - просто защото например казваме, че "a+b" означава "събираме a с b" - просто превеждаме един формален език на друг. Винаги правете разлика кое е синтактичната конструкция (a+b в случая) и кое е обяснението, семантиката й - "събираме a с b".
Език на предикатното смятане
Сега ще дефинираме буквите, които изграждат думите от езика на предикатното смятане. Всичко което дефинираме по-надолу са букви от гледна точка на синтаксиса.
Може да разбием всеки ЕПС на логическа и нелогическа част. Най-общо казано, логическата част е една и съща за всички езици, докато нелогическата част може да се мени от един език до друг.
Логическа част
(1) Индивидни променливи
$\mathrm{Var} = \{ x_0, x_1, \cdots \}$ е изброимо множество от индивидни променливи.
(2) Съждителни връзки
| Съждителна връзка (означение) | Наименование |
|---|---|
| $\lnot$ | не |
| $\And$ | конюнкция |
| $\lor$ | дизюнкция |
| $\Rightarrow$ | импликация |
| $\iff$ | еквивалентност |
(3) Квантори
| Означение | Наименование |
|---|---|
| $\forall$ | квантор за всеобщност |
| $\exists$ | квантор за съществуване |
(4) Помощни символи
Лява и дясна кръгли скоби и запетайка: $(\ )\ ,$
(5) Формално равенство
Ще бележим $\dot=$.
Това е незадължителен двуместен предикатен символ със специална семантика.
Нелогическа част
(1) Индивидни константи
Ще бележим азбуката на индивидните константи с $\mathbb{C}\mathrm{onst}$. Това са просто букви, с които ще се отбелязват интересни елементи в езика - например единичният елемент на групата $e$ или $0, 1$ в поле.
(2) Предикатни символи
Ще бележим азбуката на предикатните символи с $\mathbb{P}\mathrm{red}$.
(3) Функционалните символи
Ще бележим азбуката на фукционалните символи с $\mathbb{F}\mathrm{unc}$.
(4) Функция за арност (брой аргументи)
Дефинираме функция $\sharp : \mathbb{P}\mathrm{red} \cup \mathbb{F}\mathrm{unc} \to \{ 0, 1, 2, \cdots \}$, която ще указва всеки предикат или функционален символ по колко аргумента приема. Например ако $p \in \mathbb{P}\mathrm{red}$ и $\sharp[p] = 2$, това означава, че може да пишем $p(x, y)$, но за това по-подробно след малко.
Ако един език съдържа всички букви посочени по-горе, ще го наричаме Език на предикатното смятане, и ще го бележим с $\mathcal{L}$.
Пример
Езикът на групите
Т.е. това е формалният език, с който се разглеждат групите (алгебра):
- $Var = G$
- съждителни връзки $\varnothing$
- квантори $\varnothing$
- ранвество - да
- помощни символи - скоби
- $\mathbb{C}\mathrm{onst} = \{ e \}$ - ще бележим с $e$ единичния елемент на групата;
- $\mathbb{P}\mathrm{red} = \varnothing$ - няма предикати;
- $\mathbb{F}\mathrm{unc} = \{ \cdot \}$ - единствената операция в групата;
- $\sharp[\cdot] = 2$ - операцията е бинарна.
Езикът на Пеановата аритметика
- $Var =$
- съждителни връзки ? ${}$
- квантори $\varnothing$
- ранвество - да
- помощни символи - ${+, (,)}$
- $\mathbb{C}\mathrm{onst} = \{ 0 \}$ - нулата е специален елемент за нас;
- $\mathbb{P}\mathrm{red} = \{ < \}$ - знака по-малко;
- $\mathbb{F}\mathrm{unc} = \{ +, \cdot, S \}$ - събиране, умножение и 'наследник', 'следващ' (successor) - $S(x) = x + 1$;
- $\sharp[+] = \sharp[\cdot] = \sharp[<] = 2 \quad \sharp[S] = 1$.
Предикат
Имаме множество $C$ от обекти.
Изображението $p: C^n \to \{true, false\}$ наричаме предикат.
Функции
Имаме множество $C$ от обекти.
Изображението $f: C^n \to C$ наричаме функция.
Символи над азбука
Символите ги мислете като думи от азбука, но реално са още по-гъвкави понятия.
Имаме някакво множество $A$ от букви.
Правим ново множество като композираме елементи от $A$ и го наричаме $Symbols(A)$ за кратко $S_A$ - символите от азбуката $A$.
Сигнатура
Наредената $( A, \mathrm{S}_{f}, \mathrm{S}_{p}, \# )$ нарчаме сигнатура $\mathcal{S}$, ако:
$A$ - азбука
$\mathrm{S}_{f} \subset Symbols(A)$ - функционални символи
$\mathrm{S}_{p} \subset Symbols(A)$ - предикатни символи
$\#$ - функция за броя аргументи
$\mathrm{S}_{const} \subset \mathrm{S}_{f}$ за $s_f \in \mathrm{S}_{f}, \#[ s_f] = 0$ - константите са функции с нула брой аргументи.
$\mathrm{S}_{f} \cup \mathrm{S}_{p} = \varnothing$
има безкрайно много символи в $Symbols(A)$ непринадлежащи на $\mathrm{S}_{f} \cup \mathrm{S}_{p}$
Забележка: $\mathrm{S}_{f}$ е само множество от думички, но функцията $\#$ може да съпостави на тези думички брой аргументи.
Лексика
Наредената $\langle A, \mathrm{S}_{f}, \mathrm{S}_{p}, \#, \mathrm{S}_{v} \rangle$ нарчаме Лексика $\mathcal{L}$, ако:
$A$ - азбука(множество, което не съдържа символи за скоби примерно, но може да се правят манджи и с тях)
$\mathrm{S}_{f} \subset Symbols(A)$
$\mathrm{S}_{p} \subset Symbols(A)$
$\#$ - функция за броя аргументи
$\mathrm{S}_{v} \subset Symbols(A)$ - индивидни променливи(символи изпозлвани за имена на променливи)
$\mathrm{S}_{f} \cup \mathrm{S}_{p} = \varnothing$ същото и с $\mathrm{S}_{v}$
има безкрайно много думи в $Symbols(A)$ непринадлежащи на $\mathrm{S}_{f} \cup \mathrm{S}_{p}$ същото и с $\mathrm{S}_{v}$
Структура за лексика
Дефиниция (структура за език)
Нека $\mathcal{L}$ e лексика(език на предикатно смятане).
Структура за $\mathcal{L}$ ще наричаме наредена двойка $\mathcal{C} = \langle C, \mathbb{I} \rangle$, където:
- $C \neq \varnothing$ - универсум на структурата(множеството от обекти с което ще работим в нашия език);
- $\mathbb{I}$ е интерпретация, където: (множеството от функции и предикати, с който ще работим в нашия език)
* $\mathbb{I}[s_p] : C^k \to \{ true, false \}$, където $s_p \in \mathrm{S}_{p}$ и $\sharp[s_p] = k$;
* $\mathbb{I}[s_f] : C^{k} \to C$, където $s_f \in \mathrm{S}_{f}$ и $\sharp[s_f] = k$.
Структурата задава за всеки символ на функция - истинска функция. Аналогично за предикати.
Тези функции/предикати работят с членове на множеството $C$.
Обикновено като пишем структура ще изброяваме интерпретациите на константите, функциите и предикатите в този ред:
(1)Забележка: Понякога вместо $\mathbb{I}[x]$ ще пишем просто $x^\mathcal{C}$, което означава точно интерпретацията на $x$ в структурата $\mathcal{C}$ (тъй като интерпретацията $\mathbb{I}$ е част от структурата $\mathcal{C}$).
Примери
Структура на Пеановата аритметика:
(2)Структура на Пеановата аритметика само с 1 елемент:
(3)Измислена структура с 3 елемента:
(4)Оценка в език на предикатното смятане от 1ви ред
Дефиниция (оценка)
Нека $\mathcal{L}$ е FOL.
Нека $\mathcal{C}$ е структура за $\mathcal{L}$.
Оценка $v$ в $\mathcal{C}$ наричаме изображението $v : \mathrm{\mathrm{S}_{v}} \to C$, т.е $v(s_v) \in C$.
За всяка индивидна променлива задаваме стойност от множеството $C$ от структурата $\mathcal{C}$





