6. fejezet - Elemi programok

Tartalom

6.1Feladatok

Ebben a fejezetben bevezetünk néhány egyszerű programot. Ezeket a programokat a következő fejezetekben gyakorta fogjuk használni, ezért megvizsgáljuk a programfüggvényüket, és egy adott utófeltételhez tartozó leggyengébb előfeltételüket.

6.1. Definíció (ELEMI PROGRAM).

Eleminek nevezünk egy állapottéren egy programot, ha

Az elemi programok közül is kiválasztunk néhány speciális tulajdonsággal rendelkezőt, és a továbbiakban csak velük foglalkozunk.

Az első ilyen program, az üres program lesz, ami nem csinál semmit.

6.2. Definíció (SKIP).

SKIP-nek nevezzük azt a programot, amire

A második program a törlődés, aminek legfontosabb jellemzője, hogy soha sem terminál.

6.3. Definíció (ABORT).

ABORT-tal jelöljük azt a programot, amire

Az eddig felsorolt két elemi program segítségével még bajosan tudnánk egy adott feladatot megoldó programot készíteni, hiszen egyrészt nem túl sok olyan feladat van, aminek az program megoldása lenne (vajon van ilyen egyáltalán?) és a program is csak egy nagyon szűk feladatosztálynak lehet megoldása (melyek ezek a feladatok?). A harmadik – és a programozási feladat megoldása szempontjából legfontosabb – speciális elemi program az értékadás.

6.4. Definíció (ÉRTéKADáS).

Legyen , , ahol . Az program általános értékadás, ha

A definíció alapján könnyen látható, hogy az relációra fennáll az alábbi tulajdonság:

A fenti komponensrelációk tehát pontosan azt írják le, hogy az adott értékadás miként változtatja meg az állapottér egyes komponenseit.

6.5. Definíció (AZ áLTALáNOS éRTéKADáS SPECIáLIS ESETEI).

  • Ha , akkor az programot értékkiválasztásnak nevezzük, és -val jelöljük.

  • Ha az reláció függvény. akkor az programot értékadásnak nevezzük, és -val jelöljük.

  • Ha , akkor parciális értékkiválasztás.

  • Ha és determinisztikus ( parciális függvény), akkor parciális értékadás.

Ha egy kivételével az összes projekció – azaz az értékadás az állapottérnek csak egy komponensét (csak egy változó értékét) változtatja meg –, akkor -et egyszerű értékadásnak, egyébként szimultán értékadásnak nevezzük.

Az értékadás egy kicsit bonyolultabb mint előző két társa, de egy kicsit „értékesebb" is, hiszen értékadással minden feladat megoldható! A kérdés persze csupán az, hogy az éppen adott feladat által definiált értékadás megengedett művelet-e. Ezzel a kérdéssel a későbbiekben – a programozási feladat megoldása során – fogunk foglalkozni.

Vizsgáljuk meg a fent definiált speciális elemi programok programfüggvényeit! 6.1. TéTEL: ELEMI PROGRAMOK PROGRAMFüGGVéNYE

  1. ,

  2. ,

  3. ,

  4. .

A tételt bizonyítása triviális, ezért itt nem bizonyítjuk (a feladatok között szerepel).

Most, hogy megvizsgáltuk a programfüggvényeket, nézzük meg az elemi programok adott utófeltételhez tartozó leggyengébb előfeltételét.

Mivel a SKIP program programfüggvénye az identikus leképezés, egy tetszőleges utófeltételhez tartozó leggyengébb előfeltétele:

Hasonlóan egyszerűen látható, hogy – mivel az program programfüggvénye üres – a leggyengébb előfeltétel definíciója alapján egy teszőleges utófeltétel esetén

Az általános értékadás leggyengébb előfeltételét külön vizsgáljuk a determinisztikus és nem determinisztikus, illetve a globális, és a parciális esetben.

Legyen függvény. Ekkor

Ha parciális függvény, akkor az általa definiált értékadás is parciális, melynek leggyengébb előfeltétele:

Most vizsgáljuk azt a két esetet, amikor nem determinisztikus. Feltéve, hogy , az értékkiválasztás leggyengébb előfeltétele

Ugyanez parciális esetben:

Az értékadást általában változókkal írjuk le. Legyenek az állapottér változói rendre . Ekkor az program jelölésére az alábbi formulát használhatjuk.

A gyakorlatban az esetek többségében komponenseinek nagy része projekció, azaz Ekkor az értékadás jelöléséből a bal oldalról -t , a jobb oldalról pedig -t elhagyjuk. Vegyük észre, hogy egyszerű értékadás esetén a bal oldalon csak egy változó, a jobb oldalon pedig csak egy kifejezés marad.

Jelölésünket abban az esetben még tovább egyszerűsíthetjük, ha az értékadás jobb oldala ( ) nem függ minden változótól. Ekkor a jobb oldalon csak azokat a változókat tüntetjük fel, amelyektől függ.

Nézzük meg egy egyszerű példán a fent leírtakat: Legyen az állapottér

A továbbiakban a fentihez hasonlóan az állapottér egyes komponenseihez tartozó változókat a komponensek alá fogjuk írni. Legyenek az értékadás komponensei: :

Ekkor az értékadás változókkal felírva:

A jelölés fent leírt egyszerűsítéseit elvégezve az

egyszerű értékadást kapjuk.

Ha felhasználjuk, hogy az értékadás leggyengébb előfeltétele , akkor egy változókkal felírt értékadás változókkal megadott előfeltételét egyszerűen kiszámíthatjuk: helyettesítsük az utófeltételben az értékadásban szereplő változókat az új értékükkel. Erre bevezetünk egy új jelölést is: legyenek rendre az állapottér változói. Ekkor

6.1Feladatok

  1. . Legyen program -n, .

    Legyen az kiterjesztése -re, pedig olyan program -n, hogy ekvivalens -sel -n.

    1. elemi program-e ?

    2. elemi program-e és biztosan elemi program-e ?

  2. Tekintsük az alábbi állapotteret:

    Mi az , azaz az értékadás utófeltételhez tartozó leggyengébb előfeltétele?

  3. Legyen tetszőleges állapottér. Melyek azok a feladatok az -n, amelyeknek megoldása a program?

  4. Legyen tetszőleges állapottér. Melyek azok a feladatok az -n, amelyeknek megoldása a program?