На этом шаге мы закончим перечисление заданий для самостоятельного решения.
Мы заканчиваем публикацию заданий для самостоятельного решения.
1*. Приведите индуктивное определение:
(1) первого вхождения слова α в слово β;
(2) последнего вхождения слова α в слово β;
(3) k-го вхождения однобуквенного слова α в слово β для любого натурального k;
(4) k-го (k∈N\{0}) вхождения слова α в слово β для случая, когда все вхождения не имеют общих вхождений букв алфавита;
(5) k-го вхождения слова α в слово β для любого натурального k.
2*. Приведите индуктивное определение операции подстановки:
(1) в слово α вместо слова γ слова β;
(1) в слово α вместо k-го вхождения слова γ слова β для любого натурального k.
3*. Приведите индуктивное определение количества вхождений:
(1) слова γ в слово α;
(1) слова γ в слово α для случая, когда все вхождения не имеют общих вхождений букв алфавита.
4*. Найдите ошибку, допущенную в следующем индуктивном определении k-го вхождения слова α в слово β для любого натурального k:
где функция First(α,β) определяет первое вхождение слова α в слово β; функция End(α,β) определяет конец слова α, началом которого является слово β; функция Beg(α,β) определяет, является ли слово α началом слова β.1. Определите семантику и докажите правильность индуктивного определения функции G: N\{0} → N\{0},
2. Докажите правильность индуктивного определения операции приписывания слова к слову °: A*×A*→ A*:
3. Докажите правильность индуктивного определения операции "обращение слова" Reverse: A*→ A*:
4. Рассмотрим следующее индуктивное определение (n - натуральное число), записанное на языке структурированных программ:
F(n) ⇔ IF n=1 THEN 1 ELSE OTHERWISE n*F(n-1).
5. Рассмотрим следующее индуктивное определение (n - натуральное число):
Определите семантику функции Q. Докажите правильность определения функции Q.6. Рассмотрим следующую программу на языке структурированных программ, применимую для неотрицательных целых n:
F(n) ⇔ IF n=0 THEN 0 ELSE OTHERWISE F(F(n-1)).
7. Определите семантику, перепишите на язык структурированных программ и докажите правильность следующей программы:
(DEFUN Reverse1 (LAMBDA (L) (COND ( (NULL L) NIL ) ( (AND (EQ (LENGTH L) 1) (ATOM (CAR L))) L ) ( T (APPEND (Reverse1 (CDR L)) (CONS (Reverse1 (CAR L)) NIL)) )) ))
8. Рассмотрим рекурсивную программу Subs(X1,X2,L), применимую к любым двум атомам X1, X2 и любому списку L:
Subs(X1,X2,L) ⇔ IF L=NIL THEN NIL ELSE IF CAR(L)=X2 THEN CONS(X1,Subs(X1,X2,CDR(L))) ELSE IF ATOM(CAR(L)) THEN CONS(CAR(L),Subs(X1,X2,CDR(L))) ELSE OTHERWISE CONS(Subs(X1,X2,CAR(L)), Subs(X1,X2,CDR(L)))
9. Рассмотрим индуктивное определение функции F(n∈Z):
Докажите, что для всех целых n 10. Пусть А(х1,х2) - функция Аккермана. Докажите, что для всех неотрицательных целых чисел х1 и х2.11. Рассмотрим следующее индуктивное определение (n∈Z):
Через n/5 обозначается частное от целочисленного деления n на 5.Докажите, что для всех неотрицательных целых чисел n вычисление значения функции заканчивается.
12. Рассмотрим следующее индуктивное определение (х1 и х2 - неотрицательные целые числа):
F(х1,х2) ⇔ IF х 41 0=0 THEN 0 ELSE IF х2=0 THEN F(х1-1,х2+1) ELSE F(F(х1-1,х2),F(х1,хх2-1)).
13. Рассмотрим рекурсивное определение (х1 и х2 - неотрицательные целые числа, удовлетворяющие условиям 0 ≤ х1 ≤ х2 и 0<х2):
F(х1,х2) ⇔ IF х1=0 THEN х2 ELSE IF х1≤х2-х1 THEN F(х1,х2-х1) ELSE F(х2-х1,х1).
F(х1,х2)=GCD(х1,х2),
При доказательстве используйте тот факт, что по определению для любых рассмотренных выше х1 и х2:
GCD(х1,х2)=GCD(х1,х2-х1)=GCD(х2-х1,х1).
14. Докажите правильность следующей программы, написанной на языке функционального программирования LISP:
(DEFUN F (LAMBDA (N) (COND ( (EQ N 1) 1 ) ( T (+ N (F (- N 1))) )) ))
Со следующего шага мы начнем знакомиться с языком программирования Haskell.