|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Программирование с помощью троичной логики
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
| | | | Shaos 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.
|
03 Jun 2007 10:17 |
|
|
Mac Buster
Retired
Joined: 03 Aug 2003 22:37 Posts: 1474 Location: Moscow
|
Интересное совпадение. Буквально на днях обдумывал варианты реализации машины вывода.
|
03 Jun 2007 12:40 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
А что обдумывать? Делать надо - по аналогии с Прологом, но с новыми правилами. Кстати тот сайт что сбил меня с толку уже опять не существует...
|
03 Jun 2007 17:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
| | | | Shaos wrote: | | | | Shaos 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.
|
03 Jun 2007 17:18 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
А вообще в русскоязычной википедии можно подчерпнуть некоторые интересные вещи, связянные с путаницей в логиках, например троичных импликаций приведено аж четыре штуки, а существует их ещё больше...
|
03 Jun 2007 17:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
Итак, попробуем разобраться. Как правило в Прологе логическое ИЛИ раскладывается в параллельные утверждения:
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".
Всё что не перечислено в "троичном прологе" считается неизвестным (в отличие от обычного Пролога, где неупомянутое считается ложным).
|
03 Jun 2007 18:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
Вот тут - http://arvi.livejournal.com/144849.html - вышеприведённая табличка называется "конъюнкция Клини" (написано американец - интересно как в оригинале его фамилия звучит?)
Вот тут - http://forums.airbase.ru/viewtopic.php?id=22443&p=1 - в форуме 2003 года автор приводит аналогичные моим таблички (правда он потом перешёл на обычные MIN и MAX т.к. смешал вместе троичную логику и троичные вычисления)
P.S. Мои И и ИЛИ не срастаются через НЕ (А И Б) = (НЕ А) ИЛИ (НЕ Б) - по видимому это выражение "нетроичнологичное"...
|
03 Jun 2007 19:27 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
Нашёл:
"Математическая логика" кстати в 1973 в СССР издавалась (год моего рождения ;=) а "Введение в математику" и вообще - 1957...
P.S. Купил переизданный англоязычный оригинал "математической логики" за 17 долларов на amazon.com
|
03 Jun 2007 19:55 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
Тема переросла из чисто софтовой в теоретическую, поэтому переименовываю топик и переношу в теорию
|
03 Jun 2007 20:49 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
Объясню на человеческом языке: если известно, что А и Б точно не могут быть истинны одновременно, то это означает, что А не является истиной или Б не является истиной (или и то, и другое ложно). В случае же нашей "конъюнкции Клини" левая часть выражения расшифровывается не только как "А и Б не могут быть одновременно истинны", но и как "точно известны значения А и Б и одно из них - ложь", т.е. мы точно знаем что ни один из фактов не принимает значение "неизвестно":
НЕ (А И Б) = (А=ложь И Б=ложь) ИЛИ (А=ложь и Б=истина) ИЛИ (А=истина и Б=ложь) ИЛИ НЕ (А=истина И Б=истина)
|
03 Jun 2007 21:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
В связи с этим придётся переписать нашу табличку ИЛИ т.к. порядок аргументов теперь играет роль (по горизонтали откладываем первый аргумент):
\ N O P
N N N P
O N O P
P N P P
Жирным обозначен "исправленный" элемент таблицы соответствия для трилоговского ИЛИ.
|
03 Jun 2007 22:12 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
Вобщем вот примерный синтаксис ТРИЛОГА:
a. - положительный факт
\a. - отрицательный факт
a:=b. - положительное правило
\a:=b. - отрицательное правило (?)
a:=b,\c,d,\e. - пример записи правила с положительными и отрицательными составляющими
В связи с этим возникает вопрос - эквивалентны ли записи \a:=b. и a:=\b. ? А также каким образом можно перенести отрицание из левой части записи \a:=b,c. в правую (там использовано больше одного составляющего)?
|
03 Jun 2007 22:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
Что-то читаю статьи где на Клини ссылаются - у него таже классическая конъюнкция (MIN) как и у Лукашевича (1920) - т.е. не тоже самое что у меня выходит...
|
03 Jun 2007 23:44 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
Мои мысли отдалённо близки к понятию "индуктивное логическое программирование", суть которого сводится к тому, что программа сама себя строит исходя из положительных и отрицательных примеров (и используюя некоторый ограниченный набор предикатов, прямо не связанный с примерами). Даже у Братко есть глава на эту тему.
|
04 Jun 2007 20:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22685 Location: Silicon Valley
|
Вобщем постепенно разбираюсь - у Клини существует strong three-valued logic (которую в основном поминают и которая в качестве И берёт MIN) и weak three-valued logic - вот это как раз и есть то, что у меня для И предлагается!
|
04 Jun 2007 21:53 |
|
|
Who is online |
Users browsing this forum: No registered users and 6 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
|
|