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

людкоский тарф методичка с сдо

.pdf
Скачиваний:
3
Добавлен:
06.02.2025
Размер:
1.33 Mб
Скачать

для каждого слова С в алфавите А1. Алгоритм U2 U1 является применимым только к тем словам С в алфавите А, которые удовлетворяют ограничениям:

С - слово в алфавите А1, U1 применим к С, U2 применим к U1(С).

Для расширения Е алфавита А и слова С в алфавите Е можно получить новое слово СА путём стирания всех входящих в С букв из Е\А. Слово СА назы-

вается проекцией слова С на алфавит А. Тогда схема { ξ → Λ (ξ B - A)} даёт нормальный алгоритм UB,A, для которого UB,A(P) = PA для всякого слова P в алфавите B. Такой алгоритм UB,A называется проектирующим.

Предположим теперь, что имеются два алфавита А и С не имеющие общих букв. Возьмём их объединение B = А С. По схеме {ca → ac} (a A, c C)

задаётся нормальный алгоритм VA,C в алфавите B.

Такой алгоритм нормален. Он называется композицией алгоритмов U и V,

его также обозначают V ° U.

Рассмотрим некоторый нормальный алгоритм D в алфавите A. Возьмем не-

который алфавит B, который является расширением A. Тогда можно построить алгоритм DB вполне эквивалентный алгоритму D относительно A и называемый формальным распространением алгоритма D на алфавите B. Для его построения в схеме алгоритма D добавляют формулы подстановки вида b → b, где .

Рассмотрим два нормальных алгоритма U и V в алфавитах A и C, возьмём алфавит = и формальные распространения UB и VB алгоритмов U и V

на алфавит B. Тогда можно образовать композицию E = ° Этот алгоритм Е над алфавитом B называется нормальной композицией алгоритмов U и V, и она обозначается V ° . Очевидно, что E( ) ° ( ) для любого слова P в алфа-

вите A, а также он применим к тем и только тем словам P, которые удовлетво-

ряют трём условиям: P – слово в A, U применим к P, V применим к U(P).

11

Возьмём случай, когда алфавит B является расширением алфавита А, а

слово P задано в алфавите A. Если в P стереть все буквы из алфавита B-A, то получится некоторое слово PA называемое проекцией P на алфавит A. Это про-

