Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
23.05.2015
Размер:
1.7 Mб
Скачать

7.2Вспомогательные понятия

7.2.1Типы, переменные, значения и константы

Мы будем предполагать, что задано множество T ypes типов, причём каждому типу t T ypes сопоставлено множество Dt значений типа t.

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

тип целых чисел обозначается int

тип булевых значений (0 и 1) обозначается bool

тип “символы” обозначается char

тип “символьные строки” обозначается string

Также мы будем предполагать, что заданы следующие множества.

Множество V ar, элементы которого называются переменными, причём каждой переменной x V ar сопоставлен тип t(x) T ypes.

Каждая переменная x V ar может принимать значения в множестве Dt(x), т.е. в различные моменты времени переменная x может быть связана с различными элементами

множества Dt(x).

Множество Con, элементы которого называются константами. Каждой константе c Con сопоставлены

тип t(c) T ypes, и

значение [[c]] Dt(c), называемое интерпретацией константы c.

168

7.2.2Функциональные символы

Мы будем предполагать, что задано множество функциональных символов (ФС), причём каждому ФС f сопоставлены

функциональный тип t(f) (называемый ниже просто типом), представляющий собой знакосочетание

(t1, . . . , tn) → t

(7.2)

где t1, . . . , tn, t T ypes, и

• частичная функция

[[f]] : Dt1 × . . . × Dtn → Dt

называемая интерпретацией ФС f.

Например, ниже мы будем рассматривать следующие ФС:

+, −, ·, head, tail, [ ]

где

• ФС + и − имеют тип

(int, int) → int

функции [[+]] и [[−]] представляют собой соответствующие арифметические операции

• ФС · имеет тип

(string, string) → string

функция [[·]] сопоставляет каждой паре строк (u, v) строку, получаемую приписыванием v к u справа (т.е. конкатенацию u и v).

• ФС head имеет тип

string → char

функция [[head]] сопоставляет каждой непустой строке её первый символ

(значение функции [[head]] на пустой строке не определено)

169

• ФС tail имеет тип

string → string

функция [[tail]] сопоставляет каждой непустой строке u строку, получаемую из u удалением её первого символа (значение функции [[tail]] на пустой строке не определено)

• ФС [ ] имеет тип

char → string

функция [[ [ ] ]] сопоставляет каждому символу строку, состоящую из одного этого символа

• ФС length имеет тип

string → int

функция [[length]] сопоставляет каждой строке её длину (т.е. количество символов в этой строке).

7.2.3Выражения

Выражения строятся стандартным образом из переменных, констант и ФС. Каждое выражение e имеет тип t(e) T ypes, определяемый структурой этого выражения.

Правила построения выражений имеют следующий вид.

Каждая переменная или константа является выражением того типа, который сопоставлен этой переменной или константе.

Если

f – ФС, имеющий тип (7.2), и

e1, . . . , en – выражения типов t1, . . . , tn соответственно

то знакосочетание f(e1, . . . , en) является выражением типа t.

170

Если каждой переменной x, входящей в выражение e, сопоставлено значение ξ(x), то выражению e можно сопоставить значение, обозначаемое знакосочетанием ξ(e), и определяемое стандартным образом:

def

• если e = x (переменная), то ξ(e) = ξ(x) (значение ξ(x) предполагается заданным)

def

• если e = c (константа), то ξ(e) = [[c]]

• если e = f(e1, . . . , en), то значение ξ(e) выражения e определено, если

– все значения ξ(e1), . . . , ξ(en) определены, и

– значение функции [[f]] определено на списке

(ξ(e1), . . . , ξ(en))

в этом случае

def

ξ(e) = [[f]](ξ(e1), . . . , ξ(en))

Ниже мы будем использовать следующие обозначения.

Знакосочетание Expr обозначает совокупность всех выражений.

Знакосочетание F m обозначает совокупность тех выражений, которые имеют тип bool.

Выражения из F m называются формулами.

При построении формул могут использоваться обычные булевские связки ( , , → и т.д.), интерпретируемые стандартным образом.

Символ > обозначает тождественно истинную формулу, а символ – тождественно ложную формулу.

Формулы вида (b1, b2), (b1, b2), и т.п. мы будем записывать в более привычном виде b1 b2, b1 b2, и т.д.

171