You are on page 1of 148

Bevezets a programozsba1

Fthi kos, Horvth Zoltn

2005. prilis 22.


1
Az ELTE IK Elektronikus Knyvtr ltal kzvettett digitlis tartalmat a felhasznl a szer-
zoi jogrl szl 1999. vi LXXVI. tv. 33. (4) bekezdsben meghatrozott oktatsi, illetve
tudomnyos kutatsi clra hasznlhatja fel. A felhasznl a digitlis tartalmat kpernyo n megje-
lentheti, letltheti, arrl elektronikus adathordozra vagy papralapon msolatot kszthet, adat-
rgzto rendszerben trolhatja. Az ELTE IK Elektronikus Knyvtr weblapjn tallhat digi-
tlis tartalmak zletszeru felhasznlsa tilos, valamint a szerzok rsbeli hozzjrulsa nlkl
kizrt a digitlis tartalom mdostsa s tdolgozsa, illetve az ilyen mdon keletkezett szrma-
zkos anyag tovbbi felhasznlsa.
2

ELTE Informatikai Kar, 2005. A mu digitlis megjelentse az Oktatsi Minisz-

trium tmogatsval, a Felsooktatsi Tanknyv- s Szakknyv-tmogatsi Plyzat


keretben trtnt.
I. rsz

Bevezets a programozshoz

3
1. fejezet

Alapfogalmak

Ebben a rszben bevezetjk azokat a jellseket s alapveto defincikat, amelyeket a


tovbbiakban gyakran fogunk hasznlni. Ezek legnagyobb rsze kzpiskolbl, vagy
bevezeto jellegu matematikai tanulmnyokbl ismert.

1.1. Halmazok
Eloszr bevezetjk a matematikban gyakran hasznlt halmazok jellseit.

N a termszetes szmok halmaza,


N0 a nemnegatv egszek halmaza,
Z az egsz szmok halmaza,
L a logikai rtkek halmaza,
az res halmaz.

Szoks a termszetes szmok halmazba a nullt is belerteni, de ebben a knyvben


erre kln jellst (N0 ) hasznlunk.
A halmazokat gyakran vagy az elemeik felsorolsval

L ::= {igaz, hamis},


vagy egy tulajdonsg megfogalmazsval

[a..b] ::= {x Z | x a s x b}
adjuk meg.
Termszetesen hasznlni fogjuk a matematikban megszokott halmazelmleti muve-
leteket
uni,
metszet,
\ klnbsg,
s relcikat is
eleme,
rszhalmaza,
valdi rsze.

5
6 FEJEZET 1. ALAPFOGALMAK

Egy H halmaz szmossgt |H| jelli, mivel ebben a knyvben legfeljebb meg-
szmllhat halmazokkal foglalkozunk, azt hogy egy H halmaz vges, nha gy is
rjuk, |H| < .
Egy H halmaz rszhalmazainak halmazt, azaz a hatvnyhalmazt (H)val jell-
jk.

1.2. Sorozatok
Ha A egy adott halmaz, akkor az =< 1 , 2 , >, i A egy A-beli vges, vagy
vgtelen sorozatot jell.
Az A-beli vges sorozatokat =< 1 , 2 , . . . , n >, i A alakban rhatjuk le.
A vges sorozat hosszt || jelli.
Az A-beli vges sorozatok halmazt A -gal, a vgtelen sorozatok halmazt A -nel
jelljk. Az elozo kt halmaz unijaknt eloll A-beli vges, vagy vgtelen sorozatok
halmazt A -gal jelljk.
Egy A sorozat rtelmezsi tartomnyt D -val jelljk, s a kvetkezo
halmazt rtjk rajta: 
[1..||], ha A
D ::=
N, ha A
Legyenek 1 , 2 , . . . , n1 A s n A . Ekkor azt a sorozatot, amit
az 1 , 2 , . . . , n1 , n sorozatok egyms utn rsval kapunk, a fenti sorozatok
konkatencijnak nevezzk, s kon(1 , 2 , . . . , n1 , n )-nel jelljk.
Egy A -beli sorozat redukltjnak nevezzk azt a sorozatot, amit gy kapunk,
hogy az eredeti sorozat minden azonos elemekbo l ll vges rszsorozatt a rszso-
rozat egyetlen elemvel helyettestjk. Egy A sorozat redukltjt red()-val
jelljk.
Bevezetjk mg a fggvnyt, ami egy vges sorozathoz hozzrendeli annak utols
elemt: : A A, A :
() ::= || .

1.3. Relcik
Legyenek A s B tetszoleges halmazok, ekkor az
A B ::= {(a, b) | a A s b B}
az A s B halmazok direktszorzata.
Az R A B halmazt binris relcinak nevezzk. A tovbbiakban, ha nem
okoz flrertst a binris jelzot elhagyjuk.
A relci rtelmezsi tartomnya:
DR ::= {a A | b B : (a, b) R},
a relci rtkkszlete:
RR ::= {b B | a A : (a, b) R},
a relci rtke egy a A helyen, vagy a R szerinti kpe:
R(a) ::= {b B | (a, b) R},
1.3. RELCIK 7

egy H A halmaz R szerinti kpe a halmazt alkot elemek kpeinek unija, azaz
[
R(H) ::= R(h).
hH

Az R A B relcit felfoghatjuk egy lekpezsnek, megfeleltetsnek is az A


s a B halmaz elemei kztt. Az rtelmezsi tartomny jelenti azokat az A-beli eleme-
ket, amikhez hozzrendelnk legalbb egy B-beli elemet. Hasonlan, az rtkkszlet
a legalbb egy elelemhez hozzrendelt elemek halmaza. Egy a A elemnek a kpe,
azoknak a B-beli elemeknek a halmaza, amiket a relci hozzrendel az a-hoz. A H
halmakpt az elemek kpeinek unijval definiltuk, ez mskppen gy fogalmaz-
hat, hogy a H kpe azokbl az elemekbo l ll, amik legalbb egy H-beli elemhez
hozz vannak rendelve, azaz

R(H) = {b B | a H : (a, b) R}.

Azt mondjuk, hogy egy relci determinisztikus,vagy parcilis fggvny, ha

a A : |R(a)| 1.

Fggvnynek neveznk egy relcit akkor, ha

a A : |R(a)| = 1.

Az A-bl B-be kpezo f fggvnyt ltalban f : A B-vel, a parcilis fggvnyt


f A B-vel jelljk. E jells hasznlata esetn f (a) nem egy egyelmu halmazt,
hanem annak elemt jelenti.
Legyen R A B. Ekkor az R(1) relci az R inverze, ha

R(1) ::= {(b, a) B A | (a, b) R}.

Legyen H B tetszoleges halmaz. Ekkor az inverz relci szerinti kpt, R (1) (H)-
t, a H halmaz R relci szerinti inverz kpnek nevezzk. A defincikbl ltszik,
hogy
R(1) (H) = {a A | R(a) H 6= }.

Fontos megklnbztetni az inverz kpet a H halmaz R relci szerinti o skpt o l,


aminek a defincija a kvetkezo:

R1 (H) ::= {a DR | R(a) H}.

Az o skp ltalban nem egyezik meg az inverz kppel, de minmindigsze annak.


A kt kp kapcsolatt mutatja az 1.1 bra. Megjegyezzk azonban, hogy fggvny,
illetve parcilis fggvny esetn a kt kp megegyezik.
Legyen P A B s Q A B. Ha P Q P -t Q leszuktsnek nevezzk.
Ha R A B s H A

R|H ::= R (H B)

R egy leszuktse, amit gy is neveznk, hogy R megszortsa H-ra.


8 FEJEZET 1. ALAPFOGALMAK

a1
R1 (H)

a2
R(1) (H)

A B

1.1. bra. Inverz kp s o skp

1.3.1. Muveletek

A relcik kztt rtelmeznk muveleteket is. Legyen P A B s Q B C.
Ekkor az R A C relcit a P s Q relcik kompozcijnak nevezzk, ha

R = Q P ::= {(a, c) A C | b B : (a, b) P s (b, c) Q}.

Az S A C relcit a P s Q relcik szigor kompozcijnak nevezzk, ha

S = Q P ::= {(a, c) A C | b B : (a, b) P s (b, c) Q s P (a) DQ }.

Mint az az 1.2 brn is lthat, a kompozci s a szigor kompozci ltalban nem


egyezik meg, (a2 , c3 ) Q P , de nem eleme Q P -nek. Knnyu beltni, a szigor
kompozci minmindigsze a kompozcinak. Azt sem nehz beltni, hogy ha a kt
relci kzl legalbb az egyik fggvny, vagy ha az els o parcilis fggvny, a ktfle
kompozci megegyezik.

P Q
b1 c1

a1
c2
b2
b3
a2
c3
b4

A B C

1.2. bra. Kompozci s szigor kompozci

Ha R A A azt mondjuk, hogy R homogn relci. A homogn relci


nmagval komponlhat. Ennek alapjn definiljuk R hatvnyait:

R0 ::= {(a, a) | a A},


1.3. RELCIK 9

s ha n N
Rn ::= R Rn1 .
Az {(a, a) | a A} relcit identits relcinak is nevezzk s id A -val jelljk.
Az R A A relci lezrtja az az R A A relci, amelyre:

(1) DR ::= {a A | 6 A : 1 R(a) s i N : i+1 R(i )} s

(2) a DR : R(a) ::= {b A | k N0 : b Rk (a) s b


/ DR }.

A lezrt teht olyan pontokban van rtelmezve, amelyekb o l kiindulva a relcit


nem lehet vgtelen sokszor egyms utn alkalmazni, s ezekhez a pontokhoz olyan
pontokat rendel, amelyeket gy kapunk, hogy a relci vges sokszori alkalmazsval
kikerlnk az eredeti relci rtelmezsi tartomnybl. Teht D R RR = mindig
teljesl s a / DR -ra a DR s R(a) = {a}. Felhvjuk a figyelmet arra, hogy ez a
definci nem egyezik meg azzal, amit tranzitv lezrtnak szoktak nevezni.
Az R A A relci korltos lezrtja az az R A A relci, amelyre:

(1) DR ::= {a A | ka N0 : Rka (a) = } s

(2) a DR : R(a) ::= R(a).

Vegyk szre, hogy egy relci lezrtja, s korltos lezrtja klnbzhet. A de-
fincikbl lthat, hogy ez a klnbzosg csak az rtelmezsi tartomnyok kztt
jelentkezhet. Ennek azonban szksges felttele, hogy egy alkalmas pontbl kiindulva
a relcit ne lehessen vgtelen sokszor alkalmazni, de a vges sokszori alkalmazsok
hosszra ne tudjunk korltot mondani. Termszetesen ez csak akkor lehetsges, ha
vgtelen sok vges alkalmazs-sorozatot tudunk a pontbl indtani. Nzznk erre egy
egyszeru pldt: legyen R Z Z, s

{a 1}, ha a > 0
R(a) =
N, ha a < 0

Ekkor Z = DR 6= DR = N0 .

1.3.2. Logikai relcik


Az R A L tpus relcikat ahol A tetszo leges halmaz , logikai relciknak
nevezzk. A logikai relcikra bevezetnk nhny jellst:
Legyen R A L. Ekkor az R igazsghalmaza:

dRe ::= R1 ({igaz}),

gyenge igazsghalmaza:
bRc ::= R(1) ({igaz}).
Ha R fggvny, akkor az igazsghalmaz s gyenge igazsghalmaz megegyezik.
Legyen H A, azt A L fggvnyt aminek az igazsghalmaza H a H halmaz
karakterisztikus fggvnynek nevezzk s P(H)-val jeljelljk A fenti defincikbl
kvetkezik, hogy tulajdonkppen mindegy, hogy egy halmaz rszhalmazairl, vagy a
halmazon rtelmezett logikai fggvnyekro l (lltsokrl) beszlnk, hiszen ezen fo-
galmak klcsnsen egyrtelmuen megfelelnek egymsnak.
10 FEJEZET 1. ALAPFOGALMAK

Gyakran fogjuk hasznlni az azonosan igaz s az azonosan hamis fggvnyeket:


IgazA : A L s dIgazA e = A, HamisA : A L s dHamisA e = . Ha nem
okoz flrertst az A indexet nem rjuk ki.
Legyen R A A s : A L. Az

R| = R|de {(a, a) A A | a de \ DR }.

relcit feltteles relcinak nevezzk, ami a relci leszuktse s kiterjesztse a fel-


ttel igazsghalmazra, azaz DR| = de.
A tovbbiakban egy feltteles relci lezrtjt, illetve korltos lezrtjt a relci
felttelre vonatkoz lezrtjnak, illetve felttelre vonatkoz korltos lezrtjnak fogjuk
nevezni.

1.4. Direktszorzat
Legyenek Ai , i I tetszoleges halmazok, s X = {x | x : I iI Ai } azaz X az
I-t az Ai -k unijba kpezo fggvnyek halmaza. Ekkor az


A= A ::= {x X | i I : x(i) Ai }
iI i

halmazt az Ai , i I halmazok direktszorzatnak nevezzk.


Az I halmaz gyakran az [1..n] intervallum, ekkor az
n
A = Ai
i=1

jellst hasznljuk. Ebben az esetben azt mondhatjuk, hogy a direktszorzat elemei


rendezett n-esek. Az ltalnos esetben is a direktszorzat elemeit gyakran mint rende-
zett n-eseket adjuk meg, felttelezve, hogy egyrtelmuen el tudjuk dnteni, hanyadik
komponens melyik i I-hez tartozik.
Ha J I s K = I \ J a

B= A
jJ j
direktszorzat altere s a

B0 = A
kK k
direktszorzat kiegszto altere A-nak.
A prB : A B fggvnyt projekcinak nevezzk, ha

a A : prB (a) = a|J .

Ha J = {j} a prB fggvnyt j-edik projekcinak, vagy j vltoznak is nevezzk.


rtelemezzk a projekcit prokra, sorozatokra s halmazokra is:
prB ((a1 , a2 )) ::= (prB (a1 ), prB (a2 ))
prB (ha1 , a2 , . . . i) ::= hprB (a1 ), prB (a2 ), . . . i
prB ({a1 , a2 , . . . }) ::= {prB (a1 )} {prB (a2 )} . . .
azaz a prok vetlete a komponensek vetletbo l ll pr, a sorozat vetlete egy, az
eredetivel azonos hosszsg sorozat, aminek elemei rendre az eredeti sorozat eleme-
inek vetletei. A halmaz vetlete halmaz, de lehet, hogy a vetlet halmaz elemeinek
szma kisebb mint az eredetei volt, egy vgtelen halmaz vetlete lehet vges is.
1.5. FGGVNYTEREK 11

1.5. Fggvnyterek
Ha f, g : A B fggvnyek s egy muvelet B-n, azaz : B B B, akkor
definilhatjuk az f g : A B fggvnyt is, gy, hogy
a A : f g(a) = f (a) g(a).
Parcilis fggvnyek esetn
Df g = {a A | a Df s a Dg s (f (a), g(a)) D }.
Az f, g fggvnyek s egy B B relci logikai fggvnyeket definilnak:
f g : A L s

igaz ha a Df s a Dg s (f (a), g(a)) ,
a A : f g(a) =
hamis egybknt.
Az gy kapott logikai fggvnyekre a fentebb definilt mdon alkalmazhatjuk a
szoksos logikai muveleteket: , , , , . Megjegyezzk, hogy a defincibl rg-
tn addnak a kvetkezo sszefggsek. Legyen f, g : A L, ekkor:
df ge = df e dge,
df ge = df e dge,
df e = A \ df e.
Az f = g jellst az f g helyett hasznljuk s
df = ge = df e dge df e dge.
Az implikci jellsre gyakran hasznljk jelet helyett, mi az el o bbit a "kvet-
kezik" relci jellsre hasznljuk, azaz
f g df e dge.
A s a jeleket eddig is hasznlatuk mint a "minden" s "ltezik"
V szavak rrvidtseit
A fenti logikai
W kifejezsek esetnVi I : jelentse WiI s i I :

jelentse iI . Ha I = , iI azonosan igaz, iI pedig azonosan
hamis.

1.6. Pldk
1.1. plda: rjuk fel az A B, A C, (A B) C, s A B C halmazok elemeit,
ha A = {0, 1}, B = {1, 2, 3}, C = {p, q}!
Megolds:
A B={(0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3)},
A C={(0, p), (0, q), (1, p), (1, q)},
(A B) C={((0, 1), p), ((0, 2), p), ((0, 3), p), ((1, 1), p), ((1, 2), p), ((1, 3), p),
((0, 1), q), ((0, 2), q), ((0, 3), q), ((1, 1), q), ((1, 2), q), ((1, 3), q)},
A B C={(0, 1, p), (0, 2, p), (0, 3, p), (1, 1, p), (1, 2, p), (1, 3, p),
(0, 1, q), (0, 2, q), (0, 3, q), (1, 1, q), (1, 2, q), (1, 3, q)i}.

1.2. plda: Legyen R {1, 2, 3, 4, 5} {1, 2, 3, 4, 5}.


R = {(1, 2), (1, 4), (2, 1), (3, 4), (3, 3), (3, 5), (4, 5)}.
12 FEJEZET 1. ALAPFOGALMAK

a) Mi a relci rtelmezsi tartomnya s rtkkszlete?


b) Determinisztikus-e, illetve fggvny-e a relci?
c) Mi R 0., 2., (1). hatvnya?
d) Mi a {4, 5} halmaz inverz kpe, illetve o skpe?
Megolds:
a) DR = {1, 2, 3, 4},
RR = {1, 2, 3, 4, 5}.
b) A relci nem determinisztikus, ugyanis pl. |R(1)| = 2! Mivel a relci nem
determinisztikus, fggvny sem lehet.
c) A relci 0. hatvnya az identikus lekpezs, azaz:

R0 = {(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)}.

Mivel R2 = R R, azt kell megvizsglnunk, hogy mely pontokbl hogyan lehet a


relcit egyms utn ktszer alkalmazni:

(1, 2) (2, 1)
(1, 4) (4, 5)
(2, 1) (1, 2)
(2, 1) (1, 4)
(3, 4) (4, 5)
(3, 3) (3, 4)
(3, 3) (3, 3)
(3, 3) (3, 5)

A fenti tblzat alapjn:

R2 = {(1, 1), (1, 5), (2, 2), (2, 4), (3, 5), (3, 4), (3, 3)}.

R(1) a relci inverznek defincija alapjn:

R = {(2, 1), (4, 1), (1, 2), (4, 3), (3, 3), (5, 3), (5, 4)}.

d) rjuk fel, hogy mit rendel a relci az rtelmezsi tartomny egyes pontjaihoz:

R(1) = {2, 4}
R(2) = {1}
R(3) = {3, 4, 5}
R(4) = {5}

Az inverz kp defincija alapjn:

R(1) ({4, 5}) = {1, 3, 4}.

Az o skp defincija alapjn:

R1 ({4, 5}) = {4}.


1.6. PLDK 13

1.3. plda: Megadhat-e valamilyen sszefggs egy H halmaz inverz kpnek kpe,
s a H halmaz kztt?
Megolds: Legyen R A B, H B. Ekkor

R(R(1) (H)) = R({a A | R(a) H 6= }) =


[
= R(a).
R(a)H6=

Vegyk szre, hogy ltalnos esetben nem tudunk mondani semmit a kt halmaz viszo-
nyrl, ugyanis
1. ha H 6 RR , akkor H 6 R(R(1) (H)) s
2. ha a R(1) (H) : R(a) 6 H, akkor R(R(1) (H)) 6 H.
Tekintsk e fenti esetet egy egyszeru szmpldn: Legyen A = B = {1, 2, 3}, R =
{(1, 1), (1, 2)}. Ekkor H = {2, 3} esetn R(R (1) (H)) = {1, 2}, azaz egyik irny
tartalmazs sem ll fenn.
1.4. plda: Legyen R AB, P, Q B. Hogyan lehetne jellemezni az R 1 (P Q)
s az R1 (P Q) halmazt az R1 (P ) s R1 (Q) halmaz segtsgvel?
Megolds:

R1 (P Q) = {a DR | R(a) (P Q)} =
{a DR | R(a) P } {a DR | R(a) Q}.

A msik irny tartalmazs azonban nem ll fenn, ugyanis lehet olyan a D R amelyre

R(a) 6 P, s R(a) 6 Q, de R(a) P Q.

Nzzk ezt egy szmpldn: Legyen A = B = {1, 2}, R = {(1, 1), (1, 2)}, P = {1},
Q = {2}. Ekkor R1 (P ) s R1 (Q) res, de R1 (P Q) = {1}.
Vizsgljuk most meg a metszetet!

R1 (P Q) = {a DR | R(a) (P Q)} =
= {a DR | R(a) P } {a DR | R(a) Q} =
= R1 (P ) R1 (Q).

Teht bebizonytottuk, hogy kt tetszo leges halmaz metszetnek o skpe egyenlo a kt


halmaz o skpnek metszetvel.
1.5. plda: Legyenek F A B, G B C. Igaz-e, hogy

(G F )(1) = F (1) G(1) ?

Megolds:

(G F )(1) = {(c, a) C A | b B : (a, b) F s (b, c) G} =


= {(c, a) C A | b B : (b, a) F (1) s (c, b) G(1) } =
= F (1) G(1) .

1.6. plda: Legyenek F A B, G B C. Igaz-e, hogy

Y B : (G F )1 (Y ) = F 1 (G1 (Y ))?
14 FEJEZET 1. ALAPFOGALMAK

Megolds:A szigor kompozci defincijbl azonnalal addik, hogy ha a A s


a DG F , akkor G F (a) = G(F (a)), ezt felhasznlva:

(G F )1 (Y ) = i{a A | a DF G s (G F )(a) Y }
= {a A | a DF s F (a) DG s G(F (a)) Y }
= {a A | a DF s F (a) {b B | b DG s G(b) Y }}
= F 1 (G1 (Y )).

1.7. plda: W = N1 N2 N3 . W , ahol Ni = N (i = 1, 2, 3). 1 = (1, 1, 1).


Az sorozat tovbbi elemeit gy kapjuk meg, hogy a pontok koordintit az els o
koordintval kezdve ciklikusan 1-gyel nveljk. red(pr N1 N3 ()) =?
Megolds: rjuk fel eloszr a sorozat elso nhny tagjt:

=< (1, 1, 1), (2, 1, 1), (2, 2, 1), (2, 2, 2), (3, 2, 2), (3, 3, 2) >

Az sorozat projekcija N1 N3 -ra:

prN1 N3 () =< (1, 1), (2, 1), (2, 1), (2, 2), (3, 2), (3, 2) >

A fenti sorozat redukltja:

red(prN1 N3 ()) =< (1, 1), (2, 1), (2, 2), (3, 2) >

A fentiekbol jl lthat, hogy a redukci pontosan azokat az elemeket hagyja ki a soro-


zatbl, amelyekben a nvels a msodik komponensben trtnt, gy az eredmnysoro-
zat elemeit is a koordintk ciklikus eggyel nvelsvel kapjuk meg, az (1, 1) pontbl
kiindulva.
1.8. plda: Legyen A = {1, 2, 3, 4, 5} s R AA. R = {(1, 2), (1, 4), (2, 1), (3, 4), (3, 3), (3, 5), (4, 5)}.
Mi lesz R lezrtja s korltos lezrtja?
Megolds:Mivel DR = {1, 2, 3, 4}, azt kell csak megvizsglni, hogy honnan jutunk el
biztosan a relci ismtelt alkalmazsval 5-be. R(1) = {2, 4} s R(2) = {1}, ezrt
1, 2
/ DR , a 3 sem, mert a 3-bl akrhnyszor eljuthatunk 3-ba, 4-b o l egy lpsben,
5-bol nulla lpsben jutunk 5-be. Teht R = {4, 5} s R = R.
1.9. plda:
A = {1, 2, 3, 4, 5}, R A A. R = {(1, 2), (1, 5), (2, 5), (3, 2), (3, 4), (5, 2)}.
de = {1, 2, 3, 4}. rjuk fel a relci felttelre vonatkoz lezrtjt!
Megolds:R| = {(1, 2), (1, 5), (2, 5), (3, 2), (3, 4), (4, 4)}. Az (5, 2) kimaradt a szu-
kts miatt, a (4, 4) pedig bekerlt a bo vts miatt. R| = {(1, 5), (2, 5), (5, 5)}.
1.10. plda: Van-e olyan nem res relci s felttel, hogy a relci lezrtja res
halmaz, s a felttelre vonatkoz lezrtja azonos a relcival?
Megolds:Legyen A tetszoleges halmaz. Nyilvn idA = . Ha = Hamis, idA | =
, aminek a lezrtja idA .
1.11. plda: R N0 N0 .

{a 2}, ha a > 1
R(a) =
{2k | k N}, ha a = 1

Mi az R relci lezrtja s korltos lezrtja?


1.7. FELADATOK 15

Megolds:DR = N. Miden a-hoz, ha a pros a relci a/2 lpsben hozzrendeli a


0-t s csak azt, ha pedig pratlan, az 1-et, aminek a kpe az sszes pros kett o hatvny.
A kettohatvnyokbl, mivel mind pros, az R ismtelt alkalmazsa 0-ba vezet. Teht
DR = N0 , s termszetesen a N0 : R(a) = 0.
Mivel nincs felso korltja a kettohatvnyoknak, ezrt DR nem tartalmazza a prat-
lan szmokat.
Megjegyezzk, hogy ha a feladatban {2k | k N} helyett {2k | k N0 } szere-
pelne, DR sem tartalmazn a pratlan szmokat.

1.7. Feladatok
1.1. Milyen sszefggs van egy H halmaz R relcira vonatkoz inverz kpe s
o skpe kztt? s ha R fggvny?
1.2. R = {((x, y), (x + y, y)) | x, y N}. Mi a H = {(a, b) | a, b N a + b < 5}
halmaz inverz kpe, ill. o skpe?
1.3. R = {((x, y), (x + y, y)) | x, y N} {((x, y), (x y, y)) | x, y N}. Mi a
H = {(a, b) | a, b N a + b < 5} halmaz inverz kpe, ill. o skpe?
1.4. R = {((x, y), (f (x, y), y)) | x, y N}, ahol f : N N N. Mi a H =
{(a, b) | a, b N a + b < 5} halmaz o skpe illetve inverz kpe?
1.5. R A B, Q B. Van-e valamilyen sszefggs az R 1 (B \ Q) halmaz s
az A \ (R1 (Q)) halmaz kztt?
1.6. Kszts olyan nem res relcit, amelyre igaz, hogy rtkkszlete minden valdi
rszhalmaznak o skpe res halmaz!
1.7. Legyen A = {1, 2, 3, 4, 5}, R A A, R = {(1, 2), (1, 4), (2, 1), (3, 4), (3, 3),
(3, 5), (4, 5)}, f AL s f = {(1, i), (2, i), (3, i), (4, h), (5, i)}. Mi f , illetve
(f R) igazsghalmaza?
(1)
1.8. R, Q A A. Igaz-e, hogy (R Q) = Q(1) R(1) ?
1.9. R A A. Igaz-e, hogy (R (1) )2 = (R2 )(1) ?
1.10. R A A. Igaz-e, hogy H A : R 1 (R1 (H)) = (R2 )1 (H)?
1.11. P, Q N N. Q = {(a, b) | 2|a s b|a s prim(b)}.
a) P = {(a, b) | b|a s b 6= 1 s b 6= a}
b) P = {(a, b) | b|a}
Add meg a Q(1) , Q P s Q P -t relcit!
1.12. Legyen Q, R, S A A, s vezessk be az albbi jellst: ha X A A
tetszoleges relci, akkor X komplementere:
b = {(a, b) A A | (a, b) 6 X}.
X

Igaz-e, hogy
Q R S Q(1) Sb R?
b
Igaz-e a fenti llts nem-szigor kompozci esetn?
16 FEJEZET 1. ALAPFOGALMAK

1.13. Legyen Q, R, S A A. Igaz-e, hogy

RS R Q S Q,
RS Q R Q S?

1.14. Legyen R s Q kt relci a termszetes szmok halmazn! R egy termszetes


szmhoz rendeli nmagt s a ktszerest, Q egy pros termszetes szmhoz a
felt.

a) rd fel a kt relcit, s add meg az rtelmezsi tartomnyukat!


b) rd fel az R relci k. hatvnyt (k 1) s ennek az rtelmezsi tartomnyt!
c) rd fel a Q R relcit s az rtelmezsi tartomnyt!
d) F = Q R! rd fel az F relcit s az rtelmezsi tartomnyt!

1.15. P N0 N0 . P = {(a, b) | b|a s b 6= 1 s b 6= a}. Mi lesz P lezrtja?

1.16. Mutassunk pldt olyan relcira, aminek lezrtja s korltos lezrtja klnbz o !

1.17. R N N. R = {(a, b) | b|a s b 6= 1 s b 6= a}. de = {x | x kett o hatvny


}. rjuk fel az R| relcit, lezrtjt s korltos lezrtjt!

1.18. Adjunk pldt olyan nem res relcira, amelynek lezrtja res halmaz s van
olyan felttel, hogy a relci felttelre vonatkoz lezrtjnak rtelmezsi tar-
tomnya megegyezik az eredeti relci rtelmezsi tartomnyval!

1.19. R AA. Tegyk fel, hogy az R rtelmezsi tartomnya egyenl o az R rtelme-


zsi tartomnynak R-re vonatkoz o skpvel. Mit mondhatunk R lezrtjrl?

1.20. R N0 N0 .

{a 3}, ha a > 2
R(a) =
{3 k | k N}, ha a = 1

Mi az R relci lezrtja s korltos lezrtja?

1.21. R NN. Az R relci minden sszetett szmhoz a legnagyobb valdi osztjt


rendeli. Legyen q

a) egy rgztett sszetett termszetes szm!


b) egy rgztett prmszm!

Legyen Pq (a) = (k N | a = q k )! Mi lesz az R relci Pq felttelre vonat-


koz lezrtjnak rtelmezsi tartomnya?

1.22. R N0 N0 .


{b | k N0 : b = 2 k + 1}, ha x 6= 0 s x pros

{x 7}, ha x 7 s x pratlan
R(x) =

{0}, ha x = 1

{7}, ha x = 0

Mi lesz R lezrtja s korltos lezrtja?


1.7. FELADATOK 17

1.23. R legyen a 21. feladatban adott relci. (k) = (k pratlan szm). Add meg az
R| relcit, lezrtjt s korltos lezrtjt!
1.24. Igazak-e az albbi lltsok?

a) Ha a DR DR , akkor R(a) = R(a).


b) DR DR .

* c) Ha az A halmaz vges s R A A, akkor R = R.


** d) Ha A megszmllhatan vgtelen, R A A, s
a A : (n(a) N0 : |R(a)| n(a)) R = R.
1.25. Legyen R N0 N0 , R rtelmezsi tartomnya N!

{b|b > 0 s b < x s 2|b}, ha x pratlan
R(x) =
{x 1}, ha x pros

(x) = (x pros termszetes szm). Mi az R relci felttelre vonatkoz


lezrtja s korltos lezrtja?
1.26. Legfeljebb illetve legalbb milyen hossz egy m s egy n hosszsg sorozat
redukltjnak konkatencija, illetve konkatencijnak redukltja?
1.27. Igaz-e, hogy egy sorozat redukltjnak projekcija ugyanolyan hossz, mint
az sorozat redukltja?
1.28. Igaz-e, hogy egy sorozat projekcijnak redukltja ugyanolyan hossz, mint
az sorozat redukltja?
1.29. Legyen A = N1 N2 N3 N4 , B = N4 N1 , ahol Ni = N (i = 1..4).

= <(1, 1, 1, 1), (1, 2, 1, 1), (1, 2, 3, 1), (1, 2, 3, 4),


(5, 2, 3, 4), (5, 7, 3, 4), (5, 7, 10, 4), >

a) prB () =?
b) red(prB ()) =?
18 FEJEZET 1. ALAPFOGALMAK
2. fejezet

A programozs alapfogalmai

Ebben a fejezetben a programozs legfontosabb alapfogalmai vezetjk be. Nagyon


fontos szempont, hogy figyelmnket nem a programok tulajdonsgainak vizsglatra,
hanem a programok elolltsra fordtjuk. Ezrt feltesszk a krdst, mirt is runk
programot? Az erre a krdsre adott vlasz meghatrozza gondolkodsunk irnyt. A
vlaszunk az, hogy azrt, mert van valami megoldand feladatunk, problmnk. Teht
a gondolkodsuk kiindul pontja az, hogy kell lenni valaminek, amit feladatnak hvunk,
s ez a feladat hatrozza meg az elrendo clt.
A gyakorlatban nagyon sokfle feladat van. Mi bennk a kzs? Ez a krds is
tbbflekppen kzeltheto meg. A mi megkzeltsk szerint a feladat lnyege az,
hogy meghatrozzuk, milyen llapotban vagyunk s milyen llapotba akarunk jutni.
Az hogy mik az llapotok, a konkrt problmtl fgg. Pldul, ha egy autt akarunk
egy hosszabb tra felkszteni az llapott jellemezheti az, hogy mennyi a tankban a
benzin, mennyi az ablakmos folyadk, mekkora a nyoms a kerekekben, mukdik-e
az irnyjelzo s gy tovbb. A lnyeg az, hogy van a rendszernek valahny jellemz o je,
ezen jellemzok lehetsges rtkei egy-egy halmazt alkotnak. Egy ilyen halmaz llhat a
mennyisget kifejezo szmokbl, lehet akr a { mukdik, nem mukdik} halmaz is.
Ha mindegyik jellemzo lehetsges rtkeinek halmazbl vlasztunk egy-egy rt-
ket megkapjuk az aut egy lehetsges llapott. Mrcsak az hinyzik, hogy szreve-
gyk, a lehetsges llapotok halmaza matematikailag egy direktszorzat.

2.1. Az llapottr fogalma


Az elsoknt bevezetendo absztrakt fogalom a fent emltett lehetsges llapotok hal-
maza.
2.1. Definci ( LLAPOTTR). Legyen I egy vges halmaz s legyenek A i , i I tet-

szoleges vges vagy megszmllhat, nem res halmazok. Ekkor az A = A
iI i
halmazt llapottrnek, az Ai halmazokat pedig tpusrtkhalmazoknak nevezzk.
Amikor egy modellt ksztnk, el kell dntennk, hogy a valsg mely rszt k-
vnjuk modellezni, s melyek azok a jellemzo k s milyen rtkeket vehetnek fel
amiket a modellnkben figyelembe akarunk venni.
Az llapottr fenti defincijban az egyes komponenseket tekintsk gy, mint
egyes jellemzok lehetsges rtkeinek halmazt. A tpusrtkhalmaz elnevezs arra
utal, hogy ezek a halmazok bizonyos kzs tulajdonsggal rendelkez o elemekbol ll-

19
20 FEJEZET 2. A PROGRAMOZS ALAPFOGALMAI

nak. A ksobbiekben majd kitrnk arra is, hogy ez a kzs tulajdonsg mit is jelent.
Mivel a jellemzok rtkhalmaza lehet azonos, az llapottr komponensei kztt egy
halmaz tbbszr is szerepelhet.
Kiktttk, hogy az llapottrnek csak vges sok komponense legyen. Lehetne
ltalnosabb defincit is adni, gy ,hogy nem ktjk ki az I halmaz vgessgt, ekkor
a fent definilt llapotteret az ltalnostott llapottr egy (vges)nzetnek nevezzk.
Az, hogy a komponensek legfeljebb megszmllhatk, azt is jelenti, hogy a kom-
ponensek kztt nem szerepelhet a pl. vals szmok halmaza. Termszetesen ett o l
mg egy tpusrtkhalmaz tartalmazhatja akr 2-t is. Az {x | n N : x = n}
lehet llapottr komponens.

2.2. A feladat
Az llapottr fogalmnak segtsgvel knnyen megfogalmazhatjuk, hogy mit rtnk
feladaton. Azt kell megfogalmaznunk, hogy egy adott llapotbl (azaz az llapottr
egy elembol, pontjbl) milyen llapotba (azaz az llapottr mely pontjba) akarunk
eljutni.
2.2. Definci (F ELADAT). Feladatnak nevezzk az F A A relcit.

A feladat fenti defincija termszetes mdon addik, abbl, hogy a feladatot egy
lekpezsnek tekintjk az llapottren, s az llapottr minden pontjra megmondjuk,
hogy hova kell belole eljutni, ha egyltaln el kell jutni belo le valahova.
Az, hogy egy feladatnak mi lesz az llapottere, termszetesen magtl a feladattl
fgg, m mg a feladat ismeretben sem egyrtelmu. Pldul egy pont skbeli koordi-
ntit megadhatjuk derkszgugu koordinta-rendszerben, de megadhatjuk polrkoor-
dintkkal is.
Mgis, az, hogy mit vlasztunk llapottrnek, nagyon fontos, hiszen meghatrozza,
hogy a tovbbiakban mit, s hogyan tudunk lerni. Ha tl kevs jellemz o t vizsglunk
azaz az llapottr tl kevs komponensbo l ll akkor lehetnek olyan fogalmak, amiket
nem tudunk benne lerni, ha tl sok a komponens, akkor flslegesen tl bonyolult lesz
a modell.
Tekintsk azt az egyszeru feladatot, hogy ssze kelladni kt termszetes szmot.
Az llapotteret elg kzenfekvo mdon hrom komponensunek vlaszthatjuk. A hrom
komponens a kt sszeadand s az sszeg. Teht A = N N N, s a feladat

F = {((a, b, c), (x, y, z)) A A | a + b = z},

vagy

G = {((a, b, c), (x, y, z)) A A | b = x s c = y s a + b = z}.

A kt feladat nem azonos br mindketto kt termszetes szm sszegrol szl. A k-


lnbsg kztk az, hogy az F feladat nem mond semmit arrl, hogy mi legyen az
sszeadandkkal, a G pedig kikti, hogy maradjanak vltozatlanok.
Felvetodik, hogy nem lenne elg a kt komponensu llapottr is? Legyen A =
N N s
H = {((a, b), (x, y)) A A | a + b = x}.
Ezt a feladatot azonban nem gy interpretlnnk, hogy "adjunk ssze kt termszetes
szmot", hanem gy, hogynveljnknk meg egy termszetes szmot egy termszetes
szmmal".
2.3. A PROGRAM 21

Megjegyezzk, gyakran fogalmaznak meg feladatot gynevezett "input-output" mo-


dellben is, azaz milyen bemeno adatokhoz milyen kimeno adatokat rendelnk. Ez a
sztvlaszts az F s a G feladat esetben nem okozna gondot, de a H-hoz hasonl fel-
adatok esetben mr problms lehetne, nem is beszlve a bevezet o ben emltett auts
feladatrl. Az llapotr modell igazi elo nyeit a ksobbiekben mg tapasztalni fogjuk.
Felhjuk a figyelmet arra, hogy a definci szerint a feladat relci, azaz ltalban
nem determinisztikus, pldul G s H. A nem determinisztikussg azonban mg "r-
demibb" is lehet. Legyen a feladat a kvetkezo : hatrozzuk meg egy termszetes szm
egy valdi osztjt( a szm megvltoztatsa nlkl)! Ebben az esetben A = N N s

