2.3A program

Amikor a program fogalmát igyekszünk tisztázni, a számítógépen futó programokra és az általuk megvalósított algoritmusokra figyelünk. Ha egy számítógépen egy program "fut", az abban jelentkezik, hogy a számítógép memóriájának tartalma folyamatosan változik. Itt most a "memóriát" általánosan értelmezzük, beleértünk a szűken vett memóriától, a regisztereken keresztül, a képernyőig mindent, ami információt hordoz.

A program jellemző tulajdonsága tehát, hogy "működik", azaz egy időben dinamikus folyamat. A dinamikus rendszerek általában nehezebbekezelhetőkök, vizsgálhatók, mint a statikusak. Ezért arra gondolunk, lehet-e helyettesíteni egy dinamikus folyamatot egy statikus modellel?

Tekintsük például az alábbi – a programozástól igazán messze eső – problémát: Adott egy kémiai kísérlet, amely túl gyorsan játszódik le ahhoz, hogy az ember pontosan regisztrálni tudja az egymásutáni eseményeket. Ez a programfutáshoz hasonlóan egy időben dinamikusan lejátszódó folyamat. Hogyan követhető nyomon mégis a kísérlet? Például úgy, hogy a kísérletet filmre vesszük, és a továbbiakban a képkockák által rögzített statikus állapotokat vizsgáljuk. Így az időben változó folyamatot egy statikus állapotsorozattal írjuk le.

A fenti példa szemléletesen mutatja, hogyan adhatunk statikus modellt egy dinamikus folyamat leírására.

A program definíciójában a program időbeni futásának jellemzésére az előbbpéldával páldával analóg módon vezetünk be egy statikus modellt: a futást állapottérbeli sorozatokkal írjuk le. Ahogy a program futása során a memóriatartalom változik, úgy jutunk az állapottér újabb és újabb pontjaiba, így ezeket a pontokat egy sorozatba fűzve valójában "filmre vesszük" a programfutást.

2.3. Definíció (PROGRAM).

Programnak nevezzük az relációt, ha

  1. ,

  2. .

  3. ,

A fenti definícióval a "működés" fogalmát akarjuk absztrakt módon megfogalmazni, ez magyarázza a sorozatokra vonatkozó kikötéseket. Az első tulajdonság azt jelenti, hogy a program az állapottér minden pontjához hozzárendel legalább egy sorozatot, azaz a program minden pontban "csinál" valamit. A "rosszul működést" is a működéssel, azaz valamilyen tulajdonságú sorozattal, sorozatokkal írjuk le.

A második tulajdonság azt fejezi ki, hogy a program értékkészlete olyan sorozatokból áll, amikben nem szerepel egymás után ugyanaz az elem. Egész pontosan, ha ez mégis előfordul, akkor ez az elem ismétlődik végtelen sokszor. A működés abban nyílvánul meg, hogy megváltozik az állapot, vagy ha mégsem az az abnormális működés jele. Emlékeztetünk arra, hogy az állapottér komponensei között minden előfordul előfodul, tehát ha bármi történiks töténik, az más állapotérbeli pontot jelent. A sorozatok között lehetnek "normális" sorozatok sorzatok is. Az, hogy az állapottér egy pontjához a program végtelen sorozatot rendel, azt jelenti, hogy a program futása nem fejeződik be.

A harmadik tulajdonság csak annyit jelent, hogy a sorozat a működés teljes történetét leírja, beleértve a kiinduló állapotot is, ezért azt, hogy egy program egy pontból elindítva nem csinál semmit, egy ebből az egy pontból álló, egy hosszúságú sorozat jellemzi.

A programot is relációként definiáltuk, vagyis egy-egy állapottérbeli ponthoz több sorozat is hozzá lehet rendelve, azaz a működés nem determinisztikus. Ez első pillantásra talán meglepő, valójában természetes. Természetes akkor is ha számítógépen, számítógép rendszeren futó programra gondolunk, hiszen egy program sok processzorból, sok, akár egymástól nagy távolságban levő, komponensből álló rendszeren fut. De természetes akkor is, ha figyelembe vesszük, hogy a program fogalom nem csak a gépen futó program, hanem az algoritmus absztrakciója is, amik között lehetnek "nyitva" hagyott részek is.