Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Брошюра FLOGOL-2

.pdf
Скачиваний:
18
Добавлен:
28.06.2014
Размер:
1.25 Mб
Скачать

2.СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

2.6.Сетевые языки.

О п р е д е л е н и е

 

 

 

 

 

0 , в

2.10. Сетевым языком арности n ,n

 

, n ,n

базисе элементов

B называется множество сетей арности

 

 

 

 

в ба-

 

n , n

 

зисе B .

 

 

 

 

 

 

Для задания

сетевых языков могут быть использованы формальные

системы, аналогичные тем, которые применяются для конструктивного за-

дания множеств слов в некотором алфавите, например, регулярные выра-

жения, грамматики Хомского, в том числе контекстно-свободные грамма-

тики, и т.д.

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

выражений строится так же, как язык схем d -отношений в сигнатуре

(R кпэ , { , #, ,{}}).

Определим сетевую интерпретацию таких схем нижеследую-

щим образом, выбрав в качестве базиса B множество X символов пе-

ременных соответствующих арностей (точнее, каждый раз нас интересует

конечное подмножество

X

свободных переменных рассматриваемой

схемы):

 

 

 

 

1) для констант k

из

R кпэ

k { k } , где

k – одноименная

с k сеть из S 0 (см. рис. 2.4);

 

 

2) для переменных

x X

x {S1x }, где S1x

– сеть из множества

S 1B (см. рис. 2.4);

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 11

2. СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

3) A1 A2 {S1

S2 | S1 A1 & S2 A2 } . Отметим, что если

S1 S2 не определено, то соответствующая пара не вносит нового элемен-

та в множество A1

A2 ;

4)A1 # A2 {S1 # S2 | S1 A1 & S2 A2 } ;

5)A1 A2 A1 A2 ;

 

n

 

6) {A(n,n) } Ai , где

A0 , Ai 1

Ai A .

i 0

 

 

Аналогия с известной алгеброй регулярных множеств слов очевидна:

последовательная композиция играет роль операции конкатенации, объ-

единение сохраняет свой смысл, а операция параллельной композиции ре-

дуцируется до уровня элементарных подформул вида A1 #...#Am , где Ai

переменные или константы, применением аксиом 2 исчисления RIC

сильного включения схем d -отношений, и новых аксиом, вводимых для языков с операцией итерации (продолжая нумерацию аксиом RIC )3:

m

m

 

 

 

 

 

34. { # A } # {A } , 3, 7, 31, 32

введенного в первой главе,

 

 

 

m

m

 

 

 

 

 

35. { A # } {A } # ,

 

 

 

 

 

из которых для схемы

A арности n, n и схемы

B арности

 

 

 

m ,m

могут быть получены правила редукции («спуска» операции #

до уровня

элементарных формул):

 

 

 

 

 

 

n

m

n

m

 

 

 

B # {A } (B # ) ( # {A }) (B # )

{ # A }

или

 

 

 

m

n

 

 

 

 

 

B # {A } { #

A } ( B # ) ;

 

 

 

 

 

3 Аксиома фиксированной точки для частного случая рекурсии – итерации вы-

глядит так: 33’. { A } A { A} .

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 12

2. СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

m

n

{A } # B { A # } ( # B ) или

n

m

{A } # B ( # B ) { A

# }.

В качестве второго примера способа задания сетевых языков рассмот-

рим контекстно-свободные сетевые грамматики. Для того, чтобы восполь-

зоваться аналогией с известными КС-грамматиками, задающими класс контекстно-сво-бодных формальных языков в некотором алфавите, мы

должны определить операцию подстановки.

 

 

 

 

 

О п р е д е л е н и е 2.11. Результат

[S1 / e]S2

подстановки сети

S1 в сеть

S2 вместо элемента

 

 

 

, такого, что его арность совпадает с ар-

e R,q q

ностью сети S

, есть

 

 

 

P P , I

 

,O , E E \ {e},G

G .

[I O / q q ]

2

 

1

 

1

1

 

 

1

2

 

2

1

2

1

2

Выполнение операции подстановки в графическом представлении се-

тей иллюстрируется рис.2.6.

 

 

 

 

 

 

 

 

 

 

 

О п р е д е л е н и е 2.12. Сетевой КС-грамматикой

называется четверка

Bт , Bн ,a, P , где

 

 

 

 

 

 

 

 

 

 

 

 

 

Bт

– терминальный базис,

 

 

 

 

 

 

 

 

 

 

 

Bн

– нетерминальный базис ( Bт

и Bн

не пересекаются),

 

 

a Bн – аксиома,

 

 

 

 

 

 

 

 

 

 

 

 

 

P – непустое множество правил вида

bi

Si

, где bi

Bн ,

Si – сеть в

базисе Bт Bн .

 

 

 

 

 

 

 

 

 

 

 

 

 

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 13

2. СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

 

M

M

 

R

R

M’

 

M’

 

 

 

e

=

Рис. 2.6. Операция подстановки сети.

Сетевой язык S (G) , порожденный сетевой КС-грамматикой G , опре-

деляется одним из известных способов – индуктивно или дедуктивно.

Приведем в качестве примера дедуктивное определение.

О п р е д е л е н и е 2.13.

 

 

S (G) {S | a S & S S B }, где

a S обозначает выводимость

P

 

P

т

 

 

сети S из аксиомы a по правилам P

 

и вводится следующим образом:

a S (a S) P

 

 

P

 

 

S1 ( (b S2 ) P )( e b, IeOe E1 )(a S1 & S [S2 / e]S1 ).

 

 

P

О п р е д е л е н и е 2.14. Сетевой язык

S

в базисе B называется свобод-

ным или l -языком, если его элементами являются только l -сети.

О п р е д е л е н и е 2.15. Сетевой язык

S

в базисе B называется связан-

ным или b -языком, если его элементами являются только b -сети.

2.7.Сетевая интерпретация рекурсивных схем d -отношений.

Пусть

A A

– рекурсивная схема d -отношений. Преобразуем ее к

 

 

0

эквивалентной форме задания в виде конечной системы уравнений вида

yi

Ai , i 1..k , такой, что

 

 

для всех i 1.. k переменные

yi FV ( A). Используя дистрибутив-

 

ность объединения относительно операций последовательной и парал-

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 14

2. СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

 

 

n

 

лельной композиции, преобразуем все Ai ,

i 0 .. k , к виду

i

Aij , где

 

 

j 1

 

все Aij – простые схемы d -отношений, т.е. в них не используются операция объединения и оператор рекурсии;

 

для любой интерпретации

свободных переменных

 

 

A – пер-

 

 

 

 

 

 

 

 

 

 

 

 

вый компонент кортежа – минимального решения этой системы урав-

 

нений в интерпретации .

 

 

 

 

 

 

 

 

 

Сетевая интерпретация рекурсивных схем определяется так:

 

О п р е д е л е н и е 2.16. A S (G) , где

 

 

 

 

 

 

 

G Bт , Bн , y1 , P ,

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

Bт FV ( A) FV ( Ai ) ,

 

 

 

 

 

 

 

 

 

 

 

i 1

 

 

 

 

 

 

 

 

 

Bн {yi | i 1..k},

 

 

 

 

 

 

 

 

 

P {yi

Aij | i 1..k & j 1..ki }.

 

 

 

 

 

 

 

Полезной, но не обязательной, является последующая “чистка” нетер-

 

минального базиса.

 

 

 

 

 

 

 

 

1.

Пусть

Bн(0)

– пустое подмножество Bн . Вычислим предел

 

Bн( )

(его

 

существование очевидно) последовательности

Bн(0) , Bн(1) , Bн(2) ,...

где

 

Bн(i 1) {b | существует правило

b S P , такое, что все элементы

 

сети

S

нетерминальных

сортов являются

элементами

 

сортов из

 

Bн(i) } . Если

y Bн( ) ( y1

аксиома грамматики), то

S (G)

– пустой

 

язык, в противном случае в множестве правил

P оставим только те из

 

них, в которых используются исключительно сорта из Bн( ) .

 

 

 

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 15

2.СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

2.Пусть Bн[0] {y1}. В качестве нового нетерминального базиса возьмем

предел последовательности Bн[0] , Bн[1] , Bн[2] ,...,

где

Bн[i 1] Bн[i] {b |

существует правило b S P, такое, что сеть

S

содержит элемент

сорта из Bн[i ]}. В множестве правил снова оставим только те правила, в

которых используются исключительно сорта из построенного множе-

ства. Таким образом, в нетерминальном базисе останутся только те не-

терминальные символы, которые «нужны» для определения аксиомы

y1 .

2.8.Реляционная интерпретация сетевых языков.

Пусть S (G) – сетевой язык в базисе Bт , заданный КС-грамматикой

G Bт , Bн ,a, P . Фиксируем интерпретацию

 

ь-

ного базиса

B

т

так, что для всех

R(n ,n ) B

 

 

R d -отношение арно-

 

 

 

 

 

т

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сти n ,n

на носителе D .

 

 

 

 

 

 

О п р е д е л е н и е 2.17. Интерпретация S (G) сетевого языка

S (G) ,

 

 

 

 

 

 

 

 

 

 

 

 

индуцированная интерпретацией

 

элементов терминального базиса, есть

 

 

 

 

 

| ( : P D)(

 

(I ) &

 

(O) &

 

{ ,

 

 

 

 

( P,I ,O,E ,G) S (G)

( {p1 , p2 } G) ( p1 ) ( p2 ) &

( R,q q E)( (q ), (q )) R )} .

Функция называется разметкой точек сети; допустимые разметки должны удовлетворять требованиям, предъявляемым к точкам элементами сети и ее dif -графом. Пары кортежей допустимых разметок входных и выходных точек сети являются элементами определяемого d -отношения.

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 16

2. СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

Т е о р е м а

2.4.

 

A = A для всех

A A

 

и для всех ин-

 

 

 

 

0

 

терпретаций

.

 

 

 

 

 

Отсюда следует важный вывод: сетевые КС-грамматики могут рас-

сматриваться как форма задания рекурсивных схем d -отношений.

В заключение покажем, как для заданного сетевого языка S1 постро-

ить сетевой язык S

2

, такой,

что для любой

интерпретации

 

 

 

 

 

 

 

S

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

представляет d -отношение,

обратное

d -отношению

S

1

.

Пусть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S 2

. Для построения грамматики

G2

языка

S 2

n , n - арность языка

по заданной грамматике

G1

языка

S1 нужно:

 

 

 

 

 

 

 

 

 

 

 

 

изменить арность аксиомы

a грамматики

 

 

;

 

 

 

 

 

 

 

 

 

G1 на n , n

 

 

 

 

 

 

 

 

 

 

во всех правилах вида a S

в сети

S

поменять местами кортежи

 

входных и выходных точек;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

все элементы сетей (правых частей всех правил) вида

 

 

 

 

 

 

 

заме-

a,q q

 

 

 

 

нить на элементы

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a, q q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.9.Примеры задания сетевых языков и их реляционной интерпре-

тации.

 

 

 

 

 

 

 

1. Пусть

B {N (0,1) , S (1,1) }

и

задана

сетевая

грамматика

 

т

 

 

 

 

 

 

G (B ,{F (1,1)

, M (2,1) , A(2,1) }, F, P) , где правила грамматики

P показаны

т

 

 

 

 

 

 

 

на рис. 2.7.

 

 

 

 

 

 

Тогда

при

N { ,0 },

S { i,i 1 | i 0 ..}

S (G)

 

 

 

 

 

 

 

 

{ i,i! | i 0..} ,

т.е. является графиком функции «факториал». Нетер-

минальные сорта

A(2,1) и M (2,1)

интерпретируются при этом как сложе-

ние и умножение, соответственно.

 

 

 

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 17

2. СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

2. На рис. 2.8 изображена сеть

S , для которой

S { ij,(i mod j)

 

 

 

(i div j) | i 0, j 0}

 

сортов ее

элементов на множестве натуральных чисел:

{ ij, | i j },

{ ij, | i j},

- { i j,i j | i j},

M { i,i j | i 0 & j 0}, A { ij,i j | i 0 & j 0}

3. На рис. 2.9 представлены правила сетевой грамматики, определяющей конструктор P упорядоченной пары натуральных чисел в базисе

{N (0,1) , S (1,1) }, интерпретация элементов которого дана в предыдущем примере, на основе «диагонального» метода нумерации.

4.Рис. 2.10 представляет правила сетевой грамматики в терминальном ба-

зисе {N (0,1) , S (1,1) , A(2,1) } . При интерпретации элементов базиса как нуля,

конструктора следующего числа и сложения, соответственно, нетерми-

нальный сорт С интерпретируется как функция числа сочетаний.

5.Правила сетевой грамматики, показанные на рис. 2.11, определяют опе-

рацию App сцепления двух списков при интерпретации сорта Nil ( 0 , 1 )

как конструктора пустого списка, а Cons ( 2 , 1 ) – как конструктора двоич-

ного упорядоченного дерева ( S -операции по Мак-Карти).

6.На рис. 2.12 приведены правила сетевой грамматики в терминальном базисе {A(1,1) , B(1,1) ,C(1,1) }, сетевой язык которой представляет (для не-

терминального сорта Y как аксиомы грамматики) регулярную схему

( Ai Bi C i ) , которой в традиционной теории формальных языков

i 0

(рассматривая терминальные сорта элементов как буквы терминального алфавита, а операцию последовательной композиции как конкатена-

цию) соответствует язык, не являющийся даже контекстно-свободным.

Построение отдельных сетей этого языка иллюстрирует рис. 2.5, приве-

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 18

2. СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

денный выше как пример выполнения операции последовательной ком-

позиции.

7.Еще один пример приведен на рис. 2.13. Интерпретация терминаль-

ных сортов элементов такова (носитель – множество вещественных чи-

сел): x, y.(x y) ,

 

 

x, y.(x y) ,

x, y.( x y ) ,

 

/ x, y.(x / y) ,

 

 

x, y.(( x y) / 2) ,

| | x, y. abs (x y) ,

2

x, y.(x y) , x, y.(x y) , 2 x.(x / 2) . Нетерминаль-

ный сорт IR в этом случае интерпретируется как функция с парамет-

рами e, x , x , x x , вычисляющая значение определенного интеграла

x" F (x)dx с точностью e . Подынтегральная функция представлена не-

x'

терминальным сортом F , для которого предполагается наличие опре-

деляющих эту функцию правил. Интеграл вычисляется рекурсивно, ме-

тодом трапеций с переменным шагом. Фактически, носитель в этом примере – множество кодов-представлений чисел в доступном формате вещественных чисел, а интерпретация терминальных символов – реали-

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

8.В этом примере рассматриваются операции доступа к памяти типа «ку-

ча» (память типа «куча» является одним из основных компонентов ар-

хитектуры FALGOL -машины, описанной в [ ]. Пусть нетерминальный

сорт

Ad представляет конструктивное счетное множество «адресов»,

D обозначает множество «данных», которые могут храниться в памя-

ти, а

M {m : Ad D | | m | 0..} – множество возможных «состояний»

памяти, представленное структурой, показанной на рис. 2.14, где N (0)

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 19

2. СЕТЕВЫЕ ЯЗЫКИ ФУНКЦИОНАЛЬНОГО И ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

конструктор «пустой» памяти (с пустым графиком), а C (2) – произволь-

 

ный бинарный конструктор. Состояние памяти – множество состояний

 

«ячеек» памяти с различными адресами. Состояние ячейки включает

 

адрес ячейки и «данное», хранящееся в ячейке.

 

 

 

Определим три операции:

 

 

1)

функцию адресного чтения: R : M Ad D ; если

a dom(m) , то R(m, a)

 

не определено;

 

 

2)

функцию адресной записи: W : M Ad D M ;

если

a dom(m) , то

 

W (m, a, d ) – не определено;

 

 

3)

отношение (неоднозначное соответствие из M D в

M A ) инициа-

 

лизации новой ячейки памяти:

 

 

New { md,m a) | R(m ,a) d & a (a a R(m , a ) R(m,a ))}.

Правила сетевой грамматики, определяющие эти операции, приведены на рис. 2.15.

9.В этом примере (рис. 2.16) рассматривается та же задача, что и в преды-

дущем. Однако для взаимно-однозначного представления всех объектов

– адресов, данных и состояний памяти используются натуральные числа

(терминальный базис Bт {N (0,1) , S (1,1) }). Для представления состояний памяти используются методы нумерации элементов конструктивных множеств, в частности, сведение разнообразия конечных подмножеств натуральных чисел к разнообразию кортежей конечной длины из нату-

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

использовать суперконструктор P(2)

упорядоченной пары на множестве

натуральных

чисел, определенный

в примере 3. Помимо операций

R(2,1) , W (3,1)

и New(2,2) , определяется вспомогательная функция I (2,1) ,

используемая при нумерации конечных подмножеств натуральных чи-

сел.

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 20