Программирование с помощью троичной логики

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Программирование с помощью троичной логики

Post by Shaos »

Тут Мак Бастер подкинул мне мысль создать троичный Пролог. Задумался я и решил что получится неплохо ;)
По аналогии с аббревиатурой "PROgramming in LOGic" мы можем назвать наш проект "PROgramming in TERnary LOGic" или PROTERLOG. Перспективы у Протерлога многообещающие - как минимум он решает одну из основополагающих проблем Пролога - а именно неувязки с предположением, что то что неизвестно (неопределено в программе), то ложно. Т.е. мы заводим кроме понятий "истина" и "ложь" понятие "нет информации", которое и будет обозначать отношения, неосвещенные в программе.
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Троичный ПРОЛОГ

Post by Mac Buster »

Т.е. мы заводим кроме понятий "истина" и "ложь" понятие "нет информации", которое и будет обозначать отношения, неосвещенные в программе.
Вообще третье состояние не совсем не определено. Совершенно точно известно, что это "не истина" и "не ложь".
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный ПРОЛОГ

Post by Shaos »

Mac Buster wrote: Вообще третье состояние не совсем не определено. Совершенно точно известно, что это "не истина" и "не ложь".
В данном случае нам проще раздать значения таким образом:
P - истина (true в терминах Пролога)
O - неизвестно (unknown)
N - ложь (fail в терминах Пролога)

Мы можем ввести оператор \ обозначающий отрицание, который превращал бы истину в ложь, ложь в истину, а неизвестность оставлял бы неизвестностью

Запятая (,) обозначающая в обычном Прологе И в нашем случае не может быть заменена на троичный эквивалент MIN, вместо этого предлагается следующая таблица истинности для И в ПРОТЕРЛОГе:

Code: Select all

\ N O P
N N O N
O O O O
P N O P
расшифровывается так - если хотя бы один из аргументов неизвестность, то результат неизвестен и если все аргументы истина, то результат - истина

Точка с запятой (;) обозначающая в обычном Прологе ИЛИ в нашем случае не может быть заменена на троичный эквивалент MAX, вместо этого предлагается следующая таблица истинности для ИЛИ в ПРОТЕРЛОГе:

Code: Select all

\ 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.
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный ПРОЛОГ

Post by Shaos »

Как и в обычном прологе эквивалентом записи
pred(atom):-true.
будет простая констатация факта:
pred(atom).

Для отрицательной информации
pred(atom):-fail.
допустим такой вариант записи:
\pred(atom).

Неопределенные в программе предикаты будем считать неизвестными (в отличие от обычного Пролога, который считает их ложными), а также предположим, что вот такая запись тоже возможна:
pred(atom):-unknown.
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный ПРОЛОГ

Post by Shaos »

Пример программы на ПРОТЕРЛОГе:

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(...) и он не может ничего предполагать на этот счет.
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Троичный ПРОЛОГ

Post by Mac Buster »

Согласен :)
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Re: Троичный ПРОЛОГ

Post by Ronin »

Хорошая идея :)
ктонибудь прологи писал когда-нибудь ? :)
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Re: Троичный ПРОЛОГ

Post by Ronin »

а может мне в аспирантуру эту тему взять, а ;)
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный ПРОЛОГ

Post by Shaos »

Ronin wrote: Хорошая идея :)
ктонибудь прологи писал когда-нибудь ? :)
Я лет 10 назад придумал байткодовую реализацию пролога через виртуальную машину - правда только на бумаге ;)

А использовать - активно использовал. И компилируемый Turbo-Prolog, далекий от оригинала, и аутентичные реализации - в которых все как по книжке :)
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Re: Троичный ПРОЛОГ

Post by Ronin »

да я вот все вокруг круги описывал, а взяться серьезно никак так и не брался ;)
а вот идея развить троичную логику через троичный пролог - замечательная, как я об этом раньше даже и не подумал. пойду читать классиков ;)

кстати название proterlog - длинное слишком (3 слога), просто TerLog лучше наверно ?

зы. насчет аспирантуры пошутил %)
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный ПРОЛОГ

Post by Shaos »

Ronin wrote: кстати название proterlog - длинное слишком (3 слога), просто TerLog лучше наверно ?
Ну поначалу я предложил ТРИЛОГ - может оно даже и лучше - просто это не складывается также как PROLOG из двух слов.
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Re: Троичный ПРОЛОГ

Post by Ronin »

>ТРИЛОГ
3LOG :)
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Re: Троичный ПРОЛОГ

Post by Ronin »

>просто это не складывается также как PROLOG из двух слов.
пусть просто будет "троичная логика", и так ассоциация в звучании с Прологом.
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Re: Троичный ПРОЛОГ

Post by Ronin »

Я лет 10 назад придумал байткодовую реализацию пролога через виртуальную машину - правда только на бумаге ;)
ну расскажи пару слов.
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный ПРОЛОГ

Post by Shaos »

Ronin wrote:
Я лет 10 назад придумал байткодовую реализацию пролога через виртуальную машину - правда только на бумаге ;)
ну расскажи пару слов.
А что рассказывать? Таблица имен в одном месте, таблица предикатов со ссылками на таблицу структур, которые используют индексы имен - в другом. Допускается аппаратная реализация всего этого хозяйства.