26.7.Természetes számok generátora

Első példánk csatornaváltozók használatára a ábrán látható természetes számokat generáló folyamat specifikációja és az azt megvalósító program. A -gyel jelölt folyamat a folyamathálózat egy eleme, az általa generált számokat más folyamat(ok) használják fel.

26.12. ábra - 26.10. ábra. Természetes számok generátora.

26.10. ábra. Természetes számok generátora.

A folyamat állapot- és paraméterterében egy egész típusú csatornaváltozó és ugyanezen csatorna történetváltozója jelenik meg. Mindkét változó értéke kezdetben az üres sorozat a kikötés szerint.

Az csatorna történetváltozója segítségével könnyen megfogalmazhatjuk, hogy a csatornán egymás után, növekvő sorrendben a természetes számok jelennek meg (): invariáns, hogy a csatorna történetének értéke a természetes számok sorozatának kezdő részsorzata. A csatornaváltozó segítségével nagyon nehéz lenne előírni hasonló követelményt. A csatornaváltozó értéke bármikor lehet az üres sorozat, így semmilyen támpontot sem ad arra nézve, hogy melyik volt az előző érték, amelyik megjelent rajta. Az invariánst a legkönnyebben úgy teljesíthetnénk, ha soha egyetlen elemet sem helyeznénk az csatornára, az üres sorozat mindig prefixe a természetes számok sorozatának. A kikötés azonban megköveteli, hogy az csatorna történetének hossza elkerülhetetlenül növekedjen. Figyeljük meg, hogy a feladat nem fogalmaz meg sem terminálási, sem fixpont feltételt. Terminálás helyett végtelen működést követel meg.

A megoldás megtalálása érdekében bővítjük az állapotteret és finomítjuk a specifikációt:

Könnyen beláthatjuk a levezetési szabályok segítségével (. fejezet), hogy a új specifikáció szigorúbb az előzőnél (.) és (.)-ből következik (.), ill. (.)-ból következik (.).

A megoldó program a következő:

Bizonyítás: Megmutatjuk, hogy a program megfelel a finomított specifikációnak.

(): Megmutatjuk, hogy

.

():

():

és

.