Hi Rob,
I basically agree with your analysis, though I suggest a slightly different solution.
Unlike many AI systems where each event is associated with a time interval for its occurrence, in NARS the time attribute of an event E is a point (or processing cycle, to be accurate) where its truth-value is evaluated. When there is no other information, this truth-value can be projected to nearby moments, without an explicit indication of the interval in which E occurs.
Therefore, a compound event (E, F) should be understood as "E is evaluated as happening, then F is evaluated as happening" with an unspecified time interval between these two moments. It does not say that E ends before F starts, as you pointed out. However, this type of compound can be used to indicate the boundary of an event, as
(--E, E) indicates the event when E isn't the case (using "--" for negation), then it is, which is a way to indicate its beginning. Similarly, the end of E can be represented as (E, --E).
Operation ^op(arguments) is a special type of event, in that (1) it is directly realizable by the system itself, and (2) its time attribute indicates its starting point, i.e., then the operation is invoked. On the other hand, its ending is an ordinary event observed by the system. Using the above idea, it can be represented as (^op(arguments),
--^op(arguments)). Therefore, to stress that the second operation cannot start until the first one ends, it is
(^op1(arg1),
--^op1(arg1)
, ^op2(arg2)). In your example, it will be
<(Aevent, ^op, --^op) =/> G0>, roughly speaking. Please note this is not always needed even if the operation takes multiple cycles, because
=/> also corresponds to an unspecified time interval, not exactly the next cycle.
In summary, I agree that it is sometimes (though not always) necessary to indicate the ending of an operation (or an event in general), though I don't think it is a good idea to introduce special terms for that purpose. We can try both approaches to see which one works better.
Regards,
Pei