F = {((a, b), (x, y)) A A | a = x s y|x s x 6= y s y 6= 1}.


Pldul (6, 5) pont F szerinti kpe {(6, 2), (6, 3)}. A 6-nak 2 is, meg 3 is valdi
osztja, azaz |F (6, 5)| = 2.
Nagyon fontos, hogy pontosan lssuk a klnbsget az el o zo feladat s a kvetkezo
kztt: hatrozzuk meg egy termszetes szm sszes valdosztjtt! Ebben az esetben
az llapottr is ms lesz, hiszen egy termszetes szm sszes valdosztjaja nem egy
0
szm, hanem egy halmaz. Teht A = N F, ahol F az N vges rszhalmazainak
halmaza.
0 0
G = {((a, b), (x, y)) A A | a = x s y = {n N | n|x s x 6= n s n 6= 1}}.

Most |G(6, {5})| = 1 s G(6, {5}) = {(6, {2, 3})}.


0
Megjegyezzk mg, hogy DF 6= A, pldul (5, 5)
/ DF , de DG = A , pldul
(5, {5}) DG s G(5, {5}) = {(5, {})}.

2.3. A program
Amikor a program fogalmt igyeksznk tisztzni, a szmtgpen fut programokra s
az ltaluk megvalstott algoritmusokra figyelnk. Ha egy szmtgpen egy program
"fut", az abban jelentkezik, hogy a szmtgp memrijnak tartalma folyamatosan
vltozik. Itt most a "memrit" ltalnosan rtelmezzk, belertnk a szuken vett me-
mritl, a regisztereken keresztl, a kpernyo ig mindent, ami informcit hordoz.
A program jellemzo tulajdonsga teht, hogy "mukdik", azaz egy ido ben dina-
mikus folyamat. A dinamikus rendszerek ltalban nehezebbekezelhet o kk, vizsgl-
hatk, mint a statikusak. Ezrt arra gondolunk, lehet-e helyettesteni egy dinamikus
folyamatot egy statikus modellel?
Tekintsk pldul az albbi a programozstl igazn messze es o problmt:
Adott egy kmiai ksrlet, amely tl gyorsan jtszdik le ahhoz, hogy az ember pon-
tosan regisztrlni tudja az egymsutni esemnyeket. Ez a programfutshoz hasonlan
egy idoben dinamikusan lejtszd folyamat. Hogyan kvethet o nyomon mgis a k-
srlet? Pldul gy, hogy a ksrletet filmre vesszk, s a tovbbiakban a kpkockk
ltal rgztett statikus llapotokat vizsgljuk. gy az ido ben vltoz folyamatot egy
statikus llapotsorozattal rjuk le.
A fenti plda szemlletesen mutatja, hogyan adhatunk statikus modellt egy dinami-
kus folyamat lersra.
A program defincijban a program idobeni futsnak jellemzsre az elo bbpl-
dval pldval analg mdon vezetnk be egy statikus modellt: a futst llapottrbeli
sorozatokkal rjuk le. Ahogy a program futsa sorn a memriatartalom vltozik, gy
22 FEJEZET 2. A PROGRAMOZS ALAPFOGALMAI

jutunk az llapottr jabb s jabb pontjaiba, gy ezeket a pontokat egy sorozatba fuzve
valjban "filmre vesszk" a programfutst.
2.3. Definci (P ROGRAM). Programnak nevezzk az S A A relcit, ha
1. DS = A,
2. RS : = red().
3. a A : S(a) : 1 = a,

A fenti defincival a "mukds" fogalmt akarjuk absztrakt mdon megfogal-


mazni, ez magyarzza a sorozatokra vonatkoz kiktseket. Az els o tulajdonsg azt
jelenti, hogy a program az llapottr minden pontjhoz hozzrendel legalbb egy so-
rozatot, azaz a program minden pontban "csinl" valamit. A "rosszul mukdst" is a
mukdssel, azaz valamilyen tulajdonsg sorozattal, sorozatokkal rjuk le.
A msodik tulajdonsg azt fejezi ki, hogy a program rtkkszlete olyan soroza-
tokbl ll, amikben nem szerepel egyms utn ugyanaz az elem. Egsz pontosan, ha ez
mgis elofordul, akkor ez az elem ismtlo dik vgtelen sokszor. A mukds abban nyl-
vnul meg, hogy megvltozik az llapot, vagy ha mgsem az az abnormlis mukds
jele. Emlkeztetnk arra, hogy az llapottr komponensei kztt minden el o fordul elo-
fodul, teht ha brmi trtniks ttnik, az ms llapotrbeli pontot jelent. A sorozatok
kztt lehetnek "normlis" sorozatok sorzatok is. Az, hogy az llapottr egy pontjhoz
a program vgtelen sorozatot rendel, azt jelenti, hogy a program futsa nem fejez o dik
be.
A harmadik tulajdonsg csak annyit jelent, hogy a sorozat a mukds teljes trt-
nett lerja, belertve a kiindul llapotot is, ezrt azt, hogy egy program egy pontbl
elindtva nem csinl semmit, egy ebbo l az egy pontbl ll, egy hosszsg sorozat
jellemzi.
A programot is relciknt definiltuk, vagyis egy-egy llapottrbeli ponthoz tbb
sorozat is hozz lehet rendelve, azaz a mukds nem determinisztikus. Ez els o pil-
lantsra taln meglepo, valjban termszetes. Termszetes akkor is ha szmtgpen,
szmtgp rendszeren fut programra gondolunk, hiszen egy program sok processzor-
bl, sok, akr egymstl nagy tvolsgban levo , komponensbol ll rendszeren fut. De
termszetes akkor is, ha figyelembe vesszk, hogy a program fogalom nem csak a g-
pen fut program, hanem az algoritmus absztrakcija is, amik kztt lehetnek "nyitva"
hagyott rszek is.

2.4. A programfggvny
Most visszatrnk a fejezet elejn szereplo auts pldhoz. A feladat az volt, hogy k-
sztsk fel az autt egy hosszabb tra. Attl fggo en, hogy az aut milyen llapotban
van, azaz a jellemzoi milyen rtkekkel rendelkeznek: mennyi benne amekkoran, me-
kora a nyoms a kermukdik, muko dik-e az irnyjeltevkenysgekkensgek sorozatt
hajtjuk vgre, felpumpljuk a kerekeket, kicserlnk egy izzt s gy tovbb, lpsr o l
lpsre vltozik az llapot, mukdik a program. Ha vgl olyan llapotba jut az aut,
hogy most mr nyugodtan el lehet vele indulni egy hosszabb tra, akkor a program
megoldotta a feladatot
Ahhoz, hogy egy program s egy feladat viszonyt megvizsgljuk, elegend o , ha
a programrl tudjuk, hogy az llapottr egy adott pontjbl kiindulva, az llapottr
mely pontjba jut, mert a megolds szempontjbl a kzbls o llapotok lnyegtele-
nek. Termszetesen vannak olyan a programok mino sgre vonatkoz tovbbi
kritriumok, amelyek szempontjbl egyltaln nem mindegy, hogy a program hogyan
2.5. MEGOLDS 23

oldja meg a feladatot (ilyen lehet pldul a hatkonysg, a program id o - s trignye),


de a tovbbiakban ezekkel egyelo re nem foglalkozunk.
Ezrt vezetjk be a programfggvny fogalmt, amely a program futsnak ered-
mnyt jellemzi.
2.4. Definci (P ROGRAMFGGVNY). A p(S) A A relci az S A A
program programfggvnye, ha
1. Dp(S) = {a A | S(a) A },
2. p(S)(a) = {b A | S(a) : () = b}.

Az elso kvetelmny azt fogalmazza meg, hogy csak azokban a pontokban van
rtelme azt vizsglni, hogy hova jut egy program, ahonnt kiindulva a program nem
"szll el". A msodik pont rtelemszeruen azt rja le, hogy ahova a program eljut, az a
sorozat utols eleme.
Ha kt program programfggvnye megegyezik, az azt jelenti, hogy a kt program
mukdsnek eredmnye ugyanaz. Ezrt mondjuk ebben az esetben azt, hogy a kt
program ekvivalens.
A programfggvny elnevezs megtveszto lehet, hiszen egy program program-
fggvnye nem felttlenl fggvny, so t az sem biztos, hogy determinisztikus relci
(parcilis fggvny). Jobban kifejezi a fogalom tartalmt a hatsrelci elnevezs.
Mindkettot hasznlni fogjuk.

2.5. Megolds
Fontos, hogy a programfggvny ugyanolyan tpus relci mint a feladat volt. gy
teht a programfggvny fogalmnak bevezetsvel lehet o sgnk nylik arra, hogy
kapcsolatot teremtsnk egy adott feladat s egy adott program kztt. Termszete-
sen ennek a kapcsolatnak azt kell lernia, hogy mikor mondjuk egy programrl azt,
hogy megold egy adott feladatot.
2.5. Definci (M EGOLDS). Azt mondjuk, hogy az S program megoldja az F fela-
datot, ha
1. DF Dp(S) ,
2. a DF : p(S)(a) F (a).

Dp(S) F (a)

a p(S)(a)
DF

A A

2.1. bra. Megolds


24 FEJEZET 2. A PROGRAMOZS ALAPFOGALMAI

Ezzel a defincival vgl is azt kvnjuk meg, hogy az llapottr olyan pontjaihoz,
ahol a feladat rtelmezve van, a program csak vges sorozatokat rendeljen (terminl-
jon) s a sorozatok vgpontjait a feladat hozzrendelje a kezd o ponthoz.
Nha gondot okoz ennek a defincinak a megrtse. Mirt a programfggvny
szerinti kp rsze a feladat szerinti kpnek? "gy nem kapunk meg minden megol-
dst!" Pedig elg csak az auts pldra gondolni. Pldul a fkfolyadk szintjnek a
minimum s a maximum szint jelzs kztt kell lenni. Ezt a karbantarts eredmnye-
kppen teljestjk, de egyltaln nem egytelmu, hogy mi lesz a belltott szint. Annak
meg nincs is rtelme, hogy "minden lehetsges szintet" belltsunk.
Sokszor felmerl a krds, hogy van-e sszefggs kt feladat kztt a megolds
szempontjbl? Ezzel kapcsolatos a kvetkezo definci.
2.6. Definci (S ZIGORTS). Azt mondjuk, hogy az F1 A A feladat szigorbb
mint az F2 A A feladat, ha
1. DF2 DF1 ,
2. a DF2 : F1 (a) F2 (a).

A szigorts defisszevetvesszevetve a megolds defincijval knnyen addik a


kvetkezo egyszeru, de fontos ttel:
2.1. llts: Ha F1 szigorbb mint F2 s S megoldsa F1 -nek, akkor S megoldsa
F2 -nek is.

2.6. Programozsi feladat


Ltezik-e tetszoleges feladathoz megold program? Legyen F = A A. Defini-
ljuk S-et a kvetkezokppen: a DF : S(a) = {red(ha, bi) | b F (a)} s
a / DF : S(a) = {hai}. Nylvnval, hogy p(S) = F , teht S megoldsa F -nek.
Vagyis tetszoleges feladathoz knnyen tudunk megold programot csinlni. Ebb o l ki-
indulva azt gondolhatnnk, hogy a programozs nagyon egyszeru feladat, ami persze
nem igaz. A programozs feladata azonban ennl sszetettebb. Egy programot adott
programokbl, rgzitett szablyok szerint kell sszeraknunk, azaz egy programnyelv
eszkzeit kell hasznlnunk.

2.7. Definci (P ROGRAMOZSI FELADAT). Legyen A = A . Programozsi
iI i
feladatnak nevezzk az (F, P, K) hrmast, ahol F A A egy feladat; P a megen-
gedett programok halmaza, S P : S A A ; K a megengedett programkonst-
rukcik halmaza, K K egy vagy tbb A-n rtelmezett programhoz rendel egy A-n
rtelmezett programot.
2.8. Definci (P ROGRAMOZSI FELADAT MEGOLDSA). Az (F, P, K) programo-
zsi feladatnak az S program megoldsa, ha S a megengedett programokbl a megen-
gedett konstrukcikkal elollthat s megoldsa F -nek.

A programozsi feladat kt rtelemben is ltalnosthat: egyrszt kib o vtheto a


program mukdsre vonatkoz felttelekkel, ezzel a knyv msodik felben foglal-
kozunk , msrszt nem kveteljk meg az azonos llapotteret, ehhez ltalnostjuk a
megolds fogalmt, illetve bevezetjk a tpusspecifikci, tpus, megfelels s a tpus-
konstrukcik fogalmt.
Az, hogy milyen programkonstrukcikat engednk meg, sokmindent o l fgg, mi a
kvetkezokben csak a legegyszerubbekkel fogunk foglalkozni, mivel ezek is elgsge-
sek egy programozsi feladat megoldshoz.
2.7. PLDK 25

Mr most felhvjuk a figyelmet arra a fontos szempontra, hogy valjban nagyon


gyakran nem azt az utat kvetjk, hogy meglevo programokbl rakjuk ssze a megold
programot, hanem a feladatot bontjuk fel rsz feladatokra, gy, hogy az ezeket megold
programokbl "automatikusan" megkapjuk az eredeti feladatot megold programot.

2.7. Pldk

2.1. plda: Legyen A1 = {1, 2}, A2 = {1, 2}, A3 = {1, 2, 3, 4, 5}, A = A1 A2


A3 . F = {((a, b, c), (d, e, f )) | f = a + b}. F (1, 1, 1) = ? Hny olyan pontja van az
llapottrnek, amelyekhez a feladat ugyanazt rendeli, mint az (1, 1, 1)-hez?
Megolds:
F (1, 1, 1) = {(1, 1, 2), (1, 2, 2), (2, 1, 2), (2, 2, 2)}.
Mivel a feladat hozzrendelse nem fgg az llapottr harmadik komponenst o l, a fel-
adat ugyanezeket a pontokat rendeli az sszes (1, 1, ) alak ponthoz. Ms pontokhoz
viszont nem rendelheti ugyanezeket a pontokat, mert akkor az sszeg nem lehetne 2!
Teht t olyan pontja van az llapottrnek amelyhez a feladat ugyanazt rendeli, mint
az (1, 1, 1)-hez.
2.2. plda: Legyen A = {1, 2, 3, 4, 5}, S A A .
S = { (1, h1251i), (1, h14352i), (1, h132 . . . i), (2, h21i),
(2, h24i), (3, h333333 . . . i), (4, h41514i), (4, h431251i),
(4, h41542i), (5, h524i), (5, h534i), (5, h5234i) }
F = {(2, 1) (2, 4) (4, 1) (4, 2) (4, 5)}.

a) Adjuk meg p(S)-t!

b) Megoldja-e S a feladatot?

Megolds:

a) Mivel a program az 1-hez s a 3-hoz vgtelen sorozatot is rendel, a program-


fggvny rtelmezsi tartomnya:

Dp(S) = {2, 4, 5}.

Ekkor a programfggvny:

p(S) = {(2, 1), (2, 4), (4, 4), (4, 1), (4, 2), (5, 4)}.

b) A megolds defincija kt pontjnak teljeslst kell beltnunk.

i. DF = {2, 4} {2, 4, 5} = Dp(S) .


ii. p(S)(2) = {1, 4} {1, 4} = F (2),
p(S)(4) = {4, 1, 2} 6 {1, 2, 5} = F (4),

teht az S program nem megoldsa az F feladatnak.

2.3. plda: Fejezzk ki a programok unijnak programfggvnyt a programok programfgg-


vnyeivel!
26 FEJEZET 2. A PROGRAMOZS ALAPFOGALMAI

Megolds: Legyenek S1 , S2 A A programok. Ekkor a programfggvny rtel-


mezsi tartomnynak defincijbl kiindulva:

Dp(S1 S2 ) = {a A | p(S1 S2 )(a) A } =


= {a A | p(S1 )(a) A p(S2 )(a) A } =
= Dp(S1 ) Dp(S2 ) .

Legyen a Dp(S1 ) Dp(S2 ) . Ekkor

p(S1 S2 )(a) = { () | (S1 S2 )(a)} =


= { () | S1 (a) S2 (a)} =
= p(S1 )(a) p(S2 )(a).

2.4. plda: Legyen F1 s F2 egy-egy feladat ugyanazon az llapottren! Igaz-e, hogy


ha minden program, ami megoldsa F1 -nek, az megoldsa F2 -nek is, s minden pro-
gram, ami megoldsa F2 -nek, az megoldsa F1 -nek is, akkor F1 s F2 megegyeznek?
Megolds: A leggyakoribb hiba, amit ennek a feladatnak a megoldsakor el szoktak
kvetni, az az, hogy sszekeverik az llts felttelrendszert magval a bizonytand
lltssal, s azt prbljk bebizonytani, hogy valamelyik feladatnak minden program
megoldsa. Termszetesen ltalban ez nem igaz, de nem is ez a feladat! Abbl kell te-
ht kiindulnunk, hogy pontosan ugyanazok a programok oldjk meg mindkt feladatot,
s meg kell vizsglnunk, hogy kvetkezik-e ebbo l az, hogy a kt feladat megegyezik.
Induljunk ki abbl, hogy minden program, ami megoldsa F 1 -nek, az megoldsa
F2 -nek, s vlasszunk egy olyan programot, amelynek programfggvnye megegyezik
az F1 relcival. Ekkor a vlasztott program trivilisan megoldja az F1 feladatot, teht
meg kell oldania F2 -t is, azaz:

i. D F2 D F1 ,
ii. a DF2 : F1 (a) F2 (a)

Most felhasznlva, hogy minden program, ami megoldsa F 2 -nek, az megoldsa F1 -


nek is, s egy olyan program vlasztsval, amelynek programfggvnye megegyezik
F2 -vel, az elozoekkel analg mdon addnak a fordtott irny lltsok:

iii. DF1 DF2 ,


iv. a DF1 : F2 (a) F1 (a).

Az i. s iii. lltsokbl kvetkezik, hogy a kt feladat rtelmezsi tartomnya mege-


gyezik, mg az ii. s iv. lltsok garantljk, hogy ezen kzs rtelmezsi tartomny
egyes pontjaihoz mindkt feladat ugyanazokat a pontokat rendeli, azaz F 1 = F2 .
2.5. plda: F1 F2 . Az S program megoldja F2 -t. Igaz-e, hogy S megoldja F1 -et is?
Megolds: Prbljuk meg bebizonytani az lltst. Ehhez a megolds defincija kt
pontjt kell beltnunk.
i. DF1 Dp(S) ,
ii. a DF1 : p(S)(a) F1 (a).
Az i. pont teljeslse knnyen lthat, ugyanis S megoldsa F 2 -nek, teht

DF1 DF2 Dp(S) .


2.8. FELADATOK 27

Az ii. pont bizonytsnl azonban gond van, hiszen az albbi kt llts ll rendelke-
zsnkre:

a DF1 : p(S)(a) F2 (a),


a DF1 : F1 (a) F2 (a).

s ezekbol a kvnt llts nem bizonythat. Elakadtunk a bizonytsban, lehet, hogy


nem igaz az llts? Ksztsnk ellenpldt felhasznlva azt, hogy hol akadtunk el a
bizonytsban!
Legyen A = {1, 2}, F1 = {(1, 1)}, F2 = {(1, 1), (1, 2)} s p(S) egyezzen meg az
F2 feladattal. Ekkor S trivilisan megoldja F2 -t, de nem megoldsa F1 -nek, ugyanis

1 DF1 p(S)(1) = F2 (1) = {1, 2} 6 {1} = F1 (1).

Teht az llts nem igaz.


2.6. plda: Legyenek S1 s S2 A A programok, F A A pedig Tegykadat.
Teggyk fel tovbb, hogy S1 S2 s S2 megoldja az F feladatot. Igaz-e, hogy S1
megoldja F -et?
Megolds:Ha S1 S2 , akkor mit tudunk a programfggvnyelo szrNzzk elosz
az rtelmezsi tartomnyokat! A definci szerint minden llapottrbeli ponthoz min-
den program hozzrendel legalbb egy sorozatot, gy S1 s S2 is. Mivel S1 S2
ezrt csak az fordulhat elo, hogy egy adott ponthoz S2 olyan sorozatokat is rendel,
amit S1 nem. Ha ezek a sorozatok mind vgesek, akkor az adott pont vagy benne
van mindkt program programfggvnynek az rtelmezsi tartomnyban, vagy egyi-
kben sem, ha van kzttk vgtelen is, az adott pont biztosan nem eleme p(S 2 ) r-
telmezsi tartomnynak, de eleme lehet Dp(S1 )-nek. Teht Dp(S2 ) Dp(S1 ) s
a Dp(S2 ) : p(S1 )(a) p(S2 )(a).
Mivel S2 megoldsa F -nek, ezrt DF Dp(S2 ) s a DF : p(S2 )(a) F (a).
A fentiek miatt DF Dp(S1 ) is s a DF : p(S1 )(a) F (a) is teljesl, vagyis
S1 is megoldsa F -nek.

2.8. Feladatok
2.1. Legyen A = {, , , , }, S A A .

S = { (, hi), (, hi), (, h . . . i),


(, hi), (, hi), (, h . . . i),
(, hi), (, hi), (, hi),
(, hi), (, hi), (, hi) }

F = {(, ) (, ) (, ) (, ) (, )}.
a) Adjuk meg p(S)-t!
b) Megoldja-e S a feladatot?
2.2. Legyen S program, F olyan feladat, hogy S megoldsa F -nek. Igaz-e, hogy
a) ha F nem determinisztikus, akkor S sem az?
b) ha F determinisztikus, akkor S is az?
c) ha F nem determinisztikus, akkor p(S) sem az?
28 FEJEZET 2. A PROGRAMOZS ALAPFOGALMAI

d) ha p(S) determinisztikus, akkor F is az?


e) ha F determinisztikus, akkor p(S) is az?
f) ha S nem determinisztikus, akkor p(S) sem az?
2.3. Igaz-e, hogy p(S) rtelmezsi tartomnya ppen A o skpe S-re nzve?
2.4. Mondhatjuk-e, hogy az S program megoldja az F feladatot, ha igaz a kvetkez o
llts:
q DF S(q) A p(S)(q) F (q).

2.5. Legyen A = N N, F1 , F2 A A.
F1 = {((u, v), (x, y)) | y|u},
F2 = {((u, v), (x, y)) | x = u y|u}.
Ugyanaz-e a kt feladat? (Van-e valamilyen sszefggs kzttk?)
2.6. F A A. S1 , S2 programok A-n. Az S1 s az S2 is megoldja az F feladatot.
Igaz-e, hogy az S = (S1 S2 ) program is megoldja az F feladatot?
2.7. Tekintsk a kvetkezo szvegesen megadott feladatot: Adott egy sakktbla, s
kt rajta lvo bstya helyzete. Helyezznk el a tbln egy harmadik bstyt gy,
hogy az mindkettonek az tsben lljon! Ksztsk el a modellt: rjuk fel az
llapotteret s az F relcit!
2.8. Tudjuk, hogy S megoldja F -et (az A llapottren). Igaz-e, hogy

(a A (S(a) 6 A p(S)(a) 6 F (a))) a


/ DF ?

2.9. Legyen F A A egy feladat s S A A egy program. Jelljk F P -vel


azt a relcit, amely F s p(S) metszeteknt ll elo . Igaz-e, hogy
a) ha DF P = DF , akkor S megoldja F -et?
b) ha S megoldja F -et, akkor DF P = DF ?
3. fejezet

Specifikci

A megolds defincija kzvetlenl elg nehzkesen hasznlhat a programok ksz-


tse sorn, hiszen az, hogy egy program megold-e egy feladatot az a megolds eddigi
defincija alapjn csak nehezen ellenorizheto. Ezrt bevezetnk nhny j fogalmat,
majd ezek segtsgvel megadjuk a megolds egy elgsges felttelt.

3.1.
A leggyengbb elofelttel
Eloszr a program mukdsnek eredmnyt adjuk meg egy a programfggvnynl
knyelmesebben hasznlhat jellemzo vel.

3.1. Definci (L EGGYENGBB EL OFELTTEL ). Legyen S AA program, R :
A L llts. Ekkor az S program R utfelttelhez tartoz leggyengbb el o felttele
az a lf (S, R) : A L, fggvny amelyre:

dlf (S, R)e = {a Dp(S) |p(s)(a) dRe}.


A leggyengbb elofelttel teht pontosan azokban a pontokban igaz, ahonnt kiin-
dulva az S program biztosan terminl, s az sszes lehetsges vgllapotra igaz R.
Termszetesen a leggyengbb elo felttel igazsghalmazn kvl is lehetnek olyan
pontok, amelybol a program egy futsa eljut az utfelttel igazsghalmazba, csak
azokbl a pontokbl nem garantlt, hogy oda jut.
Egy program mukdse gy is jellemezheto , hogy megadjuk a program tetszo le-
ges utfelttelhez tartoz leggyengbb elo felttelt. A feladat megoldsa sorn az a
clunk, hogy olyan programot talljunk, amelyik bizonyos feltteleknek eleget tev o
pontokban terminl. Ezrt azt mondhatjuk, hogy ha a szmunkra kedvez o vgllapo-
tokra megadjuk a program leggyengbb elo felttelt, akkor a programfggvny meg-
hatrozsa nlkl jellemezzk a program mukdst.
Emlkeztetnk arra, definiltuk a relci szerinti o skp fogalmt is, ennek felhasz-
nlsval azonnal ltszik, hogy

dlf (S, R)e = p(S)1 (dRe).

Felhasznlva az igazsghalmaz defincijt s a szigor kompozci szerinti o skp tu-


lajdonsgt

p(S)1 (dRe) = p(S)1 (R1 ({igaz})) = (R p(S))1 ({igaz}) = dR p(S)e.

29
30 FEJEZET 3. SPECIFIKCI

Mivel R fggvny, a kompozci s a szigor kompozci megegyezik, teht

dlf (S, R)e = dR p(S)e.

Abban az esetben, ha p(S) is fggvny lf (S, R) = R p(S).


A fenti sszefggsekre gyakran fogunk hivatkozni.
A most kvetkezo ttel a leggyengbb elofelttel nhny nevezetes tulajdonsgrl
szl.
3.1. TTEL : A lf TULAJDONSGAI
Legyen S A A program, Q, R : A L lltsok. Ekkor
(1) lf (S, HAM IS) = HAM IS,
(2) Ha Q R, akkor lf (S, Q) lf (S, R),
(3) lf (S, Q) lf (S, R) = lf (S, Q R),
(4) lf (S, Q) lf (S, R) lf (S, Q R).
Az elso tulajdonsgot a csoda kizrsa elvnek, a msodikat monotonitsi tulajdon-
sgnak nevezzk.
Bizonyts:
1. Indirekt: Tegyk fel, hogy a dlf (S, HAM IS)e. Ekkor a leggyengbb el o -
felttel defincija szerint: a Dp(S) s p(S)(a) dHAM ISe = . Ez
nyilvnval ellentmonds.
2. Indirekt: Tegyk fel, hogy a dlf (S, Q)e \ dlf (S, R)e. Ekkor a D p(S) s
p(S)(a) dQe p(S)(a) 6 dRe. Ez viszont ellentmond annak a felttelnek,
mely szerint dQe dRe
3. Az lltst kt rszben, a mindkt irny kvetkezs beltsval bizonytjuk.

A p(S) A

dRe
dlf (S, R)e
dQe
dlf (S, Q)e

3.1. bra. A leggyengbb elo felttel s a metszet kapcsolata

(a) lf (S, Q) lf (S, R) lf (S, Q R), ugyanis:


Legyen a dlf (S, Q)lf (S, R)e. Ekkor a dlf (S, Q)e s a dlf (S, R)e,
azaz a Dp(S) s p(S)(a) dQe, illetve p(S)(a) dRe. Ekkor azonban
p(S)(a) dQe dRe = dQ Re, azaz a dlf (S, Q R)e.
(b) lf (S, Q R) lf (S, Q) lf (S, R), ui.:
Legyen a dlf (S, Q R)e. Ekkor a leggyengbb elo felttel defincija
alapjn a Dp(S) s p(S)(a) dQ Re. Felhasznlva, hogy dQ
Re = dQe dRe, addik, hogy p(S)(a) dQe s p(S)(a) dRe, azaz
a dlf (S, Q)e s a dlf (S, R)e, teht a dlf (S, Q) lf (S, R)e.
3.2. A FELADAT SPECIFIKCIJA 31

A p(S) A

dRe
dlf (S, R)e
dQe
dlf (S, Q)e

3.2. bra. A leggyengbb elo felttel s az uni kapcsolata

4. Legyen a dlf (S, Q) lf (S, R)e. Ekkor a dlf (S, Q)e vagy a dlf (S, R)e.
Ha a dlf (S, Q)e, akkor a monotonitsi tulajdonsg alapjn a dlf (S, Q
R)e. Hasonlan ha a dlf (S, R)e, akkor a dlf (S, Q R)e.

A tulajdonsgosg visszafel nem igaz. p(S)(a) dQedRe nem kvetkezik sem


p(S)(a) dQe, sem p(S)(a) dRe. Termszetesen, ha p(S) determinisztikus, azaz
a A : p(S)(a) legfeljebb egy elemu halmaz, akkor az egyenl o sg fennll.

3.2. A feladat specifikcija


A kvetkezokben bevezetjk a feladat megadsnak egy msik mdjt, s kimondunk
egy a gyakorlat szempontjbl nagyon fontos ttelt.
ltalban a feladat nem fgg az llapottr sszes komponenst o l, azaz az llapot-
tr tbb pontjhoz is ugyanazt rendeli. Ezeket a pontokat fogjuk ssze egy pontt a
paramtertr segtsgvel.
3.2. Definci (PARAMTERTR). Legyen F AA feladat. A B halmazt a feladat
paramterternek nevezzk, ha van olyan F1 s F2 relci, hogy

F1 A B,
F2 B A,
F = F 2 F1 .
Fontos szrevenni, hogy paramterteret mindig lehet tallni. Pldul maga a fel-
adat llapottere minden esetben vlaszthat paramtertrnek gy, hogy a definciban
szereplo F1 relcinak az identikus lekpezst, F2 -nek pedig magt az F feladatot
vlasztjuk. m az, hogy egy konkrt esetben mit is vlasztunk paramtertrnek a fel-
adattl fgg. ltalban gy vlasztjuk meg a paramterteret, hogy a kvetkez o ttelt
knyelmesen tudjuk hasznlni.
3.2. TTEL : S PECIFIKCI TTELE
Legyen F AA feladat, B az F egy paramtertere, F1 AB, F2 BA,
F = F2 F1 . Legyen b B, s definiljuk a kvetkezo lltsokat:
(1)
dQb e = {a A | (a, b) F1 } = F1 (b)
dRb e = {a A | (b, a) F2 } = F2 (b).

Ekkor ha b B : Qb lf (S, Rb ), akkor az S program megoldja az F


feladatot.
32 FEJEZET 3. SPECIFIKCI

Bizonyts: A megolds defincija kt pontjnak teljeslst kell beltnunk:


1. DF Dp(S) , ugyanis
Legyen a DF tetszoleges. Ekkor az F1 s F2 relcik defincija miatt a
DF1 s
b B : a dQb e.
De ekkor a ttel felttele alapjn:

a dQb e dlf (S, Rb )e Dp(S) .

2. a DF : p(S)(a) F (a), ui.


Legyen a DF tetszolegesen rgztett, b B olyan, amelyre a dQb e. Ekkor
a felttel szerint:

p(S)(a) dRb e = F2 (b) F2 (F1 (a)) = F (a).

A specifikci ttele csak elgsges felttel a megoldsra, azaz nem megfordt-


