pvÎPst)((pv.KPst=do.KPst)&(pv.KDet=do.KDet))
=($pvÎPst)((pv.KPst=do.KPst)&(pv.KDet=do.KDet))
Несложно видеть, что предикат применяется к формуле . Используя тождество введем импликацию. Вопрос заключается в том, что выбрать в качестве , а что в качестве . Анализ формул и подсказывает, что предпочтительным является выбор: и . После преобразования получим .
С учетом вышесказанного эквивалентной формой исходного запроса является запрос:
НАЙТИ{(de.ImDet)/deÎDet}:
("doÎDog)((do.DtN>’10.10.2006’ & do.KDet=de.KDet)-> ($psÎPsts)((ps.KPst=do.KPst)&(ps.AdrPst¹’Казань’))Ú($pvÎPst)((pv.KPst=do.KPst)&(pv.KDet=do.KDet)))
Формулировка запроса на естественном языке выглядит следующим образом:
Найти детали, что каждый договор по этой детали, заключенный после ’10.10.2006’ или заключен не с Казанскими поставщиками или имеются поставки этих деталей по данному договору.
Рассмотрим задачу построения запроса на языке SQL
Вернемся к первоначальной трактовке запроса, которая не включает в себя импликацию. Используя тождество преобразуем формулу к эквивалентному виду
НАЙТИ{(de.ImDet)/deÎDet}:(Ø$doÎDog)Ø((do.DtN<=’10.10.2006’ Ú do.KDet¹de.KDet)Ú
($psÎPsts)(( ps.KPst=do.KPst)&(ps.AdrPst¹’Казань’))Ú
($pvÎPst)((pv.KPst=do.KPst)&(pv.KDet=do.KDet)))
Используя правила де Моргана, будем иметь 
После преобразования получим
|