Документ взят из кэша поисковой машины. Адрес оригинального документа : http://uneex.mithril.cs.msu.su/static/AltDocs_informatika2/Book2/ch_07_sheets/01_logic/04_transforme/index.html
Дата изменения: Mon Sep 26 12:35:53 2011
Дата индексирования: Tue Oct 2 02:17:35 2012
Кодировка: koi8-r
Преобразование выражений Предыдущий раздел Уровень выше Следующий раздел

Преобразование логических выражений

Табличный способ определения истинности сложного выражения имеет ограниченное применение, так как при увеличении числа логических переменных приходится перебирать слишком много вариантов. В таких случаях используют способ приведения формул к нормальной форме. Формула имеет нормальную форму, если в ней отсутствуют знаки эквивалентности, импликации и двойного отрицания, а все знаки отрицания относятся только к переменным, а не к выражениям.

Следующие формулы преобразований дополняют сформулированные выше законы булевой алгебры и позволяют приводить формулы к нормальной форме.
!( !A) = A.
!(A && B) = !A || !B.
!(A || B) = !A && !B.
!(A -> B) = A && !B.
A -> B = !A || B.
<-> B = (A && B) ||  (!A &&  !B) =( !A || B) &&  (A || !B).

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


Пример

Следователь допрашивал четырех гангстеров по делу о похищении автомобиля.


Джек сказал: "Если Том не угонял автомобиля, то его угнал Боб".


Боб сказал: "Если Джек не угонял автомобиля, то его угнал Том".


Фред сказал: "Если Том не угонял автомобиля, то его угнал Джек".


Том сказал: "Если Боб не угонял автомобиля, то его угнал я".

Удалось выяснить, что Боб солгал, а Том сказал правду. Правдивы ли показания Джека и Фреда? Кто угнал машину?


Решение
Определим следующие простые высказывания:
А - "машину угнал Боб"; В - "машину угнал Том";
С - "машину угнал Джек";    D - "машину угнал Фред".

Запишем (и сразу упростим) сложные высказывания, выражающие приведенные факты:
(1) !B -> A  =  !( !B) || A   =   B || A (истинность неизвестна);
(2) !C -> B  =  !( !C) || B = C || B = F (высказывание ложно);
(3) !B -> C  =  !( !B) || C = B || C = C || B (истинность неизвестна);
(4) !A -> B  =  !( !A) || B = A || B = T (высказывание истинно).

Заметим, что после упрощения высказывание (3) совпало с высказыванием (2), которое ложно. Таким образом, высказывание (3), произнесенное Фредом, также ложно.

Из ложности высказывания (2) следует ложность каждого дизъюнкта, входящего в него, т. е. C = F и B = F.

Подставив найденное значение B в высказывание (4) получаем A || B = A || F = T, что возможно лишь если A = T, т. е. машину угнал Боб.

Рассмотрим высказывание Джека (1): B || A = F || T = T - оно истинно.

Итак, Джек сказал правду, а Фред соврал. Машину угнал Боб.


Пример
Кто из людей A, B, C и D играет, а кто не играет в шахматы, если известно следующее:
а) если А или В играет, то С не играет;
б) если В не играет, то играют С и D;
в) С играет.


Решение
Определим следующие простые высказывания:
А - "А играет в шахматы"; В - "В играет в шахматы";
С - "С играет в шахматы";    D - "D играет в шахматы".

Запишем сложные высказывания, выражающие известные факты:
a) (A && B) -> !C;
б) !B -> C && D;
в) C.

Запишем произведение (конъюнкцию) указанных сложных высказываний. Так как все они истинны, то и произведение тоже истинно:

((A || B) -> !C) && ( !B -> C && D) && C = T.

Упростив эту формулу, получим

!A && !B && C && D = T.

Отсюда по свойствам конъюнкции получаем, A = F, B = F, C = T, D = T. Значит, в шахматы играют C и D, а A и B - не играют.

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


Пример
Упростим логическую формулу !( (A || B) -> !( B || C)).


Решение
!( (A || B) -> !( B || C)) =
!( !(A || B) || !( B || C)) =
!( !(A || B)) && !( !( B || C)) =
(A || B) && (B || C) = { дистрибутивность операции ИЛИ }
(A || B) && B || ( A || B) && C =
A && B || B || A && C || B && C =
B && (A || T) || C && (A && B) =
B || A && C || B && C =
B && (T || C) || A && C = B || A && C.


Задания

  1. Упростите следующую логическую формулу и определите ее истинность:
    (A -> B) && (B -> (C || !A)) && (!D -> (A && !C)) && (D -> A).
  2. Определите значение формул:
    1) (( C || B) -> B) && ( A && B) -> B ;
    2) (( C || B) -> B) && ( A || B) -> B.
  3. В нарушении правил обмена валюты подозреваются четыре работника банка - A, B, C и D. Известно следующее:


    a) Если A нарушил, то и B нарушил правила обмена валюты.


    б) Если B нарушил, то и C нарушил или A не нарушал.


    в) Если D не нарушил, то A нарушил, а C не нарушал.


    г) Если D нарушил, то и A нарушил.


    Кто из подозреваемых нарушил правила обмена валюты? Решите задачу с помощью логических операций.

  4. Алеша, Боря и Гриша нашли в земле старинный сосуд. Рассматривая удивительную находку, каждый высказал по два предположения:


    Алеша: "Это сосуд греческий и изготовлен в V веке".


    Боря: "Это сосуд финикийский и изготовлен в III веке".


    Гриша: "Это сосуд не греческий и изготовлен в IV веке".


    Знакомый археолог определил, что каждый из них прав только в одном из двух предположений. Где и в каком веке изготовлен сосуд?


Предыдущий раздел Уровень выше Следующий раздел