На этом шаге мы закончим перечисление заданий для самостоятельного решения.
Мы заканчиваем публикацию заданий для самостоятельного решения.
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:

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 - натуральное число):

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):



11. Рассмотрим следующее индуктивное определение (n∈Z):

Докажите, что для всех неотрицательных целых чисел 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.