Practicumopgave Mehmet Oktener Alban Ponse Kruislaan 403, kr. 2.45 tel. 5257592 e-mail: alban@science.uva.nl Algemeen. In deze serie opgaven komt de specificatie van data typen aan de orde. Je wordt geacht de standaard-bibliotheek voor PSF te gebruiken. Alle genoemde tools, standaard-bibliotheek files en on-line manuals zijn te vinden op gene onder /home/psf/. Verdere informatie over de PSF-toolkit is te vinden op http://carol.wins.uva.nl/~psf/. Maak de opgaven aan de hand van de volgende principes: Correctheid van je antwoorden is meest belangrijk. Verder wordt helderheid geprefereerd boven beknoptheid. Van elke ingeleverde PSF specificatie mag de volgorde van herschrijfregels (equations) niet van invloed zijn op het resultaat van herschrijvingen. Dit kun je gedeeltelijk controleren met het trs -r commando. In de hiernavolgende twee pagina s enkele wenken voor de specificatie van PSF processen binnen dit practicum. 1
Het gebruik van PSF voor proces specificatie Conditional Expressions. In PSF is ook de zgn. conditional expression gedefinieerd. Deze is ook bekend onder de noemers guarded command en if - then - fi. Met deze constructie kunnen we proces-gedrag op een eenvoudige manier afhankelijk maken van data-waarden. De PSF syntax van conditional expressions is als volgt: [s = t] -> P is een proces expressie als P dat is, en s en t zijn in de betreffende module data termen van dezelfde soort. De binding van de conditional expression is sterker dan de, en zwakker dan alle andere proces-operatoren. We geven de semantiek van deze constructie eerst met behulp van een simpel voorbeeld: P = sum(n in NATURAL, [even(n) = true ] -> a. Even(n) Even(n) = Odd(n) = Hier is P een proces dat aftelbaar veel verschillende executies heeft: een a-stap naar Even(n) voor elke even waarde van n, en een b-stap naar Odd(n) voor elke oneven waarde van n. Een expressie als [even(n) = true ] heet ook wel een guard. Als even(n) en true in de initiele algebra gelijk zijn, dan is deze guard true, en anders false. In dit laatste geval evalueert de conditional expression naar deadlock. In het eerste geval is de guard transparant: bv. [true = true ] -> Q gedraagt zich hetzelfde als Q. De actierelaties voor de conditional expressions zijn als volgt gedefinieerd: x a x ; s = t ([s = t] -> x) a x x a ; s = t ([s = t] -> x) a Merk op dat als de guard s = t false is (in de initiele algebra), het proces [s = t] -> P geen stappen kan doen, en zich dus hetzelfde gedraagt als deadlock. De conditional expressions voldoen aan een aantal eenvoudige algebraïsche identiteiten. bijvoorbeeld geen volgorde tussen de evaluatie van de en van de guard, dus en [s = t] -> P [s = t] -> Q [s = t] -> (P Q) beschrijven hetzelfde proces. Zo is er 2
Het simuleren van PSF processen. Evenals dit het geval is met data modules, kunnen proces modules met het commando psf worden gecompileerd naar TIL zie verder de manual pages). De simulator werkt op de door psf gegenereerde TIL file van een process module, en geeft de gebruiker de gelegenheid om stap voor stap elk gedefinieerd proces te executeren. Alle volgende acties die een geselecteerd proces kan doen, worden in een menu opgesomd. Het selecteren van één van deze alternatieven brengt het proces in de volgende toestand. Een probleem dat hierbij kan optreden wordt geïllustreerd aan de hand van het proces P, als hierboven gedefinieerd. Dit proces start immers met een keuze uit aftelbaar veel acties, en is derhalve niet simuleerbaar. De oplossing die we in het practicum gebruiken is tamelijk simpel. Voor simulatie-doeleinden passen we specificaties op de volgende manier aan: in plaats van P = sum(n in NATURAL, [even(n) = true ] -> a. Even(n) Even(n) = Odd(n) = specificeren we sets of NATURAL NAT-SET = { nat(^0), nat(^1), nat(^2), nat(^3), nat(^4), nat(^5), nat(^6), nat(^7), nat(^8), nat(^9), nat(^1^0) } P = sum(n in NAT-SET, [even(n) = true ] -> a. Even(n) Even(n) = Odd(n) = waarmee we in dit voorbeeld de eerste 11 mogelijke stappen van P simuleren. In het algemeen is het specifiek toevoegen van een eindige (willekeurige) simulatie-set voor elke oneindige soort, het veranderen van de de betreffende soort in de scope van een sum-operator afdoende om simuleerbare specificaties te krijgen. Het is in dit practicum steeds de bedoeling dat simuleerbare proces modules worden ingeleverd. Een precieze beschrijving van het gebruik van de simulator is te vinden in de on-line manual; het betreffende commando heet sim. 3
Opgave. In deze opgave beschouwen we een eenvoudig systeem voor het sturen van een CV (centrale verwarming). We nemen aan dat een thermometer-proces E uit de module Thermometer regelmatig, zeg eens per seconde, de temperatuur t van de te verwarmen ruimte naar de thermostaat stuurt middels een actie send-et(t), en dat t {1, 2,, 30}. Het systeem bestaat uit de parallelle compositie van E en de volgende drie processen: 1. Een gebruiker G kan middels een send-actie een gewenste temperatuur van i graden Celsius instellen op de thermostaat (i {1, 2,, 30}), of de thermostaat met rust laten. 2. De ingestelde thermostaat T(n) ontvangt van E middels een read-actie de temperatuur in de te verwarmen ruimte. Verder kan de thermostaat middels een read-actie een door de gebruiker nieuw ingestelde temperatuur aflezen, en kan dit proces middels een send-actie de CV-ketel aan- en uitschakelen. 3. De CV-ketel C schakelt afwisselend aan en uit na read-acties op een boodschap van de thermostaat. De volgende proces-signatuur is gegeven: process module Kachel begin exports begin atoms send-gt, read-gt, comm-gt : NATURAL read-et, comm-et : NATURAL send-tc, read-tc, comm-tc : SIG send-nothing-gt, read-nothing-gt, comm-nothing-gt processes G T : NATURAL C SYSTEM end imports Signals, Naturals, Thermometer -- hoofdletters in de acties -- geven de source en destination -- van de boodschappen aan De geïmporteerde module Signals bevat de soort SIG met constanten aan en uit. De geïmporteerde module Naturals bevat de bekende specificatie van de natuurlijke getallen en de gebruikelijke functies hierop. De definitie van de processen G en C wordt gegeven: G = sum(t in W-temp-set, send-gt(t). G) send-nothing-gt. G C = read-tc(aan). read-tc(uit). C De set W-temp-set bevat de te meten en in te stellen temperatuur waarden: sets of NATURAL W-temp-set = {nat(^1), nat(^2), nat(^3), nat(^4), nat(^5), nat(^6), nat(^7), nat(^8), nat(^9), nat(^1^0), nat(^1^1), nat(^1^2), nat(^1^3), nat(^1^4), nat(^1^5), nat(^1^6), nat(^1^7), nat(^1^8), nat(^1^9), nat(^2^0), nat(^2^1), nat(^2^2), nat(^2^3), nat(^2^4), nat(^2^5), nat(^2^6), nat(^2^7), nat(^2^8), nat(^2^9), nat(^3^0)} a. Beschrijf in informele taal hoe de thermostaat moet functioneren. 4
b. Geef een definitie van het proces T voor de thermostaat in overeenstemming met je antwoord bij a. Dit proces heeft een parameter van de soort NATURAL: de door de gebruiker ingestelde temperatuur. c. Geef een definitie van het proces SYSTEEM, de parallelle compositie van de processen G, T(n), C en E, waarbij T(n) met een willekeurige W-temp-set waarde mag zijn geïnitialiseerd. Geef ook de definitie van de eventueel gebruikte sets en communicaties. 5