
176
ГЛАВА 7. ВВЕДЕНИЕ В СИНТАКСИС
Пример 7.1.3.
Фрагменты математического анализа можно описывать в
языке со следующей сигнатурой:
Имеется три исходных типа:
r
,
i
,
t
,интерпретируемые, соответствен-
но, как действительные числа, целые числа и логические значения.
Логические связки остаются теми же самыми.
Для работы с действительными и целыми числами имеются следую-
щие бинарные операции:
+, −, ∙, /, ⊕, , ×, ÷, =
r
, >
r
, =
i
, >
i
и унарные
exp
,
sin
,
cos
,
ln
,
real
,
round
.
Кроме того, зададим следующие константы:
e, π, 0, 1, 0, 1
.
Кванторы данной сигнатуры следующие:
∀
r
,
∀
i
,
∃
r
,
∃
i
,
R
,
P
. Типы
всех перечисленных выше операций, констант и кванторов следующие:
χ(e) = χ(π) = χ(1) = χ(0) = r χ(0) = χ(1) = i
χ(+) = χ(−) = (r, r → r) χ(⊕) = χ() = (i, i → i)
χ(∙) = χ(/) = (r, r → r) χ(×) = χ(÷) = (i, i → i)
χ(real) = (i → r) χ(round) = (r → i)
χ(∀
r
) = (r, (r → t) → t) χ(∃
r
) = (r, (r → t) → t)
χ(∀
i
) = (i, (i → t) → t) χ(∃
i
) = (i, (i → t) → t)
χ(
R
) = (r, r, r, (r → r) → r) χ(
P
) = (r, i, i, (i → r) → r)
χ(=
r
) = χ(>
r
) = (r, r → t) χ(=
i
) = χ(>
i
) = (i, i → t)
Здесь видно, что мы вынуждены вводить кванторы всеобщности и су-
ществования по отдельности для каждого типа объектов, по которым
имеются переменные. Поскольку тип квантора однозначно определяет-
ся типом переменной, следующей непосредственно за ним, перегрузка
кванторов легко разрешается и используется практически везде, в том
числе и нами. Аналогично перегрузка напрашивается и для общеупо-
требительных предикатов типа
=
или
>
, и для операций типа
+
или
−
.
Но здесь ситуация намного сложнее, поскольку допущение перегрузки
сразу приводит к соблазну перемешивать выражения разных типов.
Несколько иной тип перегрузки мог бы возникнуть при применении
квантора суммирования к выражениям типа i. Здесь подкванторная пе-
ременная в любом случае имеет тип i, и разрешение двусмысленности
зависит от типа подкванторного выражения. Это уже похуже, и на по-
добных примерах в теоретическом программировании выросла целая
теория.
Теперь можно определить язык над обобщенной сигнатурой
σ. Его
выражения строятся из констант и переменных как обобщенные термы,
обозначающие и предметы, и формулы, и многое другое. Они вводятся