Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Соловьев Е.А. Учебник по дискретной математике.doc
Скачиваний:
144
Добавлен:
02.05.2014
Размер:
961.54 Кб
Скачать

6.7. -Исчисление

-исчисление, основоположником которого считают Алонзо Черча, фактически, и стало основой теории алгоритмов и первой конкретизации алгоритма. -исчисление рассматривают также как основу таких важных разделов математики, как функциональное программирование и комбинаторная логика.

-исчисление (нотация, способ записи) формализует понятие функции не как множества или графика, а как правила.

В основе -исчисления лежит операция аппликации.

Аппликация - применение функции к аргументу (можно применить только известную функцию).

Язык состоит из:

1. Множества переменных (х1...).

2. Множества констант(с1...).

3. Символа аппликации . .

4. Символа абстракции .

5. Символа равенства =.

-терм:

1. Переменная или константа - -терм.

2. Если х - переменная, и М - некоторый -терм, то х.М тоже -терм.

3. Если М и N -термы, то MN тоже -терм.

Формула - любое выражение вида M=N, где M и N -термы.

Замечание. В литературе прикладного плана нередко используется несколько иная терминология и форма записи.

f = x.x + x

f - название, ранее не названной функции.

 - оператор.

х - аргумент.

.-комбинатор.

х + х - выражение, задающее значение функции.

Аксиомы:

1. M = M.

2. (x.M)N = M {N/x} -редукция.

где {N/x} – подстановка N вместо всех вхождений x в М.

[В альтернативном представлении часто используемая -редукция записывается, например, так (x.f(x))(a) = f(a)]

3. x.M = y.M при {y/x} -конверсия.

где {у/x} – подстановка у вместо всех вхождений x в М.

Правила вывода:

  1. M = N

N = M.

  1. M = N, N = P

M = P.

  1. M = N

PM = PN.

  1. M = N

MP = NP.

5. M = N

x.M = x.N.

Рассмотрим примеры -редукции (в прикладной варианте записи)

(х.х + 2у)(а) = а + 2у

(у.х + 2у)(а) = х + 2а

(х.(у.х + 2у))(а)(b) = (у.а + 2у)(b) = a + 2b

(x.((y.xy)u))( v.v) = (y.(v.v)y)u = (v.v)u

(x.((y.xy)u))( v.v) = (x.xu)(v.v) = (v.v)u

(x.xx) (x.xx) = (x.xx) (x.xx) = (x.xx) (x.xx) =…

((x.x*3) (y.if y > 4 then e = 2 else x/2) (y.y>2)) (5) = 2*5 = 10

(n.(x.x-n))(2) = x.x-2

(f.2*f(8) – f(f(8)))(half) = 2*8/2 – (8/2)/2 = 6 (half – половина).

7. Формальные грамматики

7.1. Понятие формальной грамматики

Формальная грамматика - это четверка G = <VN,VT, P, S >, в которой

VN - нетерминальный словарь (множество нетерминальных символов);

VT - терминальный словарь (множество терминальных символов ) ;

P - множество грамматических правил;

S  VN - начальный нетерминальный символ.

Метаязык - язык, с помощью которого описывается язык:

::= - есть по определению;

| - “ исключающее или”;

< ... > - внутри – один нетерминальный символ ;

[ ] - необязательная часть;

, - запятая – разделитель при перечислении.

Пример: Построим грамматику G1:

<прог>::=<оп> | <оп>; <прог>

<оп>::=<пер> := <выр>

<пер>::=a | b | c

<выр>::=<пер> | <пер> <зн> <выр>

<зн>::= + | - | * | /

V = VN  VT - обобщенный словарь.

V* - цепочка символов (строка, слово) из обобщенного словаря;

V*N - цепочка символов (строка, слово) из нетерминального словаря;

V*T - цепочка символов (строка, слово) из терминального словаря.

  V - пустой символ, входит в обобщенный словарь.

Строка  непосредственно порождает строку  и обозначается:    ,

если  = vxw  = vyw и существует некоторое правило p: x::= y,

где v,w,  V* , х  VN, у = V* \ {}

Строка  порождает строку  и обозначается  *  , когда от строки  можно перейти к строке  с помощью последовательности непосредственных порождений.

Продолжая пример:

<прог>  <оп> ; <прог>  <оп> ; <оп>  <пер> := <выр> ; <оп> *

a := b + c; c := a + b - c;

Грамматика, использующая процедуры (непосредственного) порождения – порождающая грамматика.

Строка  непосредственно свертывается в строку  и обозначается:   ,

если  = vxw  = vyw и существует некоторое правило p: x::= y,

где v,w,  V* , х  VN, у = V* \ {}

Строка  свертывается в строку  и обозначается  * , когда от строки  можно перейти к строке  с помощью последовательности непосредственных свертываний.

Грамматика, использующая процедуры (непосредственного) свертывания –распознающая грамматика.

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

Язык L, порождаемый данной грамматикой G - множество нетерминальных цепочек, порождаемых из начального нетерминального символа. Такие терминальные цепочки называются предложениями данного языка.

L(G) = { x  V*N | S * x }

Аналогично можно определить язык L через свертывание.

L(G) = { x  V*N | S * x }

Замечание. Другой вариант метаязыка

вместо ::= используется стрелка  , терминальные символы записываются маленькими (строчными) буквами, а нетерминальные – большими (прописными) буквами.

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