I understand that you are promoting your book, but anyway…
P.S. I already have your book, but still don’t understand how this may happen… If the first expression is evaluated to TRUE, how the second one might be also TRUE???
In reply to ldm_as:
I you read my book and you still fail to understand this, then my book failed you;
try another book or do Google searched on SystemVerilog assertions; there is lot of free material.
assert property (@(posedge clk) (sig==1));
// sig==1 is a sequence that is a property the way it applied.
// At every clocking event , if sig==1, the assertion is a success, else a failure
assert property (@(posedge clk) (sig==1) |-> 2==3);
// if sig==0, the assertion is vacuously true, meaning not of interest
// if sig==1, then in the same cycle (because of the |->) 2==3) the 1st term of the
// consequent sequence is evaluated. Since 2==3 is false, the assertion is false.
// Thus, this assertion is either vacuously true or is false (a failure).