Evaluation of following Embedded Concurrent assertion

Hi Forum,

I am trying an example of embedded concurrent assertion within an initial block ( edalink )

As per my expectation both wait statements unblock at T:15 units.

However I observe that ‘ap2’ is evaluated at T:15 units whereas ‘ap1’ is evaluated at next clock edge at T:25 units ( my expectation was both would get evaluated at T:15 units )

I have a few questions

(Q1) wait( seq.triggered ) would unblock via loopback from Observed to Active region whereas wait( $rose(a,@(posedge clk)) ) would unblock via loopback from Active to Active

Within the same time step, would the loopback from Active to Active occur before

loopback from Observed to Active ?

If yes, we should observe wait unblocks in I2 before wait unblocks in I1 right ?

(Q2) Why is that ‘ap1’ evaluated at T:25 whereas ‘ap2’ is evaluated at T:15 ? ( given that both wait statements unblock at T:15 )

Section 16.14.6 of LRM mentions ::

Unlike an immediate assertion, a procedural concurrent assertion is not immediately evaluated when reached in procedural code.
Instead, the assertion and the current values of all constant and automatic expressions appearing in its assertion arguments (see 16.14.6.1)
are placed in a procedural assertion queue associated with the currently executing process

In the Observed region of each simulation time step, each pending procedural assertion instance that is currently present in a procedural assertion queue 
shall mature, which means it is confirmed for execution.
When a pending procedural assertion instance matures, if the current time step is one that corresponds to that assertion instance’s leading clocking event,
an evaluation attempt of the assertion begins immediately within the Observed region.

(Q3) seq.triggered would return 1’b1 in Observed region at T:15 causing wait to unblock.

(a) When would ‘ap1’ be placed within procedural assertion queue associated with I1 ?

Would it be at T:15 or T: 25 ?

(b) Are procedural concurrent assertion placed within assertion queue prior to Observed Region or can they be placed in Observed region as well ( causing them to mature in Observed region of the next clocking event ) ?

(Q4) As per LRM System tasks ( Eg: $display ) when called on an non-empty match of a sequence execute in Reactive region.

Within the same time step, would the loopback from Observed to Active occur before

Reactive region executes ?

If yes, at T:15 shouldn’t we observe wait unblocks in I1 before I2 Matched ?

Thanks