hat: lehet adni olyan feladat-program prt, ahol a program megoldja a feladatot, de a
specifikci ttele nem teljesl. Ez termszetesen attl is fgg, hogy a feladatot hogyan
specifikljuk, azaz milyen paramterteret vlasztunk, s hogyan bontjuk a feladatot F1
s F2 relcik kompozcijra.
Azonnal ltszik, hogy [
dQb e = DF1 DF .
bB

Ha egy b B-re dQb e * DF , akkor dRb e = .

3.3. A vltoz fogalma


Az eddig elmondottakbl alapjn a specifikci ttele mg nem lenne hatkonyan hasz-
nlhat, hiszen a paramtertr minden pontjra elleno riznnk kellene a felttelek tel-
jeslst. Ezrt bevezetjk a vltoz fogalmt, aminek segtsgvel a felttelrendszer
teljeslse egyszerubben elleno rizhetov vlik.

3.3. Definci (VLTOZ). Az A = A llapottr vi : A Ai egydimenzis
iI i
projekcis fggvnyeit vltozknak nevezzk.
A vltozk hasznlatval egyszerusthetjk az llapottren rtelmezett lltsok
(elo- s utfelttelek, leggyengbb elo felttel) s relcik (programfggvny) lerst.
Mivel minden vltoz rtelmezsi tartomnya az llapottr s rtkkszlete egy t-
pusrtkhalmaz, egy vltozt jellemezhetnk egy tpussal, azaz beszlhetnk a vltoz
tpusrl.
Ha a paramtertr is direktszorzat alak mrpedig ez gyakran gy van, ugyanis
ltalban az llapottr egy altere akkor a paramtertr egydimenzis projekcis fgg-
vnyeit paramtervltozknak nevezzk.
Az llapottr illetve a paramtertr egyes komponenseihez a vltozkat, illetve pa-
ramtervltozkat az adott komponens al rjuk.
Most megvizsgljuk, hogyan lehet a specifikci ttele segtsgvel feladatokat
megfogalmazni.
3.3. A VLTOZ FOGALMA 33

Tekintsnk egy mr ismert feladatot: hatrozzuk meg kt egsz szm sszegt!


Eloszr felrjuk az llapotteret, gy mint eddig, csak kiegsztjk a vltoz nevek
megadsval.
A=Z ZZ
x y z
Az eddigi jellseink alkalmazsval a feladat

F = {((u1 , u2 , u3 ), (v1 , v2 , v3 )) A A | v3 = u1 + u2 }.

A specifikci ttele alkalmazshoz rjuk fl a paramterteret is:


B = Z Z
x0 y0
Majd mg visszatrnk arra, hogy mirt ppen gy vlasztottuk meg a paramter
teret.
Teht az llapottr hrom egsz komponensbo l ll, melyeknek vltozi rendre x, y
s z. A paramtertr kt egsz komponensbo l ll, az elso komponens vltozja x0 , a
msodik y 0 .
Legyen az F1 relci a kvetkezo:

F1 = {((u1 , u2 , u3 ), (b1 , b2 )) A B | u1 = b1 s u2 = b2 },

F2 pedig
F2 = {((b1 , b2 ), (v1 , v2 , v3 )) B A | v3 = b1 + b2 }.
A fentiekbol addik, hogy F2 F1 = F . A paramtertr egy tetszoleges b elemhez
tartoz elo- s utfelttelre:

dQb e = {(a1 , a2 , a3 ) A | a1 = b1 s a2 = b2 }
dRb e = {(a1 , a2 , a3 ) A | a3 = b1 + b2 }

amit az llapottr s a paramtertr vltozinak felhasznlsval is flrhatunk:

dQb e = {a A | x(a) = x0 (b) s y(a) = y 0 (b)}


dRb e = {a A | z(a) = x0 (b) + y 0 (b)}.

A fggvnytereknl trgyaltuk, hogy a fggvnytr elemein a relcik egy logi-


kai fggvnyekbol ll teret generlnak. x, y, z egy fggvnytr elemei, x0 (b), y 0 (b)
szintn annak tekinthetok, konstans fggvnyek. Ezrt x = x0 (b) s y = y 0 (b) az l-
lapottren rtelmezett logikai fggvnyek, ahogy x = x0 (b) y = y 0 (b) is az. Ebbol
kvetkezik, hogy

dQb e = dx = x0 (b) y = y 0 (b)e


dRb e = dz = x0 (b) + y 0 (b)e

s mivel minddegyik fggvny,

Qb = (x = x0 (b) y = y 0 (b))
Rb = (z = x0 (b) + y 0 (b))

A jells egyszerustheto, mivel nylvnval, hogy a paramter vltozk argumen-


tuma b, ezek el is hagyhatk, so t, ltalban az sem okoz flrertst, ha az elo - utfelt-
telek indexeit elhagyjuk. Ezek a felttelek a paramtertr pontjaihoz tartoznak s gy a
paramtervltozk rtkeitol fggnek. A feladat specifikcija teht:
34 FEJEZET 3. SPECIFIKCI

A =ZZ Z
x y z
B = Z Z
x0 y0
Q : (x = x0 y = y 0 )
R : (z = x0 + y 0 )
A tovbbiakban a feladatot gy definiljuk, hogy megadjuk az llapottert (A),
a paramtertert (B), valamint az elo - s utfelttelt (Q illetve R) a paramtertr
minden pontjra, azaz paramteresen. Ebben az esetben azt mondjuk, hogy a feladatot
megadtuk a specifikci ttelnek megfelelo formban, vagy ha nem okoz flrertst,
specifikltuk a feladatot.
Egy feladatot nagyon sokflekppen lehet specifiklni, a sok lehetosg kzl az
egyik az, amit elo-, utfelttellel trtno specifikcinak szoktak nevezni s nagyon
hasonlt arra, amit most trgyalunk. Felhvjuk a figyelmet, hogy a hasonlsg ellenre
a ketto nem azonos.
Paramtertrnek ltalban az llapottr egy altert szoktuk vlasztani. Azokat a
komponenseket vlogatjuk ki, amelyek rtkto l fgg, hogy a feladat mihez, mit ren-
del, amik paramterezik a feladatot. Lnyegben azt fogalmazzuk meg, hogy az lla-
pottr milyen tulajdonsg pontjaibl, milyen tulajdonsg pontokba akarunk jutni. A
paramterteret arra hasznljuk, hogy megadjuk milyen sszefggs van az elrend o s
a kiindul llapotok kztt.
Ha egy programnak meg tudjuk hatrozni a (paramteres) utfelttelhez tartoz
leggyengbb elofelttelt, akkor a specifikci ttele alapjn, knnyen eldnthetjk,
hogy megoldsa-e a specifiklt feladatnak, ms szval bebizonythatjuk a program he-
lyessgt. Megjegyezzk azonban, hogy legtbbszr a "fordtott" utat fogjuk kvetni,
nem a program helyessgt bizonytjuk, hanem bizonytottan helyes programot lltunk
elo.
A ksobbiekben bevezetnk majd olyan eszkzket, amelyek segtsgvel a fela-
dat specifikcijbl kiindulva olyan programokat kszthetnk, amelyek megoldjk a
feladatot.

3.4. Pldk
3.1. plda: Legyen A = {Keats, Bach, M ozart, Liszt, P oe, Byron}, S A A
program.

S = { Keats hKeats, Bachi, Bach hBach, M ozarti,


Bach hBach, Liszt, Byroni, M ozart hM ozart, Keatsi,
Liszt hLiszt, Byroni, P oe hP oe, M ozarti,
Byron hByron, Bach, Liszti}

Legyen tovbb az R : A L llts:


x A : R(x) = (x zeneszerzo).
Mi lesz a fenti program R-hez tartoz leggyengbb elo felttele?
Megolds: rjuk fel eloszr a program programfggvnyt:

p(S) = { (Keats, Bach), (Bach, M ozart), (Bach, Byron),


(M ozart, Keats), (Liszt, Byron), (P oe, M ozart),
(Byron, Liszt) }
3.4. PLDK 35

Ezek utn, a leggyengbb elofelttel defincijt felhasznlva:


dlf (S, R)e = {Keats, P oe, Byron}, ugyanis

p(S)(Keats) = {Bach} dRe


p(S)(P oe) = {M ozart} dRe
p(S)(Byron) = {Liszt} dRe
p(S)(Bach) = {M ozart, Byron} 6 dRe
p(S)(M ozart) = {Keats} 6 dRe
p(S)(Liszt) = {Byron} 6 dRe

3.2. plda: Legyen H1 , H2 : A L. Igaz-e, hogy ha minden S A A programra


lf (S, H1 ) = lf (S, H2 ), akkor dH1 e = dH2 e?
Megolds: Felhasznlva, hogy a leggyengbb elo felttelek minden programra mege-
gyeznek, egy alkalmas program vlasztsval a vlasz egyszeruen megadhat: rendelje
az S program az llapottr minden elemhez az nmagbl ll egy hosszsg soro-
zatot. Ekkor knnyen lthat, hogy tetszo leges R utfelttel esetn:

lf (S, R) = R.

Ekkor viszont
H1 = lf (S, H1 ) = lf (S, H2 ) = H2 ,
teht a kt felttel megegyezik.
3.3. plda: Specifikljuk a kvetkezo feladatot: A = L L, F A A,

F = {((l, k), (l0 , k 0 )) | k 0 = k l0 = (l k)}

Megolds:
A=L L
x y
B = L L
x0 y0
Q : (x = x0 y = y 0 )
R : (x = (x0 y 0 ) y = y 0 )

3.4. plda: Legyen F A A, S A A program, B egy tetszoleges halmaz.


Legyenek tovbb F1 A B s F2 B A olyan relcik, hogy F = F2 F1 ,
valamint b B:
b b e = F 1 (b)
dQ 1
dRb e = F2 (b).

Igaz-e, hogy ha b B : Q b b lf (S, Rb ), akkor S megoldja F -et?


Megolds: Prbljuk meg a megolds defincija kt pontjt beltni. Legyen a DF .
Be kellene ltnunk, hogy a Dp(S) . Nzzk meg a specifikci ttelnek bizonytst:
ott felhasznltuk, hogy ekkor van olyan b B, hogy a dQ b e. Igaz ez a Q b b -re is?
b
Sajnos mivel Qb -t o skppel definiltuk, ez nem felttlenl van gy. Prbljunk a fenti
gondolatmenet alapjn ellenpldt adni:
36 FEJEZET 3. SPECIFIKCI

Legyen A = {1}, B = {1, 2}, F = {(1, 1)}, F1 = {(1, 1), (1, 2)}, F2 = {(2, 1)}.
Ekkor Q b 1 = hamis s Q b 2 = hamis, teht az llts felttelei teljeslnek fggetlenl a
programtl (ui. hamisbl minden kvetkezik"). Vlasszuk most az albbi programot:
S = {(1, < 1, 1, ... >)}. Ez a program nem megoldsa a feladatnak, de teljeslnek r
is az llts felttelei. Teht az llts nem igaz.

3.5. Feladatok
3.1. Legyen A = {1, 2, 3, 4, 5}, S A A .
S = { (1, h1251i), (1, h14352i), (1, h132 . . . i), (2, h21i),
(2, h24i), (3, h333333 . . . i), (4, h41514i), (4, h431251i),
(4, h41542i), (5, h524i), (5, h534i), (5, h5234i) }
s dRe = {1, 2, 5}. rd fel az dlf (S, R)e halmazt!
3.2. Mivel egyenlo lf (S, IGAZ)?
3.3. Legyen A tetszoleges llapottr, Qi : A L (i N). Igaz-e, ha

i N : Qi Qi+1 ,

akkor
(n N : lf (S, Qn )) = lf (S, (n N : Qn ))?

3.4. Igaz-e, hogy ha lf (S1 , R) = lf (S2 , R), akkor lf (S1 S2 , R) = lf (S1 , R)


lf (S2 , R)?
3.5. Igaz-e, ha x, y A : x dlf (S1 , P({y}))e x dlf (S2 , P({y}))e, akkor
Dp(S1 ) = Dp(S2 ) ?
3.6. S1 , S2 A A programok. Igaz-e, ha H : A L esetn lf (S1 , H) =
lf (S2 , H), akkor S1 ekvivalens S2 -vel?
3.7. A = N. S N N .

S ={(a, < a >) | a 1 mod (4)}


{(b, < b >), (b, < b, b/2 >) | b 2 mod (4)}
{(c, < c, 2 c >) | c 3 mod (4)}
{(d, < d, d/2 >) | d 0 mod (4)}

H(x) = (xpros szm). dlf (S, H)e =?


3.8. Adott az A = V V L llapottr (V = {1, 2, 3}) s a B = V V paramtertr,
tovbb az F1 s F2 feladatok.

F1 = {((a1 , a2 , l), (b1 , b2 , k)) | k = (a1 > a2 )},

F2 specifikcija pedig:

A = V V L
a1 a2 l
B = V V
a01 a02
3.5. FELADATOK 37

Q : (a1 = a01 a2 = a02 )


R : (Q l = (a01 > a02 ))
Azonosak-e az F1 s F2 feladatok?

3.9. Tekintsk az albbi kt feladatot: F1 specifikcija:

A=Z Z
x y
B = Z
x0
Q : (x = x0 )
R : (Q x = |y y|)

F2 = {((a, b), (c, d)) | c = a |d| d = c}.

Megadhat-e valamilyen sszefggs F1 s F2 kztt?

3.10. rd le szvegesen az albbi feladatot: legyen f : Z Z,

A = Z Z N0
m n l
B = Z Z
m0 n0
Q : (m = m0 n = n0 m n)
P
n
R : (Q l = g(i))
i=1

ahol g : Z {0, 1},



1, ha x Z : (f (i) = x j [m..n] : f (j) m)
g(i) =
0, klnben

3.11. Igaz-e a specifikci ttelnek megfordtsa? (Ha S megoldja F -et, akkor b


B : Qb lf (S, Rb ))

3.12. Tekintsk az albbi feladatot:

A=Z Z
k p
B = Z
k0
Q : (k = k 0 0 < k)
R : (Q prim(p) i > 1 : prim(i) |k i| |k p|)

ahol prim(x) = (xprmszm).


Mit rendel a fent specifiklt feladat az a = (10, 1) s a b = (9, 5) pontokhoz?
Fogalmazd meg szavakban a feladatot!
38 FEJEZET 3. SPECIFIKCI

3.13. A = N N N B= N N
x y z x0 y0
F1 , F2 A A
F1 specifikcija:
Q = (x = x0 y = y 0 )
R = (x = x0 y = y 0 x0 |z y 0 |z j N : (x0 |j y 0 |j) z|j)
F2 = {((a, b, c), (d, e, f )) | a = d s b = e s f |a b s a|f s b|f }
Megadhat-e valamilyen sszefggs F1 s F2 kztt?
3.14. Adott egy f : Z Z fggvny.
A= Z Z Z B= Z Z
m n i m0 n0
F1 , F2 A A
F1 specifikcija:

Q =(m = m0 n = n0 )
R =(m = m0 n = n0 i [m, n] j [m, i) : f (j) < f (i)
j [i, n] : f (j) f (i))

F2 specifikcija:
Q = (m = m0 n = n0 )
R = (i [m0 , n0 ] j [m0 , n0 ] : f (j) f (i)).
Azonos-e a kt feladat?
3.15. Specifikljuk a kvetkezo feladatot: A = N s v : N {0, 1}.
Pn
F A A, F = {(s, s0 ) | s0 = v(k)}
k=1
4. fejezet

Kiterjesztsek

Az elozo fejezetekben bevezetk a program s a feladatat fogalmt, s definiltuk az


azonos llapottren levo feladatprogram prok kztt a megolds fogalmt. A gyakor-
latban ltalban azonban a feladat s a program klnbzo llapottren van: pldaknt
megemlthetjk azt az esetet, amikor egy feladat megoldsra a programban tovbbi
vltozkat kell bevezetni, azaz a feladat llapottert jabb komponensekkel kell b o v-
teni.
A tovbbiakban megvizsgljuk, hogy mit tudunk mondani a klnbz o llapottren
adott programok s feladatok viszonyrl a megolds szempontjbl s ennek alapjn
ltalnostjuk (kiterjesztjk) a megolds fogalmt erre az esetre is.

4.1. A feladat kiterjesztse


Ha egy feladat llapottert kibovtjk jabb komponensekkel, mit jelentsen ez a feladat
vonatkozsban? Elg kzenfekvo , hogy ebben az esetben a feladat ne tartalmazzon
semmifle kiktst az j komponensekre.
4.1. Definci (F ELADAT KITERJESZTSE). Legyen a B llapottr altere az A lla-
pottrnek. Az F 0 A A relcit az F B B feladat kiterjesztsnek nevezzk,
ha
F 0 = {(x, y) A A | (prB (x), prB (y)) F }.
A defincit gy is fogalmazhatjuk, hogy a feladat kiterjesztse az sszes olyan A
A-beli pontot tartalmazza, aminek B-re vett projekcija benne van F -ben. semmilyen
megszortst.

4.2. A program kiterjesztse


A program kiterjesztsnek defincijban az j komponensekre azt a kiktst tesszk,
hogy azok nem vltoznak meg a kiterjesztett programban. Ezzel azt a gyakorlati k-
vetelmnyt rjuk le, hogy azok a vltozk, amelyeket a program nem hasznl, nem
vltoznak meg a program futsa sorn.

39
40 FEJEZET 4. KITERJESZTSEK

B0 F0 A

F B

4.1. bra. Feladat kiterjesztse

4.2. Definci (P ROGRAM KITERJESZTSE). Legyen a B llapottr altere az A l-


lapottrnek, s jellje B 0 a B kiegszto altert A-ra. Legyen tovbb S program a B
llapottren. Ekkor az S 0 A-beli relcit az S program kiterjesztsnek nevezzk, ha
a A :

S 0 (a) = { A | prB () S(prB (a)) i D : prB 0 (i ) = prB 0 (a)}


A fenti definci alapjn a kiterjesztett program rtkkszletben csak olyan soro-
zatok vannak, amelyek prhuzamosak valamely sorozattal az eredeti program rtk-
kszletbol.

B0 A

4.2. bra. Program kiterjesztse

Vajon a kiterjeszts megtartja a program-tulajdonsgot? Erre a krdsre vlaszol


az albbi llts.
4.2. llts: Legyen a B llapottr altere az A llapottrnek, s jellje B 0 a B kie-
4.3. KITERJESZTSI TTELEK 41

gszto altert A-ra. Legyen tovbb S program a B llapottren, s S 0 az S


kiterjesztse A-ra. Ekkor S 0 program.
A ttel bizonytsa rendkvl egyszeru, a feladatok kztt szerepel.
A program kiterjesztse lehetosget ad az ekvivales programok fogalmnak kiter-
jesztsre is.
4.3. Definci (P ROGRAMOK EKVIVALENCIJA). Legyenek S1 A1 A 1 , S2
A2 A 2 programok, B altere mind A1 -nek, mind A2 -nek. Azt mondjuk, hogy S1
ekvivalens S2 -vel B-n,
prB (p(S1 )) = prB (p(S2 )).
A defincinak egyszeru kvetkezmnye az is, hogy a kt ekvivalens program a
kzs altren pontosan ugyanazokat a feladatokat oldja meg.
Valjban attl, hogy kt program ekvivalens azaz megegyezik a programfgg-
vnyk egyb tulajdonsgaik nagyon eltro k lehetnek. Ilyen nem elhanyalgolhat
klnbsg lehet pldul a hatkonysgukban. Egyltaln nem mindegy, hogy egy
program mennyi ideig fut s mekkora memrira van szksge. A program ezen jel-
lemzoinek vizsglatval azonban itt nem foglalkozunk.
A defincikbl kzvetlenl addik a kvetkezo llts:
4.3. llts: Egy program kiterjesztse s az eredeti program az eredeti llapottren
ekvivalens.

4.3. Kiterjesztsi ttelek


Az albbiakban kvetkezo ttelcsoport a megolds s a kiterjesztsek kztti kapcso-
latot vizsglja.
Ha van egy A llapottr, aminek B altere, a B-n definilt feladatok s programok
megfeleloi A-n, a feladatok s programok kiterjesztsei A-ra. Az A-n definilt feladat
megfelelojnek a B-n tekinthetjuk a feladat vetlett B-re. A programok esetben ez
kzvetlenl nem alkalmazhat, mivel a program vetlete nem biztos, hogy program.
Nem biztos hogy a sorozatok redukltak. Termszetesen, ha S A A program,
akkor az

S = {(b, ) B B | (a, ) S s b = prB (a) s = red(prB ())}

mr program s a B llapottren S sS ekvivalens. Teht egy S AA programhoz


mindg tallhat olyan S B B program, ami vele ekvivalens B-n.

F0 F S 0 S
A
vetts vetts
kiterjeszts kiterjeszts

B
F S

4.3. bra. Kapcsolat A s B kztt.


42 FEJEZET 4. KITERJESZTSEK

Ilyen mdon, ahogy 4.3 bra is mutatja, a kiterjeszts s a vetts segtsvel kap-
csolatot ltestnk az A s B llapottereken definilt programok kztt.
Termszetesen ltalban sok olyan feladat van A-n, aminek a vetlete F , ilyen
pldul az F kiterjesztse, de nem csak az. Teht az 4.3 brn flfel mutat nyilak
injektv megfeleltetsek, a lefel mutatk pedig szrjektvek.
Megjegyezzk mg, hogy F , vagyis egy olyan feladat, aminek a vetlete F , mindg
rsze F kiterjesztsnek. Ugyanez a programok(programfggvnyek) esetben nem
igaz.
Megvizsgljuk, hogy milyen esetekben kvetkeztethetnk az A llapottren fenn-
ll megoldsbl, ugyanerre a B llapottren s fordtva. Ahhoz, hogy a feltteleket
megfogalmazhassuk szksgnk lesz nhny defincira.

4.4. Definci (B OVTETT IDENTITS ). Legyen B altere A-nak, B 0 a B kiegszt o
altere A-ra, G A A feladat. A G bo vtett identits B 0 felett, ha (a, a0 ) G :
a00 A, hogy (a, a00 ) G prB 0 (a) = prB 0 (a00 ) prB (a0 ) = prB (a00 ).

B0 A
0
G a

a a00

4.4. bra. Bovtett identits

Ha egy feladat bovtett identits, az azt jelenti, hogy a feladat "megengedi", hogy a
kiegszto altrbeli komponensek vltozatlanok maradjanak. Knnyu ltni a defincik
alapjn, hogy egy feladat kiterjesztse is s egy program kiterjesztsnek a program-
fggvnye is bovtett identits.
4.5. Definci (V ETTSTARTS). Legyen B altere A-nak, G A A fela-
dat. A G vettstart B felett, ha a1 , a2 DG : (prB (a1 ) = prB (a2 ))
(prB (G(a1 )) = prB (G(a2 ))).
A vettstarts nem jelenti azt, hogy a relci nem nem fgg a kiegszt o altr kom-
ponenseitol, hiszen mint az 4.5 bra mutatja, kt azonos vetletu pont kpe lehet kuln-
bzo, csak a vetletk azonos. Ebben az esetben is igaz, hogy egy feladat kiterjesztse
vettstart( ebben az esetben a kpek is megegyeznek) s a program kiterjesztse, s
gy a kiterjeszts programfggvnye is vettstart.
4.6. Definci (F LKITERJESZTS). Legyen B altere A-nak, G A A feladat,
1
H B . Azt mondjuk, hogy a G flkiterjeszts H felett, ha prB (H) DG .
A flkiterjeszts szemlletes jelentse, hogy s kigszto altr felol nzve az rtel-
mezsi tartomnyban nincsenek "lyukak". Most is igaz, hogy egy feladat kiterjesztse
a feladat rtelmezsi tartomnya fltt flkiterjeszts. Ugyancsak igaz, hogy a program
kiterjesztsnek programfggvnye az eredeti programfggvny rtelmezsi tartom-
nya fltt flkiterjeszts.
4.3. KITERJESZTSI TTELEK 43

B0 A

a1
G(a1 )

a2
G(a2 )

4.5. bra. Vettstarts

B
A

DG

H B
4.6. bra. Flkiterjeszts

Az imnt bevezetett defincik segtsgvel kimondhatk azok az lltsok, ame-


lyek a kiterjesztsek s a projekci valamint a megolds kztti kapcsolatot vizsgl
ttelcsoportot alkotjk. A jellsek az 4.3 brnak megfelelo ek.
4.3. TTEL : K ITERJESZTSI TTELEK
Legyen B altere A-nak, B 0 a B kiegszto altere A-ra, S program B-n, F
B B feladat, S 0 illetve F 0 S-nek illetve F -nek a kiterjesztse A-ra. Legyen
tovbb F A A olyan feladat, melyre prB (F ) = F , s S A A
pedig olyan program, amely ekvivalens S-sel B-n. Ekkor az albbi lltsok
teljeslnek:
(1) ha S 0 megoldsa F 0 -nek, akkor S megoldsa F -nek,
(2) ha S 0 megoldsa F -nek, akkor S megoldsa F -nek,
(3) ha S megoldsa F 0 -nek, akkor S megoldsa F -nek,
(4) a. ha S megoldsa F -nek s p(S) vettstart B felett, akkor S megol-
dsa F -nek,
b. ha S megoldsa F -nek s F flkiterjeszts DF felett, akkor S megol-
dsa F -nek,
44 FEJEZET 4. KITERJESZTSEK

(5) ha S megoldsa F -nek, akkor S 0 megoldsa F 0 -nek,


(6) ha S megoldsa F -nek s F bovtett identits B 0 felett s vettstart B
felett, akkor S 0 megoldsa F -nek,
(7) ha S megoldsa F -nek s p(S) flkiterjeszts DF felett, akkor S megol-
0
dsa F -nek.
Bizonyts: Mielott sorra bizonytannk az egyes tteleket, vegyk szre, hogy a (4)
ttelbol kvetkezik az elso hrom, hiszen S 0 ekvivalens S-sel B-n s p(S 0 ) vettstart,
illetve prB (F 0 ) = F s F 0 flkiterjeszts DF -en. Hasonl meggondolsok alapjn a
(6) ttelbol is kvetkezik az (5) ttel, hiszen F 0 bovtett identits B 0 felett s vettstart
B felett. Elegendo teht a (4), (6), s (7) tteleket bizonytani.
Tekintsk eloszr a (4) ttel bizonytst: Legyen b DF tetszoleges. Ekkor
b DF a DF : prB (a) = b
megolds
a Dp(S)

ekv. S
S
prB (a) Dp(S)
teht DF Dp(S) , s gy a megolds elso kritriumnak teljeslst bebizonytottuk.
Tekintsk most a msodik kritriumot: legyen b DF tetszolegesen rgztett. Ekkor
[
p(S)(b) =
prB (p(S)(a))
1
aprB
(b)Dp(S)
[
F (b) = prB (F (a))
1
aprB (b)D F

vettstart, akkor x, y pr 1 (b)D -ra prB (p(S)(x))


Az a. esetben, azaz ha p(S) =
B p(S)
1
prB (p(S)(y)). Ekkor tetszoleges a prB (b) DF prB (F (a)) esetn, mivel a meg-

olds defincija miatt p(S(a)) F (a),

p(S)(b) = prB (p(S)(a)) prB (F (a)) F (b).
Teht a megolds msodik felttele is teljesl.
A b. esetben, azaz ha F flkiterjeszts, akkor prB
1 1
(b) DF , azaz a prB (b)
1
DF = prB (b) s a megolds defincija miatt
1
a prB
(b) : p(S)(a) F (a)
teht
[ [

p(S)(a) F (a)
1 1
aprB (b) aprB (b)
 [   [ 
prB
p(S)(a) prB F (a)
1 1
prB (b) prB (a)
[ [

prB (p(S)(a)) prB (F (a))
1 1
prB (a) prB (a)

p(S)(b) F (b)
s ezzel ebben az esetben is belttuk, hogy az S program megoldja az F feladatot.
Nzzk most a (6) ttel bizonytst.
4.4. A MEGOLDS FOGALMNAK KITERJESZTSE 45

1. Eloszr beltjuk, hogy DF Dp(S 0 ) .


Legyen a DF . Ekkor prB (a) DF . Felhasznlva, hogy S megoldsa F -nek,
prB (a) Dp(S) . A program kiterjesztsnek defincijbl kvetkezik, hogy
ekkor a Dp(S 0 ) .

2. Ezutn megmutatjuk, hogy a DF : p(S 0 )(a) F (a) is teljesl.

a p(S 0 ) a00 = a000


B0
F
A

F
a00

b0 B

4.7. bra.

Az 4.7 brnak megfeleloen legyen a DF s a0 p(S 0 )(a). Ekkor felhasz-


nlva, hogy S 0 az S kiterjesztse a0 -re fennll az albbi tulajdonsg:

prB 0 (a0 ) = prB 0 (a)

Legyen b0 = prB (a0 ). Ekkor b0 p(S)(prB (a)). Mivel S megodja F -et, ad-
dik, hogy b0 F (prB (a)). Ekkor mivel F vettstart B felett s F a F
projekcija addik, hogy a00 F (a) : prB (a00 ) = b0 . Felhasznlva, hogy F
bovtett identits B 0 felett, a000 F (a), amelyre

prB 0 (a000 ) = prB 0 (a) s prB (a000 ) = b0 .

Ekkor viszont a0 = a000 , azaz a0 F (a).


Most mr csak a (7) llts bizonytsa van htra:
(1) Legyen a DF 0 . Ekkor a feladat kiterjesztse defincija alapjn prB (a) DF .
flkiterjeszts DF felett, a D .
Mivel p(S) p(S)

(2) Legyen a DF 0 , a0 p(S 0 )(a) s b0 = prB (a0 ). Ekkor b0 p(S)(prB (a)),


hiszen p(S) az S vetlete. Mivel S megodja F -et, addik, hogy b0 F (prB (a)),
1 0
de a feladat kiterjesztsnek defincija alapjn x prB (b ) : x F 0 (a), gy
0 0
b F (a). Teht ba megolds msodik felttele is teljesl.
Ezzel a (7) lltst is bebizonytottuk.

4.4. A megolds fogalmnak kiterjesztse


A kiterjesztsi ttelek alapjn ltalnostjuk a megolds fogalmt. Az eredeti defidci-
ban kiktttk, hogy a feladat s a program llapottere azonos, erre a felttelre val-
jban nincs szksg, elg ha kzs llapottre kiterjesztve a feladatot s a programot
teljeslnek a megolds felttelei.
46 FEJEZET 4. KITERJESZTSEK

4.7. Definci (A MEGOLDS KITERJESZTSE). Legyenek H egy tetszoleges hal-


maz, Ah , h H legfeljebb megszmllhat halmazok s I s J vges rszhalmazai

H-nak. A = A s B = A . F A A feladat s S B B
iI i jJ j
program. Ha ltezik C llapottr, aminek A s B is altere s S kiterjesztse C-re
megoldsa F C-re val kiterjesztettjnek, akkor S megoldsa F -nek.
A kiterjesztsi ttelekbol, mghozz az 1-bol s az 5-bol azonnal addik, hogy a
definciban a "ltezik" szt "minden"re cserlhetnnk. Az is nylvnval, hogy "kzs
tbbszrs" tulajdonsg llapottr, vagyis olyan, aminek A is s B is altere, mindg

ltezik: A .
k I J k

Ezrt a defincit gy is fogalmazhatjuk, hogy a C = A allapottrre
k I J k
kiterjesztve a feladatot s a programot, teljeslnek a megolds felttelei.
A kiterjesztett megolds fogalom ismeretben rdemes a kiterjesztsi tteleket jra
megvizsglni. Az 1. s 5. ttel jelento sgt a defincinl mr trgyaltuk. A 2.,
illetve 3. ttel azt jelenti, hogy ha egy program megoldsa egy feladatnak akkor akr
a program, akr a feladat llapotern is teljeslnek a megolds felttelei. Ugyanez
fordtva mr csak bizonyos felttelek teljeslse esetn igaz (5., 6. ttel).

4.5. A feladat kiterjesztse s a specifikci ttele


Emlkeztetnk a specifikci ttelnek megfelelo formban megadott llapottr, pa-
ramtertr, elo- s utfelttelek feladatokra. Pldaknt felrtuk kt szm sszegt:
A =ZZ Z
x y z
B = Z Z
x0 y0
Q : (x = x0 y = y 0 )
R : (z = x0 + y 0 )
Mi lesz ennek e feladatnak a kiterjesztse egy A0 = ZZZNL llapottrre?
A vlasz elso pillantsra meglepo.
A =ZZ Z NL
x y z u v
B = Z Z
x0 y0
Q : (x = x0 y = y 0 )
R : (z = x0 + y 0 )
ltalnossgban is igaz, hogy a feladat kiterjesztsnek specifikcija, a kibovtett
llapottrtol eltekintve, megegyezik az eredeti feladat specifikcijval.

4.6. Pldk
4.1. plda: A = {1, 2, 3}, B = A {1, 2, 3}. F A A. F = {(1, 2), (1, 3)}. Mi
az F kiterjesztettje B-re?
4.6. PLDK 47

Megolds: A feladat kiterjesztsnek defincija alapjn:

F = { ((1, 1), (2, 1)), ((1, 1), (2, 2)), ((1, 1), (2, 3)), ((1, 2), (2, 1)),
((1, 2), (2, 2)), ((1, 2), (2, 3)), ((1, 3), (2, 1)), ((1, 3), (2, 2)),
((1, 3), (2, 3)), ((1, 1), (3, 1)), ((1, 1), (3, 2)), ((1, 1), (3, 3)),
((1, 2), (3, 1)), ((1, 2), (3, 2)), ((1, 2), (3, 3)), ((1, 3), (3, 1)),
((1, 3), (3, 2)), ((1, 3), (3, 3)) }

4.2. plda: Adott az L L llapottren az F = {((l, k), (l 0 , k 0 )) | k 0 = (l k)} feladat,


s az A0 = L L V llapottren (V = {1, 2}) a kvetkezo program:

S = { (ii1, hii1, ih2, hi2i), (ii2, hii2, hh1, ii1i),


(ii2, hii2, ih2, hi1, hi2i), (ih1, hih1i),
(ih2, hih2, ii1, hh1i), (hi1, hhi1, hh2i),
(hi2, hhi2, hi1, ih1i), (hi2, hhi2, hh1, hh2i),
(hh1, hhh1, ih1i), (hh2, hhh2i) }

Megoldja-e S az F A0 -re val kiterjesztettjt?


Megolds: rjuk fel az F A0 -re val kiterjesztettjt:

F 0 = { (ii1, ii1), (ii1, hi1), (ii1, ii2), (ii1, hi2),


(ii2, ii1), (ii2, hi1), (ii2, ii2), (ii2, hi2),
(ih1, ih1), (ih1, hh1), (ih1, ih2), (ih1, hh2),
(ih2, ih1), (ih2, hh1), (ih2, ih2), (ih2, hh2),
(hi1, ih1), (hi1, hh1), (hi1, ih2), (hi1, hh2),
(hi2, ih1), (hi2, hh1), (hi2, ih2), (hi2, hh2),
(hh1, ih1), (hh1, hh1), (hh1, ih2), (hh1, hh2),
(hh2, ih1), (hh2, hh1), (hh2, ih2), (hh2, hh2) }

Az S program programfggvnye:

p(S) = { (ii1, hi2), (ii2, ii1), (ii2, hi2), (ih1, ih1),


(ih2, hh1), (hi1, hh2), (hi2, ih1), (hi2, hh2),
(hh1, ih1), (hh2, hh2) }

A megolds defincija kt pontjnak teljeslst kell beltnunk. DF 0 = Dp(S) tri-


vilisan teljesl, hiszen mindkt halmaz a teljes llapottr. Vizsgljuk meg most, hogy
a DF : p(S)(a) F 0 (a) teljesl-e!

p(S)(ii1) = {hi2} {ii1, hi1, ii2, hi2} = F (ii1)


p(S)(ii2) = {ii1, hi2} {ii1, hi1, ii2, hi2} = F (ii2)
p(S)(ih1) = {ih1} {ih1, hh1, ih2, hh2} = F (ih1)
p(S)(ih2) = {hh1} {ih1, hh1, ih2, hh2} = F (ih2)
p(S)(hi1) = {hh2} {ih1, hh1, ih2, hh2} = F (hi1)
p(S)(hi2) = {ih1, hh2} {ih1, hh1, ih2, hh2} = F (hi2)
p(S)(hh1) = {ih1} {ih1, hh1, ih2, hh2} = F (hh1)
p(S)(hh2) = {hh2} {ih1, hh1, ih2, hh2} = F (hh2)

Teht az S program megoldja az F feladat kiterjesztettjt.


48 FEJEZET 4. KITERJESZTSEK

4.3. plda: Igaz-e, ha S B B, A altere B-nek, akkor

DprA (p(S)) = prA (Dp(S) )?

Megolds: Prbljuk meg az lltst ktirny tartalmazkods beltsval bizonytani.


DprA (p(S)) prA (Dp(S) ) : Legyen a DprA (p(S)) . Ekkor

a0 A : (a, a0 ) prA (p(S))


(b, b0 ) p(S) : prA (b, b0 ) = (a, a0 )
b Dp(S) prA (b) = a prA (Dp(S)).

prA (Dp(S) ) DprA (p(S)) : Legyen a prA (Dp(S) ). Ekkor

b Dp(S) : prA (b) = a


b0 B : (b, b0 ) p(S)
(a, prA (b0 )) prA (p(S))
a DprA (p(S))

s ezzel az lltst bebizonytottuk.

4.7. Feladatok
4.1. A = N, B = A N. F A A. F = {(q, r) | r = q + 1}. Mi az F
kiterjesztettje B-re?
4.2. Igaz-e, ha S B B program, A altere B-nek, akkor S A A-ra trtno
projekcijnak kiterjesztse B-re azonos S-sel?
4.3. Bizonytsuk be, hogy egy program kiterjesztettje valban program!
4.4. A = A1 A2 An . Mondjunk pldt olyan programra, amelynek egyetlen
valdi altrre vett projekcija sem program. (Ak = N, k = 1, . . . , n).
4.5. Legyen A altere B-nek, F A A, F 00 B B, F 0 az F kiterjesztettje B-re.
Igaz-e, hogy
a) ha F = prA (F 00 ), akkor F 00 az F kiterjesztettje?
(1) 1
b) F 0 = prA (F ) ? ill. F 0 = prA (F ) ?
4.6. Legyen F AA, F 0 BB, F 00 C C, F 000 DD, ahol B = AA1 ,
C = A A2 , D = A A1 A2 , s legyen F 0 , F 00 , F 000 az F kiterjesztse rendre
B-re, C-re, D-re. Igaz-e, hogy F 000 az F 00 kiterjesztse D-re? Add meg az F 0 s
az F 00 kztti kapcsolatot a projekci s a kiterjeszts fogalmnak segtsgvel!
4.7. B s C altere A-nak. F A A, F1 B B, F2 C C. F1 az F
projekcija B-re. F az F2 kiterjesztse A-ra. Igaz-e, hogy az F1 feladat A-ra
val kiterjesztettjnek C-re vett projekcija megegyezik F2 -vel?
5. fejezet

A tpus

Az llapottr defincijban szereplo halmazokat tpusrtkhalmazoknak neveztk, s


csak annyit mondtunk rluk, hogy legfeljebb megszmllhatak.
A tovbbiakban arrl lesz sz, hogy ezek a halmazok hogyan jnnek ltre, milyen
kzs tulajdonsg jellemzo az elemeikre.

5.1. A tpusspecifikci
Eloszr bevezetnk egy olyan fogalmat, amit arra hasznlhatunk, hogy pontosan ler-
juk a kvetelmnyeinket egy tpusrtkhalmazzal, s a rajta vgezhet o muveletekkel
szemben.
5.1. Definci (T PUSSPECIFIKCI). A Ts = (T, Is , F) hrmast tpusspecifikci-
nak nevezzk, ha teljeslnek r a kvetkezo felttelek:
1. T : tetszoleges alaphalmaz,
2. Is : T L specifikcis invarins,
Ts = dIs e a tpusrtkhalmaz,
3. F = {F1 , F2 , . . . , Fn }, ahol i [1..n] : Fi Ai Ai , amelyre
Ai = Ai1 Aini gy, hogy j [1..ni ] : Aij = T s
j [1..ni ] : (Aij = T ) prAij (Fi ) Ts Ts .
Vegyk szre, hogy az alaphalmaz s az invarins tulajdonsg segtsgvel azt fo-
galmazzuk meg, hogy mi az az rtkhalmaz, aminek elemeivel foglalkozni akarunk,
mg a feladatok halmazval azt rjuk le, hogy ezekre az elemekre milyen muveletek
vgezhetok el.
Az llapottr defincijban szereplo tpusrtkhalmazok mind ilyen tpusspecifi-
kciban vannak definilva. Az llapottr egy komponenst egy program csak a tpus-
muveleteken keresztl vltoztathatja meg.

5.2. A tpus
Vizsgljuk meg, hogy a tpusspecifikciban lert kvetelmnyeket hogyan valstjuk
meg. Ehhez bevezetjk az elemi tpusrtkek halmazt, amit E-vel jellnk.

49
50 FEJEZET 5. A TPUS

5.2. Definci (T PUS). A T = (%, I, S) hrmast tpusnak nevezzk, ha az albbi fel-


ttelek teljeslnek r:

1. % E T , reprezentcis fggvny,
2. I : E L, tpusinvarins tulajdonsg,
3. S = {S1 , S2 , . . . , Sm }, ahol
i [1..m] : Si Bi Bi program, amelyre Bi = Bi1 Bimi gy,
hogy j [1..mi ] : Bij = E s 6 j [1..mi ] : Bij = T .
A tpus elso kt komponense az absztrakt adattpus reprezentcijt rja le, mg a
programhalmaz a tpusmuveletek implementcijt tartalmazza.
A specifikci s a tpus kapcsolata
Meg kell mg vizsglnunk azt a krdst, hogy mikor mondjuk, hogy egy tpus
megfelel a tpusspecifikcinak, azaz a tpus mikor teljesti a specifikciban lert k-
vetelmnyeket.
5.3. Definci (M EGFELELTETS). Egy T = (%, I, S) tpus megfelel a Ts =
(T, Is , F) tpusspecifikcinak, ha
1. %([I]) = Ts ,

2. F F : S S : S a %-n keresztl megoldja F -et.


Termszetesen a megfelels defincija mg nem teljes, meg kell mg mondanunk,
hogy mit rtnk a %-n keresztli megoldson. Ehhez elo szr vizsgljunk meg egy
egyszeru esetet: tegyk fel, hogy a feladat s a program llapottere egykomponensu.
Persze a fenti defincik figyelembe vtelvel ez azt jelenti, hogy a feladat llapot-
tere T , a program pedig E . Ekkor tulajdonkppen a %-n keresztli megoldst gy
kell elkpzelni, mintha a megolds defincijban a programfggvny % p(S)
dIe
% (1) relci lenne, azaz
dIe

1. DF D% p(S) % (1) , s
dIe dIe

2. a DF : % p(S) % (1) (a) F (a).


dIe dIe

Legyen a tovbbiakban S S, s F F, F A A, A = A1 An ,
S B B , B = B1 Bn . Azt mondjuk, hogy az B llapottr illeszkedik az
A llapottrhez, ha

E , ha Ai = T
i [1..n] : Bi =
Ai , klnben

A fenti esetben legyen a B A lekpezs az albbi mdon definilva:

b B : (b) = 1 (b1 ) 2 (b2 ) . . . n (bn )

ahol i [1..n] : i Bi Ai , s
(
% , ha Ai = T
i = dIe
idAi , klnben
5.2. A TPUS 51

T T
a
F

% (1)
%
dIe dIe

E E

p(S)

5.1. bra. A %-n keresztli megolds egykomponensu llapotterek kztt

A tovbbiakban az ilyen felptsu relcit = (1 ; 2 ; . . . ; n )-nel fogjuk jellni.


Vegyk szre, hogy a tulajdonkppen a % egyfajta kiterjesztse tbb komponensu, de
egymshoz illeszkedo llapotterek esetn. Ezek utn a megolds defincijt felrhatjuk
az ilyen esetre gy, hogy az elo zo megoldsdefinciban % helyre -t runk.
dIe

T H T T H T
a F

% (1)
%
dIe dIe
% (1) id % id
dIe dIe

p(S)

E E
E H E H

5.2. bra. A %-n keresztli megolds illeszkedo llapotterek kztt

Most mr csak egy kis lps van htra az ltalnos eset lershoz: ha a program s
a feladat llapottere nem illeszkedik egymshoz, akkor tegyk illeszked o v o ket. Ez a
kiterjeszts fogalmnak felhasznlsval knnyen megtehet o .
52 FEJEZET 5. A TPUS

5.4. Definci (M EGOLDS %- N KERESZTL). Azt mondjuk, hogy az S B B


program a %-n keresztl megoldja az F A A feladatot, ha vannak olyan C s D
illeszkedo terek, hogy A altere C-nek, B altere D-nek, s
1. DF 0 D p(S 0 ) (1) , s

2. a DF 0 : p(S 0 ) (1) (a) F 0 (a),


ahol D C a fenti rtelemben definilt lekpezs, S 0 az S kiterjesztse D-re, F 0
pedig az F kiterjesztse C-re.
Termszetesen egy tpusspecifikcinak tbb klnbzo tpus is megfelelhet. Ek-
kor az, hogy melyiket vlasztjuk a reprezentci s a muveletek implementciinak
ms tovbbi tulajdonsgaitl ilyen pldul a reprezentci memriaignye, vagy az
implementcik muveletignye fgg. Ez a dnts mindig a megoldand programo-
zsi feladat fggvnye.

5.3. A tpusspecifikci ttele


A tpusspecifikci s a tpus fogalmnak bevezetsvel tulajdonkppen a feladat fogal-
mt ltalnostottuk, mg a megfeleltets a megolds fogalmnak volt egyfajta ltal-
nostsa. Az imnt megismert specifikci ttele a megoldsra adott elgsges felttelt.
Prbljunk most a %-n keresztli megoldsra egy hasonl felttelt adni!
5.4. TTEL : T PUSPECIFIKCI TTELE
Legyen Ts = (T, Is , F) s T = (%, I, S) adott tpusspecifikci s tpus, s
tegyk fel, hogy a reprezentci helyes, azaz %(dIe) = dI s e. Legyen tovbb
F F, az F llapottere A, egy paramtertere B, elo s utfelttele pedig Qb s
Rb . Legyen S S s tegyk fel, hogy S llapottere illeszkedik F llapotterhez.
Definiljuk a kvetkezo lltsokat:
dQb e = bQb c
dRb e = dRb e
ahol a program s a feladat llapottere kztti, a %-n keresztli megolds defi-
ncijban szereplo lekpezs. Ekkor ha b B : Qb lf (S, Rb ), akkor az S
program a %-n keresztl megoldja az F feladatot.
Bizonyts: A %-n keresztli megolds defincija kt pontjnak teljeslst kell be-
ltnunk:
1. DF D p(S) (1) , ui.
Legyen a DF . Ekkor b B : a dQb e. Mivel %(dIe) = dIs e,
(1) (a) 6= (1) (a) dQb e.
Felhasznlva, hogy dQb e dlf (S, Rb )e:
(1) (a) Dp(S) p(S)( (1) (a)) dRb e.
Mivel dRb e = dRb e,
p(S)( (1) (a)) D
teht
a D p(S) (1) .
5.4. PLDK 53

2. a DF : p(S) (1) F (a), ui.


Legyen a DF . A bizonyts elso rszben lert lpseket folytatva: mivel
p(S)( (1) (a)) dRb e,
(p(S)( (1) (a))) dRb e F (a).

Az, hogy a fenti ttel felttelei kztt kiktttk, hogy a program llapottere illesz-
kedik a feladat llapotterhez tulajdonkppen elhagyhat. Ekkor a ttel a feladat s
a program olyan kiterjesztseire mondhat ki, amelyek llapotterei illeszkednek egy-
mshoz (pontosan gy, ahogy a megfeleltetst definiltuk nem illeszkedo llapotterek
kztt).
A kvetkezo pldban megmutatjuk, hogy Qb -t gyenge igazshalmaz helyett ero s
igazsghalmazzal definilnnk, akkor a ttel nem lenne igaz.
Legyen Ts = (T, Is , F), T = {1, 2}, Is =, F = {F }. Legyen F llapottere
A = T s a paramtertr is legyen ugyanez: B = T . Legyen F specifikcija:
dQ1 e = {1}, dR1 e = {2}
dQ2 e = , dR2 e = {1}
Ekkor DF = {1} s F (1) = {2}. Legyen tovbb az elemi rtkek halmaza E =
{a, b}, T = (%, I, S), E : I() = (|| = 1), s % az egy hossz sorozatokra:
%(hai) = %(hbi) = {1, 2}.
Tegyk fel, hogy S = {S}, S E (E ) , s rendelje S az llapottere minden
pontjhoz az nmagbl ll egy hossz sorozatot. Ennek a programnak az llapottere
illeszkedik a fenti feladat llapotterhez, s = %. Ekkor
dQ1 e = s dQ2 e = ,
teht
Q1 lf (S, R1 )
Q1 lf (S, R1 )
Az viszont knnyen lthat, hogy
p(S) (1) (1) = {1, 2} 6 F (1) = {2}
teht a tpus nem felel meg a specifikcinak.

5.4. Pldk
5.1. plda: A tpusrtkek halmaza legyen a magyar abc magnhangzi! { a, , e, ,
i, , o, , , o , u, , , u }. Szeretnnk tudni, hogy egy adott magnhangznak melyik
a (rvid ill. hossz) prja. Legyen egy olyan tpusmuveletnk, amely erre a krdsre
vlaszt tud adni. Az elemi tpusrtkek halmaza legyen a { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14 } halmaz! Add meg a tpusspecifikcit s kszts el egy olyan tpust,
ami megfelel a specifikcinak!
Megolds: rjuk fel eloszr a tpusspecifikcit! Legyen a magnhangzk halmaza
M GH. Ekkor
Ts = (M GH, < igaz >, {F }), ahol F M GH M GH,
54 FEJEZET 5. A TPUS

F = { (a, ), (, a), (e, ), (, e), (i, ), (, i), (o, ),


(, o), (, o ), (o, ), (u, ), (, u), (, u ), (u, ) }
Adjuk meg a tpust!
T = (%, I, {S}), ahol % E M GH,

% ={(< 0 >, a), (< 14 >, ), (< 1 >, e), (< 13 >, ), (< 2 >, i),
(< 12 >, ), (< 3 >, o), (< 11 >, ), (
(< 5 >, u), (< 9 >, ), (< 6 >, ), (<
E :
I() = (|| = 1 1 6= 7)

S E (E ) ,
S = {(hii, hhii, h14 iii) | i E }
{(, < , , >) | || 6= 1}
Az, hogy a most megadott tpus megfelel a fenti tpusspecifikcinak, knnyen lthat:
a reprezentci helyessge a % s az I defincijbl leolvashat, mg az, hogy az S
program a %-n keresztl megoldja az F feladatot, a program egyszeru hozzrendels-
bol s a % trkks" megvlasztsbl ltszik.
Termszetesen msmilyen reprezentcis fggvnyt is meg lehet adni, de ekkor
meg kell vltoztatnunk a tpusinvarinnst s a programot is.
5.2. plda: Specifikld azt a tpust, melynek rtkei a [0..127] halmaz rszhalmazai,
tpusmuveletei pedig kt rszhalmaz metszetnek ill. unijnak kpzse, ill. annak
megllaptsa, hogy egy elem eleme-e egy rszhalmaznak. Adj meg egy tpust, amely
megfelel a specifikcinak! (Az elemi rtkek halmaza: {0, 1}, a programokat elg a
programfggvnykkel megadni.)
Megolds: Ts = (T, Is , F), ahol

T = 2[0..127] ,
Is = < igaz >,
F = {Fm , Fu , Fe },

s Am = T T T, Fm Am Am ,

Fm = {((a, b, c), (p, q, r)) | p = a q = b r = a b}

Au = T T T, Fu Au Au

Fu = {((a, b, c), (p, q, r)) | p = a q = b r = a b}

Ae = T [0..127] L, Fe Ae Ae

Fe = {((h, e, l), (h0 , e0 , l0 )) | h = h0 e = e0 l0 = (e h)}

Adjunk a fenti specifikcinak megfelelo tpust! T = (%, I, S), s % E 2N ,


E :
%() = {{i | i+1 = 1}},
I : E L, E :
I() = (|| = 128),
5.4. PLDK 55

S = {Sm , Su , Se }, s Bm = E E E , Sm Bm Bm program

p(Sm ) = {((, , ), (0 , 0 , 0 )) | I() I() I( 0 ) = 0 = 0


i [1..128] : i0 = i i }

Bu = E E E , Su Bu Bu program

p(Su ) = {((, , ), (0 , 0 , 0 )) | I() I() I( 0 ) = 0 = 0


i [1..128] : i0 = i + i i i }

Be = E [0..127] L, Se Be Be program

p(Se ) = {((, x, l), (0 , x0 , l0 )) | I() = 0 x = x0 l0 = (x+1 = 1)}

Vajon megfelel a most lert tpus a fenti tpusspecifikcinak? A reprezentci helyes,


ugyanis a pontosan 128 hossz sorozatokat a reprezentcis fggvny ppen a kvnt
rszhalmazokba kpezi le, azaz
%([I]) = [Is ]

Vizsgljuk meg a programok s a feladatok viszonyt. Vegyk szre, hogy a pro-


gramok llapotterei illeszkednek a megfelelo feladat llapotterhez, teht felrhat k-
zttk a relci.

m = (% ; % ; % ),
dIe dIe dIe

u
= (% ; % ; % ),
dIe dIe dIe

e
= (% ; id[0..127] ; idL )
dIe

Ezek felhasznlsval a %-n keresztli megolds egyszeruen addik a reprezentcis


fggvny s a programfggvnyek szemantikjbl.
5.3. plda: Legyen Ts = (T, Is , F) egy tpusspecifikci, F = {F }. Legyenek T1 =
(%1 , I1 , S1 ) s T2 = (%2 , I2 , S2 ) tpusok, melyekre: S1 = {S1 }, S2 = {S2 }, %1 =
%2 , [I1 ] = [I2 ], s S2 S1 .
Igaz-e, hogy ha T1 megfelel Ts -nek, akkor T2 is?
Megolds: A reprezentci helyessge %1 = %2 s [I1 ] = [I2 ] miatt trivilisan teljesl,
hiszen ekkor:
%2 ([I2 ]) = %1 ([I1 ]) = [Is ].
Azt kell teht megvizsglnunk, hogy vajon az S2 program megoldja-e az F feladatot
a %2 -n keresztl. Mivel a programok llapottere kzs, feltehetjk, hogy a progra-
mok llapottere s a feladat llapottere egymsnak megfeleltethet o , hiszen ellenkezo
esetben mindkt megolds-vizsglatnl a feladatnak ugyanazt a kiterjesztst kellene
hasznlnunk, s gy az eredeti feladatot ezzel a kiterjesztssel helyettestve az albbi
gondolatmenet vgigviheto.
Mivel S2 S1 , a kt program programfggvnyre teljesl a kvetkezo :

i. Dp(S1 ) Dp(S2 ) ,

ii. a Dp(S1 ) : p(S2 )(a) p(S1 )(a).


56 FEJEZET 5. A TPUS

Jelljk most is -val a program s a feladat llapottere kztti, a megfeleltetsben


definilt lekpezst. Knnyen lthat, hogy az i. tulajdonsg miatt
D p(S1 ) (1) D p(S2 ) (1) .
Msrszt mivel az S1 program megoldja F -et a %-n keresztl
DF D p(S1 ) (1)
is teljesl. A fenti kt llts alapjn
DF D p(S2 ) (1) .
Hasznljuk fel a msodik tulajdonsgot is! Az ii. tulajdonsg miatt igaz az albbi
llts is:
a D p(S1 ) (1) : p(S2 ) (1) (a) p(S1 ) (1) (a).
Ekkor viszont mivel az S1 program a %-n keresztl megoldsa a feladatnak, teljesl,
hogy
a DF : p(S1 ) (1) (a) F (a),
s ezrt
a DF : p(S2 ) (1) (a) F (a),
azaz az S2 program is megoldja az F feladatot a %-n keresztl, teht a T2 tpus is
megfelel a specifikcinak.

5.5. Feladatok
1. Adjunk tpusspecifikcit, reprezentcis fggvnyt, tpust (ami megfelel a spe-
cifikcinak) a kvetkezo tpusra: a lehetsges rtkek: [0..99999]. A muveletek
a kvetkezo s az elozo 100000 szerinti maradkkal. Az elemi rtkek a deci-
mlis szmjegyek {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Mutasd meg, hogy a tpus megfelel
a tpusspecifikcinak!
2. E = {0, 1, 2}, Ts = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, F = {F }.
F = {((a, b, c), (d, e, f )) | k Z : f + k 10 = a + b}
Kszts el egy olyan tpust, ami megfelel a specifikcinak!
3. Legyen Ts 1 = (T, Is 1 , F1 ), Ts 2 = (T, Is 2 , F2 ) kt tpusspecifikci!
1. llts: Minden T tpusra: T megfelel Ts1 -nek T megfelel Ts2 -nek.
2. llts: [Is 1 ] = [Is 2 ] s F1 = F2 .
Ekvivalens-e a kt llts?
4. Adott a Ts = (T, Is , F) tpusspecifikci, tovbb adottak a T1 = (%1 , I1 , S1 ),
T2 = (%2 , I2 , S2 ) tpusok. Tegyk fel, hogy [I1 ] = [I2 ], S1 = S2 s %1 ([I1 ]) =
%2 ([I2 ]) s E : %2 () %1 (), valamint T1 feleljen meg Ts -nek!
Igaz-e, hogy T2 is megfelel Ts -nek?
5. Legyen Ts = (T, Is , F) egy tpusspecifikci, T1 = (%1 , I1 , S1 ), T2 = (%2 , I2 , S2 ).
Legyen [I2 ] [I1 ], S1 = S2 s %1 ([I1 ]) = %2 ([I2 ]), s E : %2 () =
%1 (), valamint T1 feleljen meg Ts -nek!
Igaz-e, hogy T2 is megfelel Ts -nek?
6. fejezet

Elemi programok

Ebben a fejezetben bevezetnk nhny egyszeru programot. Ezeket a programokat


a kvetkezo fejezetekben gyakorta fogjuk hasznlni, ezrt megvizsgljuk a program-
fggvnyket, s egy adott utfelttelhez tartoz leggyengbb el o felttelket.
6.1. Definci (E LEMI PROGRAM). Eleminek neveznk egy A llapottren egy S pro-
gramot, ha

a A : S(a) {< a >, < a, a, a, >, < a, b > | b 6= a}.


Az elemi programok kzl is kivlasztunk nhny specilis tulajdonsggal rendel-
kezot, s a tovbbiakban csak velk foglalkozunk.
Az elso ilyen program, az res program lesz, ami nem csinl semmit.
6.2. Definci (SKIP). SKIP-nek nevezzk azt a programot, amire

a A : SKIP (a) = {< a >}.


A msodik program a trlods, aminek legfontosabb jellemzo je, hogy soha sem
terminl.
6.3. Definci (ABORT). ABORT-tal jelljk azt a programot, amire

a A : ABORT (a) = {< a, a, a, >}.


Az eddig felsorolt kt elemi program segtsgvel mg bajosan tudnnk egy adott
feladatot megold programot kszteni, hiszen egyrszt nem tl sok olyan feladat van,
aminek az ABORT program megoldsa lenne (vajon van ilyen egyltaln?) s a
SKIP program is csak egy nagyon szuk feladatosztlynak lehet megoldsa (melyek
ezek a feladatok?). A harmadik s a programozsi feladat megoldsa szempontjbl
legfontosabb specilis elemi program az rtkads.
6.4. Definci ( RTKADS). Legyen A = A1 An , F = (F1 , . . . , Fn ), ahol
Fi A Ai . Az S program ltalnos rtkads, ha
n
\
S = {(a, red(< a, b >)) | a, b A a DFi b F (a)}
i=1
n
\
{(a, < a, a, a, >) | a A a
/ D Fi }
i=1

A definci alapjn knnyen lthat, hogy az F AA relcira fennll az albbi


tulajdonsg:

57
58 FEJEZET 6. ELEMI PROGRAMOK

T
n
DF = D Fi ,
i=1

F (a) = F1 (a) F2 (a) Fn (a)

A fenti Fi komponensrelcik teht pontosan azt rjk le, hogy az adott rtkads
miknt vltoztatja meg az llapottr egyes komponenseit.
6.5. Definci (A Z LTALNOS RTKADS SPECILIS ESETEI). Ha DF =
A, akkor az S programot rtkkivlasztsnak nevezzk, s a : F (a)-val jell-
jk.
Ha az F relci fggvny. akkor az S programot rtkadsnak nevezzk, s
a := F (a)-val jelljk.
Ha DF A, akkor S parcilis rtkkivlaszts.
Ha DF A s F determinisztikus (F parcilis fggvny), akkor S parcilis
rtkads.
Ha egy kivtelvel az sszes Fi projekci azaz az rtkads az llapottrnek csak
egy komponenst (csak egy vltoz rtkt) vltoztatja meg , akkor S-et egyszeru
rtkadsnak, egybknt szimultn rtkadsnak nevezzk.
Az rtkads egy kicsit bonyolultabb mint elo zo kt trsa, de egy kicsit rtke-
sebb" is, hiszen rtkadssal minden feladat megoldhat! A krds persze csupn az,
hogy az ppen adott feladat ltal definilt rtkads megengedett muvelet-e. Ezzel a
krdssel a ksobbiekben a programozsi feladat megoldsa sorn fogunk foglal-
kozni.
Vizsgljuk meg a fent definilt specilis elemi programok programfggvnyeit!
6.5. TTEL : E LEMI PROGRAMOK PROGRAMFGGVNYE

1. p(SKIP ) = idA ,
2. p(ABORT ) = ,
3. p(a := F (a)) = F ,
4. p(a : F (a)) = F .

A ttelt bizonytsa trivilis, ezrt itt nem bizonytjuk (a feladatok kztt szerepel).
Most, hogy megvizsgltuk a programfggvnyeket, nzzk meg az elemi progra-
mok adott utfelttelhez tartoz leggyengbb elo felttelt.
Mivel a SKIP program programfggvnye az identikus lekpezs, egy tetsz o leges
R utfelttelhez tartoz leggyengbb elo felttele:

lf (SKIP, R) = R.

Hasonlan egyszeruen lthat, hogy mivel az ABORT program programfgg-


vnye res a leggyengbb elo felttel defincija alapjn egy teszoleges R utfelttel
esetn
lf (ABORT, R) = hamis.

Az ltalnos rtkads leggyengbb elo felttelt kln vizsgljuk a determiniszti-


kus s nem determinisztikus, illetve a globlis, s a parcilis esetben.
59

Legyen F : A A fggvny. Ekkor

dlf (a := F (a), R)e = {a A | F (a) dRe} =


= F (1) (dRe) = F 1 (dRe) = dR F e.

Ha F parcilis fggvny, akkor az ltala definilt rtkads is parcilis, melynek leg-


gyengbb elofelttele:

dlf (a := F (a), R)e = {a A | F (a) dRe} DF =


= F (1) (dRe) DF = F 1 (dRe) DF .

Most vizsgljuk azt a kt esetet, amikor F nem determinisztikus. Feltve, hogy D F =


A, az rtkkivlaszts leggyengbb elo felttele

dlf (a : F (a), R)e = {a A | F (a) dRe} = F 1 (dRe).

Ugyanez parcilis esetben:

dlf (a : F (a), R)e = {a A | F (a) dRe} DF = F 1 (dRe) DF .

Az rtkadst ltalban vltozkkal rjuk le. Legyenek az llapottr vltozi rendre


x1 , x2 , . . . , xn . Ekkor az a := F (a) program jellsre az albbi formult hasznlhat-
juk.

x1 , x2 , . . . , xn := F1 (x1 , x2 , . . . , xn ), F2 (x1 , x2 , . . . , xn ), . . . , Fn (x1 , x2 , . . . , xn ).

A gyakorlatban az esetek tbbsgben F komponenseinek nagy rsze projekci, azaz


Fi (x1 , x2 , . . . , xn ) = xi . Ekkor az rtkads jellsbol a bal oldalrl xi -t , a jobb
oldalrl pedig Fi (x1 , x2 , . . . , xn )-t elhagyjuk. Vegyk szre, hogy egyszeru rtkads
esetn a bal oldalon csak egy vltoz, a jobb oldalon pedig csak egy kifejezs marad.
Jellsnket abban az esetben mg tovbb egyszerusthetjk, ha az rtkads jobb
oldala (Fi ) nem fgg minden vltoztl. Ekkor a jobb oldalon csak azokat a vltozkat
tntetjk fel, amelyektol Fi fgg.
Nzzk meg egy egyszeru pldn a fent lertakat: Legyen az llapottr
A=Z L
x l
A tovbbiakban a fentihez hasonlan az llapottr egyes komponenseihez tartoz
vltozkat a komponensek al fogjuk rni. Legyenek az rtkads komponensei: a =
(a1 , a2 ) A:

F1 (a1 , a2 ) = a1 , azaz F1 = prZ , s


F2 (a1 , a2 ) = (a1 > 0).

Ekkor az a := F (a) rtkads vltozkkal felrva:

x, l := x, (x > 0).

A jells fent lert egyszerustseit elvgezve az

l := (x > 0)

egyszeru rtkadst kapjuk.


60 FEJEZET 6. ELEMI PROGRAMOK

Ha felhasznljuk, hogy az rtkads leggyengbb elo felttele R F , akkor egy vl-


tozkkal felrt rtkads vltozkkal megadott elo felttelt egyszeruen kiszmthatjuk:
helyettestsk az utfelttelben az rtkadsban szereplo vltozkat az j rtkkkel.
Erre bevezetnk egy j jellst is: legyenek x1 , x2 , . . . , xn rendre az llapottr vlto-
zi. Ekkor
lf (xi1 , . . . , xim := Fi1 (x1 , . . . , xn ), . . . , Fim (x1 , . . . , xn ), R) =
Rxi1 F1 (x1 ,...,xn ),...,xim Fm (x1 ,...,xn )

6.1. Feladatok
1. A = {1, 2, 3}, B = {a, b}, C = A B. Legyen S program A-n, S = {1
h1i, 2 h2222 . . . i, 3 h31i}.
Legyen S1 az S kiterjesztse C-re, M pedig olyan program C-n, hogy M ekvi-
valens S-sel A-n.
(a) elemi program-e S?
(b) elemi program-e S1 s biztosan elemi program-e M ?
2. Tekintsk az albbi llapotteret:

A =NN
x y
Mi az (x, y) := F (x, y), F = (F1 , F2 ), F1 (x, y) = y, F2 (x, y) = x, azaz az
F (p, q) = {b A | x(b) = q y(b) = p} rtkads R = (x < y) utfelttelhez
tartoz leggyengbb elofelttele?
3. Legyen A tetszoleges llapottr. Melyek azok a feladatok az A-n, amelyeknek
megoldsa a SKIP program?
4. Legyen A tetszoleges llapottr. Melyek azok a feladatok az A-n, amelyeknek
megoldsa a ABORT program?
7. fejezet

Programkonstrukcik

Ebben a fejezetben azzal foglakozunk, hogy hogyan lehet meglev o programokbl j


programokat kszteni. Termszetesen sokflekppen konstrulhatunk meglev o pro-
gramjainkbl j programokat, de most csak hromfle konstrukcis muveletet fogunk
megengedni: a szekvencia-, elgazs- s cikluskpzst. Ks o bb megmutatjuk, hogy ez
a hrom konstrukcis muvelet elegendo is. Nemcsak definiljuk ezeket a konsrukci-
kat, de megvizsgljuk programfggvnyket s leggyengbb el o felttelket is.

7.1. Megengedett konstrukcik


Az elso definci arrl szl, hogy egy programot kzvetlenl egy msik utn vgezznk
el. A definciban hasznlni fogjuk a kvetkezo jellst: legyen A , A ,

2 (, ) ::= red(kon(, )).


7.1. Definci (S ZEKVENCIA). Legyenek S1 , S2 A A programok. Az S
A A relcit az S1 s S2 szekvencijnak nevezzk, s (S1 ; S2 )-vel jelljk, ha
a A:

S(a) = { A | S1 (a)}
{2 (, ) A | S1 (a) A S2 ( ())}
Vegyk szre, hogy ha kt olyan program szekvencijt kpezzk, amelyek rtkksz-
lete csak vges sorozatokat tartalmaz, akkor a szekvencia is csak vges sorozatokat
rendel az llapottr pontjaihoz.
Hasonlan egyszeruen ellenorizheto az is, hogy determinisztikus programok szek-
vencija is determinisztikus relci (fggvny).
A programkonstrukcikat szerkezeti brkkal, gynevezett struktogramokkal szok-
tuk brzolni.
Legyenek S1 , S2 programok A-n. Ekkor az S = (S1 ; S2 ) szekvencia struktog-
ramja:

 S 
S1
S2

61
62 FEJEZET 7. PROGRAMKONSTRUKCIK


S1

S1 S2

S2

7.1. bra. Szekvencia

7.2 A msodik konstrukcis leheto sgnk az, hogy ms-ms meglevo programot
hajtsunk vgre bizonyos felttelekto l fggoen.
7.2. Definci (E LGAZS).
Legyenek 1 , . . . , n : A L felttelek, S1 , . . . , Sn programok A-n. Ekkor az
IF A A relcit az Si -kbol kpzett i -k ltal meghatrozott elgazsnak nevez-
zk s (1 : S1 , . . . , n : Sn )-nel jelljk, ha a A:
n
[
IF (a) = wi (a) w0 (a),
i=1

ahol i [1..n]:

Si (a), ha i (a)
wi (a) =
, klnben
s

ha, a, a, . . . i, ha i [1..n] : i (a)
w0 (a) =
, klnben

Az elgazs defincijban nem ktttk ki, hogy a felttelek diszjunktak, teht


az llapottr egy pontjban tbb felttel is igaz lehet, ebben az esetben az elgazs az
sszes olyan sorozatot hozzrendeli ehhez a ponthoz, amit legalbb egy olyan program,
aminek a felttelrsze ebben a pontban igaz. Ezrt haa a felttelek nem diszjunktak,
akkor a determinisztikus programokbl kpzett elgazs lehet nem determinisztikus is.
Ha csak olyan programokbl kpznk elgazst, amik csak vges sorozatokat ren-
delnek az llapottr minden pontjhoz, az elgazs akkor is rendelhet (azonos elemek-
bol ll) vgtelen sorozatot, ha a felttelek igazsghalmazai nem fedik le az egsz
llapotteret.
Megjegyezzk, hogy a definci szerint, ha egy pontban egyik felttel sem teljesl,
az elgazs "elszll", ellenttben a legtbb gyakorlatilag hasznlt programnyelvvel.
Legyenek S1 , S2 , . . . , Sn programok, 1 , 2 , . . . , n felttelek A-n. Ekkor az IF =
(1 : S1 , 2 : S2 , . . . , n : Sn ) elgazs struktogramja:
7.1. MEGENGEDETT KONSTRUKCIK 63

 IF 

\ 1 \ 2 \ ... \ n
S1 S2 ... Sn
A harmadik konstrukcis lehetosgnk az, hogy egy meglevo programot egy felt-
teltol fggoen valahnyszor egyms utn vgrehajtsunk. A ciklus definlshoz szk-
sgnk van tovbbi kt jellsre: vges sok, illetve vgtelen sok sorozat konkatenci-
jnak redukltjra.
Legyenek 1 , 2 , . . . , n1 A s n A ,

n (1 , 2 , . . . , n ) ::= red(kon(1 , 2 , . . . , n )).

Legyenek i A (i N),

(1 , 2 , . . . ) ::= red(kon(1 , 2 , . . . )).


7.3. Definci (C IKLUS). Legyen felttel s S0 program A-n. A DO A A
relcit az S0 -bl a felttellel kpzett ciklusnak nevezzk, s (, S0 )-lal jelljk, ha
a
/ de:
DO(a) = {hai}

a de:

DO(a) = { A | 1 , . . . , n A : = n (1 , . . . , n )
1 S0 (a) i [1..n 1] : i A
i+1 S0 ( (i )) ( (i )) (n A
(n A ( (n ))))}
{ A | i N : i A : = (1 , 2 , . . . )
1 S0 (a) i N : i A i+1 S0 ( (i ))
( (i ))}.
Elso rnzsre a definci kiss bonyolult. Nzzk meg alaposabban!
A defifc alapjn nylvnval, hogy a determinisztikus programbl kpzett ciklus
is determinisztikus lesz.
Ezzel ellenttben, ha egy csak vges sorozatokat rendelo programot foglalunk cik-
lusba, akkor a ciklus rtkkszlete mg tartalmazhat vgtelen sorozatot (ha soha nem
jutunk ki a felttel igazsghalmazbl).
Legyen S0 program, felttel A-n. Ekkor a DO = (, S0 ) ciklus struktogramja:

 DO 

S0
A fentiekben lert konstrukcikat programokra lehet alkalmazni. De vajon progra-
mokat hoznak-e ltre? Az albbi ttel kimondja, hogy az elo zokben definilt hrom
konstrukcis muvelet meglevo programokbl valban programokat hoz ltre.
7.6. TTEL : A SZEKVENCIA , AZ ELGAZS S A CIKLUS PROGRAM .
Legyen A tetszoleges llapottr, S0 , S1 , S2 , . . . , Sn A A programok, va-
lamint , 1 , 2 , . . . , n : A L felttelek A-n. Ekkor
64 FEJEZET 7. PROGRAMKONSTRUKCIK

A
S0
S0
S0

a1 S0
de S0 de
a2
S0
S0
a3
S0
S0

7.2. bra. Ciklus

1. S = (S1 ; S2 ),
2. IF = (1 : S1 , 2 : S2 , . . . , n : Sn ),
3. DO = (, S0 )
programok A-n.
Bizonyts: Mindhrom konstrukci defincijban explicit szerepel, hogy relci
A A -on, s DS = A, azaz teljesl a program defincijnak elso pontja. A to-
vbbiakban esetekre bontva megvizsgljuk a msik kt kritrium teljeslst.
1. Legyen a A tetszoleges, s S(a). Ekkor kt eset lehetsges:
Ha S1 (a) s ebben az esetben 1 = a s = red() trivilisan
teljesl, hiszen S1 program.
Ha = 2 (1 , 2 ) gy, hogy 1 S1 (a) s 2 S2 ( (1 )). Ekkor a 2
defincija miatt reduklt. Msrszt 1 = 11 , teht 1 = a.
2. Legyen a A tetszoleges, s IF (a). Ekkor
n
[
wi (a).
i=0

Tegyk fel, hogy w0 (a). Ekkor = ha, a, . . . i, teht teljesti a pro-


gram defincijnak kritriumait.
Tegyk fel, hogy i [1..n] : wi (a). Ekkor Si (a), gy mivel Si
program, teljesti a definciban megkvnt tulajdonsgokat.
3. Legyen a A tetszoleges, s DO(a).
Tegyk fel, hogy (a). Ekkor = hai, gy az elo rt tulajdonsgok trivi-
lisan teljeslnek.
Tegyk fel, hogy (a). Ekkor hrom eset lehetsges:
7.2. A PROGRAMKONSTRUKCIK PROGRAMFGGVNYE 65

(a) A :
Ekkor n N : = n (1 , . . . , n ), gy n defincija miatt
reduklt. Msrszt felhasznlva, hogy 1 S0 (a) s 1 = 11 ,
1 = a is teljesl.
(b) n N : = n (1 , . . . , n ) i [1..n 1] : i A n
A : Ekkor a kritriumok teljeslse az elo zo ponttal analg mdon
ellenorizheto.
(c) = (1 , 2 , . . . ):
Ekkor a defincija alapjn reduklt sorozat, s 1 = 11 = a is
teljesl.

7.2. A programkonstrukcik programfggvnye


Miutn belttuk, hogy meglevo programokbl a programkonstrukcik segtsgvel j
programokat kszthetnk, vizsgljuk meg, hogy milyen kapcsolat van a konstrult
programok programfggvnye s az eredeti programok programfggvnye kztt.
A szekvencia a legegyszerubb programkonstrukci, ennek megfelel o en a program-
fggvnye is egyszeruen felrhat a kt komponensprogram programfggvnynek se-
gtsgvel. Mivel a szekvencia kt program egyms utni elvgzst jelenti, vrhat,
hogy a programfggvnye a kt komponensprogram programfggvnynek kompoz-
cija. Azonban mint ltni fogjuk kompozci helyett szigor kompozcit kell alkal-
mazni.
7.7. TTEL : A SZEKVENCIA PROGRAMFGGVNYE
Legyen A tetszoleges llapottr, S1 , S2 programok A-n, S = (S1 ; S2 ). Ekkor
p(S) = p(S2 ) p(S1 ).

Bizonyts: Legyen a A tetszoleges. Ekkor


a Dp(S) S(a) A
S1 (a) A S1 (a) : S2 ( ()) A
a Dp(S1 ) p(S1 )(a) Dp(S2 )
a Dp(S2 ) p(S1 )
teht:
Dp(S) = Dp(S2 ) p(S1 ) .
Legyen a Dp(S) . Ekkor
(a, a0 ) p(S2 ) p(S1 )
b A : (a, b) p(S1 ) (b, a0 ) p(S2 )
S1 (a), S2 (b) : () = b () = a0
(a, a0 ) p(S).

Vegyk szre, hogy a nem szigor kompozci rtelmezsi tartomnyban olyan


pont is lehet, amelyhez a szekvencia rendel vgtelen sorozatot is. Nzznk erre egy
egyszeru pldt: Legyen A = {1, 2},
S1 = {(1, h1i), (1, h1, 2i), (2, h2i)},
S2 = {(1, h1, 2i), (2, h2, 2, . . . i)}.
66 FEJEZET 7. PROGRAMKONSTRUKCIK

Ekkor 1 Dp(S2 )p(S1 ) , de h1, 2, 2, 2, . . . i S(1).


Mivel az elgazst tbb programbl kpezzk, a programfggvnyt is csak kiss
krlmnyesebben tudjuk megfogalmazni. Hiszen az, hogy egy ponthoz az elgazs
rendel-e vgtelen sorozatot attl is fgg, hogy mely felttelek igazak az adott pontban.
Sot, ha egy pontban egyetlen felttel sem igaz, akkor a komponensprogramok pro-
gramfggvnytol fggetlenl abban a pontban az elgazs programfggvnye nem
lesz rtelmezve. Az elgazs programfggvnynek formlis megfogalmazst adja
meg a kvetkezo ttel.
7.8. TTEL : A Z ELGAZS PROGRAMFGGVNYE
Legyen A tetszoleges llapottr, S1 , S2 , . . . , Sn AA programok, valamint
1 , 2 , . . . , n : A L felttelek A-n, IF = (1 : S1 , . . . , n : Sn ). Ekkor

W
n
Dp(IF ) = {a A | i (a) i [1, n] : i (a) a Dp(Si ) }
i=1

a Dp(IF ) :
n
[
p(IF )(a) = pwi (a),
i=1

ahol

p(Si )(a), ha i (a)
pwi (a) =
, klnben

Bizonyts: Legyen a A tetszoleges. Ekkor

a Dp(IF ) IF (a) A
S
n
i [1..n] : i (a) wi (a) A
i=1
i [1..n] : i (a) i [1..n] : i (a) a Dp(Si ) .

Legyen tovbb a Dp(IF ) . Ekkor

n
! n
[ [
p(IF )(a) = wi (a) = pwi (a).
i=1 i=1

Termszetesen, ha az elgazs-felttelek lefedik az egsz llapotteret, akkor az a


felttel, hogy valamelyik i -nek igaznak kell lennie, trivilisan teljesl.
Ahhoz, hogy a ciklus programfggvnyt egyszeruen megfogalmazhassuk, beve-
zetnk nhny tovbbi fogalmat.
7.9. TTEL : A CIKLUS PROGRAMFGGVNYE
Legyen A tetszoleges llapottr, S program, felttel A-n, DO = (, S). Ekkor

p(DO) = p(S)| .
7.3. LEVEZETSI SZABLYOK 67

Bizonyts: Legyen a A tetszoleges. Ekkor


a Dp(DO) DO(a) A
m

{hai}, ha (a)


{ A | n N : = n (1 , . . . , n )
DO(a) = 1 S(a) i [1..n 1] :



i+1 S( (i )) ( (i ))

( (n ))}, ha (a)
m
(a) (6 A : 1 = a i N : i+1 p(S)(i ) (i ))
m
a Dp(S)|
teht Dp(DO) = Dp(S)| . Msrszt legyen a Dp(DO) . Ekkor

Ha (a) akkor
p(DO)(a) = a = p(S)| (a).
Ha (a) akkor p(DO)(a) =
= ({ A | n N : = n (1 , . . . , n ) 1 S(a)
i [1..n 1] : i+1 S( (i )) ( (i )) ( (n ))}) =
= ({ A | 1 = a i [1..|| 1] : i+1 p(S)(i )
(i ) ( ())}) =
= {b A | k N : b (p(S)| )k (a) (b)}
= p(S)| (a).

7.3. Levezetsi szablyok


Ebben az alfejezetben megvizsgljuk a programkonstrukcik s a specifikci kapcso-
latt.
Eloszr azt fogjuk megvizsglni, hogy a szekvencia adott utfelttelhez tartoz
leggyengbb elofelttele milyen kapcsolatban van az o t alkot programok leggyengbb
elofelttelvel.
7.10. TTEL : A SZEKVENCIA LEVEZETSI SZABLYA
Legyen S = (S1 ; S2 ), s adott Q, R s Q0 llts A-n. Ha
(1) Q lf (S1 , Q0 ) s
(2) Q0 lf (S2 , R)
akkor Q lf (S, R).
Bizonyts: Legyen q dQe. Ekkor (1) miatt q Dp(S1 ) s p(S1 )(q) dQ0 e. Mivel
(2) miatt dQ0 e Dp(S2 ) : q Dp(S2 ) p(S1 ) = Dp(S) .
Tovbb (2) miatt p(S2 ) p(S1 )(q) dRe, teht q lf (S, R).

A szekvencia levezetsi szablya s a specifikci ttele alapjn a kvetkezot mond-


hatjuk: ha S1 s S2 olyan programok, amelyekre a paramtertr minden b pontjban
Qb lf (S1 , Q0b ) s Q0b lf (S2 , Rb ) teljesl, akkor (S1 ; S2 ) megoldja a Qb , Rb
prokkal adott feladatot.
68 FEJEZET 7. PROGRAMKONSTRUKCIK

7.11. TTEL : A SZEKVENCIA LEVEZETSI SZABLYNAK MEGFORDTSA


Legyen S = (S1 ; S2 ), s Q, R olyan lltsok A-n, amelyekre Q lf (S, R).
Ekkor Q0 : A L llts, amire

(1) Q lf (S1 , Q0 ) s
(2) Q0 lf (S2 , R).

Bizonyts: Legyen Q0 = lf (S2 , R). Ekkor (2) automatikusan teljesl. Csak (1)
fennllst kell beltnunk. Ehhez indirekt feltesszk, hogy

q dQe : q 6 dlf (S1 , lf (S2 , R))e.

Ez ktflekppen fordulhat elo:

q 6 Dp(S1 ) , de ez ellentmond annak a felttelnek, mely szerint dQe Dp(S)


Dp(S1 ) .

p(S1 )(q) 6 dlf (S2 , R)e. Ekkor legyen r p(S1 )(q) \ dlf (S2 , R)e. Ekkor kt
eset lehetsges:

r 6 Dp(S2 ) . Ez ellentmond annak, hogy q Dp(S2 ) p(S1 ) .


p(S2 )(r) 6 dRe: Legyen s p(S2 )(r) \ dRe. Ekkor s p(S)(q) s
s 6 dRe, s ez ellentmond a p(S)(q) dRe felttelnek.

Vizsgljuk meg, mi a kapcsolat az elgazs s az o t alkot programok adott utfel-


ttelhez tartoz leggyengbb elo felttele kztt.
7.12. TTEL : A Z ELGAZS LEVEZETSI SZABLYA
Legyen IF = (1 : S1 , . . . , n : Sn ), s adott Q, R llts A-n. Ha

i [1..n] : Q i lf (Si , R),

akkor !
n
_
Q i lf (IF, R).
i=1

Bizonyts: Legyen q dQe, s tegyk fel, hogy valamelyik felttel igaz q-ra, azaz
i [1..n] : i (q). Ekkor q Dp(IF ) , ui.

j [1..n] : q j q dlf (Sj , R)e q Dp(Sj ) .

Msrszt mivel j [1..n] : j (q) p(Sj )(q) dRe:


[
p(IF )(q) = p(Sj )(q) dRe,
j[1..n]
j (q)

azaz q dlf (IF, R)e.

Felhasznlva a specifikci ttelt s az elgazs levezetsi szablyt azt mondhat-


juk: Legyen adott az F feladat specifikcija (A, B, Q, R). Ekkor ha minden b B
paramterre s minden Si programra Qb i lf (Si , Rb ), s minden b paramterhez
7.3. LEVEZETSI SZABLYOK 69

van olyan i felttel, amelyre Qb i , akkor az elgazs megoldja a Qb , Rb prokkal


specifiklt feladatot.
Hasonlan a szekvencia levezetsi szablyhoz az elgazs levezetsi szablya is
megfordthat, teht ha egy elgazs megold egy specifiklt feladatot, akkor le is lehet
vezetni.
7.13. TTEL : A Z ELGAZS LEVEZETSI SZABLYNAK MEGFORDTSA
Legyen IF = (1 : S1 , . . . , n : Sn ), s Q, R olyan lltsok A-n, amelyekre
n
!
_
Q i lf (IF, R).
i=1

Ekkor
i [1..n] : Q i lf (Si , R).

Bizonyts: Indirekt: tegyk fel, hogy

i [1..n] : dQ i e 6 dlf (Si , R)e.

Legyen q dQ i e \ dlf (Si , R)e. Ekkor kt eset lehetsges:

q 6 Dp(Si ) . Ez ellentmond annak a feltevsnek, hogy q Dp(IF ) .

p(Si )(q) 6 dRe. Ekkor

p(Si )(q) p(IF )(q) dRe

teht ellentmondsra jutottunk.

Termszetesen nem elg az elgazs levezetsi szablynak teljeslst vizsglni,


ha arra vagyunk kvncsiak, hogy az elgazs megold-e egy feladatot. Soha nem sza-
bad elfeledkeznnk arrl, hogy leelleno rizzk, hogy a felttelek lefedik-e a feladat
rtelmezsi tartomnyt.
W
n
Ha b B : Qb i , akkor a levezetsi szably teljeslse a specifikci
i=1
ttele alapjn garantlja, hogy az elgazs megoldja a feladatot.
Az elozo kt konstrukcihoz hasonlan most megvizsgljuk, hogy milyen kapcso-
lat van a ciklus s a ciklusmag leggyengbb elo felttele kztt.
7.14. TTEL : A CIKLUS LEVEZETSI SZABLYA
Adott P , Q, R llts A-n, t : A Z fggvny s legyen DO = (, S0 ). Ha

(1) Q P
(2) P R
(3) P t > 0
(4) P lf (S0 , P )
(5) P t = t0 lf (S0 , t < t0 )

akkor
Q lf (DO, R).
70 FEJEZET 7. PROGRAMKONSTRUKCIK

Jellje a tovbbiakban g a ciklusmag programfggvnynek a ciklusfelttelre vo-


natkoz leszuktst, azaz g = p(S0 )|de . Mielott magt a levezetsi szablyt bizony-
tannk, ennek a g relcinak ltjuk be kt tulajdonsgt:
1. llts: Legyen q dP e. Ekkor

k N0 : g k (q) dP e.

Bizonyts: k szerinti teljes indukcival:

k = 0: g 0 (q) = q dP e
Tegyk fel, hogy g k (q) dP e. Legyen r g k (q) tetszoleges. Ekkor kt eset
lehetsges:
r dP e. Ekkor g(r) = r dP e.
r dP e. Ekkor (4) miatt r Dp(S0 ) g(r) = p(S0 )(r) dP e.

Teht: g k+1 (q) dP e.

2. llts: Legyen q dP e. Ekkor

n t(q) : g n (q) de.

Bizonyts: Indirekt: tegyk fel, hogy n N : g n (q) de. Tekintsnk egy


tetszoleges b p(S0 )(q) pontot. Ekkor t(b) < t(q), ugyanis (5)-ben t0 helyre t(q)-t
rva: t(b) < t(q) teljesl. Ekkor viszont

max t(b) < max t(b) < < max t(b) < t(q),
bg t(q)+1 (q) bg t(q) (q) bg(q)

azaz
max t(b) < 0.
bg t(q)+1 (q)

Ez viszont ellentmond (3)-nak.

Bizonyts: (Ciklus levezetsi szablya) Legyen q dQe tetszo leges. Mivel (1) miatt
dQe dP e, ezrt q dP e vagy q dP e teljesl.
Tegyk fel, hogy q dP e. Ekkor a ciklus defincija alapjn p(DO)(q) =
{q}, msrszt (2) miatt q dRe, teht q dlf (DO, R)e.
Tekintsk most azt az esetet, amikor q dP e teljesl. Ekkor a 2. llts
alapjn
n N0 : (p(S0 )| )n (q) = ,
azaz
q Dp(DO) .
Ekkor a felttelre vonatkoz lezrt defincija alapjn:

p(DO)(q) de.

Msrszt az 1. llts miatt

p(DO)(q) dP e,
7.3. LEVEZETSI SZABLYOK 71

s ekkor (2) miatt


p(DO)(q) dP e dRe,
teht
q dlf (DO, R)e.

A levezetsi szablyban szereplo P lltst a ciklus invarins tulajdonsgnak, a t


fggvnyt terminlfggvnynek nevezzk. A P invariancijt az (1) s (4) feltte-
lek biztostjk: garantljk, hogy az invarins tulajdonsg a ciklusmag minden lefutsa
elott s utn teljesl. A terminlfggvny a ciklus befejezo dst biztostja: az (5) pont
alapjn a ciklusmag minden lefutsa legalbb eggyel cskkenti a terminlfggvnyt,
msrszt a (3) miatt a terminlfggvnynek pozitvnak kell lennie. A (2) felttel ga-
rantlja, hogy ha a ciklus befejezo dik, akkor az utfelttel igazsghalmazba jut.
A ciklus levezetsi szablynak s a specifikci ttelnek felhasznlsval elg-
sges felttelt adhatunk a megoldsra: ha adott a feladat specifikcija (A, B, Q, R),
s tallunk olyan invarins lltst s terminlfggvnyt, hogy a paramtertr minden
elemre teljesl a ciklus levezetsi szablynak t felttele, akkor a ciklus megoldja a
(Qb , Rb ) prokkal definilt feladatot.
A ciklus levezetsi szablya visszafel nem igaz, azaz van olyan ciklus, amit nem
lehet levezetni. Ennek az az oka, hogy egy levezetett ciklus programfggvnye min-
dig korltos lezrt, hiszen az llapottr minden pontjban a terminlfggvny rtke
korltozza a ciklusmag lefutsainak szmt.
Az is knnyen lthat, hogy ha a ciklus programfggvnye nem korltos lezrt, ak-
kor nem tudunk a ciklushoz terminlfggvnyt adni. m ha egy ciklus programfgg-
vnye megegyezik a ciklusmag ciklusfelttelre vonatkoz korltos lezrtjval, akkor a
ciklus levezetheto.
7.15. TTEL : A CIKLUS LEVEZETSI SZABLYNAK MEGFORDTSA
Legyen DO = (, S0 ), s Q, R olyan lltsok A-n, amelyekre Q lf (DO, R),
s tegyk fel, hogy p(DO) = p(S0 )| . Ekkor ltezik P llts s t : A Z
fggvny, amelyekre
(1) Q P
(2) P R
(3) P t > 0
(4) P lf (S0 , P )
(5) P t = t0 lf (S0 , t < t0 )
Bizonyts: Legyen P = lf (DO, R) s vlasszuk t-t gy, hogy a A:

0, ha a 6 Dp(DO) de
t(a) =
max{i N | p(S0 )i (a) de 6= }, ha a Dp(DO) de

Ekkor
(1) Q lf (DO, R) trivilisan teljesl.
(2) Legyen a dP e. Ekkor mivel a dlf (DO, R)e, p(DO)(a) dRe.
Msrszt mivel a de, p(DO)(a) = a. Teht a dRe, azaz dP e dRe.
(3) t defincija miatt nyilvnval.
72 FEJEZET 7. PROGRAMKONSTRUKCIK

(4) Felhasznlva a lezrt azon egyszeru tulajdonsgt, hogy

a DR = R(a) DR

a kvetkezo eredmnyt kapjuk: Legyen a dlf (DO, R) e. Ekkor

a Dp(S0 ) , s p(S0 )(a) dlf (DO, R)e,

teht
a lf (S0 , P ).

(5) A t defincijbl leolvashat, hogy a ciklusmag egyszeri vgrehajtsa cskkenti a


terminlfggvny rtkt:
Legyen a dP e, t0 = t(a), b p(S0 )(a). Ekkor ha

t(a) = max{i N | p(S0 )i (a) de 6= }

akkor
t(b) < t(a)
azaz
t(b) < t0 .

Azt, hogy a lezrt s a korltos lezrt megegyezik, a t defincijban hasznltuk ki:


ez a felttel garantlja, hogy a definciban szereplo maximum vges.

7.4. Pldk
7.5. Feladatok
7.1. A = {1, 2, 3, 4, 5, 6}. d1 e = {1, 2, 3, 4}. d2 e = {1, 3, 4, 5}.

S1 = { 114 112 . . . 22132 336


4463 4451 5563 6612 }
S2 = { 1134 1121 22132 . . . 336
4463 4451 . . . 55632 661 . . . }

Add meg az (S1 ; S2 ), IF (1 : S1 , 2 : S2 ), DO(1 , S1 ) programokat s a


programfggvnyeiket!
7.2. A = {1, 2, 3, 4, 5, 6}, d1 e = {1, 2, 3, 4}, d2 e = {2, 3, 4}, d3 e = {1, 4, 6}.

S1 = { 112 . . . 223 33456


4463 553 662 }
S2 = { 112 224 33 . . .
443 55 661 }
S3 = { 112 22 . . . 331
4432 55 . . . 663 . . . }

IF (1 : S1 , 2 : S2 , 3 : S3 ) =? Dp(IF ) =? p(IF ) =?
7.5. FELADATOK 73

7.3. Fejezzk ki a SKIP ill. az ABORT programot egy tetszo leges S program s a
programkonstrukcik segtsgvel!

7.4. Legyen S1 s S2 egy-egy program az A llapottren. Igaz-e, hogy S2 S1


megegyezik (S1 ; S2 )-vel?

7.5. S = (S1 ; S2 ). Igaz-e, hogy

a) Dp(S) = dlf (S1 , P(Dp(S2 ) ))e


b) tetszoleges R utfelttelre: lf ((S1 ; S2 ), R) = lf (S1 , lf (S2 , R))?

7.6. Van-e olyan program, ami felrhat szekvenciaknt is, elgazsknt is, s felr-
hat ciklusknt is?

7.7. Igaz-e, hogy minden program felrhat szekvenciaknt is, elgazsknt is, s
felrhat ciklusknt is?
S
n
7.8. IF = (1 : S1 , . . . , n : Sn ). Igaz-e, hogy Dp(IF ) = (ectionk Dp(Sk ) )?
k=1

7.9. Legyen S1 , S2 , . . . , Sn program A-n! IF = (1 : S1 , . . . , n : Sn ). S =


S1 S2 Sn . Keressnk olyan k feltteleket s Sk programokat, hogy
Dp(IF ) = A s Dp(S) = !

7.10. IF = (1 : S1 , . . . , n : Sn ). S = S1 S2 Sn . Igaz-e, hogy p(IF )


rsze p(S)-nek?

7.11. Igaz-e? Ha IF = (1 : S1 , 2 : S2 ), akkor Dp(IF ) = (d1 e d2 e Dp(S1 )


Dp(S2 ) ) (Dp(S1 ) (d1 e \ d2 e)) (Dp(S2 ) (d2 e \ d1 e))?

7.12. A = {1, 2, 3, 4}.



 IF 

\ i=1 \ i2
i := 2 i SKIP

Milyen sorozatokat rendel S1 , S2 , IF az llapottr egyes pontjaihoz?

7.13. S = (S1 ; S2 ). S1 megoldja F1 -et s S2 megoldja F2 -t. Megoldja-e S az

a) F = F2 F1
b) F = F2 F1 feladatot?

7.14. S = (S1 ; S2 ). S megoldsa az (F2 F1 ) feladatnak.


Megoldja-e S1 az F1 -et ill. S2 az F2 -t?

7.15. IF = (1 : S1 , . . . , n : Sn ). F A A feladat. k [1, n] : Sk megoldja


az F |dk e feladatot.

a) IF megoldja-e az F feladatot?
b) IF megoldja-e az F feladatot, ha 1 2 n = igaz?
c) IF megoldja-e az F feladatot, ha DF d1 2 n e?
74 FEJEZET 7. PROGRAMKONSTRUKCIK

7.16. IF = (1 : S1 , . . . , n : Sn ). F A A feladat. IF megoldja az F feladatot.


Igaz-e, hogy k [1, n] : Sk megoldja az F |dk e feladatot?

7.17. IF = (1 : S1 , . . . , n : Sn ). F1 , . . . , Fk A A feladat. k [1, n] : Sk


megoldja az Fk feladatot. Megoldja-e IF az F = F1 Fn feladatot?

7.18. IF = (1 : S1 , . . . , n : Sn ). F A A feladat. IF megoldja az F feladatot


s d1 e dn e DF . Igaz-e, hogy k [1, n] : Sk megoldja az F |dk e
feladatot.

7.19. IF = (1 : S1 , . . . , n : Sn ). F1 , . . . , Fn A A feladat. k [1, n] :


DFk dk e s Sk megoldja az Fk feladatot. F = F1 Fn . Megoldja-e
IF az F feladatot?

7.20. Igaz-e, hogy IF1 = (1 : S1 , 2 : S2 ) s IF2 = (1 : S1 , 1 2 : S1 S2 , 2 :


S2 )

a) egyenlo?
b) ekvivalens?

7.21. Legyen IF34 = (3 : S3 , 4 : S4 ), IF1 = (1 : S1 , 2 : IF34 ), IF2 = (1 :


S1 , 2 3 : S3 , 2 4 : S4 )! Igaz-e, hogy IF1 s IF2

a) egyenlo?
b) ekvivalens?

7.22. F A A feladat. S0 program A-n. S0 megoldja F -et. Megoldja-e a


DO(, S0 ) program az F feladat -re vonatkoz lezrtjt?

7.23. Legyen DO = (, S)! Igaz-e, hogy

a) p(DO) p(S)?
b) p(S) p(DO)?

7.24. A = N0 N0
i n
S = ((i := 0; DO(i 6= n, IF ( 2|i : i := i + 1, 2 6 |i : i := i + 2))))

 S 
i := 0
i 6= n
2|i 2 6 |i
\ \
i := i + 1 i := i + 2

Milyen sorozatokat rendel S a (2, 4) ill. a (3, 7) ponthoz?

7.25. Tegyk fel, hogy teljesl a ciklus levezetsi szablynak mind az t felttele, s
Q igazsghalmaza nem res. Lehet-e res a

a) dP Re
b) dP Re halmaz?
7.5. FELADATOK 75

7.26. Tegyk fel, hogy teljesl a ciklus levezetsi szablynak mind az t felttele,
s (Q ) igazsghalmaza nem res. Lehet-e res a lf (S0 , P ) s lf (DO, R)
igazsghalmaznak metszete?
7.27. Tegyk fel, hogy teljesl a ciklus levezetsi szablynak mind az t felttele.
Legyen g = p(S0 ) (de A) s q dP e de. Igaz-e, hogy
a) k N0 : g k (q) dP e
b) b g k (q) de dP e t(b) t(q) k?
c) g| = p(S0 )| ?
d) k N0 : k t(q) g k (q) de?
7.28. Legyen S = (S1 ; S2 ) s Q, Q0 s R olyan lltsok, amelyekre
Q lf (S, R), Q0 lf (S2 , R), Q lf (S1 , Q0 ).
Lehetsges-e, hogy dQe dRe = dQe dQ0 e 6= dQ0 e dRe 6= ?
Indokold, ha nem, s rj r pldt, ha igen!
7.29. A = Z N0 B = Z N0
z y z0 y0
0 0
Q = (x = x y = y )
R = (x = x0 y 0 y = 0)
S0 = {((x, y), < (x, y), (x 1, y), (x 1, y 1) >) | x Z s y N}
{((x, 0), < (x, 0) >) | x Z}
DO ={ ((x, y), < (x, y), (x 1, y), (x 1, y 1), (x 2, y 1),
(x 2, y 2), . . . , (x y + 1, 1), (x y, 1)(x y, 0) > ) | x Z s y N0 }
Megjegyzs: Az (x, 0) prhoz 1 hosszsg, az (x, 1) prhoz 3 hosszsg, az
(x, 2) prhoz 5 hosszsg sorozatot rendel a program.
Tudjuk, hogy DO = (; S0 ) valamilyen -re. Igaz-e, hogy tallhat olyan P
llts s t : A Z fggvny, hogy a ciklus levezetsi szablynak felttelei
teljeslnek, s ha igen, adj meg egy megfelelo -t, P -t s t-t!
7.30. A = Z Z Z Z Z B= Z Z
k x i a b a0 b0
S = (k := 5; ((a > b : x := a b, a b : x := b a); i := i + 1))
Q = (a = a0 b = b0 i [0, 1] |a b| > 10)
R = (a = a0 b = b0 k i x)
Bizonytsuk be, hogy Q lf (S, R)!
76 FEJEZET 7. PROGRAMKONSTRUKCIK

