I wanted to clarify my understanding of this assertions working. According to me if g1_g3 passes next g3_g4 at the same clk edge will be checked and so on. If g3_g4 fails then assertion will throw an error. Will it attempt to check again or compiler exits?
Implication works each time there is a match on the antecedent(LHS), it proceeds to check the consequent (RHS). The antecedent checks every clock cycle. The consequent only checks on the same cycle as a match for |->, and on the next cycle for |=>.