libtlafmt 0.4.1

A formatter library for TLA+ specs, core of tlafmt
Documentation
---
source: libtlafmt/tests/format.rs
expression: output
input_file: libtlafmt/tests/corpus/Channel.tla
---
-------------------------------- MODULE Channel --------------------------------
EXTENDS Naturals
CONSTANT Data
VARIABLE chan

TypeInvariant == chan \in [val: Data, rdy: {0, 1}, ack: {0, 1}]
--------------------------------------------------------------------------------
Init ==
    /\ TypeInvariant
    /\ chan.ack = chan.rdy

Send(d) ==
    /\ chan.rdy = chan.ack
    /\ chan' = [chan EXCEPT !.val = d, !.rdy = 1 - @]

Rcv ==
    /\ chan.rdy /= chan.ack
    /\ chan' = [chan EXCEPT !.ack = 1 - @]

Next == (\E d \in Data: Send(d)) \/ Rcv

Spec == Init /\ [][Next]_chan
--------------------------------------------------------------------------------
THEOREM Spec => []TypeInvariant
================================================================================