PROGRAM STATIKUS FOGALMA DINAMIKUSAN VÁLTOZÓ ÁLLAPOTTÉRBEN 1

Hasonló dokumentumok
3. előadás. Programozás-elmélet. A változó fogalma Kiterjesztések A feladat kiterjesztése A program kiterjesztése Kiterjesztési tételek Példa

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Bevezetés az informatikába

Programozási Módszertan definíciók, stb.

Programozási módszertan

PROGRAMOZÁS 1. kötet TERVEZÉS

I. RÉSZ PROGRAMOZÁSI FOGALMAK

2014. szeptember 24. és 26. Dr. Vincze Szilvia

PROGRAMOZÁS VISSZAVEZETÉSSEL

Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

RE 1. Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

Chomsky-féle hierarchia

Chomsky-féle hierarchia

Kiterjesztések sek szemantikája

Leképezések. Leképezések tulajdonságai. Számosságok.

PÁRHUZAMOS PROGRAMOZÁSI MÓDSZERTAN

KOVÁCS BÉLA, MATEMATIKA I.

Automaták és formális nyelvek

A félév során előkerülő témakörök

Rekurzió. Dr. Iványi Péter

Markov-láncok stacionárius eloszlása

A programozás alapfogalmai

Programkonstrukciók A programkonstrukciók programfüggvényei Levezetési szabályok. 6. előadás. Programozás-elmélet. Programozás-elmélet 6.

Bevezetés a programozáshoz I. Feladatok

BEVEZETÉS A PROGRAMOZÁSHOZ

ZH feladatok megoldásai

OOP. Alapelvek Elek Tibor

4. Fuzzy relációk. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

S0-01 Szintézis és verifikáció (Programozás elmélet)

Logika es sz am ıt aselm elet I. r esz Logika 1/36

Számelmélet (2017. február 8.) Bogya Norbert, Kátai-Urbán Kamilla

Véges automaták, reguláris nyelvek

1. előadás: Halmazelmélet, számfogalom, teljes

Relációs algebra 1.rész alapok

Bevezetés a programozásba 1

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata.

Hatványozás. A hatványozás azonosságai

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

A fontosabb definíciók

S0-02 Típusmodellek (Programozás elmélet)

Diszkrét matematika 2. estis képzés

Klasszikus algebra előadás. Waldhauser Tamás április 28.

Logika es sz am ıt aselm elet I. r esz Logika Harmadik el oad as 1/33

Programfejlesztési Modellek

22. GRÁFOK ÁBRÁZOLÁSA

Sorozatok, sorok, függvények határértéke és folytonossága Leindler Schipp - Analízis I. könyve + jegyzetek, kidolgozások alapján

Függőségek felismerése és attribútum halmazok lezártja

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Helyi tanterv Német nyelvű matematika érettségi előkészítő. 11. évfolyam

Alap fatranszformátorok II

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

BEVEZETÉS A PROGRAMOZÁSHOZ

Automaták mint elfogadók (akceptorok)

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Matematika (mesterképzés)

Formális szemantika. Kifejezések szemantikája. Horpácsi Dániel ELTE Informatikai Kar

Csempe átíró nyelvtanok

A valós számok halmaza

Általános algoritmustervezési módszerek

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Időzített átmeneti rendszerek

SHk rövidítéssel fogunk hivatkozni.

KOVÁCS BÉLA, MATEMATIKA I.

Metrikus terek, többváltozós függvények

Objektumorientált paradigma és a programfejlesztés

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

Térinformatikai algoritmusok Elemi algoritmusok

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Adatbázisok elmélete 4. előadás

Formális nyelvek - 9.

Programozási nyelvek (ADA)

1. feladatsor: Vektorterek, lineáris kombináció, mátrixok, determináns (megoldás)

Diszkrét matematika I.

Gauss-Seidel iteráció

0,424 0,576. f) P (X 2 = 3) g) P (X 3 = 1) h) P (X 4 = 1 vagy 2 X 2 = 2) i) P (X 7 = 3, X 4 = 1, X 2 = 2 X 0 = 2) j) P (X 7 = 3, X 4 = 1, X 2 = 2)

Térinformatikai algoritmusok Elemi algoritmusok

1. Mondjon legalább három példát predikátumra. 4. Mikor van egy változó egy kvantor hatáskörében?

Eljárások és függvények

Oktatási Hivatal. 1 pont. A feltételek alapján felírhatók az. összevonás után az. 1 pont

