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

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

Moderator: haqreu

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

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

Post by Shaos »

Mac Buster wrote: Если с Клини дело можно исправить, поискав его книги у знакомых букинистов и договориться снизить стоимость раз в пять, то с Васильевым дело - труба: найти практически невозможно. Переиздавать, разумеется, не думают.
Есть предложение найти Клини в библиотеке и снять копии с нужных страниц - то что нам надо должно занимать немного...
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

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

Post by Mac Buster »

"Метаматематики" и Васильева в Ленинской библиотеке нет. В "Логике" Клини троичная логика упоминается всего раз =)
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Подытоживаю обсуждение последних лет:
Shaos wrote: Итак, попробуем разобраться. Как правило в Прологе логическое ИЛИ раскладывается в параллельные утверждения:
p:-a.
p:-b.

и т.д. что означает что утверждение "p" истинно если истинно "a" или истинно если истинно "b". Кроме того ИЛИ допустимо записывать в одном утверждении используя оператор ";".

В то же время логическое И укладывается в одно утверждение:
pred:-a,b.
что значит "p" истинно если истинно "a" и истинно "b".
Shaos wrote: Запятая (,) обозначающая в обычном Прологе И в нашем случае не может быть заменена на троичный эквивалент MIN, вместо этого предлагается следующая таблица истинности для И в ПРОТЕРЛОГе:
\ N O P
N N O N
O O O O
P N O P
расшифровывается так - если хотя бы один из аргументов неизвестность, то результат неизвестен и если все аргументы истина, то результат - истина
В некоторых источниках вышеприведённая табличка называется "конъюнкция Клини" (Kleene)
Shaos wrote: И в гипотетическом "троичном прологе" будучи записанным аналогичным обычному Прологу образом:
p:-a,b.
будет означать что-то типа такого:
- "p" истинно, если "a" и "b" истинны;
- "p" ложно, если "a" и "b" ложны;
- "p" ложно, если "a" истинно, а "b" ложно;
- "p" ложно, если "a" ложно, а "b" истинно;
- "p" неизвестно, если "a" или "b" неизвестны.
Shaos wrote: ... ИЛИ также можно записать параллельно:
p:-a.
p:-b.

Что предположительно обозначает:
- "p" истинно, если "a" истинно (игнорируем "b");
- "p" ложно, если "a" ложно (игнорируем "b");
- "p" истинно, если "a" неизвестно, а "b" - истинно;
- "p" ложно, если "a" неизвестно, а "b" - ложно;
- "p" неизвестно, если "a" и "b" неизвестны.
в данном случае это можно рассматривать как гипотезы относительно значения p, которые рассматриваются последовательно
Shaos wrote: В связи с этим придётся переписать нашу табличку ИЛИ т.к. порядок аргументов теперь играет роль (по горизонтали откладываем первый аргумент):

\ N O P
N N N P
O N O P
P N P P

Жирным обозначен "исправленный" элемент таблицы соответствия для трилоговского ИЛИ.
на самом деле это немного спорное изменение - это надо ещё обсуждать...
Shaos wrote: Простое перечисление положительных фактов в нашем "троичном прологе", как и Прологе обычном идёт так:
p(a).
p(b).

Что везде означает, что свойство "p" принадлежит "a" и "b".

В то же время появляется возможность перечислять отрицательные факты:
\p(c).
\p(d).

Что в случае "троичного пролога" должно интерпретироваться как точно известно, что свойство "p" не принадлежит "a" и не принадлежит "c".

Всё что не перечислено в "троичном прологе" считается неизвестным (в отличие от обычного Пролога, где неупомянутое считается ложным).
Shaos wrote:
Shaos wrote:
P.S. Мои И и ИЛИ не срастаются через НЕ (А И Б) = (НЕ А) ИЛИ (НЕ Б) - по видимому это выражение "нетроичнологичное"...
Объясню на человеческом языке: если известно, что А и Б точно не могут быть истинны одновременно, то это означает, что А не является истиной или Б не является истиной (или и то, и другое ложно). В случае же нашей "конъюнкции Клини" левая часть выражения расшифровывается не только как "А и Б не могут быть одновременно истинны", но и как "точно известны значения А и Б и одно из них - ложь", т.е. мы точно знаем что ни один из фактов не принимает значение "неизвестно"
это чтобы получить положительный ответ, а ведь ответ может быть не только положительным или отрицательным, но и неизвестным...

P.S. Можно попробовать использовать + и - в качестве первого символа для обозначения положительых и отрицательных фактов и правил.
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

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

Post by b2m »

p:-a.
p:-b.

Что предположительно обозначает:
- "p" истинно, если "a" истинно (игнорируем "b");
- "p" ложно, если "a" ложно (игнорируем "b");
А вы не забыли, что решений может быть несколько, и игнорировать "b" не совсем корректно. В общем случае будет несколько истинных решений, несколько ложных и несколько решений с признаком недоказанности. Хотя, последние можно отбросить, аналогично тому, как нормальный Пролог отбрасывает ложные решения. Вопрос только в том, как трактовать наличие одновременно истинных и ложных решений для терма с определённым (одинаковым) набором агрументов в троичном Прологе? :) Я думаю в этом случае можно было бы установить признак недоказанности и отбросить таковые решения, либо ввести признак противоречия.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