7.6. A programkonstrukcik s a kiszmthatsg


Ebben az alfejezetben kis kitrot tesznk a kiszmthatsg-elmlet fel, s megmu-
tatjuk, hogy az imnt bevezetett hrom programkonstrukci segtsgvel minden el-
mletileg megoldhat feladatot meg tudunk oldani. Ehhez kapcsolatot ltestnk a
kiszmthat fggvnyek s a jl konstrult programok kztt.

7.6.1. Parcilis rekurzv fggvnyek


A Church tzis szerint a kiszmthat fggvnyek halmaza megegyezik a parcilis re-
kurzv fggvnyek halmazval. A kiszmthatsg ezen modelljben csak f N m
Nn tpus fggvnyek szerepelnek. Elo szr az alapfggvnyeket definiljuk:
suc : N N, x N:
suc(x) = x + 1,
(n)
n N0 : c1 : Nn N, (x1 , . . . , xn ) Nn :
(n)
c1 (x1 , . . . , xn ) = 1,

(n)
n N : i [1..n] : pri : Nn N, (x1 , . . . , xn ) Nn :
(n)
pri (x1 , . . . , xn ) = xi .

A tovbbiakban definilunk nhny elemi fggvny-opertort:


Kompozci Legyen f Nm Nn s g Nn Nk . Az f s g kompozcija az
albbi fggvny:
g f Nm Nk , Dgf = {x Df | f (x) Dg } s x Dgf :
(g f )(x) = g(f (x)).
Vegyk szre, hogy ez az opertor megegyezik az alapfogalmaknl bevezetett re-
lcik kztti kompozcival (tulajdonkppen a szigor kompozcival, de fgg-
vnyek esetn ez a ketto azonos).
Uni Legyen k N rgztett, s i [1..k] : fi Nm Nni . E fggvnyek
T
k
unija (f1 , f2 , . . . , fk ) N Nn1 Nnk , D(f1 ,f2 ,...,fk ) = Dfi s
i=1
x D(f1 ,f2 ,...,fk ) :
(f1 , f2 , . . . , fk )(x) = (f1 (x), . . . , fk (x)).

