[image]

Троичная логика

 
1 5 6 7 8 9 10 11
+
-
edit
 

-exec-

опытный

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

>каждый элемент нашего множества (с числом элементом N) представляет значение функции принадлежности
это не ясно. можно перефразировать?

следовательно не ясно:
>valFalse(x) & valUndef(x) = valFalse(x)
>valUndef(x) & valTrue(x) = valUndef(x)
>valFalse(x) | valUndef(x) = valUndef(x)
>valUndef(x) | valTrue(x) = valTrue(x)
0 and 1/2 => 0 ?
1/2 and 1 => 1/2 ?
0 or 1/2 => 1/2 ?
1/2 or 1 => 1 ?
не понятна "механика", если так можно выразиться.
   
+
-
edit
 

Balancer

администратор
★★★★★
-exec-, 11.05.2004 23:15:19 :
мля! когда копируешь пост в кармашек, постится нормально. только забудешь как сразу еггоги толпятся. очень провоцирует расстройство. мля.
 


ОЧЕНЬ рекомендую на форумах использовать Оперу. Она всегда даёт полноценный откат на предыдущие (и вперёд на следующие) страниц с сохранением всего введённого текста.
   
?? [Сергей] #11.05.2004 23:44
+
-
edit
 
это не ясно. можно перефразировать?
 


Имеется в виду - для каждой логики порядка N определяем набор функций принадлежностей так, что

f0(x) = 0
...
f_i_(x) = 1/(N-1) * i
...
fNminus1(x) = 1


не понятна "механика", если так можно выразиться.
 


Механика - берем в качестве "и" и "или" операции объединения и пересечения, определенные в теории нечетких множеств и применяем их на названные функции принадлежности.

Обоснования таких допущений - в результате получаем систему, которая при исключениях некоторых констант ведет себя корректно в рамках логики низшего порядка. В частности, при исключении вообще всех констант, кроме двух - сводится к двоичной.

 
?? [Сергей] #11.05.2004 23:48
+
-
edit
 
дополнение - берем набор таких функций и в дальнейшем полагаем их в качестве нашего алфавита.
 
?? [Сергей] #12.05.2004 05:56
+
-
edit
 
Еще одно дополнение.

Снова насчет "механики". Вы имеете в виду - вам не импонирует, когда undef and true = undef?
 
+
-
edit
 

-exec-

опытный

да нет. мне не важно что получится.
я хочу понять на чём основан результат.
на уровне примитивной арифметики (дальше которой я не развивался) операцию 1/2 and 1 => 1/2 я понять пока не могу.
разве что если брать:
{False} = [0; 0]
{Undef} = [0; 1/2]
{True} = [0; 1]
то есть оператор "and" (и другие) работает на множестве точек.
   
US [Сергей] #12.05.2004 15:09
+
-
edit
 
на уровне примитивной арифметики (дальше которой я не развивался) операцию 1/2 and 1 => 1/2 я понять пока не могу.
 


Почему? На уровне примитивной арифметики, на мой взгляд, все нормально. Скажем:

int bool1=0x01; // 0001
int bool2=0x03; // 0011

bool1 & bool2 - будет bool1

То есть

1 & 3 = 1 - результат вполне обычный и широко используемый.

Если привести к норме 1, получим:

1/3 and 1 = 1/3
1/3 or 1 = 1

 
US [Сергей] #12.05.2004 15:17
+
-
edit
 
То есть заметьте - даже старые булевские операции в ваших программах будут работать и в "новой" логике. Была у вас проверка на флаг:

if( FLAG & SOME_OPTION )
doSomething();

- так все и останется, никаких проблем не возникнет.

ЗЫ Я не ставлю целью найти "правоверный" набор мнемоник. :) Я просто обращаю внимание, что если в качестве алфавита взять предложенный мной набор функций принадлежности, то довольно разработанная теория нечеткой логики дает нам достаточно широкий аппарат функционалов, которые - во-первых - можно интуитивно поставить на место наших привычных функций логики, а во-вторых - по определению они дадут нам корректную картину обычной бинарной логики при редукции членов алфавита до 2.
 