A digitális számítás elmélete

Állapot minimalizálás

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Elsőrendű logika szintaktikája és szemantikája. Logika (3. gyakorlat) 0-adrendű szemantika 2009/10 II. félév 1 / 1

Absztrakt adattípus - algebrai specifikáció - Lists (paraméteres) module imports end exports parameters variables sorts operations equations

First Prev Next Last Go Back Full Screen Close Quit. Matematika I

f(x) vagy f(x) a (x x 0 )-t használjuk. lim melyekre Mivel itt ɛ > 0 tetszőlegesen kicsi, így a a = 0, a = a, ami ellentmondás, bizonyítva

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Programok értelmezése

ADATBÁZIS-KEZELÉS. Relációalgebra, 5NF

Diszkrét matematika 1. estis képzés

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Algoritmizálás, adatmodellezés tanítása 6. előadás

2. Visszalépéses keresés

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

2. Visszalépéses stratégia

Átírás:

PROGRAM STATIKUS FOGALMA DINAMIKUSAN VÁLTOZÓ ÁLLAPOTTÉRBEN 1 Az ELTE IK programozó informatikus képzésében egy statikus szemléletű, matematikai relációk fogalmára épülő modell keretében tanítjuk a programozást. [3][6] Ez a modell már majdnem harminc éve megszületett, folyamatosan csiszolódott, de a legfontosabb alapfogalmai nem változtak meg. Most néhány alapfogalmát módosítom, de úgy, hogy érvényben maradjanak a modell keretében bizonyított eredmények, ugyanakkor két ponton rugalmasabbá váljon. Könnyebb legyen az úgynevezett kiterjesztési problémákat (beszélhetünk-e megoldásról, ha a feladat és a program állapotterei nem azonosak, hanem egyik a másiknak altere) megválaszolni és lehessen az absztrakt programok szintjén alprogramokról illetve alprogramok hívásáról beszélni (és ezzel együtt rekurzívan hívható alprogramokat is megadni). 1. Alapfogalmak Induljunk ki abból a megállapításából, amely szerint a programozás egy olyan tevékenység, amikor egy feladat megoldására programot készítünk. Ennek értelmében a programozás három alapfogalomra épül: a feladat, a program és a megoldás fogalmaira. Mi az a feladat, mi az a program, mit jelent az, hogy egy program megold egy feladatot? Erre adok itt választ. A válaszokban az állapottér és a program fogalmai lesznek újak a programozási modell korábbi definícióihoz képest. 2. Az adatok típusa Az adattípus fogalma nem változott a modell eredeti változatához képest. Definíció. Egy adat típusát az adat által felvehető lehetséges értékek halmaza, az úgynevezett típusérték-halmaz, és az ezen értelmezett műveletek, az úgynevezett típusműveletek együttesen határozzák meg, más szóval specifikálják 2. 3. Állapottér Tekintsünk néhány adatot az adattípusaikkal. Vezessünk be olyan páronként különböző neveket, amelyekkel az adatokat egyértelmű módon megcímkézhetjük. Ha minden adatnak vesszük egy-egy lehetséges értékét, és minden értéket a saját adata címkéjével megjelöljük, akkor ezt az érték-együttest állapotnak nevezzük. Az állapottér az összes lehetséges állapot halmaza. 1 Készült a TÁMOP 4.2.1./B-09/1/KMR-2010-0003 számon regisztrált pályázat keretében. 2 A típus korszerű definíciója ennél jóval árnyaltabb, de egyelőre ez a szűkített változat is elegendő lesz az alapfogalmak bevezetésénél.

