Тверской государственный университет
Опубликован: 03.10.2011 | Доступ: свободный | Студентов: 3247 / 56 | Оценка: 4.33 / 3.83 | Длительность: 19:48:00
ISBN: 978-5-9963-0573-5
Лекция 6:

Логики вполне достаточно

Полустрогая импликация

импликация также имеет полустрогий вариант. Метод с аргументами l: LINE и i: INTEGER может использовать предусловие cмысл которого состоит в том, что i-я станция линии l, если существует, является пересадочной.

((i >= 1) and (i <= count)) implies l.i_th (i).is_exchange

Этот пример демонстрирует разумность полустрогой интерпретации импликации. Такая схема – выражение в форме a implies b, где b определено только тогда, когда a истинно, – встречается столь часто, что для этой операции, не являющейся коммутативной, кажется разумным ввести полустрогую версию, подходящую для всех случаев. Это вполне согласуется с принципом импликации и его требованием (предложение I1), что a implies b имеет значение True, независимо от b, всегда, когда a имеет значение False.

Поэтому мы выбираем полустрогую версию в качестве определения implies .

Определение: импликация с возможными неопределенностями

Значение a implies b для любых a и b, где b может быть неопределенно, является значением

(not a) or else b

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

(spouse /= Void) implies spouse.must_sign

Большинство использований "Если существует…", встречающихся в различных документах, следуют этому образцу.

5.4. Исчисление предикатов

Концепции, обсуждаемые до сих пор, принадлежали той части логики, которая называется исчислением высказываний (пропозициональным исчислением). Здесь базисными элементами являются высказывания (propositions), каждое устанавливающее единственное свойство p, которое может принимать только два значения – истина и ложь. Вот примеры: "Число n положительно", "Я – губернатор Калифорнии", "Сегодня ночью будет полная луна". Единственность свойства в этих примерах означает, что p характеризует единственный объект – число, текущую ночь – или конечное множество явно перечисленных объектов, как в высказывании "Я не губернатор, и сегодня ночью нет полной луны".

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

Обобщение "or" и "and"

Пусть дано множество объектов E и свойство p этих объектов. В исчислении предикатов изучаются два основных вопроса, обобщающих "or" и "and":

  1. Существует ли по меньшей мере один объект в E, удовлетворяющий p?
  2. Для каждого из объектов в E выполнимо ли p?

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

A1. Существует ли (есть ли хоть одна) на Line 8 пересадочная станция?

A2. Все ли станции Line 8 являются пересадочными?

Если вы знаете все станции этой линии по названиям, то эти вопросы можно задать булевскими выражениями. A1 является or-выражением и A2 – and-выражением:

L1 Station_Balard.is_exchange or Station_La_Motte.is_exchange or
Station_Concorde.is_exchange … [Включить все станции линии] …
L2 Station_Balard.is_exchange and Station_La_Motte.is_exchange and
Station_Concorde.is_exchange … [Включить все станции линии] …

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

Можно избежать именования станций, если использовать запрос i_th класса LINE, который дает нам i-ю станцию для любого применимого i:

M1 Line8.i_th(1) .is_exchange or Line8.i_th(2) .is_exchange or
… [Включить все целые числа от 1 до Line8.count]
M2 Line8.i_th(1) .is_exchange and Line8.i_th(2) .is_exchange and
… [Включить все целые числа от 1 до Line8.count]

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

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

  • квантор существованияexists или ∃ в математической нотации, чтобы установить, что, по крайней мере, один член множества обладает свойством;
  • квантор всеобщностиfor_all или ∀ в математической нотации, чтобы установить, что все члены множества обладают свойством.

Когда требуются булевские операции для произвольного числа операндов, exists обобщает or, а for_all обобщает and. Если Line8_stations обозначает список станций, то математическая нотация позволяет записать

Q1 ∃ s: Line8_stations | s.is_exchange
Q2 ∀ s: Line8_stations | s.is_exchange

что можно прочитать соответственно как:

  • существует s в Line8_stations, такая, что s.is_exchange истинно;
  • для всех s в Line8_stations, s.is_exchange истинно.

Для отделения свойства, здесь s.is_exchange, от спецификации множества математики часто используют вместо символа вертикальной черты "|" символы "точка" или "запятая". Для нас это неприемлемо, поскольку эти символы уже заняты и играют другую роль в нашем языке.

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

Точное определение: выражение с квантором существования

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

Вот определение для квантора существования.

Определение: выражение с квантором существования

Значение выражения
∃ s: SOME_SET | s.some_property
есть True, если и только если по меньшей мере один член заданного множества SOME_SET удовлетворяет заданному свойству some_property.

Пусть X – множество целых чисел{3, 7, 9, 11, 13, 15} (множество, которое состоит из чисел, перечисленных в фигурных скобках). Пусть теперь для любого целого n свойство n.is_odd означает, что n нечетно, свойство n.is_even означает, что n четно, а n.is_prime – что n простое число. Тогда

  • ∃ n: X | n.is_odd означает, что по крайней мере один из членов X является нечетным; выражение имеет значение True, так как, например, 3 свидетельствует, что такой член присутствует в множестве. Поскольку все члены нечетны, каждый из них является свидетельством истинности условия;
  • ∃ n: X | n.is_prime означает, что по крайней мере один из членов X является простым числом; выражение имеет значение True, так как, например, 3 свидетельствует, что такой член присутствует в множестве. Не имеет значения, что число 9 – член множества – не является простым числом; нам достаточно хотя бы одного члена множества, для которого выполняется условие;
  • ∃ n: X | n.is_even означает, что по крайней мере один из членов X является четным; выражение имеет значение False, так как в множестве нет четных чисел.

Эти примеры иллюстрируют, как можно доказать или опровергнуть выражение с квантором существования ∃ s: SOME_SET | s.some_property.

E1: Чтобы доказать истинность, достаточно предъявить один элемент множества, удовлетворяющий свойству. Как только такой элемент найден, все остальные члены не влияют на результат. В частности это означает, что нет необходимости в исследовании всех членов множества.

E2: Для опровержения истинности (доказательства ложности) необходимо проверить, что в множестве нет элементов, удовлетворяющих свойству. Недостаточно найти один элемент, для которого свойство не выполняется. В частности это означает, что проверке подлежат все члены множества.

Точное определение: выражение с квантором всеобщности

Рассмотрим выражение, использующее квантор всеобщности:

∀ s: SOME_SET | s.some_property

Его значение равно True, если и только если каждый элемент SOME_SET удовлетворяет свойству some_property. Это не вполне строгое определение из-за возможного случая пустого множества, обсуждаемого ниже. Лучший подход основан на определении, использующем уже известный квантор существования.

Определение: выражение с квантором всеобщности

Значение выражения
∀ s: SOME_SET | s.some_property
является значением
not(∃ s: SOME_SET | not s.some_property)

Отсюда следует, что ∀-выражение имеет значение True, если и только если нет членов данного множества, которые не удовлетворяют данному свойству. На первый взгляд, это определение представляется "перекрученной" версией первого определения. На уроках литературы вам могут сказать, что в разговорах и письменной речи следует избегать двойного отрицания, заменяя фразу: "В этом прекрасном университете нет курсов, которые бы мне не нравились" на фразу "Мне нравятся все курсы в этом университете". Причина двойного отрицания в том, что мы хотим быть аккуратными со случаем пустого множества. Но прежде чем заняться им, давайте снова обратимся к примеру с множеством целых чисел X, определенным как{3, 7, 9, 11, 13, 15}:

  • ∀ n: X | n.is_odd означает, что все члены X нечетны; выражение равно True, так как 3, 7, 9, 11, 13 и 15 все являются нечетными;
  • ∀ n: X | n.is_prime означает, что все члены X простые числа; выражение равно False, так как мы можем взять 9, свидетельствующее, что, по крайней мере, один член множества не является простым числом. Хотя есть и другие члены с таким же свойством, но и одного достаточно для опровержения выражения с квантором всеобщности;
  • ∀ n: X | n.is_even означает, что все члены X – четные числа; выражение равно False, так как, например, 3 нечетно. Любой член множества мог бы служить для опровержения, поскольку все нечетны, но снова и одного члена достаточно.

Эти примеры иллюстрируют, как можно доказать или опровергнуть выражение с квантором всеобщности ∀s: SOME_SET | s.some_property (сравните с тем, как это делается для выражений с квантором существования, Е1 и Е2).

U1: Чтобы доказать истинность, следует доказать, что каждый элемент SOME_SET, если он существует, удовлетворяет свойству. То, что некоторые удовлетворяют, не достаточно для доказательства. Это означает, в частности, что следует рассмотреть все элементы.

U2: Чтобы опровергнуть истинность (доказать ложность), достаточно предъявить один элемент, который не удовлетворяет множеству. Как только такой элемент найден, остальные элементы можно не анализировать. Это означает, в частности, что нет необходимости в анализе всех элементов множества.

Отношения между кванторами существования и всеобщности обобщают отношения между or и and. В частности, следующие два свойства обобщают законы Де Моргана:

not (∃ s: E | P) = ∀ s: E | not P
not (∀ s: E | P) = ∃ s: E | not P

Первое свойство следует из определения; второе следует из применения первого к not P и отрицания обеих сторон.

Ирина Калашникова
Ирина Калашникова

Добрый день, подскажите на тест после каждой лекции сколько дается попыток? 

Наталья Король
Наталья Король

Что это значит?) Зранее спасибо)