bool ain,bin;
bool cA,cB;

proctype A()
{
   cA=true;
   loop: 
     if
      :: !cB -> goto progress;
     fi; 
     accept:  cA=false;
              cA=true;
     goto loop;
   progress: ain=true;
   assert(bin==false);
   ain=false;
   cA=false
}

proctype B()
{
   cB=true;
   loop:
     if
      :: !cA -> goto progress; 
     fi;
     accept:  cB=false;
              cB=true;
     goto loop;
   progress: bin=true;
   assert(ain==false);
   bin=false;
   cB=false
}

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