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

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

Moderator: haqreu

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

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

Post by Shaos »

Shaos wrote:
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
расшифровывается так - если хотя бы один из аргументов правда, то результат считать правдой, если аргументы принимают значения ложь и неизвестность, то результат - ложь, и, наконец, если все аргументы неизвестность, то результат неизвестен (неопределен)
Если расставить логические значения по Брусенцову:
P - истина (true в терминах Пролога)
O - ложь (fail в терминах Пролога)
N - неизвестно (unknown)
то мои таблицы получаются аналогичными MIN (И) и MAX (ИЛИ)
Last edited by Shaos on 20 Sep 2012 20:39, edited 1 time in total.
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

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

Post by Mac Buster »

Интересное совпадение. Буквально на днях обдумывал варианты реализации машины вывода.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Mac Buster wrote: Интересное совпадение. Буквально на днях обдумывал варианты реализации машины вывода.
А что обдумывать? Делать надо - по аналогии с Прологом, но с новыми правилами. Кстати тот сайт что сбил меня с толку уже опять не существует...
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Shaos wrote:
Shaos wrote:
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
расшифровывается так - если хотя бы один из аргументов правда, то результат считать правдой, если аргументы принимают значения ложь и неизвестность, то результат - ложь, и, наконец, если все аргументы неизвестность, то результат неизвестен (неопределен)
Если расставить логические значения по Брусенцову:
P - истина (true в терминах Пролога)
O - ложь (fail в терминах Пролога)
N - неизвестно (unknown)
то мои таблицы получаются аналогичными MIN (И) и MAX (ИЛИ)
Вспомнил почему я выбрал первоначальную расстановку - при ней отрицание работает как надо (!P=N, !O=O, !N=P), а в случае "брусенцовской" расстановки отрицание становится бессмысленным (не-истина=неизвестно, не-ложь=ложь, не-неизвестно=истина).
Last edited by Shaos on 20 Sep 2012 20:39, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

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

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

Post by Shaos »

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

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

В то же время логическое И укладывается в одно утверждение:
pred:-a,b.
что значит "p" истинно если истинно "a" и истинно "b".

Если пытатся сделать что-то аналогичное в нашем гипотетическом "троичном прологе", то ИЛИ также можно записать параллельно:
p:-a.
p:-b.

Что предположительно обозначает:
- "p" истинно, если "a" истинно (игнорируем "b");
- "p" ложно, если "a" ложно (игнорируем "b");
- "p" истинно, если "a" неизвестно, а "b" - истинно;
- "p" ложно, если "a" неизвестно, а "b" - ложно;
- "p" неизвестно, если "a" и "b" неизвестны.

И в гипотетическом "троичном прологе" будучи записанным аналогичным обычному Прологу образом:
p:-a,b.
будет означать что-то типа такого:
- "p" истинно, если "a" и "b" истинны;
- "p" ложно, если "a" и "b" ложны;
- "p" ложно, если "a" истинно, а "b" ложно;
- "p" ложно, если "a" ложно, а "b" истинно;
- "p" неизвестно, если "a" или "b" неизвестны.

Простое перечисление положительных фактов в нашем "троичном прологе", как и Прологе обычном идёт так:
p(a).
p(b).

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

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

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

Всё что не перечислено в "троичном прологе" считается неизвестным (в отличие от обычного Пролога, где неупомянутое считается ложным).
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

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

Вот тут - http://arvi.livejournal.com/144849.html - вышеприведённая табличка называется "конъюнкция Клини" (написано американец - интересно как в оригинале его фамилия звучит?)

Вот тут - http://forums.airbase.ru/viewtopic.php?id=22443&p=1 - в форуме 2003 года автор приводит аналогичные моим таблички (правда он потом перешёл на обычные MIN и MAX т.к. смешал вместе троичную логику и троичные вычисления)

P.S. Мои И и ИЛИ не срастаются через НЕ (А И Б) = (НЕ А) ИЛИ (НЕ Б) - по видимому это выражение "нетроичнологичное"...
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Shaos wrote:
Shaos wrote:
Запятая (,) обозначающая в обычном Прологе И в нашем случае не может быть заменена на троичный эквивалент MIN, вместо этого предлагается следующая таблица истинности для И в ПРОТЕРЛОГе:
\ N O P
N N O N
O O O O
P N O P
расшифровывается так - если хотя бы один из аргументов неизвестность, то результат неизвестен и если все аргументы истина, то результат - истина
Вот тут - http://arvi.livejournal.com/144849.html - вышеприведённая табличка называется "конъюнкция Клини" (написано американец - интересно как в оригинале его фамилия звучит?)
Нашёл:
Стивен Коул Клини (англ. Stephen Cole Kleene; 5 января 1909 - 25 января 1994) - американский математик, чьи работы совместно с работами Алонзо Чёрча, Курта Гёделя и Алана Тьюринга дали начало разделу математической логики в теории вычислимости. Кроме того, известен изобретением регулярных выражений. Его именем названы Алгебра Клини, Звёздочка Клини, теорема Клини о рекурсии, теорема Клини о неподвижной точке. Кроме того, известны его работы в области интуиционистсткой математики Брауэра.

