Rephrasing: Both the a and the c wire pair can be viewed as encoding one bit of data by a One-Hot code. When a bit is sent to the Latch via an a input, it stores (latches) this bit until b is received. Reception of b reproduces the bit via the corresponding c ouput.
Each pair of terminals (a_i, c_i) can be viewed as one passive 2-phase handshake port. A Latch synchronizes a handshake on one of its handshake ports with the b input.
Specification in Verdect:
define JOIN2X1( a0?, a1?, b?, c0!, c1! ) = pref *[ (a0? || b?); c0! | (a1? || b?); c1! ] endAlso available through this link
Specification in DI Algebra:
L = [ a0? -> [ a1? -> _|_ # b? -> c0!; L ] # a1? -> [ a0? -> _|_ # b? -> c1!; L ] ]Also available through this link
The roles of subscripts 0 and 1 can be interchanged
(on a and c simultaneously):
L(a_0, a_1, b; c_0, c_1) =
L(a_1, a_0, b; c_1, c_0)
No information available
No information available
It can be further generalized to an mxn-Decision-Wait, which awaits two choices, one between m inputs and the other between n inputs, and reports the combination as a choice among mn outputs. a Latch is a 2x1-Decision-Wait.
The Latch is sometimes also referred to as Decision-Wait ([Lucassen94]) or 2x1-Join.
Conjecture: A Latch cannot be implemented with only Forks, Joins, Merges, Toggles, and I-Wires.