|
Программирование
On-line приложения
Почитать
Web-сервер Apache
Печать и форматирование
MySQL
Разные рецепты
Сборка/установка
Справки
Философия
Мой опыт
Скачать
Программы на Tcl/Tk (GUI)
Программы на Python/Tk (GUI)
Программы (CLI)
Help
Хобби
Фракталы
on-line
Язык для рисования фракталов
Гиперкуб
Теория относительности
Ампуллярии
Преподавание
Студенту/абитуриенту
Мой опыт
Автора!
|
Алгебра логикиАлгебра логики позволяет легко преобразовывать логические выражения, что бывает очень полезно. В этой заметке я хочу максимально просто, без математических обозначений, которые непривычны большинству людей, рассказать об этих простых и мощных правилах. ОбозначенияЯ буду придерживаться обозначений, ясных большинству людей и привычных для программистов.
Порядок операций я буду обозначать скобками и буду предполагать, что отрицание имеет наибольший приоритет. То есть выражение A and not B следует понимать как A and (not B) Таблицы истинностиКоротко напомню правила выполнения операций Операция отрицания: Логическое <<и>>: Логическое <<или>>:
------------------ ----------------------- ----------------------
not true = false false and false = false false or false = false
not false = true true and false = false true or false = true
fasle and true = false fasle or true = true
true and true = true true or true = trueСвойства операцийЛогические операции во многом аналогичны привычным математическим, но имеют и свою специфику. Коммутативность — «от перестановки слагаемых сумма не изменяется» A and B = B and A A or B = B or A Идемпотентность X and X = X X or X = X Ассоциативность — порядок выполнения операций не важен (A and B) and C = A and (B and C) (A or B) or C = A or (B or C) Дистрибутивность — раскрытие скобок C or (A and B) = (C or A) and (C or B) C and (A or B) = (C and A) or (C and B) Законы де Моргана (ударение на «о»): not (A and B) = (not A) or (not B) not (A or B) = (not A) and (not B) Законы поглощения: A and (A or B) = A A or (A and B) = A Другие полезные закономерности, в которых фигурируют константы true и false: A and true = A A or true = true A and false = false A or false = A A and (not A) = false A or (not A) = true ПримерНапример, вам надо выполнить некое действие с файлом, «если дата его создания T меньше времени L, а если время T больше L, то требуется выполнение дополнительного условия P». Дословно это можно записать так: T < L or (T > L and P) Используем дистрибутивность — раскрываем скобки: (T < L or T > L) and (T < L or P) Первая скобка всегда «истина», а «истина и что-то — равно что-то». Получаем выражение: T < L or P Даже в таком простом выражении нам удалось вдвое уменьшить количество операций. Про что здесь не рассказаноСтрого говоря, алгебра логики рассматривает не только операции «и», «или» и «не». Другие операции не обладают всем перечисленными свойствами и заслуживают отдельного рассказа. Но я не стал здесь их рассматривать, так как в прикладном программировании используются преимущественно только три операции, а любые другие можно выразить через эти три. На пример, «исключающее или» можно выразить так: A xor B = (A or B) and (not A or not B) или A xor B = (A and not B) or (B and not A) |
|
|
|