Кафедра информационных систем и технологий 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