Refinement: The program never terminates with an artist registered.
Pattern: Absence
Scope: Global (P
is false
globally.)
Template:
(defquery "global_absence_of_p" "nofair" (omega-star-less (sequence (interval :initial t :ends-with '("P")))))
Predicates:
P = (rendezvous "artist_manager;a1.terminate_artist-end") (rendezvous "artist_manager;a2.terminate_artist-end")
Modifications: Added constraint which says that the sum of all unregister events is strictly less than the sum of all register events. By Property 1, this means that some artist is still registered.
INCA Query:
(defquery "p09a" "nofair" (omega-star-less (sequence (interval :initial t :ends-with '( (rendezvous "artist_manager;a1.terminate_artist-end") (rendezvous "artist_manager;a2.terminate_artist-end")) :constraints '( (<= (+ "accept(a1;dispatcher.unregister_event;art1;e1)" "accept(a1;dispatcher.unregister_event;art1;e2)" "accept(a2;dispatcher.unregister_event;art2;e1)" 1) (+ "accept(a1;dispatcher.register_event;art1;e1)" "accept(a1;dispatcher.register_event;art1;e2)" "accept(a2;dispatcher.register_event;art2;e1)")))))))
Up to Property 9: All artists unregister before termination
Back to Property 8: INCA