По аналогии с аббревиатурой "PROgramming in LOGic" мы можем назвать наш проект "PROgramming in TERnary LOGic" или PROTERLOG. Перспективы у Протерлога многообещающие - как минимум он решает одну из основополагающих проблем Пролога - а именно неувязки с предположением, что то что неизвестно (неопределено в программе), то ложно. Т.е. мы заводим кроме понятий "истина" и "ложь" понятие "нет информации", которое и будет обозначать отношения, неосвещенные в программе.
Программирование с помощью троичной логики
Moderator: haqreu
-
Shaos
- Admin
- Posts: 24385
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Программирование с помощью троичной логики
Тут Мак Бастер подкинул мне мысль создать троичный Пролог. Задумался я и решил что получится неплохо 
По аналогии с аббревиатурой "PROgramming in LOGic" мы можем назвать наш проект "PROgramming in TERnary LOGic" или PROTERLOG. Перспективы у Протерлога многообещающие - как минимум он решает одну из основополагающих проблем Пролога - а именно неувязки с предположением, что то что неизвестно (неопределено в программе), то ложно. Т.е. мы заводим кроме понятий "истина" и "ложь" понятие "нет информации", которое и будет обозначать отношения, неосвещенные в программе.
По аналогии с аббревиатурой "PROgramming in LOGic" мы можем назвать наш проект "PROgramming in TERnary LOGic" или PROTERLOG. Перспективы у Протерлога многообещающие - как минимум он решает одну из основополагающих проблем Пролога - а именно неувязки с предположением, что то что неизвестно (неопределено в программе), то ложно. Т.е. мы заводим кроме понятий "истина" и "ложь" понятие "нет информации", которое и будет обозначать отношения, неосвещенные в программе.
-
Mac Buster
- Retired
- Posts: 1474
- Joined: 03 Aug 2003 22:37
- Location: Moscow
Re: Троичный ПРОЛОГ
Вообще третье состояние не совсем не определено. Совершенно точно известно, что это "не истина" и "не ложь".Т.е. мы заводим кроме понятий "истина" и "ложь" понятие "нет информации", которое и будет обозначать отношения, неосвещенные в программе.
-
Shaos
- Admin
- Posts: 24385
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичный ПРОЛОГ
В данном случае нам проще раздать значения таким образом: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.
-
Shaos
- Admin
- Posts: 24385
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичный ПРОЛОГ
Как и в обычном прологе эквивалентом записи
pred(atom):-true.
будет простая констатация факта:
pred(atom).
Для отрицательной информации
pred(atom):-fail.
допустим такой вариант записи:
\pred(atom).
Неопределенные в программе предикаты будем считать неизвестными (в отличие от обычного Пролога, который считает их ложными), а также предположим, что вот такая запись тоже возможна:
pred(atom):-unknown.
pred(atom):-true.
будет простая констатация факта:
pred(atom).
Для отрицательной информации
pred(atom):-fail.
допустим такой вариант записи:
\pred(atom).
Неопределенные в программе предикаты будем считать неизвестными (в отличие от обычного Пролога, который считает их ложными), а также предположим, что вот такая запись тоже возможна:
pred(atom):-unknown.
-
Shaos
- Admin
- Posts: 24385
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичный ПРОЛОГ
Пример программы на ПРОТЕРЛОГе:
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(...) и он не может ничего предполагать на этот счет.
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: Троичный ПРОЛОГ
Согласен 
-
Ronin
- Maniac
- Posts: 304
- Joined: 29 Mar 2005 06:06
- Location: Krasnodar
Re: Троичный ПРОЛОГ
Хорошая идея 
ктонибудь прологи писал когда-нибудь ?
ктонибудь прологи писал когда-нибудь ?
-
Ronin
- Maniac
- Posts: 304
- Joined: 29 Mar 2005 06:06
- Location: Krasnodar
Re: Троичный ПРОЛОГ
а может мне в аспирантуру эту тему взять, а 
-
Shaos
- Admin
- Posts: 24385
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичный ПРОЛОГ
Я лет 10 назад придумал байткодовую реализацию пролога через виртуальную машину - правда только на бумагеRonin wrote: Хорошая идея
ктонибудь прологи писал когда-нибудь ?
А использовать - активно использовал. И компилируемый Turbo-Prolog, далекий от оригинала, и аутентичные реализации - в которых все как по книжке
-
Ronin
- Maniac
- Posts: 304
- Joined: 29 Mar 2005 06:06
- Location: Krasnodar
Re: Троичный ПРОЛОГ
да я вот все вокруг круги описывал, а взяться серьезно никак так и не брался 
а вот идея развить троичную логику через троичный пролог - замечательная, как я об этом раньше даже и не подумал. пойду читать классиков
кстати название proterlog - длинное слишком (3 слога), просто TerLog лучше наверно ?
зы. насчет аспирантуры пошутил %)
а вот идея развить троичную логику через троичный пролог - замечательная, как я об этом раньше даже и не подумал. пойду читать классиков
кстати название proterlog - длинное слишком (3 слога), просто TerLog лучше наверно ?
зы. насчет аспирантуры пошутил %)
-
Shaos
- Admin
- Posts: 24385
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичный ПРОЛОГ
Ну поначалу я предложил ТРИЛОГ - может оно даже и лучше - просто это не складывается также как PROLOG из двух слов.Ronin wrote: кстати название proterlog - длинное слишком (3 слога), просто TerLog лучше наверно ?
-
Ronin
- Maniac
- Posts: 304
- Joined: 29 Mar 2005 06:06
- Location: Krasnodar
Re: Троичный ПРОЛОГ
>ТРИЛОГ
3LOG
3LOG
-
Ronin
- Maniac
- Posts: 304
- Joined: 29 Mar 2005 06:06
- Location: Krasnodar
Re: Троичный ПРОЛОГ
>просто это не складывается также как PROLOG из двух слов.
пусть просто будет "троичная логика", и так ассоциация в звучании с Прологом.
пусть просто будет "троичная логика", и так ассоциация в звучании с Прологом.
-
Ronin
- Maniac
- Posts: 304
- Joined: 29 Mar 2005 06:06
- Location: Krasnodar
Re: Троичный ПРОЛОГ
ну расскажи пару слов.Я лет 10 назад придумал байткодовую реализацию пролога через виртуальную машину - правда только на бумаге
-
Shaos
- Admin
- Posts: 24385
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичный ПРОЛОГ
А что рассказывать? Таблица имен в одном месте, таблица предикатов со ссылками на таблицу структур, которые используют индексы имен - в другом. Допускается аппаратная реализация всего этого хозяйства.Ronin wrote:ну расскажи пару слов.Я лет 10 назад придумал байткодовую реализацию пролога через виртуальную машину - правда только на бумаге
