nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 05:29



Reply to topic  [ 81 posts ]  Go to page 1, 2, 3, 4, 5, 6  Next
Программирование с помощью троичной логики 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Тут Мак Бастер подкинул мне мысль создать троичный Пролог. Задумался я и решил что получится неплохо ;)
По аналогии с аббревиатурой "PROgramming in LOGic" мы можем назвать наш проект "PROgramming in TERnary LOGic" или PROTERLOG. Перспективы у Протерлога многообещающие - как минимум он решает одну из основополагающих проблем Пролога - а именно неувязки с предположением, что то что неизвестно (неопределено в программе), то ложно. Т.е. мы заводим кроме понятий "истина" и "ложь" понятие "нет информации", которое и будет обозначать отношения, неосвещенные в программе.


19 Aug 2005 18:17
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Quote:
Т.е. мы заводим кроме понятий "истина" и "ложь" понятие "нет информации", которое и будет обозначать отношения, неосвещенные в программе.

Вообще третье состояние не совсем не определено. Совершенно точно известно, что это "не истина" и "не ложь".


19 Aug 2005 22:17
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Mac Buster wrote:
Вообще третье состояние не совсем не определено. Совершенно точно известно, что это "не истина" и "не ложь".


В данном случае нам проще раздать значения таким образом:
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
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Как и в обычном прологе эквивалентом записи
pred(atom):-true.
будет простая констатация факта:
pred(atom).

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

Неопределенные в программе предикаты будем считать неизвестными (в отличие от обычного Пролога, который считает их ложными), а также предположим, что вот такая запись тоже возможна:
pred(atom):-unknown.


20 Aug 2005 17:53
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Пример программы на ПРОТЕРЛОГе:

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
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Согласен :)


21 Aug 2005 10:22
Profile
Maniac
User avatar

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


22 Aug 2005 03:30
Profile ICQ
Maniac
User avatar

Joined: 29 Mar 2005 06:06
Posts: 304
Location: Krasnodar
Reply with quote
а может мне в аспирантуру эту тему взять, а ;)


22 Aug 2005 04:20
Profile ICQ
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ronin wrote:
Хорошая идея :)
ктонибудь прологи писал когда-нибудь ? :)


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

А использовать - активно использовал. И компилируемый Turbo-Prolog, далекий от оригинала, и аутентичные реализации - в которых все как по книжке :)


22 Aug 2005 20:07
Profile WWW
Maniac
User avatar

Joined: 29 Mar 2005 06:06
Posts: 304
Location: Krasnodar
Reply with quote
да я вот все вокруг круги описывал, а взяться серьезно никак так и не брался ;)
а вот идея развить троичную логику через троичный пролог - замечательная, как я об этом раньше даже и не подумал. пойду читать классиков ;)

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

зы. насчет аспирантуры пошутил %)


23 Aug 2005 03:30
Profile ICQ
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ronin wrote:
кстати название proterlog - длинное слишком (3 слога), просто TerLog лучше наверно ?


Ну поначалу я предложил ТРИЛОГ - может оно даже и лучше - просто это не складывается также как PROLOG из двух слов.


23 Aug 2005 05:50
Profile WWW
Maniac
User avatar

Joined: 29 Mar 2005 06:06
Posts: 304
Location: Krasnodar
Reply with quote
>ТРИЛОГ
3LOG :)


23 Aug 2005 07:51
Profile ICQ
Maniac
User avatar

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


23 Aug 2005 07:52
Profile ICQ
Maniac
User avatar

Joined: 29 Mar 2005 06:06
Posts: 304
Location: Krasnodar
Reply with quote
Quote:
Я лет 10 назад придумал байткодовую реализацию пролога через виртуальную машину - правда только на бумаге ;)

ну расскажи пару слов.


24 Aug 2005 02:54
Profile ICQ
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ronin wrote:
Quote:
Я лет 10 назад придумал байткодовую реализацию пролога через виртуальную машину - правда только на бумаге ;)

ну расскажи пару слов.


А что рассказывать? Таблица имен в одном месте, таблица предикатов со ссылками на таблицу структур, которые используют индексы имен - в другом. Допускается аппаратная реализация всего этого хозяйства.


24 Aug 2005 06:51
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 81 posts ]  Go to page 1, 2, 3, 4, 5, 6  Next

Who is online

Users browsing this forum: No registered users and 16 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.