цедура задается проектирующим алгоритмом VB,A со схемой { → ( − ).

Если же A и B алфавит без общих букв, С = , то алгоритм ,( ) =в алфавите С имеет схему { → ( , )

Если алфавит B есть расширение A, то алгоритм V в алфавите B называется

естественным распространением алгоритма U с алфавита U с алфавита A на B

тогда и только тогда, когда ( ) ( ) для любого слова Р в А и всякого

слова Q в В-А.

Теорема. Предположим, что 1, … , – нормальные алгоритмы, А – объединение их алфавитов. Тогда существует нормальный алгоритм U над A удовлетворяющий ( ) 1( ) 2( ) … ( ) для любого слова P в алфавите А, где – естественное распространение на А.

Примеры работы нормального алгоритма Маркова.

1.В качестве входные данных берётся слово cdbacab. Алгоритм состоит в следующем: ab → bd; db → ba; bba → abb; c → ʎ, где ʎ - пустой символ.

Путем преобразований исходного слова данным алгоритмом, последовательно получаются следующие слова: cdabacab → cdbacbd → cbaacbd → baacbd → baabd

→ babdd → bbddd. Результатом работы рассматриваемого алгоритма является слово bbddd.

Далее рассматриваются возможности реализации арифметических операций с помощью нормальных алгоритмов Маркова. Сначала обратим внимание на одно обстоятельство, связанное с работой любого нормального алгоритма Маркова. Оно состоит в том, что нужно либо вводить дополнительное правило остановки работы нормального алгоритма (иначе в примере увеличения числа на 1 алгоритм продолжит работу и снова будет увеличивать полученный результат еще на 1 и т.д. неограниченное число раз), либо перед началом работы нормального алгоритма добавлять к входной строке специальные символы, отличные от других символов строки, которые учитываются подстановками алгоритма в начале его работы и которые удаляются в конце работы алгоритма. Мы будем придержи-

12

ваться второго способа, как и одна из наиболее успешных реализаций нормальных алгоритмов Маркова в виде языка программирования Рефал. В качестве добавляемого символа возьмем символ "*".

Пример 2. Рассмотрим простейшую операцию увеличения десятичного числа на 1. В этом случае почти всегда необходимо увеличить последнюю цифру на 1, а последняя цифра отличается тем, что после нее идет символ "*". Поэтому первыми подстановками должны быть подстановки типа <цифра> * → <цифра + 1>. Но если это цифра 9, то ее нужно заменить 0 и увеличение на 1 перенести в предыдущий разряд. Этому отвечает подстановка 9* → *0. Наконец, если число начинается с 9 и перед этой цифрой нужно поставить 1, то этому будет отвечать подстановка ** → 1, а если это не так, то в конце работы алгоритма символы * надо стереть, что выполнит подстановка * → ʎ. Таким образом, мы получаем следующий НАМ увеличения десятичного числа на 1: 0* → 1; 1* → 2; 2* → 3; 3* → 4; 4* → 5; 5* → 6; 6* → 7; 7* → 8; 8* → 9; 9* → *0; ** → 1; * → ʎ.

Приведем работу построенного алгоритма для чисел 79 и 99:

*79* → *7*0 → *80 → 80;

*99* → *9*0 → **00 → 100.

Пример 3. Прежде, чем перейти к другим арифметическим операциям, рассмотрим как довольно типичный пример, используемый часто в других алгоритмах, алгоритм копирования двоичного числа. В этом случае прежде всего исходное и скопированное числа разделим символом "*". В разрабатываемом алгоритме мы будем копировать разряды числа по очереди, начиная с младшего, но нужно решить 2 проблемы: как запоминать значение символа, который мы копируем, и как запоминать место копируемого символа. Для решения второй проблемы используем символ "!", которым мы будем определять еще не скопированный разряд числа, после которого и стоит этот символ. Для запоминания значения копируемого разряда мы будем образовывать для значения 0 символ "a", а для значения 1 - символ "b". Меняя путем подстановок эти символы "a" или "b" с последующими, мы будем передвигать разряды "a" или "b" в начало копируемого числа (после "*"), но для того, чтобы пока не происходило копирование следующего разряда справа, мы перед передвижением разряда временно символ "!" заменим на символ "?", а после передвижения сделаем обратную замену. После того как все число окажется скопированным в виде символов "a" и "b", мы заменим эти символы на 0 и 1 соответственно. В результате нормальный алгоритм копирования двоичного числа можно определить следующей последовательностью подстановок:

13

1.Начальные пометки копирования разряда и копии числа:

0* → 0!*; 1* → 1!*.

2.Копирование разряда с заменой пометки разряда:

0! → ?0а; 1! → ?1b.

3.Передвижение скопированного разряда: a0 → 0a; a1 → 1a; b0 → 0b; b1 → 1b.

4.Остановка передвижения скопированного разряда: a* → *a; b* → *b.

5.Обратная замена пометки разряда:

?→ !.

6.Обратная замена скопированного разряда:

a → 0; b → 1.

7. Стирание символов:

*! → ʎ.

Можно продемонстрировать работу этого алгоритма для числа 10:

*10* → *10!* → *1?0a* → *1?0 * a → *1!0 * a → *?1b0 * a → *?10b*a → *?10 * ba → *!10 * ba *!10 * 10 →10 * 10.

Приведенные примеры показывают также возможности аппарата нормальных алгоритмов Маркова по организации ветвления и цикличных процессов вычисления. Это показывает, что всякий алгоритм может быть нормализован. Это означает, что задан нормальным алгоритмом Маркова. В этом и состоит тезис Маркова, который следует интерпретировать как определение алгоритма.

Вместе с тем построение алгоритма в последнем приведенном примере подсказывает следующую методику разработки нормальным алгоритмом Маркова:

1.Произвести декомпозицию строящегося алгоритма.

2.Решение проблем реализации каждой части. В предыдущем примере: запоминание копируемого разряда - разряд 1 запоминается как символ "a", а разряд 0 - как символ "b";

запоминание места копируемого разряда - пометка еще не скопированного символа дополнительным символом "!" с заменой его на символ "?" при передвижении копируемого разряда и обратной заменой после передвижения.

3.Если часть для реализации является сложной, то она также подвергается декомпозиции.

4.Сборка реализации в единый алгоритм.

14

3. Лекция 3. Алгоритмы Тьюринга.

Тьюринг в результате своих исследований понятия эффективной вычисли-

мости выделил класс абстрактных машин пригодных для выполнения всякой «ме-

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

шинами Тьюринга.

Эти машины описываются следующим образом.

Пусть имеется лента. О ней предполагается, что она потенциально беско-

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

Имеется конечное множество символов ленты S0, …, Sn, которое называ-

ется алфавитом машины. В каждый момент всякий квадрат может быть записан не более чем одним символом. Сама машина обладает конечным множеством внутренних состояний {q0, q1, …, qm}. В любой момент времени она находится в точности в одном из этих состояний. Также имеется читающая головка, находя-

щаяся на одном из квадратов ленты в каждый момент времени. Если в момент времени t читающая головка воспринимает квадрат с символом Si в нем, а машина находится во внутреннем состоянии qj, то действие машины однозначно опреде-

лено и она совершает один из четырех актов: (1) головка стирает символ Si и за-

писывает на том же квадрате символ Sk; (2) головка перемещается в соседний слева квадрат; (3) головка перемещается в соседний справа квадрат; (4) машина останавливается.

Ввариантах (1), (2), (3) машина переходит в новое внутренне состояние qr

иготова снова к действию в момент t+1.

15

Предполагается, что символ S0 представляет пустой квадрат. Таким обра-

зом читающая головка всегда воспринимает некоторый символ алфавита.

Первые три возможных актов действия машины описываются следую-

щими упорядоченными четверками называемыми командами: (1) qjSiSkqr, (2) qjSiLqr, (3) qjSiRqr. qj – внутреннее состояние, Si – воспринимаемый символ, тре-

тий символ – действие машины: Sk – написание головкой символа Sk; L – пере-

мещение головки на один квадрат влево; R – перемещение головки на один квад-

рат вправо.

Если лента вкладывается в машину Тьюринга ее читающая головка поме-

щается на один из квадратов ленты, машина приводится в одно из своих внут-

ренних состояний. Тогда машина начинает оперировать на ленте согласно трем вариантам. Если в некоторый момент t1 машина останавливается, то находяща-

яся в момент остановки лента называется результатом применения машины на данной ленте.

С каждой машиной Тьюринга Т связывается некоторый алгоритм В в ал-

фавите А машины Т. Берется некоторое слово Р в алфавите А и записывается слева направо в квадратах чистой ленты. Потом ленту помещают в машину Т,

чтобы читающая головка воспринимала самый левый квадрат, машина Т приво-

дится во внутреннее состояние q0. Далее машина начинает работать. Если ма-

шина Т когда-нибудь остановится, то появившееся в результате на ленте слово в А является значением алгоритма В. Такой алгоритм называется алгоритмом Тьюринга. Результирующее слово читается слева направо на ленте, причем пу-

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

Итак, машиной Тьюринга называется любое конечное множество упоря-

доченных четвёрок символов, удовлетворяющих условиям: ( ) каждая входящая в четвёрка принадлежит одному из трёх типов: (1) ; (2) ; (3)

, (ii) никакие две четвёрки из не имеют совпадающих первые два сим-

16

вола. Упорядоченные четвёрки указанных типов называются командами. Мно-

жество символов { } – алфавит машины , – внутреннее состояние, 0

внутреннее состояние любой машины .

Конфигурацией машины называется каждое слово , где P – слово (возможно пустое) в алфавите МТ, – внутреннее состояние МТ, – непустое слово в МТ.

Машина переводит конфигурацию α в конфигурацию β, обозначается

, если либо (a) = , = и есть одна из команд МТ,

либо (b) =

, =

и

– команда МТ, либо (c) =

,

 

 

 

 

 

 

 

 

 

 

 

 

 

= ,

 

– команда МТ,

либо

(d) = ,

= ,

 

0

 

 

 

 

 

 

 

 

 

 

– команда МТ, либо (e)

= , = ,

– команда МТ.

 

 

 

 

 

 

 

0

 

 

 

 

МТ останавливается при конфигурации , если не существует конфигура-

ции такой, что . Это имеет место в том случае, когда входит в α, то

среди команд МТ нет начинающейся с .

Вычисление МТ задается последовательностью конфигураций 0, … , с

≥ 0 такой, что внутреннее состояние входящее в 0 есть 0; +1 при =

0, 1, … , − 1, МТ останавливается на . Тогда говорят, что вычисление начинается с 0 и заканчивается на .

Рассмотрим алфавит , содержащий в себе алфавит МТ. Тогда можно задать алгоритм , в так: для произвольных слов и в равенство ,( ) =выполняется существует вычисление МТ, начинающееся с конфигурации

до и заканчивается конфигурацией вида 1 2, где 1 2 = . Алгоритм в алфавите называется вычислимым по Тьюрингу, если существует МТ с алфа-

витом и алфавитом , где , т.ч. алгоритмы , и вполне эквивалентны относительно .

Запишем 1 вместо 1, слово 1+1 обозначим для любого натурального числа , * обозначим 2.

Любое конечное множество Т упорядоченных четвёрок символов, удовлетворяющих условиям:

i.Каждая входящая в Т четвёрка принадлежит одному из трёх типов:

17

ii.Никакие две четвёрки из Т не имеют совпадающими первые два символа. Упорядоченные четвёрки указанных типов называются командами. Мно-

жество символов { } алфавит машины Т, внутренние состояния. Ограничение: 0 внутреннее состояние любой машины Т.

Конфигурацией машины Т называется каждое слово , где P слово (возможно пустое) в алфавите МТ, внутреннее состояние МТ. Машина Т переводит конфигурацию α в конфигурацию β, обозначается как , если либо:

a)= , = и есть одна из команд Машины Т, либо

b)= , = и команда Машины Т, либо