Сам Клини произносил свою фамилию как Клейни, ошибочная транслитерация Клини утвердилась в Советском Союзе в связи с изданием переводов его книг именно под такой фамилией.

Среди наиболее известных работ, издававшихся на русском языке - книги Введение в метаматематику и Математическая логика.
"Математическая логика" кстати в 1973 в СССР издавалась (год моего рождения ;=) а "Введение в математику" и вообще - 1957...

P.S. Купил переизданный англоязычный оригинал "математической логики" за 17 долларов на amazon.com
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Тема переросла из чисто софтовой в теоретическую, поэтому переименовываю топик и переношу в теорию
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

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

НЕ (А И Б) = (А=ложь И Б=ложь) ИЛИ (А=ложь и Б=истина) ИЛИ (А=истина и Б=ложь) ИЛИ НЕ (А=истина И Б=истина)
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Shaos wrote:
Если пытатся сделать что-то аналогичное в нашем гипотетическом "троичном прологе", то ИЛИ также можно записать параллельно:
p:-a.
p:-b.

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

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

Жирным обозначен "исправленный" элемент таблицы соответствия для трилоговского ИЛИ.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Вобщем вот примерный синтаксис ТРИЛОГА:

a. - положительный факт
\a. - отрицательный факт
a:=b. - положительное правило
\a:=b. - отрицательное правило (?)

a:=b,\c,d,\e. - пример записи правила с положительными и отрицательными составляющими

В связи с этим возникает вопрос - эквивалентны ли записи \a:=b. и a:=\b. ? А также каким образом можно перенести отрицание из левой части записи \a:=b,c. в правую (там использовано больше одного составляющего)?
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Shaos wrote:
Shaos wrote:
Shaos wrote:
Запятая (,) обозначающая в обычном Прологе И в нашем случае не может быть заменена на троичный эквивалент MIN, вместо этого предлагается следующая таблица истинности для И в ПРОТЕРЛОГе:
\ N O P
N N O N
O O O O
P N O P
расшифровывается так - если хотя бы один из аргументов неизвестность, то результат неизвестен и если все аргументы истина, то результат - истина
Вот тут - http://arvi.livejournal.com/144849.html - вышеприведённая табличка называется "конъюнкция Клини" (написано американец - интересно как в оригинале его фамилия звучит?)
Нашёл:
Стивен Коул Клини (англ. Stephen Cole Kleene; 5 января 1909 - 25 января 1994) - американский математик, чьи работы совместно с работами Алонзо Чёрча, Курта Гёделя и Алана Тьюринга дали начало разделу математической логики в теории вычислимости. Кроме того, известен изобретением регулярных выражений. Его именем названы Алгебра Клини, Звёздочка Клини, теорема Клини о рекурсии, теорема Клини о неподвижной точке. Кроме того, известны его работы в области интуиционистсткой математики Брауэра.

Сам Клини произносил свою фамилию как Клейни, ошибочная транслитерация Клини утвердилась в Советском Союзе в связи с изданием переводов его книг именно под такой фамилией.

Среди наиболее известных работ, издававшихся на русском языке - книги Введение в метаматематику и Математическая логика.
"Математическая логика" кстати в 1973 в СССР издавалась (год моего рождения ;=) а "Введение в математику" и вообще - 1957...

P.S. Купил переизданный англоязычный оригинал "математической логики" за 17 долларов на amazon.com
Что-то читаю статьи где на Клини ссылаются - у него таже классическая конъюнкция (MIN) как и у Лукашевича (1920) - т.е. не тоже самое что у меня выходит...
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Мои мысли отдалённо близки к понятию "индуктивное логическое программирование", суть которого сводится к тому, что программа сама себя строит исходя из положительных и отрицательных примеров (и используюя некоторый ограниченный набор предикатов, прямо не связанный с примерами). Даже у Братко есть глава на эту тему.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Shaos wrote:
Что-то читаю статьи где на Клини ссылаются - у него таже классическая конъюнкция (MIN) как и у Лукашевича (1920) - т.е. не тоже самое что у меня выходит...
Вобщем постепенно разбираюсь - у Клини существует strong three-valued logic (которую в основном поминают и которая в качестве И берёт MIN) и weak three-valued logic - вот это как раз и есть то, что у меня для И предлагается!