Professional Documents
Culture Documents
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
Bevezets a programozshoz
3
1. fejezet
Alapfogalmak
1.1. Halmazok
Eloszr bevezetjk a matematikban gyakran hasznlt halmazok jellseit.
[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
a A : |R(a)| 1.
a A : |R(a)| = 1.
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= }.
R|H ::= R (H B)
a1
R1 (H)
a2
R(1) (H)
A B
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
P Q
b1 c1
a1
c2
b2
b3
a2
c3
b4
A B C
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:
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 .
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
R| = R|de {(a, a) A A | a de \ DR }.
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
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}.
R0 = {(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)}.
(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)
R2 = {(1, 1), (1, 5), (2, 2), (2, 4), (3, 5), (3, 4), (3, 3)}.
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}
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
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
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).
Megolds:
Y B : (G F )1 (Y ) = F 1 (G1 (Y ))?
14 FEJEZET 1. ALAPFOGALMAK
(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, 1, 1), (2, 1, 1), (2, 2, 1), (2, 2, 2), (3, 2, 2), (3, 3, 2) >
prN1 N3 () =< (1, 1), (2, 1), (2, 1), (2, 2), (3, 2), (3, 2) >
red(prN1 N3 ()) =< (1, 1), (2, 1), (2, 2), (3, 2) >
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
RS R Q S Q,
RS Q R Q S?
1.16. Mutassunk pldt olyan relcira, aminek lezrtja s korltos lezrtja klnbz o !
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.20. R N0 N0 .
{a 3}, ha a > 2
R(a) =
{3 k | k N}, ha a = 1
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
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) prB () =?
b) red(prB ()) =?
18 FEJEZET 1. ALAPFOGALMAK
2. fejezet
A programozs alapfogalmai
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
vagy
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,
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
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
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).
2.7. Pldk
b) Megoldja-e S a feladatot?
Megolds:
Ekkor a programfggvny:
p(S) = {(2, 1), (2, 4), (4, 4), (4, 1), (4, 2), (5, 4)}.
i. D F2 D F1 ,
ii. a DF2 : F1 (a) F2 (a)
Az ii. pont bizonytsnl azonban gond van, hiszen az albbi kt llts ll rendelke-
zsnkre:
2.8. Feladatok
2.1. Legyen A = {, , , , }, S A A .
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
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
Specifikci
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:
29
30 FEJEZET 3. SPECIFIKCI
A p(S) A
dRe
dlf (S, R)e
dQe
dlf (S, Q)e
A p(S) A
dRe
dlf (S, R)e
dQe
dlf (S, Q)e
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.
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).
F = {((u1 , u2 , u3 ), (v1 , v2 , v3 )) A A | v3 = u1 + u2 }.
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 }
Qb = (x = x0 (b) y = y 0 (b))
Rb = (z = x0 (b) + y 0 (b))
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.
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,
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 )
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 ))?
F2 specifikcija pedig:
A = V V L
a1 a2 l
B = V V
a01 a02
3.5. FELADATOK 37
A=Z Z
x y
B = Z
x0
Q : (x = x0 )
R : (Q x = |y y|)
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
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|)
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
39
40 FEJEZET 4. KITERJESZTSEK
B0 F0 A
F B
B0 A
F0 F S 0 S
A
vetts vetts
kiterjeszts kiterjeszts
B
F S
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
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 )
B
A
DG
H B
4.6. bra. Flkiterjeszts
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
F
a00
b0 B
4.7. bra.
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
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
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)) }
Az S program programfggvnye:
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
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
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 ,
1. DF D% p(S)% (1) , s
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
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)
T H T T H T
a F
% (1)
%
dIe dIe
% (1) id % id
dIe dIe
p(S)
E E
E H E H
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
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
% ={(< 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 ,
Au = T T T, Fu Au Au
Ae = T [0..127] L, Fe Ae Ae
S = {Sm , Su , Se }, s Bm = E E E , Sm Bm Bm program
Bu = E E E , Su Bu Bu program
Be = E [0..127] L, Se Be Be program
m = (% ; % ; % ),
dIe dIe dIe
u
= (% ; % ; % ),
dIe dIe dIe
e
= (% ; id[0..127] ; idL )
dIe
i. Dp(S1 ) Dp(S2 ) ,
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
57
58 FEJEZET 6. ELEMI PROGRAMOK
T
n
DF = D Fi ,
i=1
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.
x, l := x, (x > 0).
l := (x > 0)
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
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.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
\ 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 ,
Legyenek i A (i N),
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
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
(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.
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
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 ) .
n
! n
[ [
p(IF )(a) = wi (a) = pwi (a).
i=1 i=1
p(DO) = p(S)| .
7.3. LEVEZETSI SZABLYOK 67
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).
(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
p(S1 )(q) 6 dlf (S2 , R)e. Ekkor legyen r p(S1 )(q) \ dlf (S2 , R)e. Ekkor kt
eset lehetsges:
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.
Ekkor
i [1..n] : Q i lf (Si , R).
(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
k N0 : g k (q) dP e.
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.
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)
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.
p(DO)(q) dP e,
7.3. LEVEZETSI SZABLYOK 71
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
a DR = R(a) DR
teht
a lf (S0 , P ).
akkor
t(b) < t(a)
azaz
t(b) < t0 .
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}.
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.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
\ i=1 \ i2
i := 2 i SKIP
a) F = F2 F1
b) F = F2 F1 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
a) egyenlo?
b) ekvivalens?
a) egyenlo?
b) ekvivalens?
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
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
(n)
n N : i [1..n] : pri : Nn N, (x1 , . . . , xn ) Nn :
(n)
pri (x1 , . . . , xn ) = xi .
z1 , . . . , zn := f (x1 , . . . , xm )
y1 , . . . , yk := g(z1 , . . . , zn )
program megoldja a fent specifiklt feladatot, azaz kiszmtja f s g kompozcijt.
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.
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.
P (z 6= 1) lf (z := f (x1 , . . . , xn , y + 1), Q0 ).
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:
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.
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.
D = {(, b) E B | i [1..n] : i Ei : (i , bi ) %i
= con(1 , . . . , n i)}.
83
84 FEJEZET 8. TPUSKONSTRUKCIK
t T
T1 T2 T3 Tn D
%
B t1 t2 t3 tn
D
%1 %2 %3 %n
E
U = {(, b) E B | i [1..n] : (, b) %i }
T
t t0
T1 T2 T3 Tn U
%
B t1 t2 t3 tn
%3 %n U
E
I = {(, b) E T0 | 1 , . . . , |b| E : (i , bi ) %0
= kon(1 , . . . , |b| )}
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
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
(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 = (s1 : T1 , s2 : T2 , . . . , sn : Tn ).
T = (s1 : T1 ; s2 : T2 ; . . . ; sn : Tn ).
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.
lov(t) = 1
hiv(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 ,
lorem, hirem : F F ,
sf (g) = tk+1
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
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
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
Programozsi mdszertan
93
9. fejezet
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:
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)
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
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
1) Q0 : (Q k = m 1 d = 0),
2) = (k 6= n),
3) t = n k,
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 )
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.
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.
1) Q0 = (Q i = m),
2) = (i),
4) P lf (i := i + 1, P ).
1) Q0 = (Q i = m 1 l = hamis),
2) = l,
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
Fggvnyrtk kiszmtsa
A=X Y
x y
B =X
x0
Q : (x = x0 )
R : (y = f (x0 ))
z := g(x)
y := h(z)
105
106 FEJEZET 10. FGGVNYRTK KISZMTSA
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))
A =ZH
n y
B = Z
n0
Q : (n = n0 n 0)
R : (Q y = f (n))
10.4. ELEMENKNT FELDOLGOZHAT FGGVNY 107
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.
X = X1 ... Xn
Y = Y1 ... Ym
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.
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.
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
Visszalpses keress
1. %0 =;
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)))
n
X
f () = i Q i , ahol:
i=1
Yn
Qi = j (i [1..n])
j=i+1
113
114 FEJEZET 11. VISSZALPSES KERESS
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
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
, c, m := 0 , 0, 1
keres(, m, l)
l c = 0
n
ovel(c, , m)
\ c=0 /
keres(, m, l) SKIP
, 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
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.
!
#"$
117
118 FEJEZET 12. PROGRAMTRANSZFORMCIK
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
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
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
i 6= n a.dom 6= 0
f (i + 1) f (a.lov)
i := i + 1 a : lorem
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
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
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
\ 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
a A : S(a) : (k D : k i = ai ).
l := (a1 , ..., am )
l
S0
l := (a1 , ..., am )
Ekkor az S 0 program ekvivalens S-sel A-n.
ii+1
i := i + 1 S01
S01 i := i + 1
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))
i := 0
S1
S0
i := i + 1
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
127
128
FEJEZET 13. SZEKVENCILIS MEGFELELO
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
az u : U s a v : V kztti kapcsolat:
seq(v|SZO) = seq(u|SZO),
a v : V s a g : G kztti kapcsolat:
Fel kell mg tennnk azt, hogy u a leheto leghosszabb azonos tpus rszsorozatokbl
ll, vagyis az U tpus invarins tulajdonsga:
Programinverzi
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
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)
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 )))
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 )
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.
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)
\ 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
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, j [1..dom(t)], i 6= j : ti .k 6= tj .k
135
136
FEJEZET 15. IDOSZER
USTS
V = (t : W1 ; b : W2 ; j : W3 )
W1 = {}
W2 = (d : D)
W3 = (g : G), ahol G = { | : D D}
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
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.
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
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:
<
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
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
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}
e.d 6= <
ures> e.v 6= <
ures> k {t0 .k} k {m.k}
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
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.
(kulcs, transzformcisorozat)
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))
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
dx.v(p) = f (dx.v.dom)
ahol
f (0) = p
f (i + 1) = dx.vi+1 (f (i))
\ 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
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
\ ad = <
ures> / \ ad = <
ures> /\ ad = <
ures> /
HIBA ad := <ures> ad := dm.d HIBA HIBA ad := dm.d
sm, dm, m : read
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.
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>
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)
A =X T
x t
B =X
x0
Q : (x = x0 )
R : (t = f1 (x0 .dom))
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
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