OPERATOR GUIDE / TIME

Non-overlapping implication

Start the consequent one cycle after the antecedent.

|=>

Syntax at a glance

req |=> ack

How it works

Non-overlapping implication adds one clock cycle between a Boolean antecedent and the start of its consequent. In A |=> B, if A is true at cycle t, B starts at cycle t+1. This differs from overlapping implication, |->, which starts at t.

For req |=> ack, req = [0, 1, 0, 0] and ack = [0, 0, 1, 0] pass. The request at cycle 1 requires acknowledgement at cycle 2. An acknowledgement only in the request cycle does not meet the next-cycle obligation.

In the lab's Boolean-antecedent subset, req |=> ack and req |-> ##1 ack express the same behavior. Explicit delays add to that implicit shift: req |=> ##2 ack requires ack three cycles after req, not two. This off-by-one distinction is a common source of errors.

As with overlapping implication, a false antecedent creates no obligation. Extra ack pulses are allowed, and each sampled high req independently creates a next-cycle check. A request that remains high for several cycles therefore creates several obligations. Use an edge function when only transitions should trigger.

A request on the final trace cycle cannot satisfy a next-cycle obligation within that trace. The evaluator fails it and Studio warns about the unresolved reference behavior. The current grammar supports Boolean antecedents; it does not implement the additional timing rules needed for temporal sequences in the antecedent.

Examples describe AssertionQuest's sampled, binary educational subset. Properties are evaluated at every cycle; enter only the property body in the editor.
All operators & finite-trace semantics →