H @ tj 68 7 PROGRAMKONSTRUKCIÓK 74 A programkonstrukciók és a kiszámíthatóság Ebben az alfejezetben kis kitérőt teszünk a kiszámíthatóság-elmélet felé, és megmutatjuk, hog az imént bevezetett három programkonstrukció segítségével minden elméletileg megoldható feladatot meg tudunk oldani Ehhez kapcsolatot létesítünk a kiszámítható függvének és a jól konstruált programok között 741 Parciális rekurzív függvének A Church tézis szerint a kiszámítható függvének halmaza megegezik a parciális rekurzív függvének halmazával A kiszámíthatóság ezen modelljében csak típusú függvének szerepelnek Először az alapfüggvéneket definiáljuk: : "$#%& '( *) +-, / / 1 2 -, / 3 / 1 4%3 '( 56 879%30:0 '; <>=?, / A1 <B= @, / 1 "C @ 0 A továbbiakban definiálunk néhán elemi függvén-operátort: D E F G Kompozíció Legen és H I G6J alábbi függvén: HLK M 2 N O J, PLQARTS 4U PVSXW Y PZQ&[ és PZQ\RTS : HLK ] H 1A0 : Az és H kompozíciója az Vegük észre, hog ez az operátor megegezik az alapfogalmaknál bevezetett relációk közötti kompozícióval (tulajdonképpen a szigorú kompozícióval, de függvének esetén ez a kettő azonos) Unió Legen _ ; @ N a b c E függvének 5 `79%30:0 rögzített, és uniója / deft Jg hi j &k2ldmmmnl 3o P, S ktp S1q psrsrsr p S o @:u / PVS c és P, S k p S q psrsrsr p S o : / TfeAd J " / AT J 1A0 ' v 6ḧ w Rekurzió Legen rögzített, és H x e w Az függvén H szerinti rekurziója 2 x / O, és H / 1 %z { / 1 A H / A1 # %z{ H / } H / A} 1A0 A függvénhez hasonlóan rekurzívan definiálhatnánk ennek a függvénnek az értelmezési tartománát, de ez kívül esik a jelenlegi vizsgálódásunk körén Ezért csak azt mondjuk, hog az értelmezési tartomán azon pontok halmaza, ahonnét kiindulva a fenti rekurzió elvégezhető :
[ 0 74 A PROGRAMKONSTRUKCIÓK ÉS A KISZÁMÍTHATÓSÁG 69 _ 4 3x / -operátor Legen A -operátort erre a függvénre alkalmazva azt a ] h függvént kapjuk, amelre P, S U / 1 W / A1 4% 5 79%30:0 %A; $ / 1 15 PVS [, és / } P, S : 2 ] / A1 5 ' U W / A} 4% A fenti alapfüggvének és a bevezetett operátorok segítségvel már definiálható a parciális rekurzív függvének halmaza 28 DEFINÍCIÓ: PARCIÁLIS REKURZÍV FÜGGVÉNY függvén akkor és csak akkor parciális rekurzív, ha az alábbiak egike teljesül: Az '6 6 az alapfüggvének valamelike kifejezhető a fenti operátorok parciális rekurzív függvénekre történő alkalmazásával 742 A parciális rekurzív függvének kiszámítása Ahhoz, hog a fenti függvéneket kiszámító programokat tudjunk adni, definiálnunk eg tetszőleges függvén ( 1' rögzített) Az által meghatározott feladat specifikációja: kell az ilen függvének által meghatározott feladatot Legen " l l l l l / / l l / > / / mmm g / 1 Y > / h / 1 Most megmutatjuk, hog minden parciális rekurzív függvén által meghatározott feladat megoldható jól konstruált programmal (jól konstruáltnak tekintünk eg programot, ha elemi programokból a fenti három konstrukcióval megkapható) A bizonításhoz csak annit kell feltételeznünk, hog az alapfüggvének kiszámíthatók (megengedett) elemi programokkal A fenti feltételezést felhasználva elegendő azt megmutatni, hog az elemi függvén-operátorok(kompozíció, unió, rekurzió, -operátor) kiszámíthatók jól konstruált programokkal } PVS Kompozíció E ( i Legen és H 6J specifikációja: l l l l l / / J l l / Ekkor az HZK által meghatározott feladat
70 7 PROGRAMKONSTRUKCIÓK > / / mmm g / 1 > / HZK ] / A1 } Jelöljük / / 1 és hasonlóan / A J H / -mel azt a programot, amel kiszámítja -et, -nel azt, amelik kiszámítja H -t Tegük fel, hog ez a két program vag elemi értékadás, vag jól konstruált program Ebben az esetben a két program szekvenciája kiszámítja H K -et, azaz megoldja a fent specifikált feladatot Legen a második program utófeltételhez tartozó leggengébb előfeltétele: > H / " HZK utófeltételhez tartozó leggengébb elő- Most vizsgáljuk meg az első program ezen feltételét: PZQ\RTS ] / } / Y / A v / 1 A H / } 1 " HLK ] / A} 2 / A} P Q / 1 P S Können látható, hog ez a leggengébb előfeltétel következik -ból, és íg a szekvencia levezetési szabála és a specifikáció tételének alkalmazásával beláttuk, hog a / A h / 1 / J H / A program megoldja a fent specifikált feladatot, azaz kiszámítja P Q és H kompozícióját Unió ; @ l l l / l l l / / / k l l l J / J l l / / / P, S k p S o / / / k J / J o / J / Legen 5V 79%30:0 O rögzített, és c uniója által meghatározott feladat specifikációja: 3o > / mmm g 1 psrsrsr > A A " Ad A1 Ekkor az e függvének Tegük fel, hog a komponens függvének kiszámíthatók jól konstruált prog- @ c @ / } 5 az -edik függvént % 5 kiszámító programot Ekkor ezeknek a programoknak a szek- rammal, vag elemi értékadással Jelölje @ / venciája megoldja a fenti feladatot Legen J a -adik program utófeltételhez tartozó leggengébb előfeltételét: J > / / /?k J / / A J / o k d J / A} 1 / T J / } / 1 PVS o 1
74 A PROGRAMKONSTRUKCIÓK ÉS A KISZÁMÍTHATÓSÁG 71 Továbbá minden 5 v7 %&090 %; esetén jelölje @ az 5 -edik program @ x / -hez tartozó leggengébb előfeltételét Können látható, hog az értékadás leggengébb előfeltételére vonatkozó szabált alkalmazva: / > / / 1 AT J / A1 } / d J / 1 / } Y PVS k mmm / } Y PVS o Ha most -t és / -et összehasonlítjuk, észrevehetjük, hog megegeznek A szekvencia levezetési szabála és a specifikáció tétele alapján a / / /?k v / / A1 J / J o h J / 1 program megoldása a fent specifikált feladatnak, azaz kiszámítja / d J -t Rekurzió Legen ' rögzített, 4 j és H x e Tegük fel, hog mindketten kiszámíthatók jól konstruált programokkal vag egszerű értékadásokkal Az függvén H szerinti rekurziója által meghatározott feladat specifikációja: l l l / 3x / l l / 3x / > / / mmm g x / x / / A} x / P, S p Q > H / 1 3x / } Jelölje az -et és a H -t kiszámító programot / 1 illetve H / 1 x ez lajdonsága: > 87 %&090 x / ; H / } 1 Oldjuk meg a feladatot eg olan ciklussal, amelnek invariáns tu- A ciklus levezetési szabálát vizsgálva azt találjuk, hog -ból nem következik Ezért adunk eg olan feltételt, amelből már következik, és adunk eg programot, amel -ból -be jut (íg a megoldóprogram eg szekvencia lesz, amelnek második része eg ciklus) Legen az alábbi: % h / 1 1 > F%3d / } Ez a szimultán értékadással elérhető Az értékadás leggengébb előfeltételére vonatkozó szabál felhasználásával können látható, hog az következik -ból A ciklus levezetési szabálának második pontja alapján a ciklusfeltétel 3x / lesz A harmadik pontnak megfelelően válasszuk a N x / D kifejezést termináló függvénnek Az ötödik pont azt írja le, hog az imént definiált termináló fügvén értékének a ciklusmagban csökkennie kell Ez elérhető a eggel való növelésével
72 7 PROGRAMKONSTRUKCIÓK A néges pont kielégítéséhez vizsgáljuk meg, hog mi lesz a leggengébb előfeltétele a -t növelő értékadásnak a -re vonatkozóan # %3 # %Z 79%30:0 x / ; H / 1 # %z1a0 h x / Most már a szekvencia levezetési szabála alapján csak eg olan programot kell találnunk, amelre Ez a program a rekurzió definíciójához illeszkedően épp H / A} lesz Íg a szekvencia és a ciklus levezetés szabála valamint a specifikáció tétele garantálja, hog a %&d / A1 x / H / } # % program megoldja a H által meghatározott feladatot, azaz kiszámítja H szerinti rekurzióját -operátor -et kiszámító programot Oldjuk meg a fela- _ x / Legen vag jól konstruált programmal Tekintsük a ] l l l / l l / > / / mmm g / A} x / P, S > ] / A1 1 Jelölje v / 1 1 x / az datot eg olan ciklussal, melnek invariánsa: > h / A} 5 87 %&090 %A; / } }5 b / } %- \%, és tegük fel, hog kiszámítható egszerű értékadással által meghatározott feladatot: Az invariáns a szimultán értékadással teljesíthető Können látható, hog ennek a programnak a -re vonatkozó leggengébb előfeltétele / A1 %- \% / } %z6v / A} %z 5 87 %&090:% %; / 1 15 %z 4% következik -ból A ciklus levezetési szabálának második pontja alapján a ciklusfeltétel lesz A feladat előfeltétele garantálja, hog van olan szám, amelre / } Ma% fennáll Legen eg ilen tulajdonságú, rögzített természetes szám Ennek az értéknek a segítségével definiálhatjuk a termináló függvént: Ez kielégíti a levezetés szabál harmadik pontját Az ötödik pont megkívánja, hog a termináló függvén a ciklusmag lefutása során csökkenjen Ezt elérhetjük eggel való növelésével %z
74 A PROGRAMKONSTRUKCIÓK ÉS A KISZÁMÍTHATÓSÁG 73 A negedik pont teljesítéséhez legen leggengébb előfeltétele: > h / A} # %z 5" 79%30:0 Most már csak találnunk kell eg programot a ennek a növelésnek a -re vonatkozó %; / 1 15 %- és h / 1 # %z értékadásra teljesül, hog %- $ v / 1 # %za \0 %z állítások közé A A specifikáció tétele, valamint a ciklus és a szekvencia levezetési szabála garantálja, hog a / } %- \% 4% program megoldja a ] 743 Következmén v / A1 #% #%- által meghatározott feladatot, azaz kiszámítja ] Az előzőekben megmutattuk, hog ha az alapfüggvének kiszámíthatók egszerű értékadással, akkor a belőlük a parciális rekurzív függvéneknél megengedett operátorokkal felépített függvének kiszámíthatók jól konstruált programokkal A Church tézis szerint a kiszámítható függvének halmaza megegezik a parciális rekurzív függvének halmazával Ezek alapján kimondhatjuk az alábbi tételt: 17 TÉTEL: STRUKTURÁLT PROGRAMOZÁS ÉS KISZÁMÍTHATÓSÁG Minden kiszámítható függvén kiszámítható eg jól konstruált programmal -et 744 Relációk Eljutván az előző tételhez, fordítsuk most figelmünket a relációk felé Ahhoz, hog a relációk kiszámíthatóságát megvizsgálhassuk, definiálnunk kell a kiszámítható reláció fogalmát 29 DEFINÍCIÓ: REKURZÍVAN 6J l 6J FELSOROLHATÓ RELÁCIÓ Legen tetszőleges ( e J reláció akkor és csak akkor rekurzívan felsorolható, ha van olan parciális rekurzív függvén, amelnek értelmezési tartománára: P S A kiszámíthatóság-elmélethez igazodva, a továbbiakban csak rekurzívan felsorolható relációkkal fogunk foglalkozni Ahhoz, hog megmutassuk, hog minden kiszámítható (rekurzívan felsorolható) feladat emlékezzünk, hog minden feladat eg reláció megoldható strukturált programmal, először megadjuk a rekurzívan felsorolható relációk eg másik jellemzését 18 TÉTEL: KLEENE[1936] Ha eg tetszőleges reláció, akkor az alábbi három állítás ekvivalens: (1) rekurzívan felsorolható
74 7 PROGRAMKONSTRUKCIÓK (2) eg parciális rekurzív függvén értékkészlete (3) vag eg rekurzív függvén értékkészlete Ennek a tételnek a bizonítása lásd Ref??? konstruktív, azaz megadja mind, mind pedig felépítését Mi ezt a függvént fogjuk használni a kiszámítható feladatunk megoldóprogramjában 6J l 6J Legen eg rekurzívan felsorolható reláció, és jelölje az előző tétel konstrukciójával kapott (totális) rekurzív függvént Specifikáljuk a feladatot az alábbi módon: 6J l 6J `6J > 2C > n Y P > g5" Ez a feladat megoldható eg olan ciklussal, amelnek invariáns tulajdonsága: 6 5 } A ciklus levezetési szabálának felhasználásával können belátható, hog az alábbi program megoldása a fenti feladatnak: 5T %3 %z C 5 # %z 5 C5]#% A bizonításban a termináló függvén megadásánál uganazt a technikát alkalmazzuk, mint a -operátornál Ezzel az előzőleg függvénekre kimondott tételünket általánosíthatjuk relációkra: 19 TÉTEL: STRUKTURÁLT PROGRAMOZÁS ÉS KISZÁMÍTHATÓ RELÁCIÓK Minden kiszámítható reláció kiszámítható eg jól konstruált programmal Megjegzés Az egetlen feltevés, amit a fenti meggondolásokban használtunk az volt, hog az alapfüggvének kiszámíthatóak Íg aztán ezek az eredmének kiterjeszthet ők a relatíve kiszámítható függvének (uganezen operátorokkal eg tetszőleges alaphalmazból képzett függvének), vag a parciális rekurzív funkcionálok halmazára is (Ref[1, page 174])