# Практические задания ## Вопросы, которые могут встретиться на допуске к зачету * понятие парадигмы программирования; * фон-Неймановская архитектура; * понятие ссылочной прозрачности; * понятие чистой функции. Кроме того, в допуске к зачету или в зачетном задании могут встретиться вопросы на понимание ссылочной прозрачности и чистоты функций и определения, является ли данный код на Java/Scala ссылочно прозрачным. [Материалы по теме](https://docs.google.com/presentation/d/11WQnuEIif2BD971z5XJFoa-unyrRTAHO6Yy8A6d-4As/edit?usp=sharing). При подготовке по теме можно (и нужно) использовать и другие материал, т.к. презентация не является полным конспектом лекций, которые читались. # Машина Тьюринга ## Вопросы, которые могут встретиться на допуске к зачету * алгоритмические модели; * определение вычислимости по Тьюрингу; * какие элементы участвуют в задании одноленточной машины Тьюринга; * как записывается правило перехода для одноленточной машины Тьюринга; * как записывается правило перехода для многоленточной машины Тьюринга; * что такое "детерминизм" в контексте машины Тьюринга; * что такое "конфигурация" одноленточной машины Тьюринга; * что такое "конфигурация" многоленточной машины Тьюринга; * что такое "протокол" одноленточной машины Тьюринга; * что такое "протокол" многоленточной машины Тьюринга; * дайте определение "стандартной кофигурации" одноленточной машины Тьюринга; * дайте определение "стандартной кофигурации" многоленточной машины Тьюринга; * связь машины Тьюринга и конечных автоматов. Кроме того, в допуске к зачету или в зачетном задании могут встретиться вопросы на понимание свойств машины Тьюринга и вычисляемым ими функций. [Материалы по теме](https://docs.google.com/presentation/d/11LrR-3OSMmMpdhl2HDwQk7XtjyKfLBk-0sq5pV7wxcA/edit?usp=sharing). При подготовке по теме можно (и нужно) использовать и другие материал, т.к. презентация не является полным конспектом лекций, которые читались. ## Практические задания ## Алфавит Для каждого задания алфавит `Α` ограничивает только **входное** слово, результат и процесс выполнения программы могут иметь символы не входящие в `Α`. ## Формат ответа Предполагается, что **во всех задачах** машина Тьюринга находится в **стандартной конфигурации**. Предположим, даные две задачи: * Задача 1 Пусть `Α = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ∅}`; `P` — непустое слово. Требуется получить на ленте запись числа, которое на `1` больше числа `P`. * Задача 2 Пусть `Α = {a, b, c, ∅}`; `P` — непустое слово. Если первый и последний символы (непустого) слова `Р` одинаковы, тогда это слово не менять, а иначе заменить его на пустое слово. Формат ответа должен соответствовать шаблону, описанному [здесь](https://docs.google.com/spreadsheets/d/1nPwJLFVvsZ3sTtUZv-u9cxAyb_eM7tXCg3HM4YgYcpo/edit?usp=sharing). Обратите внимание на комментарии. Необходимо создать Google Spreadsheets, добавить ссылку на этот документ в качестве решения на Google Classroom, убедиться, что у меня есть права на просмотр документа. ## Задачи ### Одноленточная машина Тьюринга #### Задача 1 `Α = {a, b, c}`. Приписать слева и справа к слову `P` символ `b` (т.е. `P → bPb`). **1 балл** #### Задача 2 `Α = {a, b, c}`. Приписать справа к слову `P` символы `bc` (т.е. `P → Pbc`). **1 балл** #### Задача 3 `Α = {a, b, c}`. Определить, входит ли в слово `P` символ `a`. Возвращаемый результат: `1` — если входит, `0` — если не входит. **2 балла** #### Задача 4 `Α = {a, b, c}`. Заменить на `a` каждый третий символ в слове `P`. **2 балла** #### Задача 5 `Α = {a, b, 0, 1, 2}`. Определить, является ли слово P записью числа в троичной системе счисления (словом, возможно - пустым, состоящем только из цифр `0`, `1` и `2`). Возвращаемый результат: `1` — если да, `0` — если нет. **2 балла** #### Задача 6 `Α = {0, 1, 2, 3}`. Для непустого слова P определить, является ли оно записью степени четверки (`1, 4, 16, ...`) в четверичной системе счисления. Возвращаемый результат: `1` — если да, `0` — если нет. **2 балла** #### Задача 7 `Α = {a, b}`. Утроить слово `P` (например: `abb → abbabbabb`). **4 балла** #### Задача 8 `Α = {a, b}`. Перевернуть слово `P` (например: `abb → bba`). **4 балла** #### Задача 9 `Α = {a, b}`. Утроить каждый символ слова `P` (например: `bab → bbbaaabbb`). **6 баллов** #### Задача 10 `Α = {(, ), a, b}`. Определить, сбалансировано ли слово P по круглым скобкам: запись ((a)(bb)) считается сбалансированной, запись ((a)(b) считается несбалансированной, запись (), т.е. скобки без символов a или b внутри, считается некорректной. Возвращаемый результат: `1` — если да, `0` — если нет. **8 баллов** #### Задача 11 `Α = {a, b}`. Если в `P` символов a больше, чем символов `b`, то выдать ответ `a`, если символов `a` меньше символов `b`, то выдать ответ `b`, а иначе в качестве ответа выдать пустое слово. **8 баллов** ### Многоленточная машина Тьюринга **Важно**: решения для одноленточных машин, результат работы которых просто переписыается на вторую ленут, засчитаны не будут. #### Задача 12 `Α = {1, ∅}`. Для двухленточной машины Тьюринга напишите алгоритм, который будет складывать два числа, записанных в унарной системе счисления, разделенных пустым символом `∅`. Результат сложения выведите на вторую ленту. #### Задача 13 `Α = {1, ∅, -}`. Для двухленточной машины Тьюринга напишите алгоритм, который будет вычитать два числа, записанных в унарной системе счисления, разделенных пустым символом `∅`. В случае отрицательного результата, перед числом поставьте символ `-`. Результат сложения выведите на вторую ленту. #### Задача 14 `Α = {a, b, c}`. Для двухленточной машины Тьюринга напишите алгоритм проверки, является ли слово над алфавитом `A` палиндромом. # Вычислимые функции ## Практические задания * Может ли всякая вычислимая функция f с натуральными аргументами и значениями быть продолжена до всюду определённой вычислимой функции g: ℕ→ℕ? Докажите. * Является ли данное множество разрешимым: {254, 5990, 4487, 3479, 685, 1774, 3850, 5426, 1695, 4106, 5449, 1768, 5493, 6540, 5778, 7956, 3644, 8181, 3746, 4429, 7246, 2701, 6251, 4756, 5795, 5897, 7109, 1514, 9601, 9978, 4192, 3684, 4883, 3176, 9666, 4244, 5312, 8252, 4317, 8710, 7846, 4550, 2772, 4319, 638, 2562, 3028, 5104, 1931, 4871, 6926, 2491, 6520, 6499, 8494, 4436, 3276, 2383, 5425, 1977, 1956, 3066, 8721, 5021, 963, 2937, 1188, 4099, 5269, 3266, 3622, 545, 7247, 5011, 8307, 3060, 4649, 7589, 7547, 9034, 9390, 6196, 418, 4803, 4528, 3614, 4957, 5690, 1022, 2721, 5784, 1836, 6933, 5082, 7077, 7056, 3252, 7260, 6396, 6875}? Докажите. * Является ли множество {2ㆍx I x ∊ ℕ } разрешимым? Докажите. * Является ли множество всех простых чисел разрешимым? Докажите. * Является ли данное множество перечислимым: {254, 5990, 4487, 3479, 685, 1774, 3850, 5426, 1695, 4106, 5449, 1768, 5493, 6540, 5778, 7956, 3644, 8181, 3746, 4429, 7246, 2701, 6251, 4756, 5795, 5897, 7109, 1514, 9601, 9978, 4192, 3684, 4883, 3176, 9666, 4244, 5312, 8252, 4317, 8710, 7846, 4550, 2772, 4319, 638, 2562, 3028, 5104, 1931, 4871, 6926, 2491, 6520, 6499, 8494, 4436, 3276, 2383, 5425, 1977, 1956, 3066, 8721, 5021, 963, 2937, 1188, 4099, 5269, 3266, 3622, 545, 7247, 5011, 8307, 3060, 4649, 7589, 7547, 9034, 9390, 6196, 418, 4803, 4528, 3614, 4957, 5690, 1022, 2721, 5784, 1836, 6933, 5082, 7077, 7056, 3252, 7260, 6396, 6875}? Докажите. * Является ли множество {2ㆍx I x ∊ ℕ } перечислимым? Докажите. * Является ли множество всех простых чисел перечислимым? Докажите. * Является ли функция f(x, y) = x + y примитивно рекурсивной? Докажите. * Является ли функция f(x, y) = xy примитивно рекурсивной? Докажите. # Бестиповое λ-исчисление ## Практические задания ### Расставьте скобки * λv.vp λu.v u * (λv.vp) λu.w λw.wupv * λv.v u λv.uv ### Подчеркните все свободные переменные * λv.v p λu.v u * (λv. v p) λu. w λw. w u p v * λv. v u λv. u v ### Примените β-редукцию (и α-конверсию там, где это необходимо) до тех пор, пока это возможно. В ответе укажите все этапы преобразования выражения * (λp.p) (λu.u u) (λv.v s) * (λp.p) (λp.p p) (λp.p u) * (λv.λu.v u u) (λs.s) t * (λv.λu.v u u) (λu.u) u * (λv.v v) (λu.u v) p * (λv. (λu. (v u)) u) p * ((λv.v v) (λu.u)) (λu.u) * (((λv. λu.(v u))(λu.u)) w) ### Покажите, что заданные выражения имеют несколько различных последовательностей редукции, найдите нормальную форму * (λv.u) ((λu.u u u) (λv.v v v)) * (λvu.v) (λu.u) ((λv.v v) (λv.v v)) ### Булевы операции #### Пусть not ≡ λz.((z 𝔽) 𝕋) * Докажите, что not (not 𝕋) = 𝕋. * Докажите, что not (not 𝔽) = 𝔽. #### Пусть and ≡ λx.λy. x y 𝔽 * Докажите, что and 𝕋 𝕋 = 𝕋. * Докажите, что and 𝕋 𝔽 = 𝔽. * Докажите, что and 𝔽 𝕋 = 𝔽. * Докажите, что and 𝔽 𝔽 = 𝔽. * Докажите, что or 𝕋 𝕋 = 𝕋. * Докажите, что or 𝕋 𝔽 = 𝕋. * Докажите, что or 𝔽 𝕋 = 𝕋. * Докажите, что or 𝔽 𝔽 = 𝔽. ### Арифметические операции над нумералами Чёрча #### Пусть cn≡ λf.λx. fn(x) — n-й нумерал Черча, и succ ≡ λx.λf.λp. f (x f p) * Докажите, что succ 1 = 2. * Докажите, что succ 4 = 5. #### Пусть cn≡ λf.λx. fn(x) — n-й нумерал Черча и x + y ≡ λx.λy.λp.λq. x p (y p q) * Докажите, что 1 + 2 = 3. * Докажите, что 2 + 3 = 5. #### Пусть cn≡ λf.λx. fn(x) — n-й нумерал Черча и x ⋅ y ≡ λx.λy.λz. x (y z) * Докажите, что 1 * 2 = 2. * Докажите, что 2 * 2 = 4. # Scala ## Практические задания TBD