+
-
edit
 

AidarM

аксакал
★★
Хм, похоже запощенное Сергеем совпадает с моими размышлизмами. :)

Ув. Balancer, возвращаясь к самому первому вашему запросу - все ОК? Хватает вам всего этого флейма, дабы в Сетунь поместить с пометкой 'логика'? Или стоит над принципиально троичными фичами пофантазировать?

Сергей, похоже, дока, да и места 'рыбные' знает. :)

Сергей, тут такая вещь: для случая с бинарной логикой при построении автомата детекторы конкретного значения не были нужны. Т.е. автомат был как бы 'инвариантный' что ли. Нет ли способа добиться такого и в многозначной логике? Даже ценой отказа от привычных представлений 1 как true, полного множества и 0 как false, пустого? Я почти уверен, что такое можно провернуть. Ошушшение такое. :rolleyes:
   
RU Андрей Суворов #12.05.2004 15:45
+
-
edit
 

Андрей Суворов

координатор

Да почему нечеткой? И почему вы пытаетесь расширить на алфавит из трёх символов бинарную логику?
Теорию полей надо читать. Поле из трёх элементов - отличное поле, на нем можно определить все арифметические и логические операции, только нужно другие значки для них придумать, чтоб не возникало ложных ассоциаций с привычными AND, OR, XOR и так далее.

Вот никто никогда не задумывался, что код Рида-Соломона, который используется в компакт-дисках, на самом деле не двоичный, а 256-ричный? А мог бы быть и троичным, если хочется, но в нормальных электронных устройствах это не очень удобно.
Код Рида-Соломона нельзя построить на двоичном алфавите. Хотя во многом он родственник кода Хэмминга, который всё равно, на каком алфавите строить...

Можно подумать, дискретный анализ в институте все дружно прогуливали. И я прогуливал, сколько мог, но кое-какие обрывки всё равно запомнились.

А уже на шестом курсе мне в руки попалась замечательная книжка "Коды, защищающие от ошибок". Где автор совершенно логично преположил, что теорминимума читатель не знает. Я балдел от этой книги.
   
+
-
edit
 

AidarM

аксакал
★★
>Можно подумать, дискретный анализ в институте все дружно прогуливали. И я прогуливал, сколько мог, но кое-какие обрывки всё равно запомнились.

Можно подумать, дискретный анализ везде читают. :rolleyes:
И причем тут коды Хемминга и Рида-Соломона?

Про арифметику тут ничего не говорится вообще, и так ясно, что в математике какие объекты и связи между ними объявишь, так и будет. А логика у нас либо бинарная, либо нечеткая. Ассоциации с OR, AND и XOR вовсе не ложные. Эти операции нужны в логич. рассуждениях. Мне, по крайней мере.
   
US [Сергей] #12.05.2004 15:57
+
-
edit
 
Честно говоря, я не вполне представляю, о чем именно разговор. :( Если бы вы мне в двух строках объяснили бы задачу чуть шире, то я бы, наверное, смог бы что-то сказать. Пока что я представляю это так - если автомат не "детектирует" значения на входе - то значит на выходе мы получим константу.

Насчет отказа от представлений - в этом совершенно не вижу проблемы. :) Честно говоря, все представления о нулях и полноте кажутся мне притянутыми за уши.
 
US [Сергей] #12.05.2004 16:01
+
-
edit
 
Теорию полей надо читать. Поле из трёх элементов - отличное поле, на нем можно определить все арифметические и логические операции, только нужно другие значки для них придумать, чтоб не возникало ложных ассоциаций с привычными AND, OR, XOR и так далее.
 


Ммм... а зачем вам для этого поля? :) Совершенно без всяческих проблем вы можете взять просто множество различных функций (троичных) одной переменной, двух переменных и т.д. Тут ведь обсуждение и пошло - "как бы так сделать, чтобы "поведение" вводимых функций отвечало некоторым интуитивным представлениям, а при редукции алфавита до 2 - превращалось бы в обычную булевскую алгебру.
 
+
-
edit
 

AidarM

