MODULE receiver(message1,message2) VAR st : {receiving,received}; ack : boolean; expected : boolean; ASSIGN init(st) := receiving; next(st) := case message2=expected & !(st=received) : received; 1 : receiving; esac; next(ack) := case st = received : message2; 1 : ack; esac; next(expected) := case st = received : !expected; 1 : expected; esac; FAIRNESS running LTLSPEC G F st=received