Rekurzi Legyen n rgztett, f Nn N s g Nn+2 N. Az f fggvny g


szerinti rekurzija %(f, g) Nn+1 N, s
%(f, g)(x1 , . . . , xn , 1) = f (x1 , . . . , xn ),
%(f, g)(x1 , . . . , xn , k + 1) = g(x1 , . . . , xn , k, %(f, g)(x1 , . . . , xn , k)).

A fggvnyhez hasonlan rekurzvan definilhatnnk ennek a fggvnynek az


rtelmezsi tartomnyt, de ez kvl esik a jelenlegi vizsgldsunk krn. Ezrt
csak azt mondjuk, hogy az rtelmezsi tartomny azon pontok halmaza, ahonnt
kiindulva a fenti rekurzi elvgezheto .
7.6. A PROGRAMKONSTRUKCIK S A KISZMTHATSG 77

-opertor Legyen f Nn+1 N. A -opertort erre a fggvnyre alkalmazva


azt a (f ) Nn N fggvnyt kapjuk, amelyre D(f ) = {(x1 , . . . , xn )
Nn | y N : f (x1 , . . . , xn , y) = 1 i [1..y 1] : (x1 , . . . , xn , i) Df },
s (x1 , . . . , xn ) D(f ) :

mu(f )(x1 , . . . , xn ) = min{y | f (x1 , . . . , xn , y) = 1}.

A fenti alapfggvnyek s a bevezetett opertorok segtsgvel mr definilhat a


parcilis rekurzv fggvnyek halmaza.
7.4. Definci (PARCILIS REKURZV FGGVNY). Az f : Nm Nn (n, m N)
fggvny akkor s csak akkor parcilis rekurzv, ha az albbiak egyike teljesl:
f az alapfggvnyek valamelyike
f kifejezheto a fenti opertorok parcilis rekurzv fggvnyekre trtno alkalma-
zsval.

7.6.2. A parcilis rekurzv fggvnyek kiszmtsa


Ahhoz, hogy a fenti fggvnyeket kiszmt programokat tudjunk adni, definilnunk
kell az ilyen fggvnyek ltal meghatrozott feladatot. Legyen f : N m Nn egy
tetszoleges fggvny (m, n rgztett). Az f ltal meghatrozott feladat specifikcija:
A = N ... N N ... N
x1 xm y1 ym
B = N ... N
x01 x0m
Q : (x1 = x01 xm = x0m (x1 , . . . , xm ) Df )
R : (Q (y1 , . . . , yn ) = f (x01 , . . . , x0m ))
Most megmutatjuk, hogy minden parcilis rekurzv fggvny ltal meghatrozott
feladat megoldhat jl konstrult programmal (jl konstrultnak tekintnk egy pro-
gramot, ha elemi programokbl a fenti hrom konstrukcival megkaphat). A bizony-
tshoz csak annyit kell feltteleznnk, hogy az alapfggvnyek kiszmthatk (megen-
gedett) elemi programokkal.
A fenti felttelezst felhasznlva elegendo azt megmutatni, hogy az elemi fggvny-
opertorok (kompozci, uni, rekurzi, -opertor) kiszmthatk jl konstrult pro-
gramokkal.

Kompozci. Legyen f Nm Nn s g Nn Nk . Ekkor az g f ltal


meghatrozott feladat specifikcija:
A = N ... N N ... N
x1 xm y1 yk
B = N ... N
x01 x0m
Q : (x1 = x01 xm = x0m (x1 , . . . , xm ) Dgf )
R : (Q (y1 , . . . , yn ) = (g f )(x01 , . . . , x0m ))
Jelljk z1 , . . . , zn := f (x1 , . . . , xm )-mel azt a programot, amely kiszmtja f -et,
s hasonlan y1 , . . . , yk := g(z1 , . . . , zn )-nel azt, amelyik kiszmtja g-t. Tegyk fel,
hogy ez a kt program vagy elemi rtkads, vagy jl konstrult program. Ebben az
78 FEJEZET 7. PROGRAMKONSTRUKCIK

esetben a kt program szekvencija kiszmtja g f -et, azaz megoldja a fent speci-


fiklt feladatot. Legyen Q0 a msodik program R utfelttelhez tartoz leggyengbb
elofelttele:
Q0 : (Q g(z1 , . . . , zn ) = (g f )(x01 , . . . , x0m ) (z1 , . . . , zn ) Dg )
Most vizsgljuk meg az elso program ezen Q0 utfelttelhez tartoz leggyengbb elo -
felttelt:

lf (z1 , . . . , zn := f (x1 , . . . , xm ), Q0 ) = (Q g(f (x1 , . . . , xm ))) =


((g f )(x01 , . . . , x0m ) f (x1 , . . . , xm ) Dg (x1 , . . . , xm ) Df )

Knnyen lthat, hogy ez a leggyengbb elo felttel kvetkezik Q-bl, s gy a szek-


vencia levezetsi szablya s a specifikci ttelnek alkalmazsval belttuk, hogy
a

z1 , . . . , zn := f (x1 , . . . , xm )
y1 , . . . , yk := g(z1 , . . . , zn )
program megoldja a fent specifiklt feladatot, azaz kiszmtja f s g kompozcijt.

Uni. Legyen k N rgztett, s i [1..k] : fi Nm Nni . Ekkor az e


fggvnyek unija ltal meghatrozott feladat specifikcija:
A = N ... N
x1 xm
N ... N
y1 1 y 1 n1
..
.
N ... N
yk 1 y k nk
B = N ... N
x01 x0m
Q : (x1 = x01 xm = x0m (x1 , . . . , xm ) D(f1 ,...,fk ) )
R : (Q (y1 1 , . . . , y1 n1 . . . yk 1 , . . . , yk nk ) = (f1 , . . . , fk )(x01 , . . . , x0m ))
Tegyk fel, hogy a komponens fggvnyek kiszmthatk jl konstrult programmal,
vagy elemi rtkadssal. Jellje yi 1 , . . . , yi ni := fi (x1 , . . . , xm ) az i-edik fggvnyt
(1 i k) kiszmt programot. Ekkor ezeknek a programoknak a szekvencija
megoldja a fenti feladatot. Legyen Qk a k-adik program R utfelttelhez tartoz leg-
gyengbb elofelttelt:
Qk : (Q (y1 1 , . . . , y1 n1 . . . yk1 1 , . . . , yk1 nk1 , fk (x1 , . . . , xm )) =
(f1 , . . . , fk )(x01 , . . . , x0m ) (x1 , . . . , xm ) Dfk )
Tovbb minden i [1..k 1] esetn jellje Qi az i-edik program Qi+1 -hez tartoz
leggyengbb elofelttelt. Knnyen lthat, hogy az rtkads leggyengbb el o feltte-
lre vonatkoz szablyt alkalmazva:
Q1 : (Q (f1 (x1 , . . . , xm ), . . . , fk (x1 , . . . , xm )) = (f1 , . . . , fk )(x01 , . . . , x0m )
(x1 , . . . , xm ) Df1 (x1 , . . . , xm ) Dfk )
Ha most Q-t s Q1 -et sszehasonltjuk, szrevehetjk, hogy megegyeznek. A szekven-
cia levezetsi szablya s a specifikci ttele alapjn a
7.6. A PROGRAMKONSTRUKCIK S A KISZMTHATSG 79

y1 1 , . . . , y1 n1 := f1 (x1 , . . . , xm )
..
.
yk 1 , . . . , yk nk := fk (x1 , . . . , xm )
program megoldsa a fent specifiklt feladatnak, azaz kiszmtja (f1 , . . . , fk )-t.

Rekurzi. Legyen n rgztett, f Nn N s g Nn+2 N. Tegyk fel, hogy


mindketten kiszmthatk jl konstrult programokkal vagy egyszeru rtkadsokkal.
Az f fggvny g szerinti rekurzija ltal meghatrozott feladat specifikcija:

A = N ... N N
x1 xn+1 y
B = N ... N
x01 x0n+1
Q : (x1 = x01 xn+1 = x0n+1 (x1 , . . . , xn+1 ) D%(f,g) )
R : (Q y = %(f, g)(x01 , . . . , x0n+1 ))
Jellje az f -et s a g-t kiszmt programot y := f (x1 , . . . , xn ) illetve y :=
g(x1 , . . . , xn+2 ). Oldjuk meg a feladatot egy olyan ciklussal, amelynek invarins tu-
lajdonsga:
P : (Q k [1..xn+1 ] y = %(f, g)(x01 , . . . , xn , k))
A ciklus levezetsi szablyt vizsglva azt talljuk, hogy Q-bl nem kvetkezik P .
Ezrt adunk egy olyan Q0 felttelt, amelybol mr kvetkezik P , s adunk egy progra-
mot, amely Q-bl Q0 -be jut (gy a megoldprogram egy szekvencia lesz, amelynek
msodik rsze egy ciklus). Legyen Q0 az albbi:
P : (Q k = 1 y = f (x1 , . . . , xn ))
Ez a k, y := 1, f (x1 , . . . , xn ) szimultn rtkadssal elrheto. Az rtkads leg-
gyengbb elofelttelre vonatkoz szably felhasznlsval knnyen lthat, hogy az
kvetkezik Q-bl.
A ciklus levezetsi szablynak msodik pontja alapjn a ciklusfelttel k 6= x n+1
lesz.
A harmadik pontnak megfeleloen vlasszuk a t = xn+1 k kifejezst terminl
fggvnynek.
Az tdik pont azt rja le, hogy az imnt definilt terminl fgvny rtknek a
ciklusmagban cskkennie kell. Ez elrheto a k eggyel val nvelsvel.
A ngyes pont kielgtshez vizsgljuk meg, hogy mi lesz a leggyengbb el o fel-
ttele a k-t nvelo rtkadsnak a P -re vonatkozan.

Q00 = lf (k := k + 1, P ) = (Q k + 1 [1..xn+1 ]
y = %(f, g)(x01 , . . . , x0n , k + 1)).

Most mr a szekvencia levezetsi szablya alapjn csak egy olyan programot kell
tallnunk, amelyre P (k 6= xn+1 ) lf (S, Q00 ). Ez a program a rekurzi definci-
jhoz illeszkedoen pp y := g(x1 , . . . , xn , k, y) lesz.
gy a szekvencia s a ciklus levezets szablya valamint a specifikci ttele garan-
tlja, hogy a
80 FEJEZET 7. PROGRAMKONSTRUKCIK

k, y := 1, f (x1 , . . . , xn )
k 6= xn+1
y := g(x1 , . . . , xn , k, y)
k := k + 1
program megoldja a %(f, g) ltal meghatrozott feladatot, azaz kiszmtja f g szerinti
rekurzijt.

-opertor. Legyen f Nn+1 N, s tegyk fel, hogy f kiszmthat egyszeru


rtkadssal vagy jl konstrult programmal. Tekintsk a (f ) ltal meghatrozott
feladatot:
A = N ... N N
x1 xn y
B = N ... N
x01 x0n
Q : (x1 = x01 xn = x0n (x1 , . . . , xn+1 ) D(f ) )
R : (Q y = (f )(x01 , . . . , x0n ))
Jellje z := f (x1 , . . . , xn , xn+1 ) az f -et kiszmt programot. Oldjuk meg a fela-
datot egy olyan ciklussal, melynek invarinsa:
P : (Q z = f (x1 , . . . , xn , y) i [1..y 1] : f (x1 , . . . , xn , i) 6= 1)
Az invarins a z, y := f (x1 , . . . , xn , 1), 1 szimultn rtkadssal teljestheto . Knnyen
lthat, hogy ennek a programnak a P -re vonatkoz leggyengbb el o felttele

lf (z, y := f (x1 , . . . , xn , 1), 1; P ) = (Q f (x1 , . . . , xn , 1) = f (x1 , . . . , xn , 1)


i [1..1 1] : f (x1 , . . . , xn , i) 6= 1)

kvetkezik Q-bl. A ciklus levezetsi szablynak msodik pontja alapjn a ciklusfel-


ttel z 6= 1 lesz.
A feladat elofelttele garantlja, hogy van olyan m N szm, amelyre f (x1 , . . . , xn , m) =
1 fennll. Legyen N egy ilyen tulajdonsg, rgztett termszetes szm. Ennek az r-
tknek a segtsgvel definilhatjuk a terminl fggvnyt: t = N y. Ez kielgti a
levezets szably harmadik pontjt.
Az tdik pont megkvnja, hogy a terminl fggvny a ciklusmag lefutsa sorn
cskkenjen. Ezt elrhetjk y eggyel val nvelsvel.
A negyedik pont teljestshez legyen Q0 ennek a nvelsnek a P -re vonatkoz
leggyengbb elofelttele:
Q0 : (Q z = f (x1 , . . . , xn , y + 1) i [1..y 1] : f (x1 , . . . , xn , i) 6= 1)
Most mr csak tallnunk kell egy programot a P (z 6= 1) s Q0 lltsok kz. A
z := f (x1 , . . . , xn , y + 1) rtkadsra teljesl, hogy

P (z 6= 1) lf (z := f (x1 , . . . , xn , y + 1), Q0 ).

A specifikci ttele, valamint a ciklus s a szekvencia levezetsi szablya garantlja,


hogy a
7.6. A PROGRAMKONSTRUKCIK S A KISZMTHATSG 81

z, y := f (x1 , . . . , xn , 1), 1
z 6= 1
z := f (x1 , . . . , xn , y + 1)
y := y + 1
program megoldja a (f ) ltal meghatrozott feladatot, azaz kiszmtja (f )-et.

7.6.3. Kvetkezmny
Az elozoekben megmutattuk, hogy ha az alapfggvnyek kiszmthatk egyszeru r-
tkadssal, akkor a belolk a parcilis rekurzv fggvnyeknl megengedett ope-
rtorokkal felptett fggvnyek kiszmthatk jl konstrult programokkal. A Church
tzis szerint a kiszmthat fggvnyek halmaza megegyezik a parcilis rekurzv fgg-
vnyek halmazval. Ezek alapjn kimondhatjuk az albbi ttelt:
7.16. TTEL : S TRUKTURLT PROGRAMOZS S KISZMTHATSG
Minden kiszmthat fggvny kiszmthat egy jl konstrult programmal.

7.6.4. Relcik
Eljutvn az elozo ttelhez, fordtsuk most figyelmnket a relcik fel. Ahhoz, hogy a
relcik kiszmthatsgt megvizsglhassuk, definilnunk kell a kiszmthat relci
fogalmt.
7.5. Definci (R EKURZVAN FELSOROLHAT RELCI). Legyen R Nk Nk
tetszoleges relci. R akkor s csak akkor rekurzvan felsorolhat, ha van olyan f
N2k N parcilis rekurzv fggvny, amelynek rtelmezsi tartomnyra: D f = R.
A kiszmthatsg-elmlethez igazodva, a tovbbiakban csak rekurzvan felsorol-
hat relcikkal fogunk foglalkozni. Ahhoz, hogy megmutassuk, hogy minden kisz-
mthat (rekurzvan felsorolhat) feladat emlkezznk, hogy minden feladat egy rel-
ci megoldhat strukturlt programmal, elo szr megadjuk a rekurzvan felsorolhat
relcik egy msik jellemzst.
7.17. TTEL : K LEENE [1936]
Ha R egy tetszoleges relci, akkor az albbi hrom llts ekvivalens:

(1) R rekurzvan felsorolhat


(2) R egy f parcilis rekurzv fggvny rtkkszlete
(3) R = vagy R egy rekurzv fggvny rtkkszlete.

Ennek a ttelnek a bizonytsa lsd Ref??? konstruktv, azaz megadja mind f , mind
pedig felptst. Mi ezt a fggvnyt fogjuk hasznlni a kiszmthat feladatunk
megoldprogramjban.
Legyen F Nk Nk egy rekurzvan felsorolhat relci, s jellje az elo zo
ttel konstrukcijval kapott (totlis) rekurzv fggvnyt. Specifikljuk a feladatot az
albbi mdon:
A = N k Nk
x y
B = Nk
x0
82 FEJEZET 7. PROGRAMKONSTRUKCIK

Q : (x = x0 x DF )
R : (Q (x, y) F )
Ez a feladat megoldhat egy olyan ciklussal, amelynek invarins tulajdonsga:
P : (Q i N (z, y) = (i))
A ciklus levezetsi szablynak felhasznlsval knnyen belthat, hogy az albbi
program megoldsa a fenti feladatnak:

i, (z, y) := 1, (1)
z 6= x
(z, y) := (i + 1)
i := i + 1
A bizonytsban a terminl fggvny megadsnl ugyanazt a technikt alkalmaz-
zuk, mint a -opertornl.
Ezzel az elozoleg fggvnyekre kimondott ttelnket ltalnosthatjuk relcikra:
7.18. TTEL : S TRUKTURLT PROGRAMOZS S KISZMTHAT RELCIK
Minden kiszmthat relci kiszmthat egy jl konstrult programmal.

Megjegyzs. Az egyetlen feltevs, amit a fenti meggondolsokban hasznltunk az


volt, hogy az alapfggvnyek kiszmthatak. gy aztn ezek az eredmnyek kiterjeszt-
hetok a relatve kiszmthat fggvnyek (ugyanezen opertorokkal egy tetsz o leges
alaphalmazbl kpzett fggvnyek), vagy a parcilis rekurzv funkcionlok halmazra
is (Ref[1, page 174]).
8. fejezet

Tpuskonstrukcik

Az elozo fejezetben megvizsgltuk, hogy milyen leheto sgeink vannak meglevo pro-
gramokbl jak ksztsre. A tovbbiakban azt fogjuk megvizsglni, hogyan hasz-
nlhatunk fel meglvo tpusokat j tpusok ltrehozsra. Ezeket a mdszereket t-
puskonstrukcis mdszereknek, az ltaluk megkaphat tpusokat tpuskonstrukciknak
nevezzk.

8.1. A megengedett konstrukcik


Termszetesen sokfle lehetosgnk van meglevo tpusbl jat csinlni, de mi a to-
vbbiakban csak hrom specilis tpuskonstrukcival fogunk foglalkozni: a direktszor-
zattal, az unival s az iterlttal. Ezeket fogjuk megengedett tpuskonstrukciknak
nevezni.
Az elso tpuskonstrukcis mdszer, amivel megismerkednk a direktszorzat. Le-
gyenek Ti = (%i , Ii , Si ) (i = 1, 2, . . . , n) tpusok, s jelljk T1 , T2 , . . . , Tn -nel a
nekik megfelelo tpusrtkhalmazokat, s E1 , E2 , . . . , En -nel pedig a hozzjuk tartoz
elemi tpusrtkhalmazokat, s vezessk be az E = E1 E2 En s B =
T1 T2 Tn jellst.
8.1. Definci (D IREKTSZORZAT). A T = (%, I, S) tpus direktszorzata a
T1 , T2 , . . . , Tn tpusoknak, ha
% = D D
ahol D B T , D E B s

D = {(, b) E B | i [1..n] : i Ei : (i , bi ) %i
= con(1 , . . . , n i)}.

A direktszorzat rtkhalmazra bevezetjk a T = (T1 , T2 , . . . , Tn ) jellst.


Ha a D lekpezs klcsnsen egyrtelmu, akkor a direktszorzatot rekord tpus-
nak nevezzk. A direktszorzat tpusok ltalban rekordok, de nem mindig. Pldul
tekintsk a racionlis szmok halmaznak egy lehetsges reprezentcijt:
B = Z Z, D B Q:
((x, y), t) D y 6= 0 t = x/y
Egyszeruen lthat, hogy a fent definilt D relci a racionlis szmok halmazt
reprezentlja, de nem klcsnsen egyrtelmu.

83
84 FEJEZET 8. TPUSKONSTRUKCIK

t T

T1 T2 T3 Tn D
%
B t1 t2 t3 tn

D
%1 %2 %3 %n
E

8.1. bra. Rekord konstrukci

Nagyon fontos tovbb, hogy az j tpusrtkhalmazt (T ) ne keverjk ssze a kz-


blso direktszorzattal (B), hiszen egy adott B s T kztt nagyon sokfle D lekpe-
zs megadhat, s az j tpus szempontjbl egyltaln nem mindegy, hogy ezek kzl
melyiket vlasztjuk.
Tekintsk pldul a komplex egszek (a + bi, a, b Z alak szmok) halmazt.
Legyen tovbb B = Z Z, x, y Z, s
D1 ((x, y)) = x + yi
D2 ((x, y)) = y + xi.
A kt D kztti klnbsg elsosorban akkor vlik szignifiknss, ha pldul a komp-
lex egszek kztti szorzsmuveletet kell implementlnunk a szmprok szintjn, hi-
szen ekkor az elso s a msodik komponens rtkt az
(a + bi)(c + di) = (ac bd) + (ad + bc)i
formula alapjn klnbzo mdon kell kiszmtani.
A kvetkezo mdszer, amivel rgi tpusokbl jakat hozhatunk ltre, az uni. Le-
gyenek Ti = (%i , Ii , Si ) (i = 1, 2, . . . , n) tpusok, s jellje T1 , T2 , . . . , Tn a hozzjuk
tartoz tpusrtkhalmazokat, illetve E1 , E2 , . . . , En a nekik megfelelo elemi tpusr-
tkhalmazokat. Vezessk be tovbb az E = E1 E2 En s B = T1 T2
Tn jellseket.
8.2. Definci (U NI). Azt mondjuk, hogy a T = (%, I, S) tpus unija a T 1 , T2 , . . . ,
Tn tpusoknak, ha
% = U U
ahol U B T , U E B s

