psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2006-07-01 11:03 am

Трехзначная логика на писишке

"С децтва" не любил базы данных... уже сейчас и не вспомню причину, по которой их невзлюбил. Тут по работе, однако, пришлось изучать SQL. Сидел, весь день читал толстенную книженцию, дочитал. Но речь не в том. SQL - довольно старинный язык и интересен тем, что в нем используется трехзначная логика.

Привет журналюгам, которые любят писать о том, что применение трехзначной логики приведет к революции в компьютерной технике. И де она ваша революция? ;))

Логика используется самая что ни на есть "стандартная", ее еще называют трехзначной логикой Лукасевича. Между TRUE и FALSE есть еще промежуточное значение: NULL. По смыслу это NULL соответствует приблизительно выражениям "не известно", "не определено", "не задано", "не указано". Если TRUE ассоциировать с единицей, FALSE с нулем, а NULL - с 1/2, то логические операции в этой логике выглядят так:

A and B = min(A, B)
A or B = max(A, B)
not A = 1 - A

Кстати, закон исключенного третьего в этой логике не выполняется. По нему должно быть:

A or ~A = TRUE

а на самом деле при A = NULL = 1/2 получаем:

A or ~A = NULL or ~NULL = 1/2 or (1 - 1/2) = 1/2 or 1/2 = max(1/2, 1/2) = 1/2 = NULL ≠ TRUE

Усили по усилению лжеца...

[identity profile] alex-semenov.livejournal.com 2006-07-06 02:21 pm (UTC)(link)
Я попробовал формализовать рассуждения "усиленного лжеца"
Вот что получилось.
И так.
1 – истина
0 – ложь
1/2 - не имеет значения истинности.

Возьмем приведенную выше троичную логику:
Операции:

A and B = min(A, B)
A or B = max(A, B)
not A = 1 – A


Но нам потребуется еще одна одноместная операция. "Не знаю, имеет ли Х значение истинности?"
Обозначим ее так ?(Х) и пока не будем для нее строит таблицу значений.
А давайте для начала запишем простой парадокс лжеца:

Р: не(Р).

Если P=1 то не(1)=0 <>1
Если Р=0 то не(0)=1 <>0

Усиленный Лжец:

P: не(P) or ?(P)

Вот распальцовка от Подниекса в нашей троичной логике:

Если P=1 то не(1) or ?(1)= 0 оr 0 =0 <>1
Если P=0 то не(0) or ?(0)= 1 оr 0 =1 <>0
Если P=1/2 то не(1/2) or ?(1/2)= 1/2 оr 1 =1 <>1/2

Теперь давайте поймем из нее действие оператора "?"

?(1) = 0
Не знаю, имеет ли истина значение истинности. Это явная ложь! Знает же, гад, что имеет!

?(0) = 0
Не знаю, имеет ли ложь значение истинности. Это тоже явная ложь! Знает, сволочь, что не имеет и врет!

?(1/2) =1
Не знаю, имеет ли не имеющее значение истинности, значение истинности? Действительно не знает.
Говорит правду. ЗначитИстина!

Все логично?
Вроде как...
Не знаю, поможет ли вся эта кабалистика понять усиленного лжеца?
Мне, вроде, помогла...
:))))