Title: Statecharts
1Statecharts
2Riferimenti (1)
- D. Harel, Statecharts A visual formalism for
complex systems, Science of Computer Programming
8 (1987), pp. 231-274. - D. Harel, On visual formalisms,Communications of
the ACM 31 (1988), pp. 514-530. - D. Harel, A. Pnueli, J. Schmidt, R. Sherman, On
the formal semantics of Statecharts, Proc. 1st
LICS, IEEE Press, pp. 54-64, 1986. - C. Huizing, G. Gerth, W. De Roever, Modeling
statecharts behavior in a fully abstract way,
Proc. 13th CAAP, LNCS 299, Springer, pp. 271-294,
1988. - C. Huizing, W. De Roever, Introduction to design
choices in the semantics of Statecharts,
Information Processing letters 37 (1991), pp.
205-213.
3Riferimenti (2)
- A. Maggiolo-Schettini, A. Peron, S. Tini, A
comparison of Statecharts step semantics,
Theoretical Computer Science 290 (2003), pp.
465-498. - A. Pnueli, M. Shalev, What is a step on the
semantics of Statecharts, Proc. TACS 91, LNCS
526, Springer, pp.244-264, 1991. - A. Peron, A., Maggiolo-Schettini, Transitions as
Interrupts A New Semantics for Timed
Statecharts, in Proc. TACS94, LNCS 789,
Springer, 1994, pp. 806-821. - A. Maggiolo-Schettini, A., Peron, A., Retiming
Techniques for Statecharts, Proc. FTRTFT96,
LNCS 1135, Springer, 1996, pp. 55-71. - A. Maggiolo-Schettini, M. Merro, Priorities in
Statecharts, Proc. Workshop on Analysis and
Verification of Multiple-Agent Languages,
Stockholm, June 1996, LNCS 1192, Springer, 1996,
pp. 404-429.
4Motivazioni
- La descrizione di sistemi complessi con macchine
a stati - finiti (FSM) e della loro controparte visuale con
diagrammi a - transizione di stato pone le seguenti difficoltÃ
- i diagrammi sono piatti e quindi non supportano
sviluppo a passi, top-down o bottom-up - i diagrammi non sono economici un evento che
causa la stessa transizione da un gran numero di
stati, come un interrupt ad alto livello, deve
essere rappresentato da una transizione con lo
stesso evento da tutti gli stati - alla crescita lineare del sistema da descrivere
corrisponde una crescita esponenziale del numero
degli stati - i diagrammi sono sequenziali e non esprimono la
concorrenza in modo naturale.
5Statecharts (1)
- Gli Statecharts sono stati proposti per ovviare
agli - inconvenienti detti dei diagrammi di stato
- Statecharts diagrammi di stato profonditÃ
- ortogonalità broadcast
D
e
e
A
A
f
diventa
B
g
f
g
B
f
C
C
h
h
6Statecharts (2)
h
k
B,F
B,E
B,G
g
e
e
f
e
m?p
f
C,G
C,E
k
C,F
h
k
e
m?p
I
H
p
A
D
p
B
E
k
e
g
fin(G)
h
F
C
e
G
m
k
k
e
p
e
I
H
7Statecharts (3)
Unaltra caratteristica degli statecharts è la
possibilità di ricordare la visita precedente a
uno stato e di entrare in uno stato composito A
non nello stato di default, ma nello stato in cui
il sistema si trovava quando ha lasciato A
lultima volta.
A
B
H
Esempio Entrando in A facendo la trasizione
etichettata e, il sistema entrerà in quello degli
stati B, C, D in cui si trovava lultima volta
che ha lasciato A.
e
C
D
f
8Statecharts (4)
Le transizioni dello possono avere un
comportamento di output che non è mandato al
mondo esterno (come nelle macchine di Mealy), ma
può influire sul comportamento dello statechart
stesso nelle sue componenti ortogonali dando
luogo a reazioni a catena.
A
k
Esempio Se lambiente dà m si ha un passo J ? I,
B ? C, D ? G. Se poi lambiente dà n si ha un
passo I ? J, C ? B, G ? E.
A
B
E
D
e
n
f/g
g
G
C
e
m/e
H
J
I
n/f
9Statecharts (5)
Data una configurazione C la reazione dello
statechart allinput che viene dallambiente è
descritto come un passo. Si tratta di trovare
linsieme T di transizioni che sono rilevanti in
C, ossia originano in qualche antenato di una
sottoconfigurazione di C, che sono abilitati
dallevento e sono consistenti (di qui può venire
non determinismo). A un micropasso determinato da
un evento proveniente dallambiente possono
seguire micropassi determinati sia dallambiente
sia da segnali emessi come output da transizioni
del micropasso precedente sia dallaggiornamento
di condizioni. Una sequenza di micropassi termina
quando non restano più scelte consistenti da
effettuare. A questo punto il passo, che è una
sequenza massimale di micropassi, è osservabile
dallestermo nei suoi effetti.
10Statecharts (6)
Esempio
A
Se il sistema è in B e occorre e, allora può
andare in C o in D nondeterministicamente
B
D
e
e
C
Esempio Il sistema può passare dalla
configurazione (A,B,C) alla configurazione (D,B,F)
C
A
B
e ? f
e/f
eny f
D
F
E
se le transizioni sono considerate nellordine A
? D, B ? E, C ? F e alla configurazione (D,E,F)
se le transizioni sono considerate nellordine B
? E, A ? D, C ? F.
11Statecharts (7)
Esempio
A
B
C
Se i valori iniziali di x e y sono 0
alloccorrere di e il sistema effettuerà le due
transizioni che assegnano 1 a x e a y. Se le due
transizioni A ? D,
e/x1
e/y1
x y
F
E
D
B ? E sono avvenute in due micropassi differenti
allora in un micropasso successivo sarà x y e
potrà avvenire la transizione C ? F.
Esempio Come descrivere lesclusività di
un evento. Le configurazioni finali sono (C,B)
con x1 oppure (A,D) con x2.
ecur(in B)/x1
B
A
ecur(in A)/x2
D
C
12Statecharts (8)
Esempio
A
C
E
Quando il sistema è in (A,C) la componente a
sinistra può andare in F o in B
nondeterministicamente ma la componente a destra
può andare in D solo se è stata fatta la prima
scelta.
e/f
B
fcur(in(F))
e/f
G
F
Esempio Come descrivere priorità . Se e ed
f occorrono simultaneamente la e-transizione ha
priorità .
e
B
A
fny(e)
D
13Semantica HPSS86 (1)
Consideriamo un sottoinsieme ristretto di
Statecharts. La reazione del sistema agli stimoli
esterni (eventi) è fatta dalle transizioni. Le
transizioni sono etichettate con unetichetta
della forma e/a (evento/azione). Si assume
lipotesi di sincronia il sistema è
infinitamente più veloce dellambiente e la
risposta a uno stimolo esterno è sempre generata
nel medesimo passo in cui si ha lo
stimolo. Esempio Si abbiano le transizioni
parallele t0 a/e1, t1 e1/e2, , tn en/b . In
presenza di a gli eventi e1, , en, b sono tutti
generati nel medesimo passo.
14Semantica HPSS86 (2)
Si vuole però mantenere la relazione di causalitÃ
ed escludere situazioni in cui ci sono due
transizioni che si causano luna
laltra. Esempio t1 a/b t2
b/a Possiamo voler assegnare priorità alle
risposte agli stimoli. Si può fare usando eventi
negati ed espressioni trigger. Esempio Nel caso
di due transizioni in conflitto t1 a, t2 b tra
cui la scelta sarebbe nondeterministica possiamo
dare priorità alla transizione stimolata da
b t1 a.b-- t2 b
15Semantica HPSS86 (3)
Il comportamento di uno statechart è una sequenza
di passi ciascuno dei quali porta da una
configurazione stabile alla successiva.
Lambiente può introdurre nuovi eventi esterni
allinizio di ciascun passo. La risposta del
sistema è una sequenza di micropassi. Il primo
micropasso consiste di tutte le transizioni
stimolate dallinsieme degli eventi di input. I
micropassi successivi consistono di tutte le
transizioni stimolate dallinsieme di eventi
contenenti gli eventi di input e gli eventi
generati dai micropassi precedenti. Poiché il
numero di transizioni che possono essere fatte in
un passo è finito la sequenza di micropassi
termina quando non ci sono più transizioni
abilitate da aggiungere. Questo conclude un passo
e linsieme degli eventi generati dal passo è
linsieme degli eventi generati nei
micropassi. Tale semantica soddisfa sincronia,
causalità ed espressione della priorità mediante
eventi negati.
16Semantica HPSS86 (4)
La semantica data è localmente consistente, ma
non globalmente consistente. Esempio Consideria
mo due transizioni parallele t1 a--/b t2
b/a Supponiamo inizialmente E ?. Poiché a ? E
allora t1 è abilitata e il primo micropasso fa
t1 generando b, nel micropasso successivo b ? E
e si può fare t2 generando a. Il passo t1,
t2 è localmente consistente ma non globalmente
consistente.
17Semantica HPSS86 (5)
La semantica data è operazionale in quanto
definisce il comportamento del sistema in termini
di operazioni atomiche. E utile per una
realizzazione del linguaggio. Una semantica
dichiarativa definisce il comportamento mediante
equazioni ignorando dettagli operazionali
(e.g.ordine delle operazioni). Se la semantica
dichiarativa è composizionale si chiama
denotazionale. Si vuole consistenza delle due
semantiche. La mancanza di consistenza globale
della semantica a micropassi di HPSS86 impedisce
di dare una semantica dichiarativa e una
operazionale consistenti luna con laltra.
18Semantica PS91 (1)
Vediamo per un insieme ristretto di Statecharts
una semantica dichiarativa e una semantica
operazionale consistenti. Sia uno statechart una
5-tupla ltP, S, T, r, Vgt, dove P è un insieme di
eventi primitivi S è un insieme di stati T è
un insieme di transizioni r ? S è lo stato
radice V è un insieme di variabili assunto
inizialmente vuoto. Per ogni stato la funzione
children S ? 2S dà linsieme dei suoi sottostati
immediati. Uno stato s è basilare se children(s)
?, altrimento è composto. Linsieme degli stati
basilari è chiamato Basic. Se s2 ? children(s1)
diciamo s1 padre di s2 e s2 figlio di s1. Esiste
un unico stato che non ha padre, è r lo stato
radice.
19Semantica PS91 (2)
Chiamiamo children e children le chiusure
riflessiva-transitiva e transitiva,
rispettivamente, di children. La funzione
children può essere estesa a un insieme di
stati children(X) ? x ? X children(s) Se
s2 ? children(s1) diciamo s1 antenato di s2 e s2
discendente di s1. Uno stato s1 è antenato e
discendente di se stesso. Se uno stato s1 è
antenato o discendente di uno stato s2 diciamo
che s1 e s2 sono ancestralmente relati. La radice
è un antenato di tutti gli stati. Si richiede che
ogni stato abbia un solo padre. Cosà la relazione
di figliolanza organizza gli stati di uno
statechart in un albero con radice r le cui
foglie sono stati basilari e i nodi intermedi
sono stati composti.
20Semantica PS91 (3)
La funzione type S ? and, or è una funzione
parziale che assegna a ciascuno stato composto il
suo tipo. Se children(s) ? ? e type(s) or,
allora children(s) è una or-decomposizione di s,
ossia quando il sistema è in s è in uno e uno
solo dei suoi sottostati. Se children(s) ? ? e
type(s) and, allora children(s) è una
and-decomposizione di s, ossia quando il sistema
è in s è simultaneamente in tutti i suoi
sottostati. La funzione type è indefinita sugli
stati basilari e la radice deve essere uno stato
or. La funzione default S ? S identifica per
ciascuno stato or s uno dei suoi immediati
discendenti come stato di default, ossia come
stato in cui il sistema entra entrando in s. Per
un insieme di stati X ? S lca(X), il minimo
antenato comune di X, è lo stato x tale che X ?
children(x) e per ogni altro s ? S tale che X ?
children(s) vale x ? children(s). Per un
insieme di stati X esiste un minimo antenato
comune unico.
21Semantica PS91 (4)
Un insieme di stati X ? S è consistente se per
ogni due stati s1, s2 ? X o s1 , s2 sono
ancestralmente relati oppure s1 __ s2 . Un
insieme X è massimalmente consistente se per ogni
stato s ? S -X, X ?x non è consistente. Un
insieme massimalmente consistente è una
configurazione dello statechart. Se X è un
insieme consistente il completamento per default
di X, completion(X), è la configurazione Y
contenente X tale che per ogni stato s ? Y se X
oppure children(s) ? allora default(s) ? Y.
Tale richiesta identifica ununica configurazione
Y. La configurazione iniziale X0 è il
completamento per default della radice. Per ogni
transizione t ? T source(t) denota linsieme di
stati da cui la transizione esce, target(t)
denota linsieme di stati bersaglio della
transizione.
22Semantica PS91 (5)
A
Esempio
B2
B1
c1
c2
g1
g2
t1
d1
d2
h2
h1
e2
e1
i1
i2
t2
N
j1
j2
f2
f1
t3
source(t1) c2,d2 target(t1) g1,h1,i1
23Semantica PS91 (6)
Larena di una transizione t, denotata arena(t),
è il minimo contesto che contiene tutti i
cambiamenti causati dalla transizione. Usualmente
è il più piccolo stato or contenente source(t) ?
target(t), ma ci possono essere altri casi.
Nellesempio larena di t3 non è lo stato N che
contiene source(t3) ? target(t3), bensà lo stato
A. Labilitazione di una transizione t, denotato
trigger(t), consiste di letterali l1,, lk, k
0, ciascuno dei quali è o un evento primitivo
e?P o la negazione e di un tale evento e--. Dato
un insieme di eventi E ? P la transizione t è
abilitata da E se e?E per ogni e ? trigger(t) ed
e ? E per ogni e-- ? trigger(t). Denotiamo con
triggered(E) linsieme di transizioni abilitate
da E. Denotiamo con actions(t) linsieme di
eventi g1,, gn, gi?P, 1?i?0, generati dalla
transizione t. Per un insieme di transizioni T,
si ha generated(T) ? t ? T actions(t).
24Semantica PS91 (7)
Due transizioni t1, t2 sono consistenti se t1 t2
oppure arena(t1)__arena(t2). In caso contrario
le transizioni sono in conflitto. Ogni
transizione è consistente con se stessa. Un
insieme di transizioni T è un insieme consistente
se t1, t2 sono consistenti per ogni t1, t2 ? T.
Denotiamo con consistent(T) linsieme di tutte le
transizioni che sono consistenti con ogni t ? T.
25Running example (1)
Esempio
Binary_stopwatch
ShowTime
a
a
Stopwatch
Off
b
b
On
High
Medium
Low
H0
M0
L0
Time
cl
Time /cl
cm/cl
cm
cl/ cm
H1
M1
L1
26Running example (2)
Lattività dellorologio ha due modi, Stopwatch e
ShowTime. Il sistema passa da uno stato
allaltro alloccorrenza dellevento a che può
rappresentare il premere il bottone
dellorologio. Quando il sistema è nel modo
Stopwatch è nello stato Off e va nello stato On
alloccorrenza di b che può rappresentare il
premere un altro bottone dellorologio. Lo stato
On rappresenta il conteggio del tempo. Lo stato
On consiste di tre sottostati Low, Medium e High
che rappresentano tre bit di un contatore
binario. Ciascun contatore può essere a zero
oppure a uno. Inizialmente i contatori sono tutti
a zero. Il conteggio è stimolato dal segnale
esterno Time. Quando un contatore passa da uno a
zero emette un segnale che fa passare di stato il
contatore della cifra di ordine più alto. Tutte
le reazioni hannoluogo nello stesso passo
stimolato da Time. Ad ogni punto dellattività la
pressione del bottone b ferma il sistema e la
pressione di a mostra il tempo conteggiato.
27Semantica PS91 (8)
- Si abbia una configurazione C e un insieme di
eventi primitivi I ? P. Si vuole definire un
insieme di transizioni T che è fatto in un solo
passo in risposta a I. Questo passo sarÃ
costruito incrementalmente prendendo dapprima
linsieme delle transizioni che sono abilitate da
I che generano altri eventi e abilitano altre
transizioni, e cosà via. - La funzione abilitante En(T) assume che si sia
già deciso di effettuare linsieme di transizioni
T e identifica tutte le transizioni che sono
abilitate come conseguenza della decisione - En(T) relevant(C) ? consistent (T) ? triggered
(I ? generated(T)) - dove relevant(C) è linsieme di tutte le
transizioni i cui insiemi sorgente sono contenuti
nella configurazione C. Linsieme consistent(T)
sceglie dallinsieme relevant(C) quelle
transizioni che sono consistenti con ogni t ? T.
Si considerano solo quelle transizioni che sono
abilitate dagli eventi in I e quelle che sono
abilitate da queste.
28Running example (3)
- Sia C Binary-Stopwatch, Stopwatch, On, H0, M1,
L1. Le transizioni rilevanti
a C sono - relevant( C) Stopwatch ? ShowTime, On ? Off,
H0 ? H1, M1 ? M0, L1 ? L0. - Consideriamo linsieme di eventi di input I a,
time e prendiamo T L1 ? L0. Allora si ha - consistent(T) L1 ? L0, M0 ? M1, M1 ? M0, H0 ?
H1, H1?H0 - I ? generated(T) a, Time, cl
- triggered (I ? generated(T)) L0 ? L1, L1 ? L0,
M0 ? M1, M1 ? M0, Stopwatch ? ShowTime,
ShowTime ? Stopwatch - Abbiamo infine
- En(L1 ? L0) L1 ? L0, M1 ? M0.
29Semantica PS91 (9)
Una proprietà importante della funzione En è che
sia concava. Siano X e Y due domini. Una funzione
f 2X ? 2Y è concava se per ogni X1, X2, X3 ? X
con X1 ? X2 ? X3 si ha f(X1) ? f(X3) ? f(X2). Se
f,g sono funzioni concave lo è anche la loro
intersezione f ? g. Infatti (f(X1) ? g(X1)) ?
(f(X3) ? g(X3)) (f(X1) ? f(X3)) ? (g(X1) ?
g(X3)) ? f(X2) ? g(X2). Una funzione è
monotonicamente decrescente se per ogni X1 ? X2
? X3 si ha f(X3) ? f(X2) ? f(X1) e quindi f(X1) ?
f(X3) f(X3) ? f(X2). Ora relevant (C) essendo
indipendente da T, è concava. Mostriamo che
triggered (E) è una funzione concava da 2P a 2 T
. Basta dimostrare che se E1 ? E2 ? E3 sono tre
insiemi di eventi e una transizione t è abilitata
sia da E1 che da E3 è abilitata anche da E2 .
Consideriamo un evento e ? trigger(t). Poiché t ?
triggered(E1) ne segue e ? E1 e quindi anche e ?
E2 poiché E1 ? E2. Daltra parte se e-- ?
trigger(t) e t ? triggered(E3) allora non e ? E3
e quindi anche non e ? E2 ? E3 . Poiché la
concavità è chiusa per intersezione, En(T) è una
funzione concava di T.
30Semantica PS91 (10)
Consideriamo ora due definizioni degli insiemi
di transizioni che sono considerati passi
ammissibili da una configurazione C in risposta a
un insieme di eventi esterni T. La prima è una
definizione operazionale, la seconda è una
definizione dichiarativa. Mostreremo che, grazie
alla concavità , le due definizioni coincidono. La
definizione operazionale è basata su una
procedura non deterministica che costruisce un
passo T aggiungendo una transizione alla
volta.
31Semantica PS91 (11)
- Procedura Step construction
- Poni T ?
- Confronta En(T) con T
- 2.1 Se T En(T) riporta successo
- 2.2 Se T ? En(T) prendi una transizione t ?
En(T)-T, aggiungila a T e ripeti il passo 2 - 2.3 altrimenti, ossia se non T ? En(T) riporta
fallimento. - Un insieme T che può essere ottenuto con una
successione di scelte - di transizioni t ? En(T)-T è chiamato costruibile.
32Running example (4)
Sia T ? , I time. En(?) L1? L0 quindi
T ? En(T). Poniamo allora T L1? L0. Abbiamo
En (L1? L0) L1? L0, M1? M0 e quindi ancora
T ? En(T). Poniamo allora T L1? L0, M1?
M0. Abbiamo En L1? L0, M1? M0 L1? L0, M1?
M0, H0 ? H1 e quindi ancora T ? En(T). Poniamo
T L1? L0, M1? M0, H0 ? H1 e abbiamo infine
En(T) T.
33Semantica PS91 (12)
Un insieme di transizioni T è separabile se
esiste un sottoinsieme T?T tale che En(T) ?
(T-T) ?, altrimenti è detto inseparabile. Un
insieme di transizioni T inseparabile che
soddisfa T En(T) è detto passo
ammissibile del sistema. Proposizione. Un
insieme di transizioni T è una soluzione inseparab
ile dellequazione T En(T) se e solo se è
costruibile. Prova. Assumiamo che t0 sia una
soluzione inseparabile dellequazione T0
En(T0). Mostriamo che T0 è costruibile.
Applichiamo la procedura Step construction
aggiungendo nel passo 2.2 solo transizioni
nellinsieme (En(T)-T) ? T0 .
34Semantica PS91 (13)
- La procedura non può fallire.
- Inizialmente si ha T ? che implica T ? En(T).
Assumiamo che la - procedura fallisca dopo aver aggiunto una
transizione t a un T ? T0. - Questo implica che sia T ? En(T), ma esista un t
? T ? t tale che - t ? En(T ?t). Se t t poiché t ? (En(T)-T) ?
T0 segue t ? En(T). - Altrimenti t ? T ? En(T) e quindi ancora t ?
En(T). Inoltre poiché - t ? T ? t ? T0 e T0 En(T0) segue t ?
En(T0). - Cosà abbiamo identificato tre insiemi di
transizioni T ? T ? t ? T0. - Con t appartenente a En(T) e a EN(T0) ma non a
En(T ?t). Ma - questo contraddice che la funzione En sia
concava. Quindi la - procedura non può fallire.
35Semantica PS91 (14)
b) La procedura non può fermarsi a T ? T0. La
procedura può fermarsi a T ? T0 solo se
(En(T)-T) ? T0 ?, ma (En(T)-T) ? T0 En(T) ?
(T0 -T) ? contraddice il fatto che T sia
inseparabile. Viceversa, sia stato ottenuto T con
la procedura Step-construction. Mostriamo che T è
una soluzione inseparabile. Siano le transizioni
ordinate in una sequenza t1, t2 , , tn secondo
lordine della loro aggiunta a T. Poiché la
costruzione si è fermata T abbiamo che T soddisfa
T En(T). Rimane da mostrare che T è
inseparabile. Consideriamo un T ? T . Sia tk la
prima transizione nellordinamento che appartiene
a T-T. Asseriamo che tk ? En(T), che conduce al
fatto che En(T) ? (T -T) ? ? (poiché tk
appartiene a entrambi gli insiemi).
36Semantica PS91 (15)
- Assumiamo, al contrario, che tk ? En(T). Allora
abbiamo tre insiemi - T1 t1, t2 , , tk-1 , T2 T, T3 T t1,
t2 , , tn tali che T1 ? T2 - T3 e tuttavia
- 1. tk ? En(t1, t2 , , tk-1)
- 2. tk ? En(T)
- 3. tk ? En(T)
- 1 segue dal fatto che la procedura
Step-construction prende le transizioni da
aggiungere solo se sono abilitate sotto
lapprossimazione corrente, 2 è il nostro
assunto, 3 segue dal fatto che tk ? T En(T). - Ma questo contraddice la proprietà di concavità .
Dobbiamo allora concludere che En(T) ? (T -T) ?
? per un T? T, e quindi T è inseparabile. -
37Semantica PS91 (16)
Vediamo ora leffetto del passo T. Come reazione
allinput I vengono generati gli eventi
generated(T). La configurazione successiva
è Nextconfig(C,T) completion ((C-
children(arena (T)))??t?T target(t)) Ossia
leffetto di ogni transizione t ? T sulla
configurazione C è di rimuovere da C tutti gli
stati che sono tra i discendenti di arena(T) e di
aggiungere a C tutti gli stati che sono in target
di T. Questo dà una configurazione parziale il
cui completamento per default dà la nuova
configurazione risultante dal passo T.
38Running example (5)
Asssumiamo che C sia il completamento per default
dellinsieme di stati consistente H0, M1, L1.
Supponiamo che sia I Time. Il solo passo
possibile consiste dellinsieme di transizioni T
L1 ? L0, M1 ? M0, H0 ? H1 che genera gli
eventi addizionali cl, cm. Per calcolare la nuova
configurazione prima sottraiamo da C le arene
delle tre transizioni e i loro figli, ossia
rimuoviamo da C gli stati High, H0, Medium, M1,
Low, L1, quindi aggiungiamo a C i bersagli delle
tre transizioni e completiamo, ossia aggiungiamo
High, H1, Medium, M0, Low, L0.