c)= , = 0 , команда Машины Т, либо

d)= , = и команда Машины Т, либо

e)= , = 0 и команда Машины Т.

МТ останавливается при конфигурации , если не существует конфигурации такой, что .

Это имеет место в том случае, когда входит в , но среди команд МТ нет начинающейся с .

Вычисление МТ задается последовательностью конфигураций

0

, … ,

 

c m ≥

 

 

 

 

 

 

 

 

0 такой, что внутреннее состояние входящее в 0

есть 0;

 

 

 

 

 

 

 

 

при = 0,1, … , − 1, МТ останавливается на .

 

 

 

 

 

 

+1

 

 

 

 

 

 

 

 

 

 

 

 

Тогда говорят, что вычисление начинается с 0 и заканчивается на .

Рассмотрим алфавит C, содержащий в себе алфавит A МТ. Тогда можно задать алфавит , в C так:

Для произвольных слов P и Q в C равенство BT,C(P) = Q выполняется <=> существует вычисление MT, начинающееся с конфигурации q0T и заканчивающееся конфигурацией вида R1qjR2, где R1R2 = Q. Алгоритм U в алфавите D называется вычислимым по Тьюрингу, если существует MT с алфавитом А и алфавитом С, где А D C, т.ч. алгоритмы BT,C и D вполне эквивалентны относительно D.

Запишем 1 вместо S1, слово 1m+1 обозначим для любого натурального числа m, * обозначим S2.

Пусть имеется алфавит А, в котором содержится 1 и *, а для всяких натуральных чисел k1,…,kn и каждого слова Р и данной частичной арифметической

̅

̅

функции f(x1,…,xn) равенство BT,A ( 1, … , ) = P выполняется тогда и только то-

гда, когда существуют слова T1 и T2

в алфавите { S0 } таким, что P = T1

 

18

( 1, … , ) T2. Напомним, что символ S0 интерпретируется как изображение пу-

стого квадрата ленты MT. Поэтому форма T1 ( 1, … , ) T2 допустима для P. В таком случае частичная арифметическая функция f(x1,…,xn) называется вычислимой по Тьюрингу. То есть, когда существует МТ, осуществляющая вычисление рассматриваемой функции.

Предложение. Предположим, что С-расширение алфавита А, а Т-машина Тьюринга с алфавитом А. Тогда существует нормальный алгоритм U над алфавитом С, который вполне эквивалентен алгоритму Тьюринга BT,C.

Доказательство. Положим E = C {qk0,...qkn}, где qk0,…,qkn - некоторые внутренние состояния Т, причем qk0 = q0, Для построения схемы алгоритма U возьмем сначала для всех команд qjSiSkqr машины Тьюринга Т формулы подстановок вида qjSi -> qrSk. Возьмем произвольную команду qjSiSkqr машины Тьюринга Т и S ϵ C и, исходя из формулы подстановки qjSi -> qrS0Si, перечислим все формулы подстановок типа SlqjSi -> qrSlSi. Потом для Sl ϵ C и формулы подстановки qjSi -> SiqrS0 и произвольной команды qjSiRqr предъявим всевозможные формулы подстановок типа qjSiSl -> SiqrSl.

Для любого

 

возьмем формулу подстановки → Λ и присоединим к

 

 

 

 

 

списку формул подстановки еще Λ → 0 .

В результате получается схема, по которой задается алгоритм U над C. Тогда,( ) ( ) для каждого слова P в C.

Следствие. Если функция f вычислима по Тьюрингу, то она вычислима по Маркову.

Доказательство. Рассмотрим функцию f( 1, … , ), которая вычислима по Тьюрингу.

19

4. Лекция 4. K-значная логика. Формулы и функции k-значной логики.

Наряду с двузначной логикой имеются -значные логики. Потребность в них возникает уже в рассуждениях, когда возможны более двух вариантов исходов. Они также полезны для разработки алгоритмов программ, алгоритмов управления машинами, когда имеются многовариантные возможности действий и т.д.

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

Берётся некоторый алфавит = { 1, 2, … } переменных (аргументов) и рассмат-

риваются функции ( 1, … , ), где при , определены на мно-

жестве

= {0,1, … , − 1}, : → . Каждая такая функция полностью ха-

 

 

 

рактеризуется своей таблицей. Функцию одной переменной можно охарактери-

зовать подстановкой ( ) = (

0

1

− 1), где ( ) = .

 

 

 

 

 

 

0

1

 

 

−1

Множество всех функций k-значной логики обладают . В это множество также входят постоянные функции 0,1, … , − 1. Число различных наборов ( 1, … , ) значений переменных 1, … , равно . Для каждого набора ( 1, … , ) функция из принимает одно из значений 0,1, … , − 1. Поэтому получается такой результат.

Теорема 1.

Число всевозможных функций k-значной логики, зависящих от переменных равно , где = .

Например, в 3 число функций от двух переменных составляет 39 = 19683. Число строк в таблицах функций переменных возрастает с и как . Из-за этого вместо таблиц функций часто используют алгоритмы вычисления функций

. Например, ( 1, . . , ) = max( 1, … , ) вычисляется как максимальное значение среди значений переменных.

Примеры. 1. ̅= + 1( ), ̅- обобщение отрицания в смысле «циклического» сдвига значений;

1.

Ν = − 1 − = – отрицание в смысле «зеркального» отображения

 

значений, отрицание Лукашевича;

2.

( ) = { − 1, при = , где = 0, … , − 1

 

 

0, при ≠

 

 

( ) тоже обобщает некоторые свойства отрицания;

20