Alfabety i języki
1 Funkcje na zbiorach słów
Zadanie 1 Niech X = {a, b, c, d} będzie alfabetem. Określmy funkcję f : X∗→ X∗ następująco:
f () = oraz
f (xw) =
( f (w)xx dla w ∈ X∗ i x ∈ {a, b}, cf (w) dla w ∈ X∗ i x ∈ {c, d}.
(Zapis xxf (w) oznacza słowo powstałe przez dodanie liter xx z lewej strony słowa f (w).) Oblicz f (abcad), f (adbdcd) i f (aacc).
Zadanie 2 Rozważmy alfabet X = {a, b} i funkcję f : X∗ → X∗, określoną w ten sposób, że f () = oraz dla x ∈ X i w ∈ X∗
f (xw) =
( f (w)b, jeśli x = a, f (w)a, jeśli x = b.
Oblicz f (aabba) i f (baababab).
Zadanie 3 Niech X = {1, 2, 3, 4, 5} i funkcja f : X∗ → X∗ jest określona następująco:
f (w) =
( , jeśli w = ,
xf (v)x, jeśli w = xv, gdzie x ∈ X i v ∈ X∗. Oblicz f (1233), f (111) i f (3443).
Zadanie 4 Wyjaśnij, dlaczego funkcje z zadań 1, 2 i 3, są określone poprawnie.
Przypomnijmy, że długością słowa nad danym alfabetem nazywamy liczbę liter występują- cych w tym słowie. Formalna definicja jest taka:
dl(w) =
( 0, jeśli w = ,
dl(v) + 1, jeśli w = xv, gdzie x ∈ X i v ∈ X∗.
Długość każdego słowa jest liczbą naturalną. Każde słowo niepuste w można przedstawić w postaci xv, gdzie v jest słowem długości dl(w) − 1, a x jest literą.
Zdefiniujmy następujące funkcje:
head : X∗\ {} → X, która każdemu niepustemu słowu przyporządkowuje jego pierwszą literę:
head(xw) = x dla x ∈ X i w ∈ X∗.
tail : X∗\ {} → X∗, która każdemu niepustemu słowu przyporządkowuje słowo powstałe po obcięciu pierwszej litery:
tail(xw) = w dla x ∈ X i w ∈ X∗.
rev: X∗ → X∗, która każdemu słowu przyporządkowuje słowo z odwrotną kolejnością liter:
rev(w) =
( , jeśli w = ,
rev(v)x, jeśli w = xv, gdzie x ∈ X i v ∈ X∗.
Zadanie 5 Korzystając z powyższej definicji, oblicz rev(w) dla słów z zadań 1, 2 i 3.
Zadanie 6 Rozważmy funkcję f i alfabet X z zadania 1. Udowodnij, że dla każdego słowa w ∈ X∗ zachodzi następująca zależność: dl(f (w)) jest liczbą parzystą lub head(f (w)) = c.
Zadanie 7 Niech X i f będą, odpowiednio, alfabetem i funkcją z zadania 2. Wykaż, że dla do- wolnego niepustego słowa w nad alfabetem X zachodzi nierówność head(f (w)) 6= head(rev(w)).
Zadanie 8 Rozważmy funkcję f i alfabet X z zadania 3. Udowodnij, że dla każdego słowa w ∈ X∗ zachodzi równość rev(f (w)) = f (w).
Zadanie 9 Niech X będzie dowolnym alfabetem. Udowodnij, że dla dowolnych słów v, w ∈ X∗ zachodzi równość rev(vw) = rev(w)rev(v).
Zadanie 10 Zdefiniujmy funkcję con: X∗× X∗ → X∗ w ten sposób, że dla dowolnych v, w ∈ X∗
con(v, w) =
( w, jeśli v = ,
con(v0, w), jeśli v = xv0, gdzie x ∈ X i v0 ∈ X∗. Co to za funkcja? Udowodnij, że dla dowolnych u, v, w ∈ X∗ zachodzi równość
con(con(u, v), w) = con(u, con(v, w)).
Zadanie 11 Zdefiniujmy funkcję num: X × X∗→ N w ten sposób, że num(x, ) = 0 dla dowol- nego x ∈ X oraz
num(x, yw) =
( num(x, w), jeśli y 6= x, succ(num(x, w)), jeśli y = x, dla dowolnych x ∈ X, y ∈ X i w ∈ X∗.
Co to za funkcja? Udowodnij, że dla dowolnych x ∈ X i v, w ∈ X∗ zachodzi równość num(x, con(v, w)) = plus(num(x, v), num(x, w)).
Zadanie 12 (a) Wykaż, że przy oznaczeniach z zadania 2, dla dowolnego słowa w zachodzi równość
num(a, f (w)) = num(b, w).
(b) Wykaż, że przy oznaczeniach z zadania 1, dla dowolnego słowa w zachodzą równości:
num(a, f (w)) = 2 · num(a, w) oraz num(c, f (w)) = 2 · num(c, w) + num(d, w).
2 Zapisy liczb
Dla każdej liczby narturalnej n > 1, wprowadźmy oznaczenia:
Xn= {0, 1, . . . , n − 1}, Zn= {w ∈ X∗\ {}; head(w) 6= 0} ∪ {0}.
Tak więc Xn to alfabet złożony z cyfr zapisu n-kowego od 0 do n − 1, zaś Zn to język nad tym alfabetem, utworzony z zapisów n-kowych liczb naturalnych.
Zadanie 13 Jakiej funkcji z N do N odpowiada funkcja f : Zn→ Zn określona następująco:
(a) f (w) =
( 0 dla w = 0,
w0 dla w ∈ Zn\ {0}, (b)
( f (x) = 0 dla x ∈ Xn
f (wx) = w dla w ∈ Zn\ {0} i x ∈ X
Zadanie 14 Określ rekurencyjnie funkcję, która zapisowi dwójkowemu liczby naturalnej przypo- rządkowuje sumę cyfr tego zapisu.
Zadanie 15 Zdefiniuj funkcję S: Zn→ Zn, która zapisowi n-kowemu liczby naturalnej m przy- porządkowuje zapis n-kowy liczby m + 1.
Zadanie 16 Zdefiniuj funkcję, która zapisowi dziesiątkowemu liczby naturalnej m przyporząd- kowuje zapis dziesiątkowy liczby:
(a) 2m, (b) [m2].
Zadanie 17 Określ funkcję, która zapisowi dziesiątkowemu liczby naturalnej przyporządkowuje resztę z dzielenia:
(a) przez 3, (b) przez 7.
Zadanie 18 Określ funkcję, która:
(a) zapisowi dwójkowemu liczby naturalnej przyporządkowuje zapis czwórkowy tej liczby, (b) zapisowi czwórkowemu liczby naturalnej przyporządkowuje zapis dwójkowy tej liczby, (c) zapisowi dwójkowemu liczby naturalnej przyporządkowuje zapis trójkowy tej liczby, (d) zapisowi trójkowemu liczby naturalnej przyporządkowuje zapis dwójkowy tej liczby.
3 Języki rekurencyjne
Zadanie 19 Rozważmy alfabet X = {a, b, c}, język J = {aa, ab, ac, bb, bc, cc} i kontekst jedno- miejscowy k = a t c. Wyznacz język Fkn dla n = 1, 2, 3 oraz język rekurencyjny L(J, k). Ile jest słów stopnia n w tym języku?
Zadanie 20 Niech X będzie dowolnym alfabetem, niech c ∈ X. Załóżmy, że język J składa się z pewnych słów długości 1, czyli J ⊂ X. Rozważmy kontekst jednomiejscowy k = t1ct1. Wyznacz język Fkn dla n = 1, 2, 3 oraz język rekurencyjny L(J, k). Udowodnij, że dla w ∈ L(J, k) zachodzi równość rev(w) = w. Ile jest słów stopnia n?
Zadanie 21 Rozważmy alfabet X = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, −, (, )}, język J = Z10 (zapisy dziesiątkowe liczb naturalnych) i dwa konteksty: dwumiejscowy k1= (t1+ t2) i jednomiejscowy k2= (−t). Wykaż, że:
(a) w każdym słowie języka L(J, k1) liczba lewych nawiasów jest równa liczbie prawych nawiasów oraz liczbie znaków „+”.
(b) w każdym słowie języka L(J, k2) liczba lewych nawiasów jest równa liczbie prawych nawiasów oraz liczbie znaków „−”.
(c) w każdym słowie języka L(J, k1, k2) liczba lewych nawiasów jest równa liczbie prawych na- wiasów oraz łącznej liczbie znaków „+” i „−”.
Zadanie 22 Określ stopnie słów w języku rekurencyjnym L(J, k1, k2) z poprzedniego zadania:
(a) ((2 + (−(−(0 + 0)))) + (−(1 + 15))), (b) (−(−(12 + 20)) + (35 + (−(−18)))),
(c) ((((1 + 2) + 3) + 4) + ((((5 + 4) + (4 + 3)) + ((3 + 2) + (2 + 1))) + 0)).
Zadanie 23 Rozważmy dowolny alfabet X zawierający co najmniej cztery symbole, w tym sym- bole „”, „)” i „(”. Niech L = L(J, k) będzie językiem rekurencyjnym określonym przez język bazowy J = X \ {, ), (} i kontekst dwumiejscowy k = (t1 t2).
Udowodnij, że stopień słowa w języka L jest nie większy od num(, w), gdzie funkcja num: X × X∗→ N jest określona jak w zadaniu 11.
Rozwiązania, wskazówki, odpowiedzi
1 Rozwiązanie. Obliczymy f (abcad).
Dla x = a i w = bcad mamy
f (abcad) = f (xw) = f (w)aa = f (bcad)aa.
Dla x = b i w = cad mamy
f (bcad) = f (xw) = f (w)xx = f (cad)bb.
Dla x = c i w = ad mamy
f (cad) = f (xw) = cf (w) = cf (ad).
Dla x = a i w = d mamy
f (ad) = f (xw) = f (w)xx = f (d)aa.
Dla x = d i w = mamy
f (d) = f (xw) = cf (w) = cf () = c = c.
Ostatecznie
f (abcad) = f (bcad)aa = f (cad)bbaa = cf (ad)bbaa = cf (d)aabbaa = ccaabbaa.
Teraz obliczymy f (adbdcd). Z definicji funkcji f otrzymujemy kolejno:
f (adbdcd) = f (dbdcd)aa, f (dbdcd) = cf (bdcd), f (bdcd) = f (dcd)bb, f (dcd) = cf (cd), f (cd) = cf (d), f (d) = c.
Zatem f (adbdcd) = f (dbdcd)aa = cf (bdcd)aa = cf (dcd)bbaa = ccf (cd)bbaa = cccf (d)bbaa = ccccbbaa.
Obliczmy jeszcze f (aacc):
f (aacc) = f (acc)aa = f (cc)aaaa = cf (c)aaaa = ccaaaa.
6, 9, 10 Wskazówka. Indukcja względem długości słowa w.
15 Odpowiedź. Dla x ∈ Xn S(x) =
( x + 1, jeśli x ∈ {0, 1, . . . , n − 2}, 10, jeśli x = n − 1.
Dla v ∈ Zn i x ∈ Xn
S(vx) =
( vS(x), jeśli x ∈ {0, 1, . . . , n − 2}, S(v)0, jeśli x = n − 1.
16 Odpowiedź. Dla v ∈ X∗\ {} i x ∈ X
p(vx) =
( p(v)p(x), jeśli last(v) ∈ {0, 2, 4, 6, 8}, p(v)(p(x) + 5), jeśli last(v) ∈ {1, 3, 5, 7, 9}, gdzie last(v) oznacza ostatnią literę słowa v.
Piotr Jędrzejewicz, Ćwiczenia ze wstępu do matematyki dla informatyków, I rok informatyki, jesień 2002.
Alfabety i języki, wersja trzecia, 12 II 2003.