U = {(, b) E B | i [1..n] : (, b) %i }

Az uni rtkhalmaznak jellse: T = (T1 ; T2 ; . . . ; Tn ).


Itt is kln elnevezst adtunk annak az esetnek, amikor a U lekpezs klcsnsen
egyrtelmu, ekkor az unit egyestsnek nevezzk.
Ebben az esetben is nagyon fontos, hogy mindig megklnbztessk a konstrukci
kzblso szintjn levo unit (B) az j tpusrtkhalmaztl (T ).
A harmadik megengedett tpuskonstrukcis muvelet az iterlt, amellyel egy meg-
levo tpusbl alkothatunk j tpust. Legyen T0 = (%0 , I0 , S0 ) tpus, T0 a neki megfelelo
tpusrtkhalmaz, s E a T0 tpus elemi tpusrtkhalmaza.
8.2. SZELEKTORFGGVNYEK 85

T
t t0

T1 T2 T3 Tn U
%
B t1 t2 t3 tn

%3 %n U
E

8.2. bra. Uni konstrukci

8.3. Definci (I TERLT). Azt mondjuk, hogy a T = (%, I, S) tpus iterltja a T 0 t-


pusnak, ha
% = I I
ahol I B T , I E T0 s

I = {(, b) E T0 | 1 , . . . , |b| E : (i , bi ) %0
= kon(1 , . . . , |b| )}

Az iterlt tpusrtkhalmaznak jellse: T = it(T0 ).


Az iterlt tpuskonstrukcinak hrom specilis esett klnbztetjk meg aszerint,
hogy a I lekpezsre milyen felttelek teljeslnek.

Ha a I lekpezs klcsnsen egyrtelmu, akkor sorozat tpuskonstrukcirl


beszlnk, s tpusrtkhalmazt T = seq(T0 )-lal jelljk.

Ha
(, t), (, t) I perm(),
akkor az iterlt konstrukct kombinci tpusnak nevezzk. A kombinci r-
tkhalmaznak jellse: T = com(T0 ).

Ha
|| ||
[ [
(, t), (, t) I {i } = {i },
i=1 i=1

akkor halmaz tpuskonstrukcirl beszlnk. A halmaz tpus rtkhalmaznak


jellse: T = set(T0 ).

Termszetesen az imnt felsorolt hrom eset csak specilis formja az iterltkp-


zsnek; ltezik olyan iterlt is, amely egyik fenti kritriumot sem teljesti.

8.2. Szelektorfggvnyek
Az elozokben definilt tpuskonstrukcikra most bevezetnk nhny olyan fggvnyt
s jellst, amelyek leegyszerustik a rjuk vonatkoz lltsok, programok megfogal-
mazst.
86 FEJEZET 8. TPUSKONSTRUKCIK

T
t

I
T0
%
B ht1 , t2 , t3 , ..., t|t| i

I
%0 %0 %0 %0
E

8.3. bra. Iterlt konstrukci

(1)
Legyen T = (T1 , T2 , . . . , Tn ). A D fggvny komponenseit a T rekord sze-
lektorfggvnyeinek, vagy rviden szelektorainak nevezzk.
A fenti rekordnak teht pontosan n darab szelektora van, s ha s i -vel jelljk az
i-edik szelektort, akkor si : T Ti , s

t T : D (s1 (t), s2 (t), . . . , sn (t)) = t.

Teht a szelektorfggvnyeket arra hasznlhatjuk, hogy lekrdezzk a rekord egyes


mezoinek (komponenseinek) az rtkt. A szelektorokat bele szoktuk rni a tpusrtk-
halmaz jellsbe; a fenti esetben a szelektorokkal felrt jells:

T = (s1 : T1 , s2 : T2 , . . . , sn : Tn ).

A rekordtpushoz hasonlan az egyestshez is bevezetnk szelektorfggvnyeket.


Mivel az uni esetben a kzblso szinten a tpusrtkhalmazok unija szerepel, gy
nincs rtelme komponensrol beszlni. Hogyan definiljuk ez esetben a szelektorokat?
Azt fogjk visszaadni, hogy egy adott T -beli elemet melyik eredeti tpusrtkhalmaz
egy elemhez rendelte hozz a U fggvny.
Legyen T = (T1 ; T2 ; . . . ; Tn ) egyests tpus, si : T L (i = 1, . . . , n). Azt
mondjuk, hogy az si logikai fggvnyek a T egyests szelektorai, ha i [1..n] :
t T :  
(1)
si (t) = U (t) Ti .
A rekordtpushoz hasonl mdon az egyests szelektorait is bele szoktuk rni az j
tpusrtkhalmaz jellsbe. A szelektorokkal felrt tpusrtkhalmaz jellse:

T = (s1 : T1 ; s2 : T2 ; . . . ; sn : Tn ).

Az iterlt tpuskonstrukcik kzl a sorozathoz definilunk szelektorfggvnyt. A


sorozattpusban a kzblso szinten T0 -beli sorozat szerepel, a szelektor ennek a soro-
zatnak a tagjait adja vissza.
Formlisan: Legyen T = seq(T0 ). Az s : T N T0 parcilis fggvny a T
(1)
szelektorfggvnye, ha t T : i [1..|I (t)|]:
(1)
s(t, i) = I (t)i .

A sorozat szelektort nem szoktuk kln elnevezni, helyette indexelst alkalmazunk,


azaz az ti = s(t, i) jellst hasznljuk.
8.3. AZ ITERLT SPECIFIKCIS FGGVNYEI 87

8.3. Az iterlt specifikcis fggvnyei


Ha az iterlt tpus az elozoekben bevezetett hrom specilis osztly valamelyikbe tar-
tozik, akkor tovbbi fggvnyeket definilunk hozz.
Legyen T = it(T0 ), (, t) i , s tegyk fel, hogy az iterlt sorozat, kombinci,
vagy halmaz. Ekkor dom : T N0 ,

||, ha T = seq(T0 ) vagy T = com(T0 )
dom(t) = ||
S
| {i }|, ha T = set(T0 )
i=1

A dom fggvny teht a t elemeinek szmt adja meg. A fggvny jldefinilt, ugyanis
felhasznlva a sorozat, kombinci s halmaz tpus defincijt, knnyen lthat, hogy
a fggvnyrtk fggetlen az vlasztstl.
A tovbbiakban a sorozattpussal fogunk foglalkozni. Ahol kln nem jelljk, ott
T = seq(T0 ), (, t) I , = h1 , 2, . . . || i.

Nem res sorozat elso s utols eleme: lov : T T0 , hiv : T T0 ,

lov(t) = 1
hiv(t) = ||

Sorozat kiterjesztse a sorozat elejn, vagy vgn (legyen e T 0 ): loext :


T T0 T , hiext : T T0 T ,

loext(t, e) = I (con(hei, ))
hiext(t, e) = I (con(, hei))

Nem res sorozat elso, vagy utols elemnek elhagysval kapott sorozat: lorem :
T T , hirem : T T ,

lorem(t) = I (h2 , . . . , || i)
hirem(t) = I (h1 , . . . , ||1 i)

8.4. A fggvnytpus
A gyakorlatban nagyon fontos szerepet jtszik egy specilis rekordtpus. Legyen H egy
tetszoleges (megszmllhat) halmaz, amelyen van egy rkvetkezsi relci. Jelljk
ezt a rkvetkezsi relcit succ-cal, s inverzre vezessk be a pred jellst.
8.4. Definci (F GGVNY TPUS). Legyen E egy tetszoleges tpus rtkhalmaza.
Ekkor az F = (H, seq(E)) rekordot fggvnytpusnak nevezzk, s F = f un(H, E)-
vel jelljk.
A fggvnytpusra is bevezetnk nhny fontos specifikcis fggvnyt. A tovb-
biakban legyen F = f un(H, E), ((h, t), f ) D . Ekkor

dom : F N0 ,
dom(f ) = dom(t)

lob : F H,
lob(f ) = h
88 FEJEZET 8. TPUSKONSTRUKCIK

hib : F H,
hib(f ) = succdom(f )1(h)

lov : F E,
lov(f ) = lov(t)

hiv : F E,
hiv(f ) = hiv(t)

loext, hiext : F E F ,

loext(f, e) = D (pred(h), loext(t, e))


hiext(f, e) = D (h, hiext(t, e))

lorem, hirem : F F ,

lorem(f ) = D (succ(h), lorem(t))


hirem(f ) = D (h, hirem(t))

A sorozathoz hasonlan a fggvnytpusra is bevezetnk egy szelekcis parci-


lis fggvnyt. Tekintsk a fentiekben hasznlt f -et. Ekkor s f : H E, Dsf =
{succi (lob(f )) | 0 i < dom(f )}, s ha g Dsf , g = succk (lob(f )), akkor:

sf (g) = tk+1

A fggvnytpus szelektorfggvnyt nem szoktuk kln elnevezni, helyette a mate-


matikban a fggvny helyettestsi rtknek jellsre hasznlt zrjeles hivat-
kozst hasznljuk, azaz
f (g) := sf (g).
A fggvnytpus elnevezs azt a szemlletes kpet tkrzi, hogy egy fggvnytpu-
s rtk felfoghat egy H E tpus parcilis fggvnynek, amelynek rtelmezsi
tartomnya a "lob-tl a hib-ig tart", s rtkeit pedig a sorozat komponens tartalmazza.

Az elobbiekben bevezetett dom, lov, hiv, lob, hib fggvnyeket kiterjeszthetjk az


egsz llapottrre is: komponljuk a megfelelo vltozval. Teht ha pldul x egy so-
rozattpus vltoz, akkor dom x egy az egsz llapottren rtelmezett fggvny. Az
ilyenfajta fggvnykompozcikra bevezetnk egy jabb jellst: ha t a fenti fggv-
nyek valamelyike, s x a neki megfelelo tpus vltoz, akkor az t x helyett x.t-t
runk.

8.5. A tpuskonstrukcik tpusmuveletei



A tpuskonstrukcik eddigi trgyalsbl mg hinyzik valami: nem beszltnk mg
a konstrult tpusok muveleteirol. Az elobb felsorolt specilis esetekhez az imnt
definilt fggvnyek segtsgvel bevezetnk nhny tpusmuveletet.
A tovbbiakban megengedett felttelnek fogjuk nevezni azokat az A L lltso-
kat, amelyek lehetnek elgazs, vagy ciklus felttelei.
Legyen T = (s1 : T1 , . . . , sn : Tn ) rekord, t : T , ti : Ti (i [1..n]). Mivel t az
llapottr vltozja, t komponlhat a szelektorfggvnyekkel, s gy az llapotren r-
telmezett fggvnyeket kapunk. A si t fggvnykompozcit a tovbbiakban t.si -vel

8.5. A TPUSKONSTRUKCIK TPUSMUVELETEI 89

fogjuk jellni. Egy rekord tpusnl a szelektorfggvny hasznlatt megengedettnek


tekintjk.
Ezen kvl bevezetjk a t.si := ti jellst is. Ezen azt a t := t0 rtkadst rtjk,
amelyben t0 .si = ti s t0 minden ms komponense megegyezik t megfelelo kompo-
nensvel.
A fenti tpusmuveletek arra adnak leheto sget, hogy egy rekord mezo inek" az
rtkt lekrdezhessk, illetve megvltoztathassuk. A fent definilt muveletben zavar
lehet, hogy egy fggvny helyettestsi rtknek (t.si ) adunk rtket". Ezrt fontos
megjegyezni, hogy ez csupn egy jellse az rtkadsnak.
Legyen T = (s1 : T1 ; . . . ; sn : Tn ) egyests, t : T , ti : Ti (i [1..n]). Ekkor
a rekord tpusnl bevezetett jellst az egyests esetn is bevezetjk, t.s i -n, az si t
kompozcit rtjk, s megengedett fggvnynek tekintjk.
Ezen kvl megengedett muvelet a t := U (ti ) rtkads. Ennek az rtkadsnak
a jellst leegyszerustjk, a tovbbiakban t := ti alakban fogjuk hasznlni.
A fenti rtkadst bizonyos sszeru korltozsok bevezetsvel megfordthatjuk".
gy kapjuk az albbi parcilis rtkadst: ti := t. Ez az rtkads csak akkor vgezheto
el, ha t.si igaz.
A sorozat tpuskonstrukci nagyon gyakori, s sokfle muvelet definilhat vele
kapcsolatban. Attl fggoen, hogy melyeket tekintjk megvalstottnak, klnbz o
konstrukcikrl beszlnk. Most elo bb megadunk nhny lehetsges muveletet, majd
ezutn a sorozat tpusokat osztlyba soroljuk a megengedett muveleteik alapjn.
Legyen a tovbbiakban T = seq(E), t : T , e : E. Ekkor az imnti szelektorokhoz
hasonlan bevezetjk az albbi jellseket:

dom t t.dom
lov t t.lov
hiv t t.hiv

Termsztesen t.lov s t.hiv csak parcilis fggvnyek. Ezen kvl az albbi (esetleg
parcilis) rtkadsokra a kvetkezo jellseket fogjuk hasznlni:

t := lorem(t) t : lorem
t := hirem(t) t : hirem
t := loext(t, e) t : loext(e)
t := hiext(t, e) t : hiext(e)
e, t := lov(t), lorem(t) e, t : lopop
e, t := hiv(t), hirem(t) e, t : hipop

A bevezetett jellsek elso ltsra zavarba ejtonek tunhetnek, hiszen ugyanazt a kulcs-
szt a baloldalon fggvnyknt, a jobboldalon pedig a muvelet neveknt hasznljuk.
Lnyeges ezrt megjegyezni, hogy a jobb oldalon tallhat muveletek csa a baloldali
rtkads egyszerusto jellsei.
Attl fggoen, hogy a fent definilt muveletek kzl melyeket tekintjk megenge-
dettnek, klnbzo konstrukcikrl beszlnk.
90 FEJEZET 8. TPUSKONSTRUKCIK

8.5. Definci (S PECILIS SOROZATTPUSOK ). Legyen T = seq(E). Ekkor a T


szekvencilis input file, ha csak a lopop a megengedett muvelet,
szekvencilis output file, ha csak a hiext a megengedett muvelet,
verem, ha a megengedett muveletek a loext s a lopop, vagy a hiext s a hipop,
sor, ha a megengedett muveletek a hiext s a lopop, vagy a loext s a hipop.
Ahhoz, hogy a szekvencilis input file a lopop muvelettel hasznlhat legyen, tud-
nunk kell, hogy mikor olvastuk ki az utols elemet a file-bl. Ezt a problmt gy
szoktuk megoldani, hogy bevezetnk egy extremlis elemet, s kiktjk, hogy a file-
ban ez az utols elem (teht mg az res file is tartalmazza). Ez a technika valsul
meg azokban az opercis rendszerekben, ahol a szvegfile-ok vgt file-vge (EOF)
karakter jelzi.
Mivel a lopop muvelet bizonyos esetekben knyelmetlen lehet gondoljunk arra,
amikor nehzkes extremlis elemet tallni , bevezetnk egy msik olvasmuveletet
is. Hasznljuk az olvass sikeressgnek jelzsre a {norm, abnorm} halmaz elemeit.
Ekkor az sx, dx, x : read muveleten az albbi rtkadsokat rtjk:

sx, dx, x := norm, lov(x), lorem(x), ha dom(x) 6= 0
sx, dx, x : read
sx := abnorm, ha dom(x) = 0

Ha egy szekvencilis file-ra a read muvelet van megengedve, akkor nincs szksg
extremlis elemre, helyette az sx vltoz rtke alapjn lehet eldnteni, hogy vgre
rtnk-e a file-nak.
Legyen F = f un(H, E), f : F , e : E, i : H. Ekkor a sorozat tpushoz hasonlan
bevezetjk az albbi jellseket:

dom f f.dom
lov f f.lov
hiv f f.hiv
lob f f.lob
hib f f.hib

A fenti fggvnyeken kvl a fggvny tpus szelektorfggvnyt f (i)-t is megenge-


dettnek tekintjk. A rekord tpusnl bevezetett szelektorra (mez o re) vonatkoz rtka-
dsnak jelen esetben is van megfelelo je: az f (i) := e parcilis rtkads. Az rtkads
azrt parcilis, mert csak akkor vgzheto el, ha f.lob i f.hib. Ekkor a fenti
jellsen azt az f := f 0 rtkadst rtjk, amelyre:

f 0 .lob = f.lob f 0 .hib = f.hib f 0 (i) = e


j [f.lob..f.hib] : j 6= i f 0 (j) = f (j).

A sorozatokra bevezetett kiterjeszto s elhagy muveleteket fggvny tpusra is defini-


ljuk:

f := lorem(f ) f : lorem
f := hirem(f ) f : hirem
f := loext(f, e) f : loext(e)
f := hiext(f, e) f : hiext(e)

8.5. A TPUSKONSTRUKCIK TPUSMUVELETEI 91

Ha ezen utols csoportban felsorolt muveleteket egy fggvnytpusra nem enged-


jk meg, akkor egy specilis fggvnytpushoz, a vektorhoz jutunk. Az ltalnos fgg-
vnytpustl megklnbztetendo a vektortpusra kln jellst vezetnk be: V =
vekt(H, E). Ha azt is jellni kvnjuk, hogy mik a vektor indexhatrai, akkor a tpust
V = vekt([ah..f h] : E)-vel jelljk. Tovbbi jellsbeli eltrs az ltalnos fgg-
vnytpustl: a szelektorfggvny jellsre nem a kerek, hanem a szgletes zrjelet
hasznljuk.
92 FEJEZET 8. TPUSKONSTRUKCIK
II. rsz

Programozsi mdszertan

93
9. fejezet

Alapveto programozsi ttelek

Legeloszr a levezetsi szablyok hasznlatt is ismertetve nhny egyszeru fela-


datra keresnk megoldprogramot.

9.1. sszegzs
Legyen adott az f : Z Z fggvny. Feladatunk az, hogy egy adott [m..n] Z
intervallumban sszegezzk az f fggvny rtkeit. Specifikljuk eloszr a feladatot.
A= Z Z Z
m n s
B = Z Z
m0 n0
Q : (m = m0 n = n0 m n + 1)
P
n
R : (Q s = f (i))
i=m
Az elofelttelben szereplo m n + 1 felttel azt fogalmazza meg, hogy az m s n
szmok egy legfeljebb res intervallumot hatroznak meg. (Az intervallum akkor
lesz res, ha a kezdopontja eggyel nagyobb mint a vgpontja.)
Prbljuk a feladatot ciklussal megoldani: ehhez a ciklus levezetsi szablya alap-
jn keresnnk kell egy invarins tulajdonsgot (P ), ami a ciklus futsnak egy kz-
blso llapott rja le. Fogalmazza meg ez az invarins azt a tulajdonsgot, hogy az
sszegzst az intervallum egy kezdo szeletre mr elvgeztk. Ennek formlis ler-
shoz bovtsk ki az llapotteret egy jabb egsz tpus komponenssel (k), amely azt
fogja mutatni, hogy hol tartunk az sszegzsben. Az j llapottr teht legyen:
A0 = Z Z Z Z
m n s k
Ekkor az invarins tulajdonsg:
P
k
P : (Q k [m 1..n] s = f (i))
i=m
Vizsgljuk meg most a ciklus levezetsi szablya feltteleit:

1) Q P : Ez a felttel jl lthatan nem teljesl (so t fordtva ll fenn). Mit lehet


ilyenkor tenni? Vagy a Q-t, vagy a P -t meg kell vltoztatni. A Q azonban a fel-
adatot definilja, azt nem vltoztathatjuk meg, a P -t pedig mi vlasztottuk gy,

95
96 FEJEZET 9. ALAPVETO PROGRAMOZSI TTELEK

hogy egy kzblso llapotot rjon le, ezrt azt sem lenne szerencss eldobni. Van
azonban egy harmadik lehetosg is: keressnk egy olyan Q0 lltst, amelyre mr
Q0 P teljesl, s oldjuk meg a feladatot egy olyan szekvencival, amelynek
msodik rsze egy olyan ciklus lesz, melynek elo felttele a Q0 , az utfelttele
pedig R, elso fele pedig egy a Q-bl Q0 -be kpezo program (azaz alkalmazzuk
a szekvencia levezetsi szablyt). Legyen ez a Q0 llts:
Q0 : (Q k = m 1 s = 0)

Knnyen lthat, hogy ekkor Q0 P fennll. Most mg keresnnk kell egy


olyan programot, ami Q-bl Q0 -be jut. A k, s := m 1, 0 rtkads megfelel
ennek a kritriumnak, hiszen az rtkads leggyengbb el o felttelrol szl ttel
alapjn:
Q lf (k, s := m 1, 0, Q0 ) = (Q m 1 = m 1 0 = 0) = Q.

2) P R: Ebbol a felttelbol meghatrozhatjuk, hogy mi lesz a ciklusunk


felttele. Ehhez azt kell megnzni, hogy mikor kvetkezik az invarins tulajdon-
sgbl az utfelttel. A kettot sszehasonltva szrevehetjk, hogy ez k = n
esetn van gy. Teht
= (k = n), azaz = (k 6= n).

3) P t > 0: A felttel teljestshez keresnnk kell egy olyan az l-


lapottren rtelmezett egszrtku fggvnyt, amely az invarins s a ciklus-
felttel fennllsa esetn pozitv. Mivel a vltozk is az llapottr fggvnyei,
a terminlfggvnyt rajtuk keresztl fogjuk kifejezni. Vegyk szre, hogy ha
k [m 1..n] (P miatt) s k 6= n ( miatt), akkor n k rtke pozitv lesz.
Legyen teht:
t = n k.

5) P t = t0 lf (S0 , t < t0 ): Mivel mr van terminlfggvnynk, vegyk


elore a levezetsi szably utols felttelt, ami azt kvnja meg, hogy a ciklusmag
cskkentse a terminlfggvnyt. Mivel az utfelttel szerint n rtkt meg kell
tartanunk, a terminlfggvnyt k nvelsvel tudjuk cskkenteni. Mennyivel
nveljk k-t? Legalbb 1-gyel. Ha egy kicsit elo re tekintnk, s figyelembe
vesszk, hogy a ciklusmagnak az invarinst meg kell tartania (ez a 4. pont),
akkor lthat, hogy k-t legfeljebb 1-gyel nvelhetjk meg. Teht a k := k + 1
rtkads cskkenti a terminlfggvny rtkt, ui:
P n k = t0 lf (k := k + 1, n k < t0 ) = n (k + 1) < t0 .

4) P lf (S0 , P ): Meg kell mg vizsglnunk, hogy a k := k + 1 rtkads


j lesz-e ciklusmagnak, azaz megtartja-e az invarinst. rjuk fel a P -hez tartoz
leggyengbb elofelttelt:
P
k+1
lf (k := k + 1, P ) = (Q k + 1 [m 1..n] s = f (i))
i=m
Lthat, hogy ez P -bol nem kvetkezik. Jelljk ht a fenti felttelt Q00 -vel,
s legyen a ciklusmag egy olyan szekvencia, amelynek kzbls o felttele Q00 s
msodik tagja a k := k +1 rtkads. Ekkor mr nincs ms dolgunk, mint tallni
egy olyan programot, ami P -bo l Q00 -be kpez s t rtkt nem vltoztatja
meg. Nzzk meg, hogy mi nem teljesl Q00 -ben: mivel k [m 1..n] (P ) s
k 6= n (), k + 1 [m 1..n] fennll. s rtke viszont nem j, mert P szerint
9.2. SZMLLS 97

csak k-ig tartalmazza f rtkeinek sszegt, Q00 szerint pedig mr k + 1-ig kell.
A fenti meggondols alapjn teht s nvelse f (k + 1)-gyel j lesz, azaz:
P lf (s := s + f (k + 1), Q00 ) =
P
k+1
= (Q k + 1 [m 1..n] s + f (k + 1) = f (i)).
i=m

A fenti levezets alapjn kimondhat az albbi ttel:


Ttel: Az albbi struktogram formban megadott program megoldsa a fent specifiklt
feladatnak:
Q
k, s := m 1, 0
Q0
k 6= n
P
s := s + f (k + 1)
Q00
k := k + 1
R P
Bizonyts: A ttel a szekvencia s a ciklus levezetsi szablybl, a specifikci tte-
lbol s a fenti levezetsbol kvetkezik.

9.2. Szmlls
Legyen egy az egsz szmokon rtelmezett logikai fggvny. A feladat az, hogy
szmoljuk meg, hny helyen igaz az [m..n] Z intervallumban.

A = Z Z N0
m n d
B = Z Z
m0 n0
Q : (m = m0 n = n0 m n + 1)
P
n
R : (Q d = ((i)))
i=m

A fenti specifikciban : L {0, 1}, amelyre (igaz) = 1 s (hamis) =


0 A feladat megoldsa analg az sszegzs ttelnl lertakkal. A ciklus invarins
tulajdonsgt itt is az utfelttel gyengtsvel kapjuk (az intervallum egy tetsz o leges
kezdoszeletre rjuk fel):
Pk
P : (Q k [m 1..n] d = ((i)))
i=m
A tovbbiakban a ciklus levezetsi szablyban szereplo felttelekhez cmszszeruen
felsoroljuk a levezets sorn elofordul elemeket.

1) Q0 : (Q k = m 1 d = 0),

2) = (k 6= n),

3) t = n k,

5) a k := k + 1 rtkads cskkenti a terminlfggvny rtkt,


98 FEJEZET 9. ALAPVETO PROGRAMOZSI TTELEK

P
k+1
4) Q00 = (Qk+1 [m1..n]d = ((i))). Itt azt kell megvizsglni, hogy
i=m
00
P -bol kvetkezik-e Q . Vegyk szre, hogy (k + 1) esetn kvetkezik,
mg (k+1) esetn az sszegzshez hasonlan meg kell nvelnnk d rtkt.
Ezrt a P -bol Q00 -be jut program az IF ((k + 1) : d := d + 1, (k + 1) :
SKIP ) elgazs lesz, ugyanis az elgazs levezetsi szablyt alkalmazva:

P (k + 1) lf (d := d + 1, Q00 )
P (k + 1) lf (SKIP, Q00 )

miatt P lf (IF, Q00 ) teljesl.

A fenti meggondolsok alapjn nyilvnval az albbi ttel:


Ttel: Az albbi struktogram formban megadott program megoldsa a fent specifiklt
feladatnak:
Q
k, d := m 1, 0
Q0
k 6= n
P
(k + 1)
\ /
d := d + 1 SKIP
Q00
k := k + 1
R P
Bizonyts: A ttel a levezetsi szablyokbl, s a specifikci ttelbol a fenti meg-
gondolsok (levezets) alapjn kvetkezik.

9.3. Maximumkeress
Legyen H egy tetszoleges rendezett halmaz s f : Z H egy adott fggvny. Fel-
adatunk az, hogy egy adott [m..n] Z intervallumban keressk meg az f fggvny
maximumt s egy olyan helyt, ahol ezt a maximumrtket felveszi.
A = Z ZZ H
m n i max
B = Z Z
m0 n0
Q : (m = m0 n = n0 m n)
R : (Q i [m..n] max = f (i) j [m..n] : f (j) f (i))
Vegyk szre, hogy az elobbiekkel ellenttben ebben a specifikciban nem en-
gedtk meg az res intervallumot. Ennek oka rendkvl egyszeru: res intervallumon
nincs rtelme megkrdezni, hogy hol van a maximum. A feladatot ciklussal oldjuk
meg, amelynek invarinsa:
P : (Q k [m..n] i [m..k] max = f (i) j [m..k] : f (j) f (i))
A feladatot megold program levezetse hasonlatos az elo zohz, ezrt itt is csak cm-
szavakban soroljuk fel a lpseket:

1) Q0 = (Q k = m i = m max = f (m)),

2) = (k 6= n),
9.4. FELTTELES MAXIMUMKERESS 99

3) t = n k,
5) a k := k + 1 rtkads cskkenti a terminlfggvny rtkt,
4) Q00 = (Q k + 1 [m..n] i [m..k + 1] max = f (i) j [m..k +
1] : f (j) f (i)) A P -bol Q00 -be jut program itt is egy elgazs lesz:
IF (f (k+1) >= max : i, max := k+1, f (k+1), f (k+1) <= max : SKIP ),
ui.

P f (k + 1) >= max lf (i, max := k + 1, f (k + 1), Q00 )


P f (k + 1) <= max lf (SKIP, Q00 )

miatt P lf (IF, Q00 ) teljesl.

Ttel: Az albbi struktogram formban megadott program megoldsa a fent specifiklt


feladatnak:
Q
i, k, max := m, m, f (m)
Q0
k 6= n
P
f (k + 1) max f (k + 1) max
\ \
i, max := k + 1, f (k + 1) SKIP
Q00
k := k + 1
R P
Bizonyts: A ttel a levezetsi szablyokbl, s a specifikci ttelbol a fenti meg-
gondolsok (levezets) alapjn kvetkezik.

9.4. Feltteles maximumkeress


Legyen H egy tetszoleges rendezett halmaz s f : Z H egy adott fggvny. Legyen
egy az egsz szmokon rtelmezett logikai fggvny. Hatrozzuk meg a de[m..n]
halmaz felett az f fggvny maximumt s a halmaz egy olyan elemt, amelyen f a
maximumrtkt felveszi.
A= Z Z Z H L
m n i max l
B = Z Z
m0 n0
Q : (m = m0 n = n0 m n + 1)
R : (Q l = (i [m..n] : (i)) l (i [m..n] (i) max = f (i)
j [m..n] : (j) (f (j) f (i))))
Vegyk szre, hogy itt jra megengedheto az res intervallum, s hogy ekkor az a
vlasz, hogy az intervallumban nincs tulajdonsg elem. A levezets az el o zokhz
hasonlan:
P : (Q k [m 1..n] l = (i [m..k] : (i)) l (i [m..k] (i)
max = f (i) j [m..k] : (j) (f (j) f (i))))

1) Q0 = (Q k = m 1 l = hamis),
2) = (k 6= n),
100 FEJEZET 9. ALAPVETO PROGRAMOZSI TTELEK

3) t = n k,
5) a k := k + 1 rtkads cskkenti a terminlfggvny rtkt,
4) rjuk fel a ciklusmag kzblso felttelt:
Q00 : (Q k + 1 [m 1..n] l = (i [m..k + 1] : (i))
l (i [m..k + 1] (i) max = f (i)
j [m..k + 1] : (j) (f (j) f (i))))
P s Q00 sszehasonltsval lthat, hogy hrom fo lehetosg van:
(k + 1): ekkor SKIP,
(k + 1) l: ez az elso tulajdonsg elem, teht l, i, max := igaz, k +
1, f (k + 1),
(k + 1) l: ekkor a maximumkeressnl megismert kt eset lehetsges:
f (k + 1) >= max: ekkor i, max := k + 1, f (k + 1),
f (k + 1) <= max: ekkor SKIP .
Ttel: Az albbi struktogram formban megadott program megoldsa a fent specifiklt
feladatnak:
Q
k, l := m 1,
Q0
k 6= n
(k + 1) (k + 1) l (k + 1) l P
\ \ \
f (k + 1) max f (k + 1) max
\ \
SKIP l, i, max := i, max := SKIP
, k + 1, f (k + 1) k + 1, f (k + 1)
Q00
k := k + 1
R P
Bizonyts: A ttel a levezetsi szablyokbl, s a specifikci ttelbol a fenti meg-
gondolsok (levezets) alapjn kvetkezik.

9.5. Lineris keress


Legyen : Z L adott tulajdonsg. A feladat az, hogy keressk meg azt a legkisebb
tulajdonsg egsz szmot, amely nem kisebb, mint az adott m Z szm.
A = Z Z
m i
B = Z
m0
Q : (m = m0 j m : (j))
R : (Q i m (i) j [m..i 1] : (j))
A feladatot ciklussal oldjuk meg. Az invarinshoz gyengtjk az utfelttelt, el-
hagyjuk belole (i)-t:
P : (Q i m j [m..i 1] : (j))
9.5. LINERIS KERESS 101

1) Q0 = (Q i = m),

2) = (i),

3) Legyen N m tetszolegesen rgztett olyan szm, amelyre (N ) igaz(ilyen az


elofelttel miatt ltezik). Ekkor t = N i.

5) az i := i + 1 rtkads cskkenti a terminlfggvny rtkt,

4) P lf (i := i + 1, P ).

Ttel: Az albbi struktogram formban megadott program megoldsa a fent specifiklt


feladatnak:
Q
i := m
Q0
(i)
P
i := i + 1
R P
Bizonyts: A ttel a levezetsi szablyokbl, s a specifikci ttelbol a fentiek sze-
rint kvetkezik.
A fenti program csak akkor megoldsa a feladatnak, ha a tulajdonsg megenge-
dett felttel. Ha ez nem gy van, akkor msik megoldst kell keresnnk. Vlasszuk az
albbi invarinst (a feladat marad ugyanaz!):
P : (Q i m 1 (j [m, i 1] : (j)) l = j [m, i] : (j))
Ekkor:

1) Q0 = (Q i = m 1 l = hamis),

2) = l,

3) Legyen N m tetszolegesen rgztett olyan szm, amelyre (N ) igaz(ilyen az


elofelttel miatt ltezik). Ekkor t = N i.

5) az i := i + 1 rtkads cskkenti a terminlfggvny rtkt,

4) A ciklusmag szekvencia lesz, melynek kzblso felttele:


Q00 : (Q i + 1 m 1 (j [m, i] : (j)) l = j [m, i + 1] : (j))

s gy a ciklusmag elso fele az l := (i + 1) rtkads lesz.

Ttel: Ekkor az albbi program is megoldsa a specifiklt feladatnak.


Q
i, l := m 1,
Q0
l
P
l := (i + 1)
Q00
i := i + 1
R P
Tegyk fel, hogy = s ltezik i m, hogy (i). Keressk meg a legels o
i m : (i) elemet (ha van olyan), amely elo tt (m-tol kezdve) nem volt igaz ! Ennek
a vltozatnak mr a specifikcija is ms lesz, hiszen a feladat is megvltozott.
102 FEJEZET 9. ALAPVETO PROGRAMOZSI TTELEK

A = Z ZL
m i u
B = Z
m0
Q : (m = m0 j m : (j))
R : (Q u = (j m : (j) k [m..j 1] : (k))
u (i m (i) j [m..i 1] : (j)))
A feladatot megold ciklus invarinsa:
P : (Q i m 1 u = (j [m..i] : (j)) v = (j [m..i] : (j))
j [m, i 1] : (j))
Ekkor:
1) Q0 = (Q i = m 1 u = hamis v = hamis),
2) = u v,
3) Legyen N m tetszolegesen rgztett olyan szm, amelyre (N ) igaz (ilyen az
elofelttel miatt ltezik). Ekkor t = N i.
5) az i := i + 1 rtkads cskkenti a terminlfggvny rtkt,
4) A ciklusmag szekvencia lesz, melynek kzblso felttele (lf (i := i + 1, P )):
Q00 : (Q i + 1 m 1 u = (j [m..i + 1] : (j))
v = (j [m..i + 1] : (j)) j [m, i] : (j))
s gy a ciklusmag elso fele az u, v := (i + 1), (i + 1) rtkads lesz.
Ttel: Az albbi struktogram formban megadott program megoldsa a fent specifiklt
feladatnak:
Q
i, u, v := m 1, ,
Q0
u v
P
u, v := (i + 1), (i + 1)
Q00
i := i + 1
R P
A fenti feladatnak van egy specilis esete, amikor tulajdonsg azt mondja ki, hogy
mg nem rtnk el egy n szmot, azaz egy intervallumon kell keresni. Erre a specilis
esetre adunk egy msik megoldst is.
A = Z ZZL
m n i l
B = Z Z
m0 n0
Q : (m = m0 n = n0 m n + 1)
R : (Q l = (j [m..n] : (j)) l (i [m..n] (i)
j [m..i 1] : (j)))
Legyen a ciklus invarins tulajdonsga:
P : (Q i [m 1..n] l = (j [m..i] : (j)) j [m..i 1] : (j))
Ekkor:
9.6. LOGARITMIKUS KERESS 103

1) Q0 = (Q i = m 1 l = hamis),
2) = l i 6= n,
3) t = n i,
5) az i := i + 1 rtkads cskkenti a terminlfggvny rtkt,
4) A ciklusmag szekvencia lesz, melynek kzblso felttele (lf (i := i + 1, P )):
Q00 : (Q i + 1 [m 1..n] l = (j [m..i + 1] : (j)) j [m..i] : (j))
s gy a ciklusmag elso fele az l := (i + 1) rtkads lesz.
Ttel: Az albbi struktogram formban megadott program megoldsa a fent specifiklt
feladatnak:
Q
i, l := m 1,
Q0
l i 6= n
P
l := (i + 1)
Q00
i := i + 1
R P

9.6. Logaritmikus keress


Legyen H egy olyan halmaz, amin rtelmezve van egy rendezsi relci. Legyen f :
Z H monoton nvekedo fggvny. A feladat az, hogy dntsk el az f fggvnyr o l,
hogy az adott [m..n] Z intervallumon felveszi-e a h H adott rtket, s ha igen,
akkor adjuk meg az intervallum egy olyan pontjt, ahol a fggvnyrtk h.
A= Z Z H Z L
m n h i l
B = Z Z H
m0 n0 h0
Q : (m = m0 n = n0 h = h0 m n + 1 k, j [m..n] :
(k < j) (f (k) f (j)))
R : (Q l = (j [m..n] : f (j) = h) l (i [m..n] f (i) = h))
A monotonitst felhasznlva az intervallumot mindkt vgro l szuktjk az invari-
nsban:
P : (Q [u..v] [m..n] j [m..n] \ [u..v] : f (j) 6= h
l (i [u..v] f (i) = h))
Ekkor
1) Q0 = (Q u = m v = n l = hamis),
2) = l u v,
3) Informlisan fogalmazva jellje t a mg megvizsgland elemek szmt. Ezt
egy esetsztvlasztssal adhatjuk meg:

v u + 1, ha l
t=
0, ha l
104 FEJEZET 9. ALAPVETO PROGRAMOZSI TTELEK

4) A ciklusmag legyen egy szekvencia, melynek kzbls o felttele:


Q00 : (Q [u..v] [m..n] j [m..n] \ [u..v] : f (j) 6= h
l (i [u..v]))
Ekkor a szekvencia elso fele lehetne az i : [u..v] rtkkivlaszts. Hatkony-
sgi szempotokat is figyelembe vve azonban vlasszuk az intervallum kzpso
elemt: i := d(u + v)/2e. A ciklusmag msodik felben hrom eset lehetsges:
f (i) < h: ekkor az u := i + 1 rtkads az invarinst megtartja,
f (i) = h: ekkor megtalltuk a keresett elemet, teht l := igaz,
f (i) > h: ekkor az v := i 1 rtkads az invarinst megtartja.
5) Egyszeruen ellenorizheto, hogy a fenti elgazs mindhrom ga cskkenti a ter-
minl fggvnyt.

