view a13/smv/test9.smv @ 146:6663205ed308

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 30 Dec 2020 12:07:07 +0900
parents 0e8a0e50ed26
children
line wrap: on
line source

MODULE main
 VAR
   semaphore : boolean;
   proc1     : process user(semaphore);
   proc2     : process user(semaphore);
 ASSIGN
   init(semaphore) := FALSE;
 LTLSPEC G ! (proc1.state = critical & proc2.state = critical)
 LTLSPEC G (proc1.state = entering -> F proc1.state = critical)
MODULE user(semaphore)
VAR
state : {idle, entering, critical, exiting};
 ASSIGN
   init(state) := idle;
   next(state) :=
    case
       state = idle : {idle, entering}; state = entering & !semaphore : critical;
       state = critical : {critical, exiting};
       state = exiting : idle;
       TRUE : state;
     esac;
   next(semaphore) :=
     case
       state = entering : TRUE;
       state = exiting  : FALSE;
       TRUE             : semaphore;
     esac;
 FAIRNESS
   running