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/CompositeFIFO.tla
---
----------------------------- MODULE CompositeFIFO -----------------------------
EXTENDS Naturals, Sequences
CONSTANT Message
VARIABLES in, out
--------------------------------------------------------------------------------
InChan  == INSTANCE Channel WITH Data <- Message, chan <- in
OutChan == INSTANCE Channel WITH Data <- Message, chan <- out
--------------------------------------------------------------------------------
SenderInit == (in.rdy \in BOOLEAN ) /\ (in.val \in Message)
Sender ==
    SenderInit /\ [][\E msg \in Message : InChan!Send(msg)]_<< in.val, in.rdy >>
--------------------------------------------------------------------------------
------------------------------- MODULE InnerBuf --------------------------------
VARIABLE q
BufferInit ==
    /\ in.ack \in BOOLEAN
    /\ q = <<>>
    /\ (out.rdy \in BOOLEAN ) /\ (out.val \in Message)

BufRcv ==
    /\ InChan!Rcv
    /\ q' = Append(q, in.val)
    /\ UNCHANGED << out.val, out.rdy >>

BufSend ==
    /\ q /= <<>>
    /\ OutChan!Send(Head(q))
    /\ q' = Tail(q)
    /\ UNCHANGED in.ack

InnerBuffer ==
    BufferInit /\ [][BufRcv \/ BufSend]_<< in.ack, q, out.val, out.rdy >>
================================================================================
Buf(q) == INSTANCE InnerBuf
Buffer == \EE q : Buf(q)!InnerBuffer
--------------------------------------------------------------------------------
ReceiverInit == out.ack \in BOOLEAN
Receiver == ReceiverInit /\ [][OutChan!Rcv]_<< in.val, in.rdy >>
--------------------------------------------------------------------------------
IsChannel(c) == c = [ack |-> c.ack, val |-> c.val, rdy |-> c.rdy]
Spec ==
    /\ [](IsChannel(in) /\ IsChannel(out))
    /\ (in.ack = in.rdy) /\ (out.ack = out.rdy)
    /\ Sender /\ Buffer /\ Receiver
================================================================================