Ttel: Az albbi struktogram formban megadott program megoldsa a fent specifiklt


feladatnak:
Q
u, v, l := m, n,
Q0
l u v
P
i := d(u + v)/2e
Q00
f (i) < h f (i) = h f (i) > h
\ \ \
u := i + 1 l := v := i 1
R P
Bizonyts: A ttel a fenti levezets kvetkezmnye.
10. fejezet

Fggvnyrtk kiszmtsa

A tovbbiakban bizonyos specilis fggvnyek helyettestsi rtknek kiszmtsval


fogunk foglalkozni. Tegyk fel, hogy van egy f : X Y fggvnynk, ahol X s Y
tetszoleges halmazok. A feladat specifikcija teht:

A=X Y
x y
B =X
x0
Q : (x = x0 )
R : (y = f (x0 ))

Termszetesen ha semmi mst nem tudunk a fggvnyro l, akkor a fenti specifik-


cihoz nem tudunk igazi megoldprogramot adni. Ezrt az elkvetkez o kben tovbbi
felttelezsekkel fogunk lni.

10.1. Fggvnykompozcival adott fggvny


kiszmtsa
Tegyk fel, hogy f = h g, ahol g : X Z s h : Z Y fggvnyek.
Ttel: Ekkor a feladat megoldhat az albbi szekvencival:

z := g(x)
y := h(z)

Bizonyts: Kibovtjk az llapotteret egy jabb (Z tpus) komponenssel, melynek


vltozja legyen z. A szekvencia kzblso felttele legyen
Q0 : (z = g(x0 )).

Ekkor a szekvencia levezetsi szablya alapjn a megolds trivilisan teljesl.

105
106 FEJEZET 10. FGGVNYRTK KISZMTSA

10.2. Esetsztvlasztssal adott fggvny kisz-


mtsa
Legyenek 1 , 2 , . . . , n : X L felttelek s g1 , g2 , . . . , gn : X Y fggvnyek,
s tegyk fel, hogy a i felttelek lefedik az X halmazt. Legyen f : X Y az albbi
mdon definilva:


g1 (x), ha 1 (x)

g2 (x), ha 2 (x)
f (x) = .. ..


.

.
gn (x), ha n (x)

Ttel: Ekkor az f fggvny rtke kiszmolhat az albbi elgazssal:

1 (x) 2 (x) n (x)


\ \ \ ... \
y := g1 (x) y := g2 (x) ... y := gn (x)

Bizonyts: Az elgazs levezetsi szablya alapjn a megolds trivilisan teljesl.

10.3. Rekurzv formulval adott fggvny kisz-


mtsa
Legyen H egy tetszoleges halmaz, k > 0 egy egsz szm, tovbb F : Z H k H
fggvny, t0 , t1 , . . . , tk+1 H rgztett, s definiljuk az f : Z H fggvnyt az
albbi mdon:

f (0) = t0 ,
f (1) = t1 ,
.. ..
. .
f (k + 1) = tk+1

tovbb i 0:
f (i + 1) = F (i + 1, f (i), ..., f (i k + 1))

Feladatunk az, hogy meghatrozzuk az f fggvny n 0 helyen felvett rtkt.

A =ZH
n y
B = Z
n0
Q : (n = n0 n 0)
R : (Q y = f (n))
10.4. ELEMENKNT FELDOLGOZHAT FGGVNY 107

Ttel: Az albbi struktogrammal adott program megoldsa a specifiklt feladatnak:


Q
i, y, y1 , .., yk+1 := 0, t0 , t1 , .., tk+1
Q0 P
i 6= n
y, y1 , .., yk+1 := F (i + 1, y, ..., yk+1 ), y, .., yk+2
Q00
i := i + 1
R P
Bizonyts:
A ttel bizonytshoz elegendo, ha a fenti programot levezetjk, hiszen ekkor az
llts a specifikci ttelbol s a levezetsi szablyokbl kvetkezik. Legyen teht a
megoldprogram egy ciklus, melynek invarinsa:
P : (Q i [0..n] y = f (i), y1 = f (i 1), . . . , yk+1 = f (i k + 1))
Vizsgljuk meg a ciklus levezetsi szablynak felttelrendszert:

1) Mivel az eredeti Q felttelre Q P nem ll fenn, a ciklus elo felttele az albbi


Q0 : (Q i = 0 y = t0 , y1 = t1 , . . . , yk+1 = tk+1 )
llts lesz. Egyszeruen lthat, hogy a fenti program elejn tallhat szimultn
rtkads Q-bl Q0 -be jut.
2) = (i 6= n),
3) t = n i,
5) a i := i + 1 rtkads cskkenti a terminlfggvny rtkt,
4) Ha felrjuk az i := i + 1 rtkads P -re vonatkoz leggyengbb el o felttelt:
Q00 : (Q i + 1 [0..n] y = f (i + 1), y1 = f (i), . . . , yk+1 = f (i k + 2))
akkor az rtkads leggyengbb elo felttelre vonatkoz szably alapjn egy-
szeru behelyettestssel verifiklhat, hogy a ciklusmag elso fele P -bol Q00 -
be jut.

Megjegyezzk mg, hogy a 0 kezdo pont vlasztsa nknyes, brmilyen tetszo le-
ges egsz szmtl kezdve definilhat egy fggvny, s akkor rtelemszeruen a pro-
gram ciklusvltozja is arrl az rtkro l indtand.

10.4. Elemenknt feldolgozhat fggvny


A tovbbiakban legyenek H1 s H2 tetszoleges halmazok, X s Y pedig az albbi
formban felrhat halmazok:

X = X1 ... Xn
Y = Y1 ... Ym

ahol Xi = {x 2H1 : |x| < } i [1..n] s Yi = {y 2H2 : |y| < } i


[1..m]. Amint az a fenti lersbl kiderl az X az sszes olyan halmaz n-est tartal-
mazza, amelyeknek minden komponense az adott H1 halmaz vges rszhalmaza. Ha-
sonlan az Y elemei pedig az olyan halmaz m-esek, amelyek H 2 -beli vges rszhal-
mazokbl llnak.
108 FEJEZET 10. FGGVNYRTK KISZMTSA

Definci: T ELJESEN DISZJUNKT FELBONTS


Azt mondjuk, hogy x, x X teljesen diszjunkt felbontsa x X -nek, ha
i) i [1..n] : xi = xi xi s
ii) i, j [1..n] : xi xj = .
Vegyk szre, hogy ha X egydimenzis, akkor a teljesen diszjunkt felbonts mege-
gyezik a diszjunkt felbontssal, de tbbdimenzis esetben a teljesen diszjunkt felbonts
egy jval erosebb felttelt jelent.
Definci: E LEMENKNT FELDOLGOZHAT FGGVNY
Legyen f : X Y . Ha minden x X minden x, x teljesen diszjunkt felbont-
sra
i) i [1..m] : fi (x) fi (x) = fi (x) s
ii) i [1..m] : fi (x) fi (x) = ,
akkor f -et elemenknt feldolgozhatnak nevezzk.
Plda: Legyen H egy teszoleges halmaz, X1 = X2 = Y = {x 2H : |x| < },
f : X1 X2 Y , f ((x1 , x2 )) = x1 x2 . Ekkor f elemenknt feldolgozhat, ui:
tekintsk az (x1 , x2 ) halmazpr egy tetszoleges (x1 , x2 ), (x1 , x2 ) teljesen diszjunkt
felbontst. Ekkor a teljesen diszjunkt felbonts defincija alapjn:
x1 x 1 = x 1 , x2 x 2 = x2
x1 x 1 = , x 2 x2 =
x1 x 2 = , x 2 x1 =
Vizsgljuk most meg az elemenknt feldolgozhatsg kt kritriumt:
1. f ((x1 , x2 )) f ((x1 , x2 )) = (x1 x2 ) (x1 x2 ) = (x1 x1 ) (x2 x2 ) =
x1 x2 = f ((x1 , x2 )),

2. f ((x1 , x2 )) f ((x1 , x2 )) = (x1 x2 ) (x1 x2 ) = (x1 x1 ) (x1 x2 )


(x2 x1 ) (x2 x2 ) = .
Teht a ktvltozs uni elemenknt feldolgozhat halmazfggvny.
A tovbbiakban teht egy elemenknt feldolgozhat fggvny helyettestsi rt-
knek kiszmtsval fogunk foglalkozni.
Mielott belekezdennk a feladat specifiklsba s megoldsba bevezetnk kt
olyan halmazokra vonatkoz parcilis rtkadst, amelyeket aztn a megold progra-
mokban primitv muveletnek tekintnk.
Legyen H egy tetszoleges halmaz, s definiljuk az f

: 2H H 2H parcilis
fggvnyt:
f
(h, e) = H {e}, ha e / H.
A fenti fggvnyt kiszmt h := f

(h, e) parcilis rtkadst a tovbbiakban

h := h e-vel fogjuk jellni.
Hasonlan legyen H egy tetszoleges halmaz, s definiljuk az f' : 2H H
2H parcilis fggvnyt:
f' (h, e) = H \ {e}, ha e H.
A fenti fggvnyt kiszmt h := f' (h, e) parcilis rtkadst a tovbbiakban
h := h ' e-vel fogjuk jellni.
10.4. ELEMENKNT FELDOLGOZHAT FGGVNY 109

10.4.1. Egyvltozs-egyrtku eset


Eloszr vizsgljuk meg azt az esetet, amikor mind X, mind Y egykomponensu, azaz
m = n = 1. Ekkor az f fggvny egy halmazhoz egy msik halmazt rendel.
A=X Y
x y
B =X
x0
Q : (x = x0 )
R : (y = f (x0 ))
Oldjuk meg a feladatot ciklussal: az invarinsban azt fogalmazzuk meg, hogy az x
halmaz a mg feldolgozand elemeket, az y halmaz pedig a mr feldolgozott elemek f
szerinti kpeinek unijt tartalmazza, azaz
P : (y f (x) = f (x0 ) y f (x) = )
Vizsgljuk meg a ciklus levezetsi szablynak feltteleit:

1) Q-bl az y = fennllsa esetn kvetkezik P , ezrt a ciklus el az y :=


rtkads kerl.

2) Az invarinsbl f (x) = esetn kvetkezik az utfelttel, m ez j esllyel nem


egy megengedett felttel (hiszen ppen f -et akarjuk kiszmtani). Vegyk szre
azonban, hogy f elemenknti feldolgozhatsga miatt x = esetn f (x) =
is teljesul (az res halmaznak kt res halmaz egy teljesen diszjunkt felbontsa).
Teht a ciklusfelttel: = x 6= .

3) Ha (a ciklusfelttel szerint) x nem res, akkor terminl fggvnynek vlaszhat


x szmossga, azaz t = |x|.

5) x szmossgt gy tudjuk cskkenteni, ha elhagyunk bel o le egy benne levo


elemet. Ezt megtehetjk az imnt bevezetett parcilis rtkadssal: x := x ' e.

4) rjuk fel a fenti parcilis rtkads P -re vonatkoz leggyengbb el o felttelt:


Q00 : (y f (x \ {e}) = f (x0 ) y f (x \ {e}) = e x)

Jl lthat, hogy ez P -bol nem kvetkezik. Vegyk azonban szre, hogy ha


e egy x-beli elem, akkor {e} s x \ {e} x-nek egy teljesen diszjunkt felbontsa,
teht f elemenknti feldolgozhatsga miatt:

f ({e}) f (x \ {e}) = f (x)


f ({e}) f (x \ {e}) =

gy az y := y f ({e}) rtkads mr majdnem elegendo , hiszen

lf (y := y f ({e}), Q00 ) = (y f ({e}) f (x \ {e}) = f (x0 ) (y f ({e}))
f (x \ {e}) = e x).
Ezt a felttelt sszevetve P -vel lthat, hogy mr csak az e x lltst kell
teljestennk. Ezt viszont megtehetjk az e : x rtkkivlasztssal, amelynek a
fenti lltsra vonatkoz leggyengbb elo felttele P .
110 FEJEZET 10. FGGVNYRTK KISZMTSA

Ttel: Ekkor az albbi program megoldsa a specifiklt feladatnak:


Q
y :=
Q0
x 6=
P
e : x
Q000
y := y f ({e})
Q00
x := x ' e
R P
Bizonyts: A ttel a fenti levezetsbol kvetkezik.

10.4.2. Ktvltozs-egyrtku eset


Legyen f : X Y Z (X, Y, Z 2H ) elemenknt feldolgozhat fggvny.
A =X Y Z
x y z
B =X Y
x0 y0
Q : (x = x0 y = y 0 )
R : (z = f (x0 , y 0 ))
Ttel: Ekkor az albbi program megoldsa a specifiklt feladatnak:

z :=
x 6= y 6=
e : (x y)
e xe
/y e xe y e
/ xe y
\ \ \

z := z f ({e}, ) z := z f ({e}, {e}) z := z f (, {e})
x := x ' e x := x ' e y := y ' e
y := y ' e
Bizonyts: A ttel az egyvltozs esettel analg mdon levezethet o , ha invarins tu-
lajdonsgnak az albbi lltst:
P : (z f (x, y) = f (x0 , y 0 ) z f (x, y) =
(x0 \ x) y = (y 0 \ y) x = )
terminl fggvnynek pedig t = |x y|-t vlasztjuk.

10.4.3. Egyvltozs ktrtku eset


Legyen f : X Y Z (X, Y, Z 2H , f1 : X Y, f2 : X Z, f = (f1 , f2 ))
elemenknt feldolgozhat fggvny.
A =X Y Z
x y z
B =X
x0
10.4. ELEMENKNT FELDOLGOZHAT FGGVNY 111

Q : (x = x0 )
R : (y = f1 (x0 ) z = f2 (x0 ))
Ttel: Ekkor az albbi program megoldsa a specifiklt feladatnak:

y, z := ,
x 6=
e : x

y, z := y f1 ({e}), z f2 ({e})
x := x ' {e}
Bizonyts: A ttel levezetse az egyrtku esetto l csak az invarins tulajdonsg meg-
vlasztsban tr el:
P : (y f1 (x) = f1 (x0 ) y f1 (x) =
z f2 (x) = f2 (x0 ) z f2 (x) = )
A terminl fggvny marad, s a levezets lpsei is megegyeznek.

10.4.4. ltalnos vltozat


Legyenek n, m rgztett termszetes szmok, f : X1 Xn Y1
Ym (Xi , Yj 2H , (i [1..n], j [1..m])) elemenknt feldolgozhat fggvny, s
legyenek az fj : X1 Xn Yj (j [1..m]) fggvnyek az f komponensfgg-
vnyei, azaz f = (f1 , . . . , fm ).
A = X 1 . . . X n Y1 . . . Y m
x1 xn y1 yn
B = X1 . . . Xn
x01 x0n
Q : (x1 = x01 xn = x0n )
R : (y1 = f1 (x01 , . . . , x0n ) ym = fm (x01 , . . . , x0n ))

y1 , ..., ym := , ...,
Sn
xi 6=
i=1

S
n
e : xi
i=1

/ xik+1 e
e x i1 . . . e x ik e / x in
\. . . \ \. . .
... y1 , . . . , ym := ...

y1 f1 (sl({i1 . . . ik }, e)), . . . , ym fm (sl({i1 . . . ik }, e))
xi1 , . . . , xik := xi1 ' e, . . . , xik ' e

ahol i1 , . . . , in az 1, . . . , n permutcija, sl : 2{1,...,n} H X1 Xn ,



{e}, ha i {i1 , . . . , ik }
sl({i1 , .., ik }, e)i =
, ha i / {i1 , . . . , ik }
112 FEJEZET 10. FGGVNYRTK KISZMTSA

Az elgazs "gainak" szma 2n 1.


Bizonyts: A ttel az albbi invarins tulajdonsggal s terminl fggvnnyel form-
lisan levezetheto (a levezetst annak bonyolultsga miatt elhagyjuk):
P : (j [1..m] : (yj fj (x1 , . . . , xn ) = fj (x01 , . . . , x0n )
yj fj (x1 , . . . , xn ) = i, k [1..n] : (x0i \ xi ) xk = ))

Sn

t = xi
i=1
11. fejezet

Visszalpses keress

Legyen n N, s n > 1. Legyenek Ui (i [1..n]) tetszoleges vges, nem res


halmazok (0 < i = |Ui | < ). U = U1 Un .
Legyen % : U L, amely felbonthat %i : U L (i [0..n]) tulajdonsgok
sorozatra az albbi mdon:

1. %0 =;

2. i [0..n 1] : u U : %i+1 (u) %i (u);

3. i [1..n] : u, v U : (j [1..i] : uj = vj ) %i (u) = %i (v);

4. % = %n .

A feladat annak eldntse, hogy ltezik-e olyan elem U -ban, amelyre teljesl a %
felttel, s ha igen, adjunk meg egy ilyen elemet.
A=U L
u l
B = {X }
Q:
R : (l = v U : %(v) l (u U %(u)))

Szmozzuk meg U elemeit az albbi mdon: Minden Ui halmaz elemeit szmoz-


zuk meg nulltl i 1-ig. Ezutn U minden u elemhez van egy (i1 , . . . , in ) rendezett
n-es, amelyre u = (ui1 , . . . , uin ), ahol 0 i1 < 1 , . . . , 0 in < n . Ezen megsz-
mozs egy lexikografikus rendezst definil U -n.
Legyen N = [0..1 1] [0..n 1]. Ekkor a fenti megszmozs egy
bijekcit ltest N s U kztt. Jellje ezt az N U lekpezst .
Vegyk szre, hogy az N halmaz elemei felfoghatk vegyesalap szmrendszerben
felrt szmknt is. Ez alapjn egy N n-es szmrtke:

n
X
f () = i Q i , ahol:
i=1
Yn
Qi = j (i [1..n])
j=i+1

113
114 FEJEZET 11. VISSZALPSES KERESS

A bevezetett jellsekkel a feladatot jra specifikljuk, s most mr megkvetel-


hetjk azt is, hogy ha ltezik keresett tulajdonsg elem, akkor az els o ilyet adjuk meg:
A =N L
l
B = {X }
Q:
R : (l = ( N : %(()))
l (%(()) N : f () < f () %(())))
Ha nem hasznljuk ki a % specilis tulajdonsgait, akkor a fenti feldat megoldhat
lineris keresssel, a [0..|N | 1] intervallumon. Vizsgljuk meg, hogy hogyan hasz-
nlhatnnk ki % specialitst!
Ha %i (()) igaz s %i+1 (()) pedig hamis, akkor minden olyan 0 N -re,
amelynek elso i+1 komponense megegyezik elso i+1 komponensvel, %i+1 (( 0 ))
is hamis lesz. Ezrt ha az i + 1-edik pozci utn a csak nullkat tartalmaz, akkor a
keressben nagyobbat lphetnk, s nvelhetjk -t az i + 1-edik pozcin.
Az algoritmus mg egyszerubb teheto , ha a -t kiegsztjk egy tlcsorduls bittel,
amelynek 1 rtke azt jelzi, hogy rtke mr nem nvelhet o .
Terjesszk ki az f fggvnyt az albbi mdon:
f : {0, 1} N N0 ,
n
X
f (c, ) = c Q0 + i Q i , ahol:
i=1
n
Y
Q0 = j
j=1

Anovel = N N0 {0, 1}
m c
Bnovel = N N0
0 m0
Qnovel : ( = 0 m = m0 m0 [1..n] i [m0 + 1..n] : i = 0i)
Rnovel : (f (c, ) = f ( 0 ) + Qm0 m [0..m0 ]
i [m + 1..n] : i = 0)
 
n
ovel(c, , m)
 
c := 1
c = 1 m 6= 0

\ m = m 1 /
m, m := m 1, 0 c, m := 0, m + 1

Pnovel : (f () + c Qm = f ( 0 ) + Qm0 m [0..m0 ]


i [m + 1..n] : i = 0 i [1..m 1] : i = i0 )
A fenti meggondolsok msik kvetkezmnye, hogy clszeru egy olyan muvelet
bevezetse is amely amellett, hogy %(())-t eldnti, azt a legkisebb indexet is meg-
adja, amelyre %i (()) hamis.
115

Akeres = N N0 L
m l
Bkeres = N N0
0 m
Qkeres : ( = 0 m = m0 m0 [1..n] %m0 1 (()))
Rkeres : ( = 0 l = %(())
l (m [m0 ..n] %m1 (()) %m (())))
Ez a feladat visszavezetheto lineris keress 2.8-ra.
 
keres(, m, l)
 
m, l := m 1,
l m 6= n
l := %m+1 (())
m := m + 1

A program levezetshez a mr bemutatott specifikcit hasznljuk. Legyen az


invarins tulajdonsg:
P : ( N : 0 f (0, ) < f (c, ) %(()) l = %(())
l (c = 1 m [1..n] %m (()) %m1 (())
i [m + 1..n] : i = 0))

, c, m := 0 , 0, 1
keres(, m, l)
l c = 0
n
ovel(c, , m)

\ c=0 /
keres(, m, l) SKIP

Megjegyezzk, hogy a visszalpses keresshez hasonlan tbb visszalpses tech-


nikt alkalmaz algoritmus is levezetheto , pldul a visszalpses szmlls:

, c, m, d := 0 , 0, 1, 0
c=0
keres(, m, l)

\ l /
d := d + 1 SKIP
n
ovel(c, , m)
116 FEJEZET 11. VISSZALPSES KERESS
12. fejezet

Programtranszformcik

A tovbbiakban olyan esetekkel fogunk foglalkozni, amelyekben a feladat llapottert


kell megvltoztatnunk. Vegyk szre: eddig is csinltunk mr ilyet: bevezethetnk j
vltozkat, vagy akr el is hagyhatunk komponenseket.
Az sszetettebb esetekben az eredeti llapottr bizonyos komponenseit jakkal he-
lyettestjk.

12.1. Koordinta transzformcik


Gyakran elofordul, hogy az llapottr egy komponensnek tpust egy kapcsold m-
sik tpusra kell cserlnnk. Az ilyen transzformcik gy ltalnosthatk, hogy egy
lekpezst definilunk a kt llapottr egymsnak megfelelo komponensei kztt.

12.1.1. Tpustranszformcik
Tpustranszformcirl akkor beszlhetnk, ha az llapottr bizonyos komponenseit
valami kapcsold tpusra cserljk.
A programozsi ttelek s ltalban vve a (feladat, megold program) prok
az albbiakban bemutatsra kerlo transzformcikon keresztl ltalnosthatk, ha
az llapotterek kztti transzformci tulajdonkppen tpustranszformci. Ekkor az
brn lthat valamely tpuson megoldott program egyszeru szablyok segtsgvel
tviheto egy kapcsold tpusra.
  


  


 !
#"$

12.1. bra. Tpusok kztti kapcsolatok

117
118 FEJEZET 12. PROGRAMTRANSZFORMCIK

A programozsi ttelek trsa ms tpusra. Az albbi smk a programozsi t-


telek tpusok kztti transzformcijakor elvgzendo helyettestseket definiljk. A
transzformci gy trtnik, hogy az elso tpus adott muvelett a msodik tpus meg-
felelo (azonos sorban levo) muveletre cserljk.

Halmazrl (x, y) sorozatra (a, b) (egy input halmaz/sorozat esetn)


A kt tpus kztti megfeleltets: az a s b sorozatok tagjai felsoroljk az x s y
halmazok elemeit.
y := b := hi
x 6= a.dom 6= 0
e a.lov

y b : hiext
x' a : lorem

A fenti megfeleltetsben szereplo hiext muvelet a hiext muvelet olyan kiter-


jesztse, amely megengedi, hogy egy legfeljebb egy elemu halmazzal terjesszk
ki a sorozatot. Ha a halmaz egy elemu, akkor azzal az elemmel terjeszti ki a
sorozatot, mg ha res, akkor a sorozatot helyben hagyja. Ennek megfelel o en az
elemenknt feldolgozhat f fggvnyro l is feltesszk, hogy egy egy elemu hal-
mazhoz legfeljebb egy elemu halmazt rendel hozz. Az e : x muvelet helyett
az e vltoznak feleltettk meg az a.lov rtket, mert a lov fggvny mindig a
sorozat elso elemt adja vissza ellenttben az eredeti rtkkivlasztssal.
Plda (egyvltozs egyrtku elemenknti feldolgozs):

y := b := hi
x 6= a.dom 6= 0
e : x b : hiext(f ({a.lov}))

y := y f ({e}) a : lorem
x := x ' e

Sorozatrl (a) szekvencilis input file-ra (lopop,ext) (x) vagy (read) (y): (el o -
reolvassi technika)
A kt tpus kztti megfeleltets: ha az a sorozat nem res, akkor megegyezik
a loext(x, dx) s loext(y, dy) sorozatokkal, mg res sorozat esetn az x s y
sorozatokkal.
dx, x : lopop sy, dy, y : read
a.lov dx dy
a : lorem dx, x : lopop sy, dy, y : read
a.dom 6= 0 dx 6= extr sy = norm

A transzformlt program egy plusz lopop (vagy read) muvelettel kezd o dik.
Plda (egyvltozs egyrtku elemenknti feldolgozs):
12.1. KOORDINTA TRANSZFORMCIK 119

b := hi
b := hi sx, dx, x : read
a.dom 6= 0 sx = norm
e := a.lov e := dx
b : hiext(f ({e})) b : hiext(f ({e}))
a : lorem sx, dx, x : read

Halmazrl (x, y) vektorra (v1 , v2 , i [v1 .lob, v1 .hib], j [v2 .lob, v2 .hib])
Feleltessk meg az x (s y) halmaznak a (v1 , i) (ill. (v2 , j)) prt oly mdon,
hogy az x (ill. y) halmaz elemei a v1 vektor v1 .lob..i (ill. a v2 vektor v2 .lob..j)
indexu elemeivel egyeznek meg.

x 6= i 6= v1 .lob 1
e v1 [i]
x := x ' e i := i 1

y := y d v2 [j + 1], j := d, j + 1
y := j := v2 .lob 1

Plda (egyvltozs egyrtku elemenknti feldolgozs):

y := j := v2 .lob 1
x 6= i 6= v1 .lob 1
e : x v2 [j + 1], j := f ({v1 [i]}), j + 1
i := i 1
y := y f ({e})
x := x ' {e}

Sorozatrl (a, b) vektorra (v1 , v2 , i [v1 .lob, v1 .hib] , j [v2 .lob, v2 .hib])
Sorozatok esetn a sorozat s vektor tpusokra megengedett muveletek korl-
tozzk a kt tpus kztti megfeleltets szabad vlasztst: nem hasznlhat
ugyanaz a lekpezs, mint halmazoknl. Vlasszunk ht a tpusmuveletekhez
illeszkedo megfeleltetst!
Feleltessk meg az a sorozatnak a (v1 , i) prt oly mdon, hogy az a sorozat tagjai
rendre a v1 vektor i..v1 .hib indexu elemeivel egyeznek meg. A b sorozatnak
viszont a (v2 , j) prt gy feleltessk meg, hogy a b sorozat elemei rendre a v 2
vektor v2 .lob..j indexu elemeivel egyeznek meg.

a.dom = 0 i = v1 .hib + 1
a.lov v1 [i]
a : lorem i := i + 1
b : hiext(e) v2 [j + 1], j := e, j + 1
b := hi j := v2 .lob 1
120 FEJEZET 12. PROGRAMTRANSZFORMCIK

Plda (egyvltozs egyrtku elemenknti feldolgozs):

b := hi j := v2 .lob 1
a.dom 6= 0 i 6= v1 .hib + 1
b : hiext(f ({a.lov})) v2 [j + 1], j := f ({v1 [i]}), j + 1
a : lorem i := i + 1

Intervallum felett definilt fggvnyrol ([m, n] , i [m, n] s a fggvny


argumentuma i + 1) sorozatra (a)

Elso rnzsre gy tunhet, hogy kihagytunk egy lpst, a fggvnytpust. De


vegyk szre, hogy a fggvny tpusra val ttrs nem ignyel transzformcit!

Itt tulajdonkppen a sorozatot az intervallumnak feleltetjk meg az albbi m-


don: tekintsk az a sorozatot egy az [1..a.dom] intervallumon rtelmezett fgg-
vnynek, ahol a fggvnyrtkek a sorozat megfelelo elemei. Ekkor a ttelben
szereplo fggvnynek tulajdonkppen az f a fggvnyt tekinthetjk.

i 6= n a.dom 6= 0
f (i + 1) f (a.lov)
i := i + 1 a : lorem

Plda (szmlls ttele):

k, d := m 1, 0 d := 0
k 6= n a.dom 6= 0
(k + 1) (a.lov)
\ / \ /
d := d + 1 SKIP d := d + 1 SKIP
k := k + 1 a : lorem

Halmazokrl (x, y, z) szigoran monoton nvo sorozatokra (a, b, c) a ktvl-


tozs elemenknti feldolgozs esetn. A ktvltozs elemenknti feldolgozsnl
az okozhat gondot, hogy el kell tudnunk dnteni, hogy egy adott elem melyik
sorozatban van benne. Ezrt tettk fel, hogy a sorozatok nvekv o en rendezet-
tek, mert gy mindkt sorozat legelso eleme a legkisebb, s ha ezek kzl a
kisebbiket vlasztjuk, akkor a tartalmazs egyszeruen eldnthet o . Egybknt a
transzformci tbbi rsze megegyezik az egyvltozs esetnl lertakkal (itt is
szksges, hogy a fggvnyrtk legfeljebb egyelemu legyen). Termszetesen
az elem kivlasztsa itt is elhagyhat, hiszen a lov muvelet a sorozatnak mindig
ugyanazt az elemt adja vissza.
12.2. LLAPOTTR TRANSZFORMCI 121

c := hi
a.dom 6= 0 b.dom 6= 0
(a.dom 6= 0 b.dom 6= 0 a.dom 6= 0 b.dom 6= 0 (a.dom 6= 0 b.dom 6= 0
a.lov < b.lov) b.dom = 0 a.lov = b.lov a.lov > b.lov) a.dom = 0
\ \ \
c : hiext(f ({a.lov}, )) c : hiext(f ({a.lov}, c : hiext(f (, {b.lov}))
a : lorem {b.lov})) b : lorem
a : lorem
b : lorem

12.2. llapottr transzformci


Az albbiakban egy olyan pldt mutatunk be, amelyben az llapottr transzformci
nem egyszeru tpustranszformci. A feladatot gy fogjuk megoldani, hogy eredeti
llapottr helyett egy j (absztrakt) llapotteret vlasztunk, azon megoldjuk a feladatot,
majd a megoldsban szereplo muveleteket megvalstjuk az eredeti tren.
Tegyk fel, hogy van egy karakterekbo l ll szekvencilis file-unk, ami egy szve-
get tartalmaz. A feladat az, hogy szmoljuk meg, hogy hny olyan sz van a szvegben,
amelynek hossza nagyobb, mint a megadott k rtk! A szvegben a szavakat elvlaszt
jelek (egy vagy tbb) vlasztjk el egymstl. Az elvlaszt jelek halmazt jellje S.
gy elso rnzsre a feladat nem vezetheto vissza egyetlen ismert programozsi
ttelre sem. A feladatot ezrt gy ltalnostjuk, hogy bevezetnk egy j llapotteret:
tegyk fel, hogy a szvegfile helyett egy olyan file-unk van, amiben az eredeti file
szavainak hossza szerepel. Legyen ez az absztrakt file g : G, mg az eredeti szvegfile
f : F . A feladat specifikcija az j tren:
A=G Z
g d
B =G
g0
Q : (g = g 0 )
dom(g)
P
R : (d = (gi > k))
i=1
Ez a feladat visszavezetheto a szmlls ttelnek szekvencilis file-ra felrt vlto-
zatra:

open(g)
sg, dg, g : read
d := 0
sg = norm

\ dg > k /
d := d + 1 SKIP
sg, dg, g : read
Htra van mg az absztrakt open s read muveletek megvalstsa.
122 FEJEZET 12. PROGRAMTRANSZFORMCIK

Az absztrakt g file-nak pontosan akkor van mg eleme, ha az eredeti f file-ban van


mg sz. Ezrt van szksg az open muveletre, amely arra hivatott, hogy biztostsa a
read muvelet elejn megkvnt invarins tulajdonsgot: vagy sf = abnorm vagy df
a kvetkezo sz elso karaktert tartalmazza. Ezen invarins tulajdonsg segtsgvel a
read muveletben knnyen el lehet dnteni, hogy lesz-e visszaadott rtk, vagy mr az
absztrakt file is kirlt.
Az absztrakt file-ok kezelsnek ltalban is ez a technikja: egy open muvelet-
tel biztostjuk a read elejn megkvnt invarins tulajdonsgot, s gondoskodunk rla,
hogy a read muvelet ezt az invarins tulajdonsgot megtartsa. ltalban is igaz az,
hogy az invarinsbl egyszeruen eldntheto , hogy lesz-e mg visszaadott elem, ezrt
az absztrakt read mindig elgazssal kezdodik!
Nzzk teht az absztrakt muveletek megvalstst az eredeti llapottren: ezek
mint lthat szintn programozsi ttelek egyszeru konstrukcii.
 
open(g)
 
sf, df, f : read
sf = norm df S
sf, df, f : read
 
sg, dg, g : read
 

\ sf = norm /
sg := norm sg := abnorm
dg := 0
sf = norm df 6 S
dg := dg + 1
sf, df, f : read
sf = norm df S
sf, df, f : read

12.3. Egyszeru programtranszformcik


Azt mondjuk, hogy az S program p(S) programfggvnye nem fgg az llapottr A i
komponenstol, ha

a, b Dp(S) : (k ([1, n] \ {i} : ak = bk ) p(S)(a) = p(S)(b)).

Azt mondjuk, hogy az S program ai : Ai vltozja konstans, ha

a A : S(a) : (k D : k i = ai ).

Azt mondjuk, hogy az S program vgrehajtsa nem vltoztatja meg az a i : Ai vltozt,


ha
a Dp(S) : b p(S)(a) : bi = ai
12.3. EGYSZERU PROGRAMTRANSZFORMCIK 123

Nem megengedett felttel kitranszformlsa elgazsbl. Legyen S AA , S =



IF (1 : S1 , ..., n : Sn ), A = A1 ... Am . Konstruljuk az S 0 A0 A0 pro-
gramot az albbi mdon:
A0 = A 1 . . . A m L . . . L
a1 am l1 ln

l1 , . . . , ln := 1 (a1 , ..., am ), . . . , n (a1 , ..., am )


IF (l1 : S1 , ..., ln : Sn )
0
Ekkor az S program ekvivalens S-sel A-n.

Nem megengedett ciklusfelttel kitranszformlsa. Let S AA , S = DO( :



S0 ), A = A1 ... Am . Konstruljuk az S 0 A0 A0 programot az albbi mdon:
A0 = A 1 . . . A m L
a1 am l

l := (a1 , ..., am )
l
S0
l := (a1 , ..., am )
Ekkor az S 0 program ekvivalens S-sel A-n.

Szimultn rtkads helyettestse egyszer u rtkadsokkal. Legyen S A


A , a kvetkezo szimultn rtkads:
A = A1 . . . Am
a1 am

 S 
a1 , ..., am := f1 (a1 , ..., am ), ..., fm (a1 , ..., am )

Konstruljuk az S 0 A0 A0 programot az albbi mdon:
A0 = A 1 . . . A m A 1 . . . A m
a1 am b1 bm

0
 S 
b1 := f1 (a1 , ..., am )
..
.
bm := fm (a1 , ..., am )
a1 := b1
..
.
am := bm

Ekkor az S 0 program ekvivalens S-sel A-n.


124 FEJEZET 12. PROGRAMTRANSZFORMCIK

Szekvencia sorrendjnek felcserlse. Ha S12 = (S1 ; S2 ), S21 = (S2 ; S1 ) s az


llapottr azon komponenseit amelyekto l az S1 fgg S2 nem vltoztatja meg s viszont,
akkor S12 ekvivalens S21 -el.
   
 S12   S21 
S1 S2
S2 S1

Ciklusmag-beli szekvencia sorrendjnek felcserlse. Legyen S = DO( : S0 ),


S0 = (i := i + 1; S01 ) s tegyk fel, hogy az i konstans S01 -ben. Legyen tovbb
S 0 = (S01 ii+1 ; i := i + 1).
 
0
 S   S 


ii+1
i := i + 1 S01
S01 i := i + 1

Ekkor S ekvivalens S 0 -vel.

Fggvny helyettestse vltozval. Legyen S A A , A = A1 ... Am . s


legyen f egy az Ai1 ... Aik altr felett definilt fggvny, melynek rtkkszlete
H. Tegyk fel tovbb, hogy az ai1 , ..., aik vltozk konstansok S-ben, s ksztsk el

az S 0 A0 A0 programot az albbi mdon:
A0 = A 1 . . . A m H
a1 am z

z := f (ai1 , ..., aik )


S f (ai1 ,...,aik )z
Ekkor S 0 ekvivalens S-sel A-n.

Rekurzvan definilt fggvny helyettestse. Legyen H egy tetszo leges halmaz,


k > 0 egy egsz szm, tovbb F : Z H k H fggvny, t0 , t1 , . . . , tk+1 Z
rgztett, s definiljuk az f : Z H fggvnyt az albbi mdon:

f (0) = t0 ,
f (1) = t1 ,
.. ..
. .
f (k + 1) = tk+1

tovbb i 0:
f (i + 1) = F (i + 1, f (i), ..., f (i k + 1))

Tekintsk az albbi S programot:


12.3. EGYSZERU PROGRAMTRANSZFORMCIK 125

i := 0
S1

S0
i := i + 1

ahol i mind S0 -ban, mind S1 -ben konstans, s S0 -ban hivatkozs trtnik f (i + 1)


rtkre. Ekkor S ekvivalens az albbi programmal:

i, z, z1, .., zk+1 := 0, t0 , t1 , .., tk+1


S1

z, z1 , .., zk+1 := F (i + 1, f (i), ..., f (i k + 1)), z, .., zk+2
S0 f (i+1)z
i := i + 1
126 FEJEZET 12. PROGRAMTRANSZFORMCIK
13. fejezet

Szekvencilis megfelelo