аксакал
★★
>Честно говоря, я не вполне представляю, о чем именно разговор. Если бы вы мне в двух строках объяснили бы задачу чуть шире, то я бы, наверное, смог бы что-то сказать. Пока что я представляю это так - если автомат не "детектирует" значения на входе - то значит на выходе мы получим константу.

Я о том, что внутри автомата не проводится сравнение с заданными константами. Ни с нулем, ни с единицей, ни с undef. Вот мне пришлось такое ввести - кривовато получилось. ИМХО.

>Насчет отказа от представлений - в этом совершенно не вижу проблемы. Честно говоря, все представления о нулях и полноте кажутся мне притянутыми за уши.
Пока у меня нет желания спорить по этому поводу. :)
   
US [Сергей] #12.05.2004 16:06
+
-
edit
 
Кстати - а при чем тут вообще код Рида-Соломона? И почему это его нельзя построить на бинарном алфавите?! Или вы все же имеете в виду - нельзя построить на последовательности бит длиной 1? :)
 
RU Андрей Суворов #12.05.2004 16:06
+
-
edit
 

Андрей Суворов

координатор

[Сергей:],12.05.2004 15:01:26
Теорию полей надо читать. Поле из трёх элементов - отличное поле, на нем можно определить все арифметические и логические операции, только нужно другие значки для них придумать, чтоб не возникало ложных ассоциаций с привычными AND, OR, XOR и так далее.
 


Ммм... а зачем вам для этого поля? :) Совершенно без всяческих проблем вы можете взять просто множество различных функций (троичных) одной переменной, двух переменных и т.д. Тут ведь обсуждение и пошло - "как бы так сделать, чтобы "поведение" вводимых функций отвечало некоторым интуитивным представлениям, а при редукции алфавита до 2 - превращалось бы в обычную булевскую алгебру.
 


Всего лишь потому, что AND - это умножение в поле из двух элементов, а OR - сложение в нём же. И строить вокруг троичного алфавита логику надо по тому же принципу.

Тогда не будет противоречий между "интуитивным" и "математическим" подходами.
   
US [Сергей] #12.05.2004 16:11
+
-
edit
 
Я о том, что внутри автомата не проводится сравнение с заданными константами. Ни с нулем, ни с единицей, ни с undef. Вот мне пришлось такое ввести - кривовато получилось. ИМХО.
 


Извините, я пока не въезжаю... :( Скажем, если на входе у нас единичка - то и на выходе единичка, а если на входе ноль - то и на выходе ноль - можно сказать, что "внутри" есть сравнение на ноль, или нет? Пока у меня складывается впечатление, что вы имеете в виду - в двоичной логике любое сравнение с нулем является также и сравнением с единицей (поскольку если не ноль - то единица). Лично мне кажется очевидным, что мы, разумеется, не можем распространить такой принцип на "троичные" логики. Именно потому, что в троичной логике из того, что элемент не равен нулю не следует, что элемент равен единице (или двойке).
 
US [Сергей] #12.05.2004 16:14
+
-
edit
 
Всего лишь потому, что AND - это умножение в поле из двух элементов, а OR - сложение в нём же. И строить вокруг троичного алфавита логику надо по тому же принципу.
 


Это все замечательно, но вот только непонятно, чем является XOR "в поле из двух элементов". :) А также штрих Шеффера, например. Если бы Вы указали, чем являются эти функции в "поле из двух элементов", то, разумеется, остальное было бы уже легко.
 
+
-
edit
 

AidarM

аксакал
★★
>Скажем, если на входе у нас единичка - то и на выходе единичка, а если на входе ноль - то и на выходе ноль - можно сказать, что "внутри" есть сравнение на ноль, или нет?
Видимо, нет.

>Пока у меня складывается впечатление, что вы имеете в виду - в двоичной логике любое сравнение с нулем является также и сравнением с единицей (поскольку если не ноль - то единица).
Скорее, эта фича используется неявно. Когда мне нужно скомпоновать ответ из значений входных операндов, мне пришлось руками отсеивать (не)равенство какого-то операнда undef. С помощью neqv.

