psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2008-07-10 01:35 pm

Проект "логика для чайников". Параграф 43

Свойства логических операций (две алгебры)

Алгебра логики, булева алгебра – очень удачные термины не только формально, но и по сходству с обычной, школьной алгеброй. Здесь тоже есть свои законы перестановки, раскрытия скобок, приведения подобных членов и тому подобные вещи.

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

Как уже говорилось, можно переставлять местами операнды операций И, ИЛИ, XOR и передвигать скобки:

a И b = b И a
a И (b И c) = (a И b) И c

Похоже на законы перестановки слагаемый и передвигание скобок в обычной алгебре.

Так же можно “выносить за скобки”:

(x И y) ИЛИ (x И z) = x И (y ИЛИ z)

Сравните:

xy + xz = x(y + z)

То же самое относится к операции XOR:

(x И y) XOR (x И z) = x И (y XOR z)

Получается, что операция И играет роль умножения, а операции ИЛИ, XOR – роль сложения.

Но есть и отличия. Например, в логике можно и вот так:

(x ИЛИ y) И (x ИЛИ z) = x ИЛИ (y И z)

Сравните:

(x + y) (x + z) = x + (yz)

Последнее равенство, конечно же, неправильное, так что сходство между логической алгеброй и обычной – не совсем полное.

Зная эти законы, можно выводить новые формулы. Например, можно доказать, что x ИЛИ (x И y) = x:

x ИЛИ (x И y) = (x И true) ИЛИ (x И y) = x И (true ИЛИ y) = x И true = x

Поясню переходы.
Первое равенство использует закон поглощения: x = x И true.
Второе равенство – это вынесение x за скобки.
Третье равенство – закон поглощения true ИЛИ y = true.
Четвертое равенство – закон поглощения x ИЛИ true = x.

По аналогии с обычной алгеброй в логике вводят разные сокращения для удобства. Например, в обычной алгебре не пишут “плюс”, “минус”, а применяют значки “+”, “-“. В логике есть значки “~” (НЕ), “&” (И), \/ (ИЛИ), Е (XOR).

В обычной алгебре знак умножения часто не пишут: xy + z. В алгебре логики часто опускают знак логического И: xy ⊕ z.

В обычной алгебре у операций имеются приоритеты, что позволяет обходиться без лишних скобок. В алгебре логики – то же самое. Причем, приоритеты расставляются по тому же принципу: сначала “НЕ” (в обычной алгебре наивысший приоритет у операции смены знака), потом “И” (в обычной алгебре средний приоритет имеют умножение и деление), потом ИЛИ, XOR (в обычной алгебре наименьший приоритет у сложения и вычитания).

Например, в алгебре логики можно написать вот так: ~x \/ xz (z \/ ~y).

В обычной алгебре это могло бы выглядеть так: -x + xz (z + -y).

Некоторые логические законы поглощения похожи на обычную алгебру. Сравните:
x + 0 = x ---- x \/ false = x
x + 0 = x ---- x ⊕ false = x
x * 0 = 0 ---- x & false = false
x * 1 = x ---- x & true = x

Но не всегда, в алгебре логики таких сокращений больше, а некоторые отличаются:

x + 1 = ? ---- x \/ true = true
x + x = 2x ---- x \/ x = x
x * x = x2 ---- x & x = x

Самое “неприятное” отличие, пожалуй, связано с операцией отрицания: когда она стоит перед скобками, то скобки раскрываются иначе:

-(x + y) = -x + -y
-(x * y) = -x * -y
~(x & y) = ~x \/ ~y
~(x \/ y) = ~x & ~y
~(x ⊕ y) = true ⊕ x ⊕ y

Третья и четвертая формулы называются законами Де Моргана.

Что из всего перечисленного есть смысл запоминать? В принципе, можно ничего не запоминать, есть справочник:

http://psi-logic.shadanakar.org/bool/bool6.htm

Хуже всего с законами поглощения: их много, и они почти все важны. Наверное, есть смысл не запоминать их, а научиться быстренько выводить “в уме”.

Если вы не собираетесь вдаваться в программирование и схемотехнику, но предполагаете применять логику в жизни, подчас для сложных рассуждений, тогда я бы порекомендовал запомнить только следующие шесть формул:

~~x = x
~(x & y) = ~x \/ ~y
~(x \/ y) = ~x & ~y
x & (y \/ z) = xy \/ xz
x & ~x = false
x \/ ~x = true

Плюс то, что можно переставлять местами операнды операций &, \/, ⊕, и передвигать для них скобки. Я думаю, это такой разумный минимум, все остальное пригождается реже, и можно освежить в памяти по справочнику.

[identity profile] kelavrik-0.livejournal.com 2008-07-11 11:57 am (UTC)(link)
Типичное поле.
А знаешь, что можно работать с обычными числами, но вместо плюса искать максимум, а вместо умножения максимум?

[identity profile] psilogic.livejournal.com 2008-07-11 12:01 pm (UTC)(link)
не понял, про что ты... есть вот такая хрень:
x \/ y = max(x,y)
x & y = min(x,y)
если истинность выражать числами 0, 1

[identity profile] kelavrik-0.livejournal.com 2008-07-11 12:08 pm (UTC)(link)
Можно только 0 и 1, можно любым подмножеством целых чисел. А ещё можно пользовать действительные числа, плюс называем умножением, а вместо плюса: (x3+y3)1/3

[identity profile] psilogic.livejournal.com 2008-07-11 12:11 pm (UTC)(link)
ну извращаться можно по-разному, определять разные операции на поле или на группе - а зачем? :)

[identity profile] kelavrik-0.livejournal.com 2008-07-11 12:20 pm (UTC)(link)
А находятся области, в которых имеет смысл.

[identity profile] psilogic.livejournal.com 2008-07-11 12:27 pm (UTC)(link)
т.е ты не про что-то конкретное, а вообще? угу...

[identity profile] gaur-miaur.livejournal.com 2011-04-29 01:53 pm (UTC)(link)
А продолжения не будет?