b2m wrote:
p:-a.
p:-b.

Что предположительно обозначает:
- "p" истинно, если "a" истинно (игнорируем "b");
- "p" ложно, если "a" ложно (игнорируем "b");
А вы не забыли, что решений может быть несколько, и игнорировать "b" не совсем корректно. В общем случае будет несколько истинных решений, несколько ложных и несколько решений с признаком недоказанности. Хотя, последние можно отбросить, аналогично тому, как нормальный Пролог отбрасывает ложные решения. Вопрос только в том, как трактовать наличие одновременно истинных и ложных решений для терма с определённым (одинаковым) набором агрументов в троичном Прологе? :) Я думаю в этом случае можно было бы установить признак недоказанности и отбросить таковые решения, либо ввести признак противоречия.
Если решений несколько - делаем как в прологе: юзер сообщает системе что ему нужно следующее решение и пролог его ему выдаёт :)

Противоречие в базе знаний - штука от которой практически не избавится, т.е. будем считать что оно имеет право на жизнь, а корректным решением по умолчанию будем считать первое попавшееся...
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

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

Post by b2m »

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

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)).
Эквивалентная программа на ПРОЛОГе:
boy(john,yes).
boy(nora,no).
girl(X,R1):-my_not(R1,R2),boy(X,R2).
my_not(yes,no).
my_not(no,yes).

Нужно только иметь ввиду, что ответ Пролога No означает unknown, а при ответе Yes нужно смотреть значение второго параметра.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

b2m wrote: Эквивалентная программа на ПРОЛОГе:
boy(john,yes).
boy(nora,no).
girl(X,R1):-my_not(R1,R2),boy(X,R2).
my_not(yes,no).
my_not(no,yes).

Нужно только иметь ввиду, что ответ Пролога No означает unknown, а при ответе Yes нужно смотреть значение второго параметра.
Это скорее не "эквивалентная" программа, а программа на обычном прологе, которая показывает как бы работал троичный пролог ;)
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

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

Post by b2m »

Кстати, ответ Пролога Yes/No нужно понимать не как истина/ложь, а как найдено/не найдено. А вот что конкретно найдено (или нет) зависит уже от программы. Это к вопросу о троичности. Интересно, какой третий ответ возможен в ряду: найдено, не найдено, ...? ;)
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Никто не спорит, что на обычном прологе можно написать интерпретатор троичного :)
Просто хотелось бы сразу на уровне языка иметь возможность получать троичность:
- найдено положительное решение;
- найдено отрицательное решение;
- решение не найдено т.е. неизвестно...
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

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

Post by Mac Buster »

Я почему-то думал что текущая реализация даёт ответ вроде "На основании имеющихся данных решение имеется" и "Имеющихся данных недостаточно или ответ парадоксален".

Соответственно в троичной реализации мы имеем возможность разделить второй вариант на два полноценных и независимых: "Имеющихся данных недостаточно (для однозначного ответа)" и "Ответ парадоксален".
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Ну насколько я знаю обычный пролог не оперирует понятием "парадоксальности" - ответ либо есть, либо нет (невозможно сформулировать на основе имеющейся базы знаний). Троичный же пролог будет предлагать три вариант - ответ положительный, ответ отрицательный и ответ неизвестен (невозможно сформулировать на основе имеющейся базы знаний).
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Post by b2m »

Shaos wrote:обычный пролог не оперирует понятием "парадоксальности" - ответ либо есть, либо нет
Насколько я понимаю, он отвечает: утверждение доказано - да/нет.
Shaos wrote:Троичный же пролог будет предлагать три вариант - ответ положительный, ответ отрицательный и ответ неизвестен (невозможно сформулировать на основе имеющейся базы знаний).
Т.е. троичный пролог должен отвечать: утверждение доказано - да/нет/доказано обратное.

P.S. Как-то странно отсортированы темы в этом форуме, обычно ведь по дате последнего сообщения сортируется?
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

b2m wrote:P.S. Как-то странно отсортированы темы в этом форуме, обычно ведь по дате последнего сообщения сортируется?
Да - это сюрприз для меня, что phpBB сортирует топики не по дате последнего сообщения, а по ИДЕНТИФИКАТОРУ последнего сообщения (post_id), который для всех эммигрантов с Ternary.info находится в маленьких номерах (1...3000) и заведомо меньше топиков-старожилов...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Тема поднималась пользователем Shaos 15 авг 2021 17:42.
Хм, а как я это сделал? Я вроде просто линк хотел в телегу поставить, а оно вот взяло и "бампнулось"...

P.S. А всё - увидел. Слева вверху под названием топика есть ряд опций, одна из которых "Поднять тему" (она правда не у всех тем появляется)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

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

Post by Lavr »

Shaos wrote:
Тема поднималась пользователем Shaos 15 авг 2021 17:42.
Хм, а как я это сделал? Я вроде просто линк хотел в телегу поставить, а оно вот взяло и "бампнулось"...

P.S. А всё - увидел. Слева вверху под названием топика есть ряд опций, одна из которых "Поднять тему" (она правда не у всех тем появляется)
А я тебя спрашивал в личку как-то про опцию Поднять тему.
Но ты мне ответил, что такой опции вроде нет. 8)

Отчасти правда - порой она есть, а порой не найдёшь, принцип появления опции непонятен...
iLavr