Definíció. Legyenek az A 1,..., A n (n N + ) típusérték-halmazok. Rendeljünk hozzájuk egyedi (páronként különböző) c 1,..., c n címkéket. Ekkor a { {c 1 :a 1,..., c n :a n } a i A i (i=1,...,n) } halmazt az A 1,..., A n típusérték-halmazokból képzett állapottérnek nevezzük, amit a továbbiakban a (c 1 :A 1,..., c n :A n ) szimbólummal jelölünk. Az állapottér elemei (amelyek maguk is halmazok: címkézett értékek halmazai) az állapotok. A (c 1 :A 1,..., c n :A n ) állapottérnek a c i -vel címkézett A i halmazát (i {1...n}) az állapottér komponensének hívjuk. A {c 1 :a 1,..., c n :a n } állapot c i -vel (i {1...n}) címkézett komponensén az a i értéket értjük. Definíció. Az A = (c 1 :A 1,..., c n :A n ) állapottér bármely c i (i=1,...,n) címkéje azonosít egy olyan c i :A A i (vetítő vagy projekciós) függvényt, amely minden a A állapothoz annak c i címkéjű komponensét rendeli, azaz ha a = {c 1 :a 1,..., c n :a n }, akkor c i (a)=a i. Ezt a függvényt az állapottér változójának nevezzük. A fenti definíció biztosítja, hogy mind az állapottér, mind egy állapot komponenseire egyértelmű módon lehessen hivatkozni, ugyanakkor nem jelöl ki feleslegesen sorrendet a komponensek között, mint azt egy direktszorzattal megadott állapottér tenné. A direktszorzattal megadott terekhez hasonlóan itt is be lehet vezetni az altér fogalmát. Definíció. Tekintsük az A=(c 1 :A 1,..., c n :A n ) állapotteret és az :{1..m} {1..n} (n,m N +, m n) indexsorozatot. Ekkor a B=(c (1) :A (1),..., c (m) :A (m) ) állapotteret az A egy alterének nevezzük és ezt B A-val jelöljük. A definícióból adódik, hogy ha B=(d 1 :B 1,..., d m :B m ) állapottér altere az A=(c 1 :A 1,..., c n :A n ) állapottérnek, akkor a B-beli címke-komponens párok mind előfordulnak A-ban, azaz {d 1 :B 1,..., d m :B m } {c 1 :A 1,..., c n :A n }. Definition. Let A=(c 1 :A 1,..., c n :A n ) and B= (c i1 :A i1,..., c im :A im ) (n,m N +, m n, {i 1,, i m } {1,, n}) be state spaces and B A. A pr B :A B leképezést az A állapottér B-re vett vetítésének (projekciójának) nevezzük, ha minden A-beli {c 1 :a 1,..., c n :a n } állapotra a pr B ({c 1 :a 1,..., c n :a n })={c (1) :a (1),..., c (m) :a (m) }. A vetítés segítségével nemcsak egy állapot képezhető át egy altérbe, hanem állapotpárok, állapotsorozatok és állapothalmazok is, amennyiben azok vetítését állapotonként végezzük el. 4. Feladat fogalma A feladat fogalma nem változott. Definíció. Legyen az A egy állapottér. Ekkor az F A A relációt az A feletti feladatnak nevezzük. (Ez a definíció nem változott.) 5. Program fogalma A program az általa befutható összes lehetséges végrehajtás együttese. Rendelkezik egy alapállapottérrel, amelyiknek bármelyik állapotából el tud indulni, és ahhoz olyan végrehajtási

sorozatokat rendel, amelyik első állapota a kiinduló állapot. Ugyanahhoz a kiinduló állapothoz akár több végrehajtási sorozat is tartozhat. Egy végrehajtási sorozat további állapotai az alap-állapottér komponensein kívül segéd komponenseket is tartalmazhatnak, de ezek a véges hosszú végrehajtások esetén legkésőbb az utolsó lépésében megszűnnek, így a véges végrehajtások az alap-állapottérben terminálnak. A program formális definíciója előtt vezessünk be néhány jelölést! Jelölje H** a H halmaz elemeiből képzett összes (véges és végtelen hosszú) sorozatot tartalmazó halmazt. Jelölje a H a végtelen hosszú sorozatok halmazát, a H* pedig korábbi jelölésünkkel összhangban a H halmaz elemeiből képzett véges hosszú sorozatokat tartalmazza. Nyilvánvaló, hogy H** = H* H. Egy H** sorozat hosszát a szimbólummal írjuk le, amely értéke végtelen hosszú sorozat esetén. Adjuk meg ezek utána program formális definícióját. Definíció., Legyen A egy állapottér, és a A az összes olyan állapot halmaza, amelyek azon állapotterekhez tartoznak, amelyeknek altere az A, azaz A B. Ekkor az S A A relációt az A A B állapottér feletti programnak hívjuk (A a program alap-állapottere), ha 1. S=A és minden S A -ra: A. 2. minden a A-ra és minden S(a)-ra: 1 és 1 =a. Új, a korábbi modellben nem szereplő fogalom az alap-állapottér. A program csak az alapváltozóin keresztül tud a környezetével kapcsolatot teremteni. Egy alapváltozónak tudunk kívülről kezdőértéket adni, és egy alapváltozóból tudjuk a terminálás után az eredményt lekérdezni. A program fogalmának új eleme az is, hogy egy végrehajtás során új komponensek jöjjenek létre, és szűnjenek meg az állapottérben. Ugyanakkor feltesszük, hogy termináláskor a végállapotban már csak a kezdetben létező komponensek (az alap-állapottér komponensei) szerepelhetnek. A program egy végrehajtása során dinamikusan változik az állapottér, de az éppen aktuális állapottérnek mindig komponensei lesznek az alap-állapottér komponensei. Egy program működése nyilvánvalóan nem változik meg attól, ha az alap-állapotterének változóit átnevezzük. Arra kell csak ügyelni, hogy az új változónevek továbbra is komponensenként egyediek legyenek. Definíció. Legyen S egy A=(c 1 :A 1,..., c n :A n ) állapottér feletti program, és a B=(d 1 :B 1,..., d m :B m ) (n m) egy állapottér úgy, hogy van olyan :{1..n} {1..m} injekció, hogy A i = B (i) (i {1...n}). Az S program változó-átnevezésének nevezzük azt a B feletti programot, amelynek végrehajtási sorozatait S program végrehajtási sorozatai alkotják azzal a módosítással, hogy azok állapotaiban mindenhol a c i változónevet d (i) változónévre cseréljük, és ha d i segédváltozóként szerepelt az S programban, akkor a segédváltozó nevét is egyedi névre cseréljük le.

