|
|
Приемаме да наричаме сигнатура всяка наредена тройка
а) Φ и Π са непресичащи се множества от думи над стандартната основна азбука, всяка от които започва с малка латинска буква и е различна от думите not, true и fail;
б) ρ е изображение на обединението на множествата Φ и Π в множеството на неотрицателните цели числа;
в) съществуват безбройно много думи над стандартната основна азбука, които започват с малка латинска буква, но не принадлежат на никое от множествата Φ и Π.
Когато е дадена една сигнатура (Φ,Π,ρ), думите от множествата Φ и Π ще наричаме съответно функционални символи и предикатни символи на тази сигнатура, а изображението ρ ще наричаме неин указател за брой на аргументите. Числото, съответстващо чрез ρ на даден функционален или предикатен символ на сигнатурата, ще наричаме брой на аргументите на този символ в дадената сигнатура. Функционалните и предикатните символи с брой на аргументите n ще наричаме съответно
Пример 1. Имайки пред вид пример 3 от встъпителните бележки, уместно е да разгледаме сигнатурата
Забележка 1. В т. а) от дефиницията за сигнатура поискахме думите от множествата Φ и Π да бъдат различни от трите думи not, true и fail. Поставихме това изискване, за да можем по-нататък безпроблемно да използваме въпросните три думи за друга цел, а именно като логически символи.
Забележка 2. Изискването от т. в) на дефиницията за сигнатура очевидно е изпълнено в случаите, когато множествата Φ и Π са крайни. Всъщност най-често ще имаме работа именно със сигнатури, чиито функционални и предикатни символи са крайно много, но все пак има някои теоретични въпроси, за които ограничаването само с такива сигнатури би създало затруднения. Ролята на изискването от т. в) е да гарантира наличието на един безкраен резерв за евентуално разширяване на сигнатурата чрез добавяне на нови функционални или предикатни символи.
Забележка 3. Ако искаме да използваме една сигнатура в рамките на дадена софтуерна реализация на езика Пролог и това да не води до проблеми, трябва да се погрижим още сред функционалните и предикатните символи на сигнатурата да не се срещат думи, резервирани за вградени предикати на реализацията (когато това условие е изпълнено, ще казваме, че сигнатурата е съгласувана с дадената реализация). Списъкът на въпросните резервирани думи зависи от конкретната реализация и може да бъде намерен в нейната документация. Думите not, true и fail, споменати в т. а) на дефиницията, обикновено влизат в този списък, но освен тях влизат и много такива, за които нашата дефиниция не забранява да бъдат функционални или предикатни символи (например във версия 1.6 на Strawberry Prolog Light има 162 такива други думи).
Забележка 4. Много от реализациите на Пролог (вкл. Strawberry Prolog) позволяват една и съща дума да се използва в дадена програма и като функционален, и като предикатен символ, а също броят на аргументите, с които тя се използва на различни места в програмата, може да бъде различен (всъщност често даже не се прави разлика между функционални и предикатни символи). С цената на някои технически усложнения бихме могли да отразим тези възможности и в дефиницията за сигнатура, но усложненията не биха били особено оправдани, понеже използването на въпросните възможности при програмирането на Пролог едва ли може да увеличи съществено приложимостта.
Когато Σ и Σ′ са две сигнатури, ще казваме, че Σ′ съдържа Σ (или че Σ се съдържа в Σ′), ако всеки функционален и всеки предикатен символ на Σ е съответно функционален или предикатен символ на Σ′ със същия брой аргументи (при
Използването на функционалните и предикатните символи на една сигнатура за означаването на дадени функции и предикати се регламентира чрез дефиницията на понятието структура. Ще наричаме така всяка наредена тройка
а) дефиниционна област на I е множеството на всички функционални символи и всички предикатни символи на Σ;
б) всеки път, когато φ е
в) всеки път, когато π е
Трите компоненти Σ, D и I на една структура
Пример 3. Нека Σ е сигнатурата, която посочихме в пример 1 по-горе. Ще дефинираме структура
Пример 4. Нека Σ е сигнатурата от пример 2 по-горе. Като имаме пред вид пример 4 от встъпителните бележки, да разгледаме някое непразно множество D от множества, което притежава следните две свойства:
а) за всяко множество X, принадлежащо на D, единичното множество {X} също принадлежи на D;
б) обединението на две множества, принадлежащи на D, винаги принадлежи на D.
При това положение можем да разгледаме такава структура със сигнатура Σ и с носител D, че функционалните символи singleton и union и предикатният символ belongs да се интерпретират съответно с едноместната функция в D, съпоставяща на всяко X от D съответното единично множество {X}, с двуместната функция в D, съпоставяща на всяка двойка от множества, принадлежащи на D, тяхното обединение, и с двуместния предикат в D, чието множество на истинност се състои от наредените двойки (X,Y) от D2, удовлетворяващи условието X да бъде елемент на Y (дори и след като сме избрали множеството D, такива структури може да има много, защото в току-що казаното не сме фиксирали с кои точно елементи на D да се интерпретират константите a и b).
Забележка 5. На пръв поглед изглежда естествено в горния пример да вземем в качеството на D множеството на всички възможни множества и по този начин да осигурим наличието на свойствата а) и б). За съжаление обаче теорията на множествата не допуска разглеждането на такова множество (ако се приеме, че такова множество съществува, теорията става противоречива). Непразни множества D от множества със споменатите две свойства все пак съществуват - такова множество D може да се построи например по следния начин: вземаме произволно непразно множество от множества D0 и добавяме към него всички други множества, които могат да се получат от множества, принадлежащи на D0, чрез някакъв брой образувания на единично множество и на обединение на две множества.
Забележка 6. В описанията на езика Пролог терминът "структура" понякога се употребява в друг смисъл, който няма нищо общо с горния (при този друг смисъл структури биват наричани някои изрази).
Когато S и S′ са две структури, ще казваме, че S′ е обогатяване на S (или че S е обедняване на S′), ако сигнатурата на S′ съдържа сигнатурата на S, носителите на S и S′ съвпадат, а интерпретиращото съответствие на S′ е продължение на интерпретиращото съответствие на S. Ясно е, че така дефинираното отношение между структури е една частична наредба. При тази частична наредба съществува най-малка измежду структурите с даден носител - това е онази от тях, която няма никакви функционални и никакви предикатни символи.
Последно изменение: 12.08.2004 г.
|
|