Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22586 Location: Silicon Valley
|
Тут Мак Бастер подкинул мне мысль создать троичный Пролог. Задумался я и решил что получится неплохо
По аналогии с аббревиатурой "PROgramming in LOGic" мы можем назвать наш проект "PROgramming in TERnary LOGic" или PROTERLOG. Перспективы у Протерлога многообещающие - как минимум он решает одну из основополагающих проблем Пролога - а именно неувязки с предположением, что то что неизвестно (неопределено в программе), то ложно. Т.е. мы заводим кроме понятий "истина" и "ложь" понятие "нет информации", которое и будет обозначать отношения, неосвещенные в программе.
|
19 Aug 2005 18:17 |
|
|
Mac Buster
Retired
Joined: 03 Aug 2003 22:37 Posts: 1474 Location: Moscow
|
Вообще третье состояние не совсем не определено. Совершенно точно известно, что это "не истина" и "не ложь".
|
19 Aug 2005 22:17 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22586 Location: Silicon Valley
|
В данном случае нам проще раздать значения таким образом:
P - истина (true в терминах Пролога)
O - неизвестно (unknown)
N - ложь (fail в терминах Пролога)
Мы можем ввести оператор \ обозначающий отрицание, который превращал бы истину в ложь, ложь в истину, а неизвестность оставлял бы неизвестностью
Запятая (,) обозначающая в обычном Прологе И в нашем случае не может быть заменена на троичный эквивалент MIN, вместо этого предлагается следующая таблица истинности для И в ПРОТЕРЛОГе:
\ N O P
N N O N
O O O O
P N O P
расшифровывается так - если хотя бы один из аргументов неизвестность, то результат неизвестен и если все аргументы истина, то результат - истина
Точка с запятой (;) обозначающая в обычном Прологе ИЛИ в нашем случае не может быть заменена на троичный эквивалент MAX, вместо этого предлагается следующая таблица истинности для ИЛИ в ПРОТЕРЛОГе:
\ N O P
N N N P
O N O P
P P P P
расшифровывается так - если хотя бы один из аргументов правда, то результат считать правдой, если аргументы принимают значения ложь и неизвестность, то результат - ложь, и, наконец, если все аргументы неизвестность, то результат неизвестен (неопределен)
Last edited by Shaos on 20 Sep 2012 20:38, edited 1 time in total.
|
20 Aug 2005 17:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22586 Location: Silicon Valley
|
Как и в обычном прологе эквивалентом записи
pred(atom):-true.
будет простая констатация факта:
pred(atom).
Для отрицательной информации
pred(atom):-fail.
допустим такой вариант записи:
\pred(atom).
Неопределенные в программе предикаты будем считать неизвестными (в отличие от обычного Пролога, который считает их ложными), а также предположим, что вот такая запись тоже возможна:
pred(atom):-unknown.
|
20 Aug 2005 17:53 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22586 Location: Silicon Valley
|
Пример программы на ПРОТЕРЛОГе:
boy(john). % John это мальчик \boy(nora). % Nora это НЕ мальчик girl(X):- \boy(X). % девочка это тот, кто не является мальчиком
?- girl(nora).
правильный ответ yes
?- girl(anybody).
правильный ответ unknown
?- girl(X).
правильный ответ X=nora
Эквивалентная программа на ПРОЛОГе:
boy(john). boy(nora):-fail. girl(X):- not(boy(X)).
?- girl(nora).
yes
?- girl(anybody).
yes
?- girl(X).
no
ПРОЛОГ правильно ответил "yes" в первом случае, так как провел несложное логическое умозаключение, что Nora не мальчик, значит она девочка.
ПРОЛОГ неправильно ответил "yes" во втором случае, так как есть правило, тот кто не мальчик, тот девочка и anybody не мальчик, так как факта boy(anybody) нет, то это девочка.
ПРОЛОГ неправильно ответил "no" в третьем случае, так как ему неизвестно ни одного факта girl(...) и он не может ничего предполагать на этот счет.
|
20 Aug 2005 18:09 |
|
|
Mac Buster
Retired
Joined: 03 Aug 2003 22:37 Posts: 1474 Location: Moscow
|
Согласен
|
21 Aug 2005 10:22 |
|
|
Ronin
Maniac
Joined: 29 Mar 2005 06:06 Posts: 304 Location: Krasnodar
|
Хорошая идея
ктонибудь прологи писал когда-нибудь ?
|
22 Aug 2005 03:30 |
|
|
Ronin
Maniac
Joined: 29 Mar 2005 06:06 Posts: 304 Location: Krasnodar
|
а может мне в аспирантуру эту тему взять, а
|
22 Aug 2005 04:20 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22586 Location: Silicon Valley
|
Я лет 10 назад придумал байткодовую реализацию пролога через виртуальную машину - правда только на бумаге
А использовать - активно использовал. И компилируемый Turbo-Prolog, далекий от оригинала, и аутентичные реализации - в которых все как по книжке
|
22 Aug 2005 20:07 |
|
|
Ronin
Maniac
Joined: 29 Mar 2005 06:06 Posts: 304 Location: Krasnodar
|
да я вот все вокруг круги описывал, а взяться серьезно никак так и не брался
а вот идея развить троичную логику через троичный пролог - замечательная, как я об этом раньше даже и не подумал. пойду читать классиков
кстати название proterlog - длинное слишком (3 слога), просто TerLog лучше наверно ?
зы. насчет аспирантуры пошутил %)
|
23 Aug 2005 03:30 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22586 Location: Silicon Valley
|
Ну поначалу я предложил ТРИЛОГ - может оно даже и лучше - просто это не складывается также как PROLOG из двух слов.
|
23 Aug 2005 05:50 |
|
|
Ronin
Maniac
Joined: 29 Mar 2005 06:06 Posts: 304 Location: Krasnodar
|
>ТРИЛОГ
3LOG
|
23 Aug 2005 07:51 |
|
|
Ronin
Maniac
Joined: 29 Mar 2005 06:06 Posts: 304 Location: Krasnodar
|
>просто это не складывается также как PROLOG из двух слов.
пусть просто будет "троичная логика", и так ассоциация в звучании с Прологом.
|
23 Aug 2005 07:52 |
|
|
Ronin
Maniac
Joined: 29 Mar 2005 06:06 Posts: 304 Location: Krasnodar
|
|
24 Aug 2005 02:54 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22586 Location: Silicon Valley
|
А что рассказывать? Таблица имен в одном месте, таблица предикатов со ссылками на таблицу структур, которые используют индексы имен - в другом. Допускается аппаратная реализация всего этого хозяйства.
|
24 Aug 2005 06:51 |
|
|