Терм (логіка)У математичній логіці терм позначає математичний об'єкт, у той час як формула[en] позначає математичний факт. Зокрема, терми виступають як компоненти формули. Це аналогічно звичайній мові, де іменник відноситься до об'єкта, а ціле речення відноситься до факту. Терм першого порядку рекурсивно будується з константних символів, змінних і функціональних символів[en]. Вираз, утворений застосуванням предикатного символу до відповідної кількості термів, називається атомарною формулою[en], яка оцінюється як істинна чи хибна в бівалентній логіці, за умови інтерпретації. Наприклад, — це терм, побудований з константи 1, змінної x і символів бінарної функції і ; це частина атомної формули яка оцінюється як істина для кожного дійсного значення x. Окрім логіки, терми відіграють важливу роль в універсальній алгебрі та системах рерайтингу. Формальне визначенняДано набір V змінних символів, набір C постійних символів і набори Fn з n-арних функціональних символів, які також називають символами операторів, для кожного натурального числа n ≥ 1, набір несортованих термів першого порядку T, рекурсивно визначений як найменший набір з такими властивостями:[1]
Використовуючи інтуїтивну, псевдограматичну нотацію, описані вище правила іноді записують так: t ::= х | c | f (t1, …, tn). Зазвичай використовують лише перші декілька наборів функціональних символів Fn . Добре відомими прикладами є символи унарних функцій sin, cos ∈ F1 та символи бінарних функцій +, −, ⋅, / ∈ F2, тоді як тернарні операції менш відомі, не кажучи вже про функції вищої арності. Багато авторів розглядають константні символи як 0-арні функціональні символи F0, тому для них не потрібно спеціального синтаксичного класу. Термом позначають математичний об'єкт з області дискурсу. Константа c позначає іменований об'єкт з цього домену, змінна x охоплює об'єкти у цьому домені, а n-арна функція f відображає кортежі з n елементів об'єктів на об'єкти. Наприклад, якщо n ∈ V — змінний символ, 1 ∈ C — константний символ, та add ∈ F2 — символ бінарної функції, то n ∈ T, 1 ∈ T, а отже, add(n, 1) ∈ T відповідно до першого, другого та третього правила побудови терма. Останній терм зазвичай записується як n+1 з використанням інфіксної нотації та більш поширеного оператора + для зручності. Структура Терма та його представленняСпочатку, логіки визначали терм як рядок символів, що дотримується певних правил побудови.[2] Однак, оскільки концепція дерева стала популярною в інформатиці, виявилося, що більш зручно вважати терм деревом. Наприклад, кілька окремих рядків символів, як "(n⋅(n+1))/2 ", та "((n⋅(n+1)))/2 ", і «», позначають той самий терм і відповідають тому самому дереву, а саме лівому дереву на малюнку вище. Відокремлюючи структуру терма (деревоподібну) від його графічного представлення на папері, також легко врахувати дужки та невидимі оператори множення(вони існують лише в структурі, та їх нема у представленні). Структурна рівністьДва терми називаються структурно, буквально або синтаксично рівними, якщо вони є представленням одного й того ж синтаксичного дерева. Наприклад, ліве і праве дерево на наведеному вище малюнку є структурно нерівними термами, хоча їх можна вважати «семантично рівними», оскільки вони завжди мають однакове значення в раціональній арифметиці. Хоча структурну рівність можна перевірити без будь-яких знань про значення символів, перевірити таким чином семантичну рівність неможливо. Якщо функція /, наприклад, інтерпретується не як раціональна, а як усікаюче ціле ділення, то при n=2, лівий та правий члени дорівнюють 3 і 2 відповідно. Структурно рівні терми повинні узгоджуватися в іменах змінних. Навпаки, терм t називається перейменуванням або варіантом терма u, якщо терм u є результатом послідовного перейменування всіх змінних терма t, тобто якщо u = tσ для деякої заміни[en]перейменування σ. У цьому випадку u також є перейменуванням t, оскільки заміна перейменування σ має обернене значення σ−1, а t = uσ−1. Тоді обидва терми також називаються рівними за модулем перейменування. У багатьох контекстах конкретні назви змінних у термі не мають значення, наприклад, аксіому комутативності для додавання можна сформулювати як «x + y = y + x» або як «a + b = b + a»; у таких випадках вся формула може бути перейменована, тоді як довільний підтерм формули зазвичай не може бути перейменованим, наприклад, «x + y = b + a» не є вірним варіантом аксіоми комутативності.[note 1][note 2] Замкнені та лінійні термиМножину змінних терма t позначають vars(t). Терм, який не містить змінних, називається замкненим термом; терм, який не містить багаторазових зустрічей змінної, називається лінійним термом. Наприклад, 2+2 є замкненим термом, а отже, також і лінійним, x⋅(n+1) є лінійним термом, n⋅(n+1) є нелінійним термом. Ці властивості важливі, наприклад, при рерайтенгу термів . З огляду на сигнатуру функціональних символів, множина всіх термів утворює вільну[en] алгебру термів[en]. Множина всіх замкнених термів утворює початкову алгебру термів. Скорочуючи кількість констант як f0, а кількість символів i-нарной функції як fi, число θh різних замкнених термів висоти(дерева) до h може бути обчислено за такою формулою рекурсії:
Побудова формул із термівПрипустимо маємо набір Rn з n-арних символів для кожного натурального числа n ≥ 1, атомарна несортована формула першого порядку отримується шляхом застосування n-арного символу ставлення до n термів. Що стосується функціональних символів, набір символів відносини Rn зазвичай непорожній тільки для малих n. В математичній логіці більш складні формули будуються з атомарних формул з використанням логічних сполучників і кванторів. Наприклад, нехай яка позначає набір дійсних чисел, ∀x: x ∈ ⇒ (x+1)⋅(x+1) ≥ 0 — це математична формула, яка оцінюється як істинна(«True») в алгебрі комплексних чисел. Атомарна формула називається замкненою, якщо вона повністю побудована з основних термів; всі основні атомарні формули, складені з заданого набору функцій і предикатів, складають базу Гербранда[en] для цих наборів символів. Операції з термами
Пов'язані поняттяВідсортовані термиКоли область дискурсу містить елементи принципово різних типів, корисно відповідним чином розділити набір всіх термів. З цією метою кожній змінній та кожній константі присвоюється сортування(іноді також називається тип), а кожному функціональному символу присвоюється[note 3] сортування домену та сортування за діапазоном. Відсортований терм f(t1,…,tn) може бути складений з відсортованих вкладених термів t1,…,tn тільки в тому випадку, якщо сортування і-го підтерма відповідає оголошеному i-му виду домену f. Такий терм також називається добре відсортованим; будь-який інший терм(тобто в якому виконуються тільки несортовані правила) називають погано відсортованим. Наприклад, векторний простір має пов'язане з ним з поле скалярних чисел. Нехай W і N позначають сортування векторів і чисел відповідно,VW і VN — множина векторних і числових змінних відповідно, а CW і CN — множина векторних і числових констант відповідно. Тоді і 0 ∈ CN, а векторне додавання, скалярне множення та внутрішній добуток оголошуються як відповідно. Припускаючи, що змінні символи та , тоді терм є добре відсортованим, проте не є добре відсортованим(оскільки + не приймає терм типу N як 2-й аргумент). Для того, щоб зробити добре відсортованим, необхідно додати ще одне визначення: . Функціональні сімволи, які мають кілька декларацій, називаються перевантаженими . Лямбда терми
МотиваціяМатематичні позначення, як показано в таблиці, не вписуються в схему терма першого порядку, як визначено вище, оскільки всі вони вводять власну локальну або обмежену змінну, яка може не відображатися за межами нотації, наприклад не має сенсу. На противагу цьому, інші змінні, які називаються вільними, поводяться як звичайні змінні першого порядку, наприклад . Усі ці оператори можна розглядати як один із аргументів функції, а не значення терму. Наприклад, оператор lim застосовується до послідовності, тобто до відображення з натурального цілого в, наприклад, дійсні числа. Як інший приклад, функція C для реалізації другого прикладу з таблиці, Σ, матиме аргумент вказівника функції. Лямбда-терми можна використовувати для позначення анонімних функцій, які надаються як аргументи для lim, Σ, ∫ тощо. Наприклад, функція піднесеня числа до квадрату з програми C нижче можна записати анонімно як лямбда-терм λi. і2. Тоді загальний оператор суми Σ можна розглядати як тернарний символ потрійної функції, що приймає значення нижньої границі, значення верхньої границі та функцію, яку потрібно підсумувати. Завдяки своєму останньому аргументу оператор Σ називається символом функції другого порядку. Як інший приклад, лямбда-терм λn. x / n позначає функцію, яка відображає 1, 2, 3, … у x/1, x/2, x/3, … відповідно, тобто позначає послідовність (x/1, x/2, x/3, …). Оператор lim приймає таку послідовність і повертає її границю (якщо вона визначена). Крайній правий стовпець таблиці вказує, як кожен приклад математичної нотації може бути представлений у вигляді лямбда-терму, також записані звичайні інфіксні оператори в префіксну форму. int sum(int lwb, int upb, int fct(int)) { // implements general sum operator
int res = 0;
for (int i=lwb; i<=upb; ++i)
res += fct(i);
return res;
}
int square(int i) { return i*i; } // implements anonymous function (lambda i. i*i); however, C requires a name for it
#include <stdio.h>
int main(void) {
int n;
scanf(" %d",&n);
printf("%d\n", sum(1, n, square)); // applies sum operator to sum up squares
return 0;
}
Примітки
Див. такожПосилання
|