Egy program működése attól sem változik meg, ha a változóinak státuszán módosítunk: néhányat alapváltozóból segédváltozóvá, néhányat segédváltozóból alapváltozóvá minősítünk át. Egy alapváltozó ugyanis könnyedén átminősíthető segédváltozóvá úgy, hogy az csak a program elindulásakor jöjjön létre, és a program befejeződésekor megszűnjön. Egy segédváltozóból is lehet alapváltozó, ha már eleve létezőnek tekintjük, ezért nem kell sem létrehozni sem megszüntetni, élettartama mindegyik végrehajtás teljes hosszára kiterjed. Definíció. Legyen S egy A=(v 1 :A 1,..., v n :A n ) állapottér feletti program és az A komponenseitől különböző v:t komponens. (A v lehet az S működése során megjelenő segédváltozó, de lehet azoktól teljesen független új változó is.) Az S program alap-állapotterének kibővítésén azt a programot értjük (jelöljük ezt S -vel), amelynek alap-állapottere a C=(v 1 :A 1,..., v n :A n, v:t), és minden c C-re S (c) = { C S(pr A (c)) : = és 1 =pr A ( 1 ) and i [2.. ]: ( i -nek nincs v komponense i = ( i, v:v( i-1 )) ( i -nek van v komponense) i = i } Definíció. Legyen S egy A=(v 1 :A 1,..., v n :A n, v:t) állapottér feletti program. Az S program alapállapotterének leszűkítésén azt a programot értjük (jelöljük ezt S -vel), amelynek alap-állapottere a C=(v 1 :A 1,..., v n :A n ), és minden c C-re S (c) = {<c,, pr C ( )> C a A: c=pr C (a) és S(a) A } { < c, > C a A: c=pr C (a) és S(a) A } A program alap-állapottere egy önkényesen kijelölt halmaz. Kibővítése nem változtatja meg a program működését, sőt a leszűkítése sem, ha az alap-állapottérből elhagyott változó legelső használata előtt kibővül vele az aktuális állapottér, és a program befejeződésekor törlődik. 6. Megoldás fogalma Nem változott meg az alábbi két fogalom definíciója. Definíció. Legyen A egy állapottér. A p(s) A A relációt az A állapottér feletti S program programfüggvényének (hatásának) nevezzük, ha 1. p(s)={ a A S(a) A } 2. minden a p(s) -re: p(s)(a) = { b A van olyan S(a), hogy =b } Definíció. Legyen az F egy A állapottér feletti feladat, az S az A állapottér feletti program. Az S program megoldja az F feladatot, ha

1. F p(s ) 2. minden a F -re: p(s )(a) F(a) A megoldás definíciója feltételezi, hogy a feladat állapottere megegyezik a program alapállapotterével. De vajon megoldható-e egy feladat annak állapotterétől eltérő alap-állapotterű programmal? A programozási gyakorlatban sokszor előfordul, hogy egy feladatot egy olyan programmal akarunk megoldani, amelyik állapottere nem azonos a feladatéval, bővebb vagy szűkebb annál, esetleg más változóneveket használ. Említettük már, hogy egy program alap-állapotterét megállapodás alapján jelölhetjük ki. Ha az a célunk, hogy egy adott feladatot oldjunk meg egy programmal, akkor először azt kell megvizsgálni, hogy a program alap-állapottere hozzáigazítható-e a feladat állapotteréhez. Ehhez a korábban bevezetett változó-átnevezést, alap-állapottér bővítést és szűkítést használhatjuk, hiszen ezek a program működését nem változtatják meg. A cél az, hogy a program alapváltozói a feladat (bemenő és eredmény) változói legyenek, azaz a program alap-állapottere a feladat állapotterével egyezzen meg. Ha ez sikerül, akkor a megoldás tényét a fenti definícióval már ellenőrizhetjük. Ha a feladat állapotteréhez hozzáigazított program megoldja a feladatot, akkor az eredeti program is megoldja azt. Az eredeti és a hozzáigazított programok működése azonos. Ahhoz azonban, hogy egy program egy másik programhoz hasonlóan ugyanazon feladatokat tudja megoldani elegendő, ha a programok ekvivalensek. Definíció. Legyenek S 1 és S 2 programok olyanok, amelyek alap-állapotterei (megfelelő változóátnevezés, kibővítés illetve leszűkítés után) megegyeznek. Az S 1 és S 2 programok ekvivalensek, ha a közös alap-állapottéren felírt változataik S 1 és S 2 programfüggvénye megegyezik, azaz p(s 1 ) = p(s 2 ). Ez a fogalom reflexív, szimmetrikus és tranzitív, tehát a programok halmazán egy ekvivalencia osztályozást határoz meg. Ennek az a következménye, hogy egy program akkor old meg egy feladatot, ha a program ekvivalencia-osztályának valamelyik programja, például a feladat állapotterét alap-állapottérként használó vele ekvivalens program megoldja azt. 7. Következmények A programozási modell fenti módosítása a módosítások a modell többi fogalmát, köztük talán a legfontosabbat, a megoldás definícióját nem érintik. Részletesen bebizonyítandó ugyan, de az előzetes vizsgálatok szerint a modell keretén belül korábban bizonyított eredmények megmaradnak. Ugyanúgy lehet például a feladatra kimondani és bizonyítani a specifikáció alaptételét, bevezetni az elemi programokat és programszerkezeteket, bizonyítani a levezetési szabályokat. Két új elemi programot kell bevezetni: új változó létrehozása illetve megszűntetése. Lényeges egyszerűbb lett viszont annak eldöntése, ha egy feladatot egy olyan programmal akarunk megoldani, amelyik állapottere nem azonos a feladatéval, bővebb vagy szűkebb annál, esetleg más változóneveket használ.

Megnyílt a lehetőség az alprogramok absztrakt definíciója előtt. Az alprogram hívása egy speciális utasításként fogható fel, amely képes újabb változókat végrehajtás közben létrehozni. Be lehet vezetni az alprogramra nézve lokális változókat, ezek között a paraméterváltozókat, és az alprogramok rekurzív hívását is meg lehet engedni. Ennek részletes kidolgozása későbbi feladat. A programozási modell fenti változtatása visszacsempészte az alapvetően statikus szemléletbe a program dinamikus természetét. Miközben a megoldás vizsgálatához továbbra is a statikus szemléletet alkalmazhatjuk, a programnak a gyakorlat szempontjából természetesebb dinamikus viselkedése megjelenhet a modellben. 8. Irodalom 1. Dijkstra E.W., ``A Discipline of Programming'',Prentice-Hall, Englewood Cliffs, 1973. 2. Dijkstra E.W. and C.S. Scholten, ``Predicate Calculus and Program Semantics'', Springer- Verlag, 1989. 3. Fóthi Ákos: Bevezetés a programozáshoz. ELTE Eötvös Kiadó. 2005. 4. Gries D., ``The Science of Programming'', Springer Verlag, Berlin, 1981. 5. Hoare C.A., Proof of Correctness of Data Representations}, Acta Informatica (1972), 271-281. 6. Workgroup on Relation Models of Programming: Some Concepts of a Relational Model of Programming,Proceedings of the Fourth Symposium on Programming Languages and Software Tools, Ed. prof. Varga, L., Visegrád, Hungary, June 9-10, 1995. 434-44.