Egy feladat megoldsa sorn sokszor szembeslnk azzal a problmval, hogy kln-
bzo tpusrtkhalmazokba eso rtkek kztti kapcsolatot kell lernunk, vagy ilyen
rtkeket kell sszehasonltanunk. Erre leggyakrabban akkor kerl sor, ha valamilyen
llapottrtranszformcit vgznk, s meg kell adnunk az eredeti s az absztrakt tr k-
ztti kapcsolatot. Az ilyen megfeleltetsek formlis megadsa ltalban elg nehzkes.
A szekvencilis megfelelo fogalmnak felhasznlsval azonban ezek a kapcsolatok is
egyszerubben rhatk fel.
Legyenek E1 , E2 , . . . , En elemi tpusok (egy tpus akkor elemi, ha nmagval van
reprezentlva, azaz a hozztartoz reprezentcis fggvny az identikus lekpezs).
Az elemi rtkek halmaza legyen
n
[
E= Ei
i=1

Tegyk fel hogy a T tpus reprezentcis fggvnyre igazak az albbi megszortsok:


% E T ,
% klcsnsen egyrtelmu (bijektv),
% megengedett tpuskonstrukci (azaz direktszorzat, uni s iterlt konstrukci-
kbl pl fel)
Legyen tovbb B = {B1 , B2 , . . . , Bm } az gynevezett bzishalmaz, ahol Bi (i =
1, . . . , m) tetszoleges tpusrtkhalmaz, s jellje az elemi tpusok halmazt F =
{E1 , E2 , . . . , En }. Ekkor a t T elem B bzisra vonatkoztatott szekvencilis megfe-
leloje:
hti,
ha T B


hi, ha T
/ BT F
seq(t|B) = R(t|B), ha T / BT / F s T rekord



E(t|B), ha T
/ B T
/ F s T egyests

S(t|B), ha T / BT / F s T sorozat
ahol
R(t|B) = kon(seq(t.s1 |B), . . . , seq(t.sk |B))
E(t|B) = seq(1
u (t)|B)
S(t|B) = kon(seq(t1 |B), . . . , seq(tdom(t) |B))

127
128
FEJEZET 13. SZEKVENCILIS MEGFELELO

A jells egyszerustse vgett, ha a bzis egyelemu, akkor a bzishalmaz helyett az


elem is rhat, azaz B = {B1 } esetn

seq(t|B1 ) ::= seq(t|B).

Tekintsk a kvetkezo pldt:

T = seq(R),
R = (nev : N EV, szul : SZU L),
N EV = seq(CHAR),
SZU L = (hely : HELY, ido : DAT U M ),
HELY = seq(CHAR),
DAT U M = (ev : EV, ho : HO, nap : N AP ),
EV = N0
HO = N0
N AP = N0

Legyen F = {CHAR, N0 }, t T . Ekkor


seq(t|N EV ) a t sorozatbeli rekordok nvrszeinek sorozata (
N EV )
seq(t|CHAR) a t sorozatbeli rekordok nvrsznek s szletsi
hely rsznek egyms utn fuzsvel kapott ka-
raktersorozat
seq(t|{HELY, EV }) a t sorozatbeli rekordok szletsi hely s v r-
sznek egyms utn fuzsvel kapott sorozat (
(HELY EV ) )
seq(seq(t|N EV )|CHAR) a t sorozatbeli rekordok nvrszeibo l kpzett ka-
raktersorozat
seq(t|R) res sorozat
Hogyan hasznlhat a szekvencilis megfelelo az llapottrtranszformci ler-
sra? Tekintsk a 12.2 fejezetben bemutatott pldt. Ott egy szvegfile-t a benne levo
szavak hosszainak file-jval helyettestettk. Tegyk fel, hogy CHAR = (AN U M ; SEP )
uni tpus, ahol AN U M a szavakat alkot betuk tpusa, SEP pedig az elvlaszt jelek
tpusa. Ekkor az f : F = seq(CHAR) eredeti file s a g : G = seq(N) absztrakt file
kztt kell a kapcsolatot definilnunk. Ehhez vezessnk be mg kt absztrakt filet-
pust: legyen U = seq(szo : SZO; szu : SZU N ET ), ahol SZO = seq(AN U M ) s
SZU N ET = seq(SEP ), tovbb legyen V = seq(SZO). Ekkor:
az f : F s az u : U kztti kapcsolat:

seq(u|{AN U M, SEP }) = seq(f |{AN U M, SEP }),

az u : U s a v : V kztti kapcsolat:

seq(v|SZO) = seq(u|SZO),

a v : V s a g : G kztti kapcsolat:

dom(g) = dom(v) i [1..dom(g)] : gi = dom(vi ).


129

Fel kell mg tennnk azt, hogy u a leheto leghosszabb azonos tpus rszsorozatokbl
ll, vagyis az U tpus invarins tulajdonsga:

IU (u) = i [1..dom(u) 1] : ui .szo ui+1 .szu ui .szu ui+1 .szo

A fenti lers matematikai egzaktsggal definilja azt az llapottrtranszformcit, amit


a 12.2 fejezetben csak szavakkal rtunk le. Termszetesen mskpp is formalizlhat
egy llapottrtranszformci, de a szekvencilis megfelelo hasznlata sokszor leegy-
szerusti a lerst.
130
FEJEZET 13. SZEKVENCILIS MEGFELELO
14. fejezet

Programinverzi

14.1. Egyvltozs eset


Legyenek A, B, C s D tetszoleges tpusok. Legyen tovbb X = seq(B) s Y =
seq(C), valamint f1 : A X, f2 : X Y s f3 : Y D fggvnyek.
Tekintsk az albbi specifikcival adott feladatot:
A=A D
a d
B = A
a0
Q : (a = a0 )
R : (d = f3 f2 f1 (a0 ))

Tegyk fel, hogy az f1 fggvny rtkt kiszmt program az albbi alakban rhat
fel:
A=A X
a x
B = A
a0
Q : (a = a0 )
R : (x = f1 (a0 ))

S11 (a)
x :=<>

S12 (a, e)
x : hiext(e)
S13 (a)
Ha az S11 , S12 s S13 programok vgrehajtsa nem vltoztatja meg az x vltoz
rtkt, akkor a fenti programot elemenknt elollt programnak nevezzk,

131
132 FEJEZET 14. PROGRAMINVERZI

Hasonlan, tegyk fel, hogy az f3 fggvny rtkt kiszmt program pedig az


albbi formban rhat fel:
A =Y D
y d
B =Y
y0
Q : (y = y 0 )
R : (d = f3 (y 0 ))

S31 (d)
y.dom 6= 0
S32 (d, y.lov)
y : lorem
S33 (d)
Ha az S31 , S32 s S33 programok vgrehajtsa nem vltoztatja meg az y vltoz
rtkt, akkor a fenti programot elemenknt felhasznl programnak nevezzk,
Tegyk fel tovbb, hogy az f2 fggvny elemenknt feldolgozhat, s minden
egyelemu halmazra a fggvnyrtk egyelemu. Ekkor a fggvnykompozci helyet-
testsi rtknek kiszmtsra vonatkoz programozsi ttel alapjn a feladat meg-
oldhat a fenti elemenknt elollt, egy elemenknt feldolgoz s az imnt bemutatott
elemenknt felhasznl program szekvencijaknt.
A feladatra azonban egy hatkonyabb megoldst is adhatunk a programinverzi
segtsgvel: ekkor a kzblso kt sorozat tpust kihagyhatjuk s a hrom ciklust egy-
berhatjuk az albbi mdon:

S11 (a)
S31 (d)

S12 (a, e)
:= f2 ({e})
S32 (d, )
S13 (a)
S33 (d)

14.2. Ktvltozs eset


Legyenek A1 , A2 , B, C s D tetszoleges tpusok. Legyen tovbb X = seq(B) s
Y = seq(C), valamint f11 : A1 X, f12 : A2 X, f2 : X X Y s f3 : Y D
fggvnyek.
Tekintsk az albbi specifikcival adott feladatot:
A = A 1 A2 D
a1 a2 d
14.2. KTVLTOZS ESET 133

B = A 1 A2
0 0
a1 a2

0 0
Q : (a1 = a1 a2 = a2 )
0 0
R : (d = f3 f2 (f11 (a1 ), f12 (a2 )))

Legyenek az f11 s f12 fggvnyeket kiszmt elemenknt elo llt programok az


albbiak:

1
S11 (a1 ) 2
S11 (a2 )
x1 :=<> x2 :=<>
1 2
1
S12 (a1 , e1 ) 2
S12 (a2 , e2 )
x1 : hiext(e1 ) x2 : hiext(e2 )
1
S13 (a1 ) 2
S13 (a2 )

s tegyk fel, hogy az elolltott x1 s x2 sorozatok rendezettek.

Legyen f3 mint korbban, tovbb tegyk fel, hogy f2 egy olyan ktvltozs egyr-
tku elemenknt feldolgozhat fggvny, amely minden olyan halmazprhoz, amely-
nek tagjai legfeljebb egy elemet tartalmaznak, pontosan egy elemu halmazt rendel
hozz.

Ekkor a fggvnykompozci helyettestsi rtknek kiszmtsra vonatkoz pro-


gramozsi ttel alapjn a feladat megoldhat a fenti kt elemenknt el o llt, a ktvl-
tozs egyrtku elemenknt feldolgoz s az f3 -at kiszmt elemenknt felhasznl
program szekvencijaknt. Vajon ebben az esetben is sszeinvertlhatak a fenti pro-
gramok?

A vlasz termszetesen: igen, de a megolds itt nem olyan egyszeru, mint az egy-
vltozs esetben volt. A problma a szekvencilis file-oknl felmerlttel analg: az
1 1
elemet elollt program (S12 ill. S12 ) az egyes elemeket ugyangy szolgltatja mintha
file-bl olvasnnk o ket: csak akkor nzhetjk meg a kvetkezo elemet ha legenerltat-
juk. Ez sugallja azt a megoldst, hogy az x1 s x2 sorozatokat tekintsk az elemenknt
feldolgozsban absztrakt file-oknak. Az elemenknt felhasznl program beinvertlsa
nem okoz gondot, ugyangy trtnik mint az egyvltozs esetben.
134 FEJEZET 14. PROGRAMINVERZI

open(x1 ), open(x2 )
sx1 , dx1 , x1 : read, sx2 , dx2 , x2 : read
S33 (d)
sx1 = norm sx2 = norm
sx2 = abnorm (sx1 = sx2 sx1 = sx2 sx1 = abnorm (sx1 = sx2
dx1 < dx2 ) dx1 = dx2 dx1 > dx2 )
\ \ \
e := f2 ({dx1 }, ) e := f2 ({dx1 }, {dx2 }) e := f2 (, {dx2 })
sx1 , dx1 , x1 : read sx1 , dx1 , x1 : read sx2 , dx2 , x2 : read
sx2 , dx2 , x2 : read
S32 (d, e)
1 (a1 )
S13
2 (a2 )
S13
S33 (d)

ahol az absztrakt muveletek megvalstsai:


   
open(x1 ) open(x2 )
   
1
S11 (a1 ) 2
S11 (a2 )
   
sx1 , dx1 , x1 : read sx2 , dx2 , x2 : read
   

\ 1 / \ 2 /
sx1 := norm sx1 := abnorm sx2 := norm sx2 := abnorm
1
S12 (a1 , dx1 ) 2
S12 (a2 , dx2 )
15. fejezet

Idoszer u sts

15.1.
Az idoszerusts
defincija
Induljunk ki egy olyan adatfile-bl amelyben azonos tpus elemek tallhatak. Ezt a
file-t trzsfile-nak fogjuk nevezni. Legyen az elemek tpusa E, ekkor
T = seq(E)
Legyen adott tovbb egy olyan file, amely transzformcik sorozatt tartalmazza. Ezt
a file-t fogjuk mdostfile-nak nevezni. Legyen F = {f | f : T T lekpezs},
ekkor
M = seq(F )
A feladat az, hogy idoszerustsk a trzsfile-t a mdostfile-ban lert transzformcik-
kal. Jellje upd az idoszerusts transzformcit. Ekkor upd : T M T s

upd(t, m) = mdom(m) m2 m1 (t)

Ahhoz, hogy a feladatra megoldst adjunk ez a lers mg mindig tl ltalnos,


ezrt tovbbi kiktseket tesznk a file-okra.

1. Az idoszerusts kulcsos
Legyen E = (k : K, d : D) s F = (k : K, v : V ), ahol K egy tetszo leges
rendezett halmaz, a rekordok kulcsrsze; D a trzsrekord adatrsze; V pedig
az elvgzendo transzformcit definil tpus. Feltesszk tovbb, hogy mind a
tzsfile, mind a mdostfile a kulcsmezo (k) szerint rendezett, azaz a T s M
tpusok invarins tulajdonsgra:

IT (t) i [1..dom(t) 1] : ti .k ti+1 .k


IM (m) i [1..dom(m) 1] : mi .k mi+1 .k

2. A trzsfile a kulcsmezo szerint egyrtelmu

IT (t) i, j [1..dom(t)], i 6= j : ti .k 6= tj .k

3. A transzformci csak az albbi hrom fle lehet

135
136
FEJEZET 15. IDOSZER
USTS

V = (t : W1 ; b : W2 ; j : W3 )
W1 = {}
W2 = (d : D)
W3 = (g : G), ahol G = { | : D D}

Ahol a jells nem rontja el a szelektorfggvnyek egyrtelmusgt, ott az egy-


ms utn kvetkezo szelektorfggvny-sorozatbl a kzblso elemek a jellst
egyszerustendo kihagyhatk, ezrt pl. ha dm : F , akkor dm.v.g helyett csak
dm.g-t runk.
Htra van mg annak lersa, hogy hogyan hatnak a fenti transzformcik a
trzsfile-ra. Knyelmi okokbl a transzformcik eredmnyt halmazknt adjuk
meg (ez elegendo, mert a trzsfile kulcs szerint egyrtelmu). Ehhez bevezetnk
nhny jellst: legyen x : seq(k : K, y : Y ), ahol K rendezett halmaz, Y pedig
tetszoleges tpus, valamint k K. Ekkor

{x} = {xi | i [1..dom(x)]}


{x.k} = {xi .k | i [1..dom(x)]}
K(x, k) = {xi | i [1..dom(x)] xi .k = k}


T (mi , t), ha mi .t
{mi (t)} = B(mi , t), ha mi .b

J (mi , t), ha mi .j
ahol

{tj | tj t tj .k 6= mi .k}, ha mi .k {t.k}
T (mi , t) =
{t}, klnben

{t} {(mi .k, mi .v.d)}, ha mi .k 6 {t.k}
B(mi , t) =
{t}, klnben

{tj | tj t tj .k 6= mi .k}
J (mi , t) = {(mi .k, mi .g(K(t, mi .k)))}, ha mi .k {t.k}

{t}, klnben

4. A javts muvelet csere

IM (m) i [1..dom(m)], mi .v.j mi .g konstans

Ebben az esetben a W3 tpust gy szoktuk felrni, hogy a g : G mezo helyre


d : D-t runk s a mi .g(K(t, k)) fggvnyalkalkalmazst a mdostrekord adat-
rszre (mi .d) cserljk.

A feladat specifikcija teht:


A = T M T
t0 m t
B = T M
t00 m0

15.2. IDOSZER
USTS EGYRTELMU MDOSTFILE-LAL 137

Q : (t0 = t00 m = m0 s az 1..x pontok teljeslnek)


R : (t = upd(t00 , m0 ))

Ha a fenti specifikciban x = 3, akkor kznsges, ha x = 4 akkor egyszeru


idoszerustsrol beszlnk.

15.2.
Idoszerusts
egyrtelmu mdostfile-lal
Mivel a kznsges s az egyszeru ido szerusts kztt tulajdonkppen csak a javts
elvgzsben van klnbsg, mi a tovbbiakban az egyszeru id o szerustssel fogunk
foglalkozni. Kznsges idoszerusts esetn az adatrsz cserjnek helyre a javt
fggvny (mi .g) elvgzse rhat.
A feladatot hrom irnybl is megprbljuk megoldani: visszavezetjk halmazok
unijra, egyvltozs egyrtku illetve ktvltozs egyrtku elemenknti feldolgo-
zsra.

15.2.1. Visszavezets halmazok unijra

Tekintsk a file-okat halmaznak, s prbljuk meg halmazokon megoldani a feladatot.


Milyen kulcsrtkek fordulhatnak elo az j trzsfile-ban? Termszetesen csak olyanok,
amelyek vagy t0 -ban, vagy m-ben, esetleg mindketto ben szerepeltek.
Terjesszk ki a D halmazt az res rtkkel: D 0 = D{< ures>} A D 0 segtsgvel
az egyes transzformcik rtelmezsi tartomnya s rtkkszlete az albbiak szerint
alakul:
W1 : D {<ures>}
W2 : {<
ures>} D
W3 : D D

Ha egy elem adatrsze az < ures> rtket veszi fel, akkor az azt jelzi, hogy va-
ljban nem ltezik, s ezrt nem kerl bele az j trzsfile-ba. Idzzk fel az uni
programjt: 
z := x y
 
z :=
x 6= y 6=
e : (x y)

\ exe
/y \ exey \ e
/ xey

z := z e z := z e z := z e
x := x ' e x := x ' e y := y ' e
y := y ' e
138
FEJEZET 15. IDOSZER
USTS

A feladat a kvetkezo megfeleltetssel visszavezetheto a fenti programra:

x t0
y m
z t
x 6= y 6= t0 6= m 6=
e : (x y) k : ({t0 .k} {m.k})
e x k {t0 .k}
ey k {m.k}

A megfelelo program:

t :=
t0 6= m 6=
k : ({t0 .k} {m.k})
k {t0 .k} k
/ {m.k} k {t0 .k} k {m.k} k 6 {t0 .k} k {m.k}
\ \ \

S1 S2 S3

Vizsgljuk meg most, hogy mit kell tenni az elgazs egyes gaiban:

1. Ha a k kulcs csak a t0 eredeti trzsfile-ban szerepelt, akkor a K(t0 , k) elemre


nem vonatkozott mdosts, vltoztats
 nlkl
 kell kirni az j trzsfile-ba.
S
 1 

t := t K(t0 , k)
t0 := t0 ' K(t0 , k)

2. Ha a k kulcsrtk mind az eredeti trzsfile-ban, mind pedig a mdostfile-ban


szerepelt, akkor a trls s a javts muveletek vgezheto k el. Ebben az gban a
k kulcs elemet mindkt file-bl el kell hagyni.
 
 S2 
K(m, k).t K(m, k).b K(m, k).j
\ \ \
SKIP HIBA
t := t (k, K(m, k).d)
m := m ' K(m, k)
t0 := t0 ' K(t0 , k)

3. Ha a k kulcs csak a mdostfile-ban szerepelt, akkor csak a beszrs muveletet


lehet elvgezni, s a k kulcs elemet ki kell trlni a mdostfile-bl.

15.2. IDOSZER
USTS EGYRTELMU MDOSTFILE-LAL 139
 
 S3 
K(m, k).t K(m, k).b K(m, k).j
\ \ \
HIBA HIBA
t := t (k, K(m, k).d)
m := m ' K(m, k)

Ha a programnak hibajelzst is kell adnia, akkor azt a fenti struktogramokban


HIBA-val jelzett helyeken kell megtennie. Trjnk most vissza az eredeti feladatra,
ahol halmazok helyett szekvencilis file-ok szerepelnek. Legyen az inputfile-okon a
read muvelet rtelmezve. Ekkor a program az albbiak szerint alakul:


<
ures>, ha dx.k
/ {t0 .k}
dx.d =
K(t0 , dx.k).d, ha dx.k {t0 .k}

<
ures>, ha dx.k
/ {m.k}
dx.v =
K(m, dx.k).v, ha dx.k {m.k}
Az llapottrtranszformcit alkalmazva gy eljutottunk az

f ({e}) = {(e.k, e.v(e.d))}

elemenknt feldolgozhat fggvnyre felrt egyvltozs elemenknti feldolgozshoz,


ahol a transzformcis rsz alkalmazsa az adatrszre:


e.d, ha e.v = < ures>

<ures> ha e.v.t e.d 6= < ures>
e.v(e.d) =

e.v.d ha e.v.b e.d = <
ures>

e.v.d ha e.v.j e.d 6= <
ures>
A specifikci:
A=X T
x t
B =X
x0
Q : (x = x0 s az 1..4 pontok teljeslnek)
R : (t = f (x0 ))

A halmazokra felrt megoldprogram:

t :=
x 6=
e : x
e.d 6= < e.d 6= <
ures> ures> e.d = <ures>
\ e.v = <ures> \ e.v 6= <ures> \ e.v 6= <
ures>
d := (e.k, e.d) S2 S3

t := t d
x := x ' e
140
FEJEZET 15. IDOSZER
USTS

ahol  
 S2 

\ e.t \ e.b \ e.j


d := HIBA d := (e.k, e.g(e.d))
 
 S3 

\ e.t \ e.b \ e.j


HIBA d := (e.k, e.v.d) HIBA
Trjnk vissza most az eredeti llapottrre:

x 6= t0 6= m 6=
e : x k : ({t0 .k} {m.k})

e.d 6= <
ures> e.v = <
ures> k {t0 .k} k
/ {m.k}

ures> e.v 6= <


e.d = < ures> k
/ {t0 .k} k {m.k}

e.d 6= <
ures> e.v 6= <
ures> k {t0 .k} k {m.k}

x := x ' e k {t0 .k} k {t0 .k} k


/ {t0 .k}
k / {m.k} k {m.k} k {m.k}
\ \ \
t0 := t0 ' t0 := t0 ' m := m '
K(t0 , k) K(t0 , k) K(m, k)
m := m '
K(m, k)

Hasznljuk fel azt a tnyt, hogy a d := f ({e}) rtkadst kiszmt programokban


s az x := x ' e rtkads megfelelojben szereplo elgazsok felttelrendszere meg-

egyezik, tovbb a t := t d rtkadst csak azokba az gakba rjuk bele, amelyekben
d 6= . Ekkor ugyanazt a programot kapjuk, mint az elso megoldsban.

15.2.2. Visszavezets ktvltozs elemenknti feldolgozsra


A feladat megoldsnak taln legegyszerubb mdja az, ha ktvltozs egyrtku hi-
bakezels esetn ktrtku elemenknti feldolgozsra vezetjk vissza. Tekintsk a
feladat eredeti specifikcijt.
Ha a mdostfile kulcs szerint egyrtelmu, akkor az idoszerusts fggvnye (upd)
a kulcsokra nzve elemenknt feldolgozhat. A kulcsrtkekre felrt fggvny:

upd(k, ) = K(t0 , k)

, ha K(m, k).t
upd(, k) = (k, K(m, k).d), ha K(m, k).b

, ha K(m, k).j

, ha K(m, k).t
upd(k, k) = K(t0 , k), ha K(m, k).b

(k, K(m.k).g(K(t0 , k).d)), ha K(m, k).j

15.3. IDOSZER
USTS NEM EGYRTELMU MDOSTFILE-LAL 141

Ha ezt a fenti fggvnyt behelyettestjk a ktvltozs elemenknti feldolgozs


ttelbe, akkor ugyanahhoz a megoldprogramhoz jutunk csak sokkal rvidebb ton
, mint az elso megoldsban.

15.3.
Idoszerusts
nem egyrtelmu mdostfile-
lal
Vajon miben vltozik a feladat, ha a mdostfile kulcs szerint nem egyrtelmu? Eb-
ben az esetben a feladat nem elemenknt feldolgozhat. Erre a problmra ktfle
megoldsi mdot is megvizsglunk: az adatabsztrakcis s a fggvnyabsztrakcis
megkzeltst.

15.3.1. Megolds adatabsztrakcival


Mint az elobb mr megllaptst nyert, ha a mdost file kulcs szerint nem egyrtelmu,
akkor a feladat nem elemenknt feldolgozhat. Ht akkor tegyk azz! Ehhez arra van
szksg, hogy a mdost file-t kulcs szerint egyrtelmuv tegyk. Ezt egy llapottr-
transzformci segtsgvel knnyen megtehetjk, ugyanis csak annyit kell tennnk,
hogy az azonos kulcs mdost rekordokat egy j rekordba fogjuk ssze. gy az j
mdost rekord a kvetkezokppen fog kinzni:

(kulcs, transzformcisorozat)

Azaz definiljuk az j mdostfile tpust az albbi mdon:


Legyen W = seq(V ); s F 0 = (k : K, v : W ). Ezekkel a tpusdefincikkal a
mdostfile gy rhat le:
X = seq(F 0 );

Ezzel a mdostfile-lal teht eljutottunk a ktvltozs egyrtku (hibafile hasz-


nlata esetn ktrtku) elemenknti feldolgozshoz. Az egyetlen klnbsg csak az,
hogy az adott transzformci-sorozat vgrehajtst meg kell valstanunk az eredeti
llapottren. Ehhez szksgnk lesz az < ures> sziblumra, amely rtket hozz-
vesszk az adatrsz tpushoz: D 0 = D {< ures>}. Az, hogy egy trzsrekord
adatrsze <ures> azt jelenti, hogy a rekordot nem kell kirni az eredmnyfile-ba.
Az elemenknt feldolgozhat fggvnynk:

upd(k, ) = K(t0 , k)
upd(, k) = (k, K(x, k).v(<
ures>))
upd(k, k) = (k, K(x, k).v(K(t0 , k).d))

A transzformcisorozat elvgzse csak a transzformcik megfelel o sorrendje esetn


lehetsges. Ha egy transzformcisorozat egy tagjt nem lehet elvgezni, akkor azt a
sorozatbl ki kell hagyni (esetleg hibt kell jelezni). Ezzel az upd fggvny egyrtel-
muen definilt.
rjuk fel teht a fenti megfontolsok alapjn a ktvltozs elemenknti feldolgozs
programjt a megfelelo behelyettestsekkel:
142
FEJEZET 15. IDOSZER
USTS

t := 0
st0 , dt0 , t0 : read
sx, dx, x : read
st0 = norm sx = norm
sx = abnorm (sx = st0 sx = st0 st0 = abnorm (sx = st0
dt0 .k < dx.k) dx.k = dt0 .k dx.k < dt0 .k)
\ \ \
t : hiext(dt0 ) ak := dx.k ak := dx.k
st0 , dt0 , t0 : read ad := dx.v(dt0 .d) ad := dx.v(<
ures>)
t : HIEXT (ad, ak) t : HIEXT (ad, ak)
st0 , dt0 , t0 : read sx, dx, x : read
sx, dx, x : read

Definilnunk kell mg, hogy mit jelent a fenti struktogramban a transzformciso-


rozat elvgzse. Ehhez bevezetjk az f : N0 D0 rekurzvan definilt fggvnyt:

dx.v(p) = f (dx.v.dom)

ahol

f (0) = p
f (i + 1) = dx.vi+1 (f (i))

A fenti definciban szereplo dx.vi+1 muvelet elvgzsn az albbi fggvnyrtkeket


rtjk: Legyen d D 0 , ekkor:


<ures>, ha dx.v.t d 6= < ures>



d, ha dx.v.t d = <
ures>

d, ha dx.v.b d 6= < ures>
dx.vi+1 (d) =

dx.v.d, ha dx.v.b d = <
u res>



dx.v.d, ha dx.v.j d 6 = <
u res>

d, ha dx.v.j d = < ures>

Az f fggvnyt kiszmt a mdostssorozatot elvgzo program:


 
ad := dx.v(p)
 
d := p
dx.v.dom 6= 0

\ dx.v.lov.t \ dx.v.lov.b \ dx.v.lov.j

\ ad = <
ures> /\ ad = <ures> /\ ad = <
ures> /
HIBA ad := <ures> ad := dx.v.lov.d HIBA HIBA ad := dx.v.lov.d
dx.v : lorem
Mivel az aktulis adat rtke lehet <
ures> is, a hiext muvelet helyett az albbi
programot hasznljuk:

15.3. IDOSZER
USTS NEM EGYRTELMU MDOSTFILE-LAL 143
 
t : HIEXT (ak, ad)
 

\ ad = <
ures> /
t : hiext((ak, ad)) SKIP

Trjnk most vissza az eredeti llapottrre. Ekkor a fo program:

t := 0
st0 , dt0 , t0 : read
sm, dm, m : read
st0 = norm sm = norm
sm = abnorm (sm = st0 sm = st0 st0 = abnorm (sm = st0
dt0 .k < dm.k) dm.k = dt0 .k dm.k < dt0 .k)
\ \ \
t : hiext(dt0 ) ak := dm.k ak := dm.k
st0 , dt0 , t0 : read ad := T R(dt0 .d, ak) ad := T R(<
ures>, ak)
t : HIEXT (ad, ak) t : HIEXT (ad, ak)
st0 , dt0 , t0 : read

Az ad := T R(p, ak) a mr korbban definilt rekurzv fggvnyt kiszmt pro-


gram megvalstsa az eredeti llapottren:
 
ad := T R(p, ak)
 
ad := p
sm = norm ak = dm.k

\ dm.t \ dm.b \ dm.j

\ ad = <
ures> / \ ad = <
ures> /\ ad = <
ures> /
HIBA ad := <ures> ad := dm.d HIBA HIBA ad := dm.d
sm, dm, m : read

15.3.2. Kulcsok egyrtelmustse



A gyakorlatban sokszor tallkozhatunk olyan file-okkal, amelyek rekordjaiban van va-
lamilyen kulcsmezo ami szerint a file rendezett, m de a file mgsem egyrtelmu kulcs
szerint, s gy a file a kulcsmezore vonatkoztatva nem elemenknt feldolgozhat. A
kvetkezokben egy olyan technikt fogunk bemutatni, amelyben egy j kulcsot defini-
lunk a file-ra, s ezen j kulcs szerint a file mr egyrtelmu.
Tegyk fel, hogy a file U = (k : K, z : Z) tpus rekordokbl ll. Az j kulcsot gy
kapjuk, hogy az egyms utn levo azonos kulcsokat megsorszmozzuk. Legyen teht
V = (h : H, z : Z), ahol H = (k : K, s : N). Legyen tovbb g : seq(U ) seq(V ):
1. g(u).dom = u.dom
2. g(u)1 .s = 1 s i [1..u.dom 1]:

1, ha ui .k 6= ui+1 .k
g(u)i+1 .s =
g(u)i .s + 1, ha ui .k = ui+1 .k
144
FEJEZET 15. IDOSZER
USTS

3. i [1..u.dom]:
g(u)i .k = ui .k s g(u)i .z = ui .z.
Ekkor tetszoleges u seq(U ) esetn feltve, hogy u a k kulcs szerint rendezett
g(u) a h kulcs szerint rendezett s egyrtelmu.
Termszetesen a fenti megszmozst ltalban csak az absztrakci lersra hasz-
nljuk, s csak ritkn fordul elo, hogy a g fggvny ltal definilt absztrakcit meg is
valstjuk.

15.3.3. Megolds fggvnyabsztrakcival


Egy adott feladat megoldst mindig elkerlhetetlenl befolysolja a specifikci mdja.
A fggvnyabsztrakci lnyege abban rejlik, hogy a megoldst egy alkalmasan vlasz-
tott fggvny helyettestsi rtknek kiszmtsra vezetjk vissza.
Induljunk ki egy olyan absztrakt file-bl, mint amilyet az egyvltozs elemenknti
feldolgozsra val visszavezetsben hasznltunk. Termszetesen, mivel most a mdo-
stfile nem egyrtelmu kulcs szerint, az X absztrakt file defincija kiss mdosul: ha
egy kulcs mindkt file-ban szerepel, akkor a trzsrekordot az elso r vonatkoz mdo-
strekorddal vonjuk ssze, s az esetlegesen elo fordul tovbbi azonos kulcs mdo-
strekordokbl pedig egy-egy olyan absztrakt rekordot kpeznk, amelynek adatrsze
<ures>.
Ez az absztrakci az imnt bemutatott egyrtelmusto lekpezsen keresztl impli-
cit mdon rhat le: legyen t0 T , m M s x X. Ekkor
{g(x).h} = {g(t0 ).h} {g(m).h}
s i [1..x.dom]:

K(g(t0 ), g(x)i .h).d, ha g(x)i .h {g(t0 ).h}
g(x)i .d =
<
ures>, klnben

K(g(m), g(x)i .h).v, ha g(x)i .h {g(m).h}
g(x)i .v =
<
ures>, klnben

Megolds fggvnykompozcival. Elo szr egy olyan megoldst adunk a feladatra,


amelynek specifikcijban az utfelttel egy kompozcival adott fggvny kiszm-
tsa, ahol a kompozci egy rekurzv mdon megadott fggvnyb o l s egy esetsztv-
lasztssal definilt fggvnybol ll.
A =X T
x t
B =X
x0
Q : (x = x0 )
R : (t = HIEXT (f1(x0 .dom), (f2 (x0 .dom), f3 (x0 .dom))))

ahol f : N0 T K D0 ,
f (0) = (hi, EXT R, < ures>)


(f1 (i), f2 (i), xi+1 .v(f3 (i))), ha xi+1 .k = f2 (i)

f (i + 1) =

(HIEXT (f1 (i), (f2 (i), f3 (i))),

xi+1 .k, xi+1 .v(xi+1 .d)), ha xi+1 .k 6= f2 (i)

15.3. IDOSZER
USTS NEM EGYRTELMU MDOSTFILE-LAL 145

s HIEXT : T (K D0 ) T ,

hiext(t, (k, d)), ha d 6= <
ures>
HIEXT (t, k, d) =
t, ha d = <ures>

Az f fggvny kezdortknek defincijban szereplo EXT R kulcsrtk egy tetszo-


leges olyan kulcsrtk lehet, amely egyik file-ban sem fordul elo.
Mivel az utfelttel fggvnykompozcival adott, a megolds egy szekvencia lesz,
amelynek elso rsze az f , msodik rsze pedig a HIEXT fggvnyt szmtja ki. Az
f fggvny egyes komponenseinek rendre a t, ak, ad vltozk felelnek meg.

open(x)
sx, dx, x : read
t, ak, ad := hi, EXT R, <
ures>
sx = norm

\ ak = dx.k /
ad := dx.v(ad) t : HIEXT (ak, ad)
ad := dx.v(dx.d)
ak := dx.k
sx, dx, x : read
t : HIEXT (ak, ad)

Az x absztrakt file muveleteinek megvalstsa:


 
open(x)
 
sm, dm, m : read
st0 , dt0 , t0 : read
 
sx, dx, x : read
 
sm = norm st0 = norm
\ /
sx := norm sx :=
sm = abnorm (sm = st0 sm = st0 st0 = abnorm (sm = st0 abnorm
dt0 .k < dm.k) dt0 .k = dm.k dt0 .k > dm.k)
\ \ \
dx.k := dt0 .k dx.k := dm.k dx.k := dm.k
dx.d := dt0 .d dx.d := dt0 .d dx.d := <
ures>
dx.v := <
ures> dx.v := dm.v dx.v := dm.v
st0 , dt0 , t0 : read st0 , dt0 , t0 : read sm, dm, m : read
sm, dm, m : read

Htra van mg a transzformci elvgzsnek megvalstsa:


146
FEJEZET 15. IDOSZER
USTS
 
ad := dx.v(p)
 
dx.v = <
ures>
\ /
dx.v.t dx.v.b dx.v.j
\ \ \
ad := p p = <
ures> p = <
ures> p = <ures>
\ /\ /\ /
HIBA ad := <
ures> ad := dx.v.d HIBA HIBA ad := dx.v.d

Megolds extremlis elemmel. Az elozo megods szpsghibja, hogy a feladatot


nem egy fggvny helyettestsi rtknek kiszmtsaknt specifikltuk. Ezrt adunk
most egy msik megoldst is, amely egy a gyakorlatban sokszor hasznos eszkzt hasz-
nl. Ez az utols utni elem bevezetse (read extremlis elemmel).
Egsztsk ki az elozo megoldsban szereplo X file-t ha nem res egy olyan
elemmel, amelynek kulcsa minden lehetsges kulcsrtkto l eltr. Jelljk ezt a tpust
X-sal. Ekkor a kt tpus kztti megfeleltets: : X X,

hiext(x, (EXT R, <
ures>, <
ures>)), ha x.dom 6= 0
(x) =
x, ha x.dom = 0

A kiszmoland rekurzv fggvny majdnem teljesen megegyezik az el o zovel. A jobb


ttekinthetosg rdekben a fggvnyt most komponensenknt fogjuk felrni. Ahhoz,
hogy a fggvnyt egyszerubben rhassuk fel, tegyk fel, hogy az res sorozatra al-
kalmazott lov fggvny nem definilt rtket ad vissza (gy a lov nem csak parcilis
fggvny, hiszen minden sorozatra alkalmazhat). Ekkor f : N 0 T K D0 ,
f = (f1 , f2 , f3 )

f (0) = (hi, x.lov.k, x.lov.d)


8
< f1 (i), ha f2 (i) = xi+1 .k
f1 (i + 1) = (f2 (i) 6= xi+1 .k f3 (i) = <ures>)
hiext(f1 (i), (f2 (i), f3 (i))), ha f2 (i) 6= xi+1 .k f3 (i) 6= <
ures>
:

xi+1 .v(f3 (i)), ha f2 (i) = xi+1 .k
f3 (i + 1) =
xi+1 .v(xi+1 .d), ha f2 (i) 6= xi+1 .k

f2 (i), ha f2 (i) = xi+1 .k
f2 (i + 1) =
xi+1 .k, ha f2 (i) 6= xi+1 .k

Ezt a fggvnyt hasznlva a feladat specifikcija:

A =X T
x t
B =X
x0
Q : (x = x0 )
R : (t = f1 (x0 .dom))

Ez a feladat visszavezetheto file-ra felrt rekurzvan megadott fggvny helyettes-


tsi rtknek kiszmtsra:

15.3. IDOSZER
USTS NEM EGYRTELMU MDOSTFILE-LAL 147

open(x)
sx, dx, x : read
t, ak, ad := hi, dx.k, dx.d
sx = norm

\ ak = dx.k /
\ ad = <
ures> /
ad := dx.v(ad) SKIP t : hiext(ak, ad)
ak := dx.k
ad := dx.v(dx.d)
sx, dx, x : read
Az x absztrakt file muveleteinek megvalstsa:
 
open(x)
 
sm, dm, m : read
st0 , dt0 , t0 : read

\ st0 = sm = abnorm \ sm = norm \ st0 = norm


dx.k := EXT R dx.k := dm.k dx.k := dt0 .k
 
sx, dx, x : read
 
dx.k = EXT R
\ /
sx := sx := norm
abnorm sm = norm st0 = norm
\ /
sm = abnorm st0 = abnorm
(sm = st0 sm = st0 (sm = st0
dt0 .k < dm.k) dt0 .k = dm.k dt0 .k > dm.k)
\ \ \
dx.k := dt0 .k dx.k := dm.k dx.k := dm.k dx.k :=

dx.d := dt0 .d dx.d := dt0 .d dx.d := <


ures> EXT R

dx.v := <
ures> dx.v := dm.v dx.v := dm.v
st0 , dt0 , t0 : read st0 , dt0 , t0 : read sm, dm, m : read
sm, dm, m : read

A transzformci elvgzsnek megvalstsa tulajdonkppen megegyezik az el o zo


esetnl felrttal, csak most az x absztrakt file-t hasznljuk:
 
ad := dx.v(p)
 
dx.v = <
ures>
\ /
dx.v.t dx.v.b dx.v.j
\ \ \
ad := p p = <
ures> p = < p = <
ures> ures>
\ /\ /\ /
HIBA ad := <
ures> ad := dx.v.d HIBA HIBA ad := dx.v.d
148
FEJEZET 15. IDOSZER
USTS

A fenti megoldsi mdokat sszehasonltva lthat, hogy minl magasabb abszt-


rakcis szintu fogalmakat hasznlunk, annl egyszerubben tudjuk kezelni a feladatot.
Nagyon sok esetben az adat- s fggvnyabsztrakci is alkalmazhat egy feladat
megoldsakor, sot mint azt az imnti plda mutatja a ketto kombincija is egy lehet-
sges t.

You might also like