>Лично мне кажется очевидным, что мы, разумеется, не можем распространить такой принцип на "троичные" логики. Именно потому, что в троичной логике из того, что элемент не равен нулю не следует, что элемент равен единице (или двойке).
Это-то понятно. Но, может, можно добиться этого 'перенормировкой', переобозначением? Хм... кажется, я загоняюсь. Пока оставим. Вопрос пока снимается. Освежу вот в памяти алгоритм Дойча...
   
US [Сергей] #12.05.2004 16:28
+
-
edit
 
To АйдарМ:

А чтобы достичь симметрии в этом смысле (насчет детекторов) - мы должны перейти к тернарным операциям, думается.

Скажем - операция "равно" должна стать такой:

Двоичный случай:
eqv(a,0) --- 1 if a==0, 0 if a==1

Троичный случай:

eqv(a,0,1) = 2 if a==0, 0 if a==1, 1 if a==2

Разумеется, тогда операция "равно" теряет наш "обыденный" двоичный смысл. И вообще - становится страшно сложной. :) Но при том - "детектирует" сразу все. ;) Другое дело, что такое "детектирование" нам не нужно - мы можем просто использовать саму переменную.

На практике это значит, что и исполнительные ветви должны быть разные. То есть, вместо

if( eqv(a,0) ) {
something();
} else {
something_else();
}

у нас будет:
if( eqv(a,0,1) ) {
somnething()
} anotheraction {
anothersomething()
} else {
somethingelse()
}


Право, это слишком громоздко, чтобы быть оригинальным и полезным. ;)



 
US [Сергей] #12.05.2004 16:32
+
-
edit
 
Это-то понятно. Но, может, можно добиться этого 'перенормировкой', переобозначением?
 


Мне думается, не можем. :) Мы ведь не фиксируем алфавит - эти проблемы возникают до любой "нормировки" и обозначения.
 
US [Сергей] #12.05.2004 16:42
+
-
edit
 
у нас будет:
if( eqv(a,0,1) ) {
somnething()
} anotheraction {
anothersomething()
} else {
somethingelse()
}
 


Вернее, будет просто:

if( a ) {
something()
} anotheraction {
anothersomething()
} else {
somethingelse()
}

-- по аналогии с двоичным случаем:

у нас будет:
if( a ) {
somnething()
} else {
somethingelse()
}


И тогда, скажем, операция "сравнение с нулем" должна в "n-ичном" распространении называться не "сравнение" а "значение по индексу в массиве equals, составленного из элементов [N-1, ... 0]

В бинарном случае -

equals - [1,0]

0==0 -> 1 (equals[0]=1)
0==1 -> 0 (equals[1]=0)


В троичном:

equals - [2,1,0]

0==0 -> 2
0==1 -> 1
0==2 -> 2

Легко видеть, что такие векторы можно построить для каждого "первого операнда" сравнения. То есть - в общем случае будет матрица, для бинарного случая:

1 0
0 1

Для троичного:

2 1 0
1 2 1
0 1 2

Вот так. :) Не слишком ли громоздко для практического пользования? :)
 
US [Сергей] #12.05.2004 16:49
+
-
edit
 
2 1 0
1 2 1
0 1 2
 


Тьфу, сорри, конечно, не такая матрица! Не должно быть неоднозначностей в строке и столбце, так что общность с бинарным случаем соблюсти не удастся и будет что-то вроде:

2 0 1
1 2 0
0 1 2

Заметьте - симметрию соблюсти тоже не удастся.
 
+
-
edit
 

AidarM

аксакал
★★
>Другое дело, что такое "детектирование" нам не нужно - мы можем просто использовать саму переменную.

Вот именно.

>Вот так. Не слишком ли громоздко для практического пользования?
Дык если это будет в железе? Оно ж быстрее соотв. бинарной симуляции будет, нет?
   
RU Андрей Суворов #12.05.2004 16:50
+
-
edit
 

Андрей Суворов

координатор

Может, и громоздко на первый взгляд, но это - единственный конструктивный способ.
   
1 5 6 7 8 9 10 11

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru