bool ain,bin;
bool cA,cB;

proctype A()
{
   cA=true;
   do 
     :: cB -> 
     accept:  cA=false;
              cA=true;
   od;
   progress: ain=true;
   assert(bin==false);
   ain=false;
   cA=false
}

proctype B()
{
   cB=true;
   do
     :: cA -> 
     accept:  cB=false;
              cB=true;
   od;
   progress: bin=true;
   assert(ain==false);
   bin=false;
   cB=false
}

init
{
  cA=false;cB=false;  
  ain=false;
  bin=false;
  atomic{
    run A(); run B();
  }
}
