Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дискретка / Упр2.ppt
Скачиваний:
25
Добавлен:
23.05.2015
Размер:
118.78 Кб
Скачать

Рекурсивно-определенные предикаты.

Пример: множество натуральных чисел (с нулем).

A:N(0) // 0 – натуральное.

B:x(N(s(x))←N(x)) // s(x) – натуральное, если x – натуральное. Проверим, что s(s(0)) – натуральное:

N(s(s(0)))? B: x=s(0): N(s(0))? B: x=0: N(0)? A:□.

Результат:

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

Быть натуральным числом = быть правильно построенной формулой в алфавите { 0, s, (, ) }.

Рекурсивное определение для двухместной операции сложения (обозначенной формулах символом “+” ).

A:x (x+0=x)

B:x y ( x+s(y)=s(x+y) )

Здесь = - бинарное отношение (двухместный предикат).

Вообще можно сказать, что мы задаем только отношения:

E - равенство (эквивалентность):

x E(x,x)

x y (E(x,y) E(y,x))

x y z ((E(x,y)&E(y,z)) E(x,z))

S – “Следовать за” (инъективная функция, не покрывающая 0):

x y u v ((S(x,y)&S(u,v)&E(y,v)) E(x,u))

x(S(x,0))

A – быть суммой (трехместное отношение):

x z (A(x,0,z) E(z,x))

x y z r ((S(y,z)&A(x,z,r)&A(x,y,u)&S(u,v)) E(r,v))

Применение правил для вычисления результата рекурсивно определенной операции +

A:x (x+0=x)

B:x y ( x+s(y)=s(x+y) )

“1+2=3”:

s(0)+s(s(0)) = s(s(0)+s(0)) = s(s(s(0)+0)) = s(s(s(0))

B: x=s(0), y=s(0)

B: x=s(0), y=0

A: x=s(0)

Представление формул ориентированными размеченными графами (ориентированными деревьями)

s(0)+s(s(0))

T

t

+

lr

ss

nn

0s

n

0

Отношения:

Фрагмент

T

l – быть левым операндом

 

t

 

r – быть правым операндом

будем

n – быть единственным операндом

опускать

 

 

 

t – быть корнем

Разметка вершин:

символы алфавита формулы (плюс символ корня T) Разметка ребер:

символы отношений позиций операндов

Правила преобразования формул – правила трансформации фрагментов диаграмм

(и построения новых графов-деревьев формул)

A:x (x+0=x)

B:x y ( x+s(y)=s(x+y) )

 

?

 

?

 

?

 

 

?

 

 

 

 

 

 

 

 

+

 

 

 

+

 

 

s

 

A

 

l

r

 

B

n

l

r

x

 

 

 

 

 

 

+

x

 

 

 

x

s

 

 

0

 

 

 

l

r

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

x

y

Пример: вычисление 1+2=3 графически

s(0)+s(s(0)) = s(s(0)+s(0)) = s(s(s(0)+0)) = s(s(s(0))

 

+

 

s

 

 

s

 

 

s

 

 

 

 

 

 

 

l

r

B

n

 

B

n

 

A

n

 

 

 

 

 

 

 

 

 

 

 

s

s

 

+

 

 

s

 

 

s

 

 

 

 

 

 

 

 

n

n

 

l

r

 

n

 

 

n

 

 

 

 

 

 

 

 

0

s

 

s

s

 

+

 

 

s

 

n

 

n

n

 

l

r

 

n

 

 

 

 

 

 

0

 

0

0

 

s

0

 

0

 

 

 

 

 

 

 

n 0

Описание правил трансформации диаграмм (деревьев)

(возможный синтаксис языка описания трансформаций)

<Условие> <Что менять>/<На что менять>

T = вся диаграмма, а также ее корневой символ в условии

Tl = левая поддиаграмма, если из корня идет стрелка l.

Trn = поддиаграмма, достижимая из корня по маршруту стрелок r,n Конструктор новых диаграмм (от корня по месту замены):

s(n:<Конструктор>) = вершина s, из которой идет стрелка n, и далее как указано +(l:<конструктор1>,r:<конструктор2>) = вершина +, со стрелками l и r…

(T=+)&(Tr=0) T/Tl

 

 

Нет подстановочных символов!!!

(T=+)&(Tr=s) T/s(n:+(l:Tl,r:Trn))

 

 

 

 

 

 

 

 

 

T

T’

 

 

T +

 

 

 

+

s

 

 

A

 

l

B

n

l

r

T’=Tl

r

 

 

 

+

 

 

 

 

 

 

 

 

 

 

 

 

s

 

Tl

0Tr

Tl

 

l

r

 

n

 

 

 

 

 

Trn

T’nl=Tl

T’nr=Trn

 

 

 

 

 

 

 

Представление деревьев строками в алфавите {0,s,+} (обратная польская бесскобочная запись)

+

lr

ss

nn

0s

n

0

0s0ss+

s

n

+

lr

ss

n n

0 0

0s0s+s

s

n

s

n

+

lr

s 0 n

0

0s0+ss

s

n

s

n

s

n

0

0sss

Алгоритм перевода дерева в бесскобочную формулу-строку

Для каждого алфавита и валентности символов указать рекурсивную схему

g – функция построения бесскобочной записи для своего аргумента-диаграммы

0-местный символ (терминальная вершина): g(0)=0

s 1-местный символ: g( n )=g(x)s

x

+

2-местный символ: g( l

r )=g(x)g(y)+

xy

Пример перевода в бесскобочную запись

 

 

s

 

 

+

 

 

s

s

g(

 

n ) =

g(

 

)s = g(

 

n

)g(

n )+s = g(0)sg(0)s+s = 0s0s+s

 

 

 

 

 

 

 

 

 

 

l

 

r

 

 

 

 

 

 

+

 

 

 

0

0

 

 

 

 

 

 

 

 

 

l

 

r

s

 

s

 

 

 

 

 

 

 

s

 

s

 

n

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

n

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

00

Алгоритмы на строках символов алфавита {0,s,+}

 

 

+

 

 

s

 

 

 

s

 

s

 

 

 

 

 

 

 

 

 

 

l

r

 

 

n

 

 

 

 

n

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s

s

 

 

 

 

 

 

 

 

 

 

 

+

 

 

 

 

 

 

 

 

 

 

 

s

 

s

 

n

 

n

 

l

r

 

 

 

 

 

 

 

n

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

0

s

s

s

 

 

 

 

 

 

+

 

s

 

 

 

n

 

n

 

n

 

l

r

 

n

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

s

 

0

 

 

0

 

0

0

 

 

 

 

 

 

 

 

 

 

 

0s0ss+

0s0s+s

 

n

 

 

 

 

 

 

 

 

0sss

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0s0+ss

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Каковы правила трансформации строк?

s+ +s

Здесь – пустая строка

0+

 

 

 

 

 

Соседние файлы в папке Дискретка