MODULE sender(ack) VAR st : {sending,sent}; message1 : boolean; message2 : boolean; ASSIGN init(st) := sending; next(st) := case ack = message2 & !(st=sent) : sent; 1 : sending; esac; next(message1) := case st = sent : {0,1}; 1 : message1; esac; next(message2) := case st = sent : !message2; 1 : message2; esac; FAIRNESS running LTLSPEC G F st=sent