Применение теории индуктивных функций

advertisement
Кафедра информационных систем и технологий
http://edu.msiu.ru
Е.А. Роганов
Применение теории индуктивных
функций
Применение теории индуктивных функций
1/5
Индуктивные расширения
Функция f : X * → Y называется индуктивной, если
f (𝜔 ∘ x) можно вычислить, зная f (𝜔) и x, то есть если
∃G : Y × X → Y такое, что
∀𝜔 ∈ X * ∀x ∈ X f (𝜔 ∘ x) = G (f (𝜔), x).
Применение теории индуктивных функций
2/5
Индуктивные расширения
Для вычисления значения f (𝜔) индуктивной функции
f на цепочке 𝜔 = a1 a2 . . . an применяется следующая
схема. Рассматривается последовательность цепочек
𝜀, a1 , a1 a2 , . . ., a1 a2 . . . an = 𝜔. Сначала вычисляется
значение f (𝜀) функции f на пустой цепочке 𝜀, а затем
используется отображение G , позволяющее найти
значение функции f на удлинённой цепочке, что даёт
возможность последовательно определить f (a1 ), f (a2 )
и так далее, вплоть до искомого значения f (𝜔).
Применение теории индуктивных функций
2/5
Индуктивные расширения
Критерий индуктивности.
f : X * → Y индуктивна ⇔
(︀
)︀
∀a, b ∈ X * ∀x ∈ X f (a) = f (b) ⇒ f (a ∘ x) = f (b ∘ x) .
Применение теории индуктивных функций
2/5
Индуктивные расширения
̃︀ называется индуктивным
Функция F : X * → Y
расширением функции f : X * → Y , если F индуктивна
̃︀ → Y такое, что ∀𝜔 ∈ X * f (𝜔) = 𝜋(F (𝜔)).
и ∃𝜋 : Y
Применение теории индуктивных функций
2/5
Индуктивные расширения
Мы знаем (это было доказано с помощью отрицания
критерия индуктивности), что функция f : Z* → Z+
количество максимальных элементов
последовательности не является индуктивной. Какую
функцию можно предложить в качестве её
индуктивного расширения?
Применение теории индуктивных функций
2/5
Индуктивные расширения
Для функции f : Z* → Z+ количество максимальных
элементов последовательности, индуктивным
расширением будет, например, функция
F : Z* → Z+ × Z, определённая формулой
F (𝜔) = (f (𝜔), max(𝜔)), где max(𝜔) — значение
максимального элемента последовательности.
Применение теории индуктивных функций
2/5
Индуктивные расширения
Что надо доказать для проверки этого факта?
Применение теории индуктивных функций
2/5
Индуктивные расширения
F — индуктивна;
F является расширением f .
Применение теории индуктивных функций
2/5
Индуктивные расширения
Рассмотрим функцию f : R*1 → R среднее
арифметическое элементов последовательности,
которая не является индуктивной (это тоже было
доказано ранее). Тогда функция F : R*1 → R × N,
определённая формулой F (𝜔) = (s(𝜔), n(𝜔)), где
n
∑︁
𝜔 = a1 a2 . . . an , s(𝜔) =
ai , а n = |𝜔|, является
i=1
индуктивным расширением исходной функции f .
Применение теории индуктивных функций
2/5
Индуктивные расширения
Каким здесь является отображение (проекция) 𝜋?
Применение теории индуктивных функций
2/5
Индуктивные расширения
Обобщённая схема вычисления индуктивной
функции. Для вычисления значения f (𝜔) не
являющейся индуктивной функции f на цепочке 𝜔
применяется следующая обобщённая схема. Строится
индуктивное расширение F исходной функции, которое
позволяет ценой увеличения запоминаемой
информации о цепочке 𝜔 (в F (𝜔) информации
больше, чем в f (𝜔)) применить схему вычисления
индуктивной функции к F (𝜔), а затем просто найти
f (𝜔) = 𝜋(F (𝜔)).
Применение теории индуктивных функций
2/5
Минимальные индуктивные расширения
Сравнение индуктивных расширений. Пусть
̃︀1 и F2 : X * → Y
̃︀2 — два индуктивных
F1 : X * → Y
расширения функции f : X * → Y . Будем говорить, что
̃︀1 → Y
̃︀2 такое, что
F1 > F2 , если ∃𝜋 : Y
*
∀𝜔 ∈ X F2 (𝜔) = 𝜋(F1 (𝜔)).
Применение теории индуктивных функций
3/5
Минимальные индуктивные расширения
Мы уже знаем, что функция F : R*1 → R × N,
определённая формулой F (𝜔) = (s(𝜔), n(𝜔)), где
n
∑︁
𝜔 = a1 a2 . . . an , s(𝜔) =
ai , а n = |𝜔|, является
i=1
индуктивным расширением функции f : R*1 → R
среднее арифметическое элементов
последовательности.
Применение теории индуктивных функций
3/5
Минимальные индуктивные расширения
Рассмотрим функцию F1 : R*1 → R × N × R,
задаваемую формулой F1 (𝜔) = (s(𝜔), n(𝜔), last(𝜔)),
где last(𝜔) = an для 𝜔 = a1 a2 . . . an .
Применение теории индуктивных функций
3/5
Минимальные индуктивные расширения
Как проверить, что F1 также является индуктивным
расширением функции f и F1 > F ?
Применение теории индуктивных функций
3/5
Минимальные индуктивные расширения
Минимальным индуктивным расширением функции
f : X * → Y называется индуктивное расширение
̂︀ такое, что F̂︀ (X * ) = Y
̂︀ (F̂︀ — сюръективно)
F̂︀ : X * → Y
и для любого индуктивного расширения F функции f
выполнено F > F̂︀ .
Применение теории индуктивных функций
3/5
Минимальные индуктивные расширения
Минимальные индуктивные расширения обладают тем
достоинством, что позволяют свести к минимуму
дополнительную информацию, которая необходима
для индуктивного перевычисления исходной функции.
Применение теории индуктивных функций
3/5
Минимальные индуктивные расширения
Минимальное индуктивное расширение функции
f : X * → Y существует и единственно с точностью до
изоморфизма. Иначе говоря, для произвольной
функции f на пространстве последовательностей
существует единственный с точностью до
изоморфизма однопроходный алгоритм с минимальной
ёмкостной сложностью.
Применение теории индуктивных функций
3/5
Минимальные индуктивные расширения
Критерий минимальности (вместе с примером его
использования), который позволяет строго доказывать
минимальность индуктивных расширений, рассмотрен
в материалах к лекции.
Применение теории индуктивных функций
3/5
Построение индуктивных расширений
Для построения индуктивного расширения функции
обычно применяют стандартный приём: пробуют
выразить значение функции f (𝜔 ∘ x) на удлинённой
цепочке через её значение f (𝜔) на исходной и элемент
x. Сделать это невозможно (если только f не
индуктивна), но наша цель — понять какой именно
информации не хватает и, добавив её, образовать
функцию f1 .
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Рассмотрим далее функцию F1 = (f , f1 ). В том случае,
если она индуктивна, требуемое расширение
построено. Иначе повторим предыдущие действия и
попытаемся выразить f (𝜔 ∘ x) и f1 (𝜔 ∘ x) через f (𝜔),
f1 (𝜔) и x с использованием дополнительной
информации f2 (𝜔). Получаем следующего кандидата
на роль индуктивного расширения — функцию
F2 = (f , f1 , f2 ). При необходимости этот процесс может
быть продолжен, а его завершение гарантируется
теоремой о существовании индуктивного расширения.
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Задача. Напишите программу, находящую количество
максимальных элементов последовательности целых
чисел.
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Мы уже знаем, что данная функция f : Z* → Z+ не
индуктивна. Для построения её индуктивного
расширения применим описанный выше метод.
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
f (𝜀) = 0 — это вполне очевидно. А вот как будет
выглядеть попытка выразить f (𝜔 ∘ x) через f (𝜔)?
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
⎧
⎪
если x < max(𝜔),
⎨f (𝜔),
f (𝜔 ∘ x) = f (𝜔) + 1, если x = max(𝜔),
⎪
⎩1,
если x > max(𝜔).
Отсюда видно, что в качестве f1 следует взять
функцию max, вычисляющую максимальное значение
элементов цепочки.
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Тогда для F = (f , f1 ) получаем:
⎧
⎪
если x < f1 (𝜔),
⎨(f (𝜔), f1 (𝜔))
F (𝜔 ∘ x) = (f (𝜔) + 1, f1 (𝜔)) если x = f1 (𝜔),
⎪
⎩(1, x)
иначе.
Индуктивна ли функция F ?
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Да. Вот отображение G :
⎧
⎪
если x < y 2,
⎨(y 1, y 2)
G ((y 1, y 2), x) = (y 1 + 1, y 2)) если x = y 2,
⎪
⎩(1, x)
иначе.
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Заметим, что функция F : (Z)*1 → Z+ × Z определена
только на (Z)*1 , ибо f1 не определена на пустой
цепочке.
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Как выглядит проекция 𝜋 в данном случае?
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Отображение 𝜋 : Z+ × Z → Z+ здесь тривиально:
𝜋(y1 , y2 ) = y1 .
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
y1 = 0
begin
p r i n t " x ␣ ->␣ "
y1 , y2 = 1 , r e a d l i n e . t o _ i
while true
p r i n t " x ␣ ->␣ "
x = r e a d l i n e . to_i
i f x == y2
y1 += 1
e l s i f x > y2
y1 , y2 = 1 , x
end
end
r e s c u e EOFError
p u t s " \ nf ␣ = ␣ #{ y1 } "
end
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Каково соответствие между переменными,
использованными в этой программе, и теми
обозначениями, которые были применены при записи
отображения G ?
Что в программе соответствует вычислению F (𝜀) (или
чего-то подобного)?
Где в программе реализовано перевычисление с
помощью отображения G функции F при удлинении
цепочки?
Где в программе реализовано отображение 𝜋?
Применение теории индуктивных функций
4/5
Построение индуктивных расширений
Задача. Напишите программу, определяющую
количество вхождений образца abcd в
последовательность символов. Можно считать, что
символы поступают по одному на строке (это не
меняет задачу по существу, но позволяет обойти
некоторые чисто технические проблемы).
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Индуктивна ли рассматриваемая в задаче функция?
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Пусть X — множество символов, тогда функция
f : X * → Z+ . Если x = d, 𝜔1 = abc, 𝜔2 = aaa, то
f (𝜔1 ) = f (𝜔2 ) = 0, но f (𝜔1 ∘ x) = 1 ̸= 0 = f (𝜔2 ∘ x),
следовательно f не является индуктивной.
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Заметив, что f (𝜀) = 0, будем строить её индуктивное
расширение:
{︃
f (𝜔) + 1, если x = d и 𝜔 кончается на abc,
f (𝜔∘x) =
f (𝜔),
иначе.
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Какую дополнительную функцию f1 следует
рассмотреть?
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Введём дополнительную функцию f1 (𝜔) : X * → {T , F },
которая будет истинна только если 𝜔 кончается на abc,
и рассмотрим F1 = (f , f1 ). Для неё F1 (𝜀) = (0, F ),
⎧
⎪
⎨(f (𝜔) + 1, F ), если x = d и f1 (𝜔) = T ,
F1 (𝜔∘x) = (f (𝜔), T ),
если x = c и 𝜔 конч. на ab,
⎪
⎩(f (𝜔), F ),
иначе.
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Индуктивна ли функция F1 = (f , f1 )?
Можем ли мы строго это доказать?
Надо ли это делать?
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Выполняя ещё два аналогичных шага, определим
функцию f2 (𝜔) : X * → {T , F }, истинную только когда
𝜔 заканчивается на ab, и затем функцию
f3 (𝜔) : X * → {T , F }, истинную, если 𝜔 заканчивается
на a.
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Для функции F3 = (f , f1 , f2 , f3 ), действующей в
пространство Z+ × ({T , F })3 получаем:
F3 (𝜀) = (0, F , F , F ),
⎧
⎪
(f (𝜔) + 1, F , F , F ), если x = d и f1 (𝜔),
⎪
⎪
⎪
⎪
⎪
если x = c и f2 (𝜔),
⎨(f (𝜔), T , F , F ),
F3 (𝜔 ∘ x) = (f (𝜔), F , T , F ),
если x = b и f3 (𝜔),
⎪
⎪
⎪
(f (𝜔), F , F , T ),
если x = a,
⎪
⎪
⎪
⎩(f (𝜔), F , F , F ),
иначе.
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Индуктивна ли функция F3 ?
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Является ли построенное расширение минимальным?
Надо ли это пытаться строго доказать?
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
F3 — индуктивное расширение f , однако оно
достаточно сложно и заведомо не является
минимальным, так как f1 , f2 и f3 не являются
независимыми. У тройки величин (f1 , f2 , f3 ) имеется
всего четыре допустимых состояния, которые можно
представить одним числом:
⎧
3, если 𝜔 кончается на abc,
⎪
⎪
⎪
⎨2, если 𝜔 кончается на ab,
n(𝜔) =
⎪
1, если 𝜔 кончается на a,
⎪
⎪
⎩
0, иначе.
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Какое индуктивное расширение исходной функции f
можно предложить, основываясь на данном факте?
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Как доказать, что функция F : X * → Z+ × {0, 1, 2, 3},
определённая соотношением F (𝜔) = (f (𝜔), n(𝜔)),
является индуктивным расширением f ?
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Преобразование
G : Z+ × {0, 1, 2, 3} × X → Z+ × {0, 1, 2, 3} имеет
такой вид:
⎧
⎪
(f + 1, 0),
⎪
⎪
⎪
⎪
⎪
⎨(f , 3),
G ((f , n), x) = (f , 2),
⎪
⎪
⎪
(f , 1),
⎪
⎪
⎪
⎩(f , 0),
Применение теории индуктивных функций
если x
если x
если x
если x
иначе.
= d и n = 3,
= c и n = 2,
= b и n = 1,
= a,
5/5
Построение индуктивных расширений
Более сложный вопрос: как строго доказать, что это F
является минимальным индуктивным расширением f ?
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
f , n = 0 ,0
begin
while true
p r i n t " x ␣ ->␣ "
x = r e a d l i n e . chomp
if
x==" d " and n==3
f , n = f +1 ,0
e l s i f x==" c " and n==2
n=3
e l s i f x==" b " and n==1
n=2
e l s i f x==" a "
n=1
else
n=0
end
end
r e s c u e EOFError
p u t s " \ nf ␣ = ␣ #{ f } "
end
Применение теории индуктивных функций
5/5
Построение индуктивных расширений
Каково соответствие между переменными,
использованными в этой программе, и теми
обозначениями, которые были применены при записи
отображения G ?
Что в программе соответствует вычислению F (𝜀) (или
чего-то подобного)?
Где в программе реализовано перевычисление с
помощью отображения G функции F при удлинении
цепочки?
Где в программе реализовано отображение 𝜋?
Применение теории индуктивных функций
5/5
Download