
- •Часть II. Программное исчисление.
- •Программы как математические объекты
- •5. Семантика cf pascal.
- •Глава 5 знакомит нас с концепцией значения программ. Для точного описания этой идеи используются такие математические структуры как строки, списки, множества, отношения и функции.
- •5.1. Строки символов.
- •5.1.1. Конкатенация строк.
- •5.1.2. Подстроки.
- •5.1.3. Композиция строк.
- •5.1.3. Декомпозиция строк.
- •5.2. Списковые структуры.
- •5.2.1. Списковые операции.
- •5.2.2. Описание файлов с помощью списков.
- •5.3. Множества
- •5.3.1. Правила описания множеств.
- •5.3.2. Операции над множествами.
- •5.3.3. Отношения и функции.
- •5.4. Значение программ.
- •5.4.2. Прямое определение значения программы.
- •5.5. Заключение
5.3.1. Правила описания множеств.
Альтернативой явному перечислению элементов множества является set-нотация, где мы помещаем имя обобщенного элемента множества и через двоеточие описываем его. Например:
T = {x: x – любое слово в строке †this is a rule†} = {†this†, †is†, †a†, †rule†}
Обычно такая запись читается как, «множество всех x, таких что…». Чтобы принадлежать множеству, элемент должен удовлетворять условию, записанному после двоеточия.
Условие, описывающее принадлежность множеству может иметь несколько частей. Например, запись для множества
U = {x: x = <y, z>, y – любое слово в строке †this one list†,
z любой символ в строке †AB†}
означает, что x одновременно удовлетворяет трем условиям:
x должен быть 2-списком
x1 должен быть словом в †this one list†
x1 должен быть символом в †AB†
Поскольку †this one list† содержит 3 слова, а †AB† два символа, множество U будет содержать 6 элементов, а именно:
U = {<†this†, A>, <†this†, B>, <†one†, A>, <†one†, B>, <†list†, A>, <†list†, B>}
Обобщенный элемент множества может быть структурой такой как список или множество. Таким образом, форма записи обобщенного элемента может содержать в себе часть условия. Например, U может быть описано следующим образом:
U = {<y, z>: y – любое слово в строке †this one list†, z любой символ в строке †AB†}
Если описание обобщенного элемента может быть более информативным, это обычно делается, потому что уменьшается количество условий, следующих после двоеточия. Например:
{<x, y>: x – строка, y = x}
будет записано как
{<x, x>: x – строка}
Ситуация когда элементами множества являются другие множества случается настолько часто, что ей дали собственное название. Множеством мощности для любого множества S является множество всех подмножеств S, обозначаемое power(S).
Например, если
T = {†this†, †is†, †a†, †rule†}
тогда
power(T) = {U: U T} = {{}, {†this†}, {†is†},…, {†a†, †is†, †rule†}, T}
содержащее одно 0-множество, четыре 1-множества, шесть 2-множеств, четыре 3-множества и одно 4-множество, или 1+4+6+4+1=16 элементов. То, что 16 =24 не случайно. Для каждого из четырех элементов множества есть два варианта построения подмножества – с этим элементом и без него. Таким образом, количество членов в множестве мощности будет 2x2x2x2=16. В общем случае если S – n-множество, то power(S) будет 2n.
Set-нотация наиболее полезна, когда описываемые множества велики или бесконечны. Например, множество
{p: p – Паскаль-программа}
не может быть описано перечислением его элементов.
5.3.2. Операции над множествами.
Множества можно комбинировать для формирования новых множдеств и эти операции особенно полезны.
Объединение: S T = {x: x S или x T}
Разность S – T = {x: x S, x T} [различность]
Пересечение S T = {x: x S, x T}
Эти операции легко визуализировать с помощью диаграмм Венна.
S T |
S – T |
S T |
|
|
|
Если два множества находятся внутри третьего множества, то их объединение, разность и пересечение, также остаются внутри этого множества, т.е. если S U и T U, тогда
S T U
S – T U
S T U
Для любого множества S, пустое множество обнаруживает следующие свойства:
S {} = S {} = S
S – {} = S, {} - S = {}
S {} = {} S = {}
Объединение и пересечение коммутативны, т.е.
S T = T S
S T = T S
и ассоциативны, т.е.
R (S T) = (R T) S
R (S T) = (R T) S
Таким образом, нет необходимости в скобках для указания порядка при записи нескольких объединений и пересечений.
Разность не коммутативна и не ассоциативна.
Примеры. Пусть
S = {†this†, †is†, †a†, †set†}
T = {†this†, †is†, †another†, †set†}
тогда
S T = T S ={†this†, †is†, †a†, †set†, †another†}
S – T = {†a†}
T – S = {†another†}
S T = {†this†, †is†, †set†}
(S – T) (S T) = {†this†, †is†, †a†, †set†}
(S – T) (S T) = {}
Следующая таблица обобщает характеристики операций над множествами.
Операция |
Символ |
Описание |
Свойства |
Объединение |
|
S T = {x: x S или x T} |
ассоциативная, коммутативная |
Пересечение |
|
S T = {x: x S, x T} |
ассоциативная, коммутативная |
Разность |
- |
S – T = {x: x S, x T} |
не ассоциативная, не коммутативная |