Parallel programs are best understood from different perspectives. Ave gives the user the ability to transform the match tree by a mechanism similar to set comprehension that is available in functional languages like Haskell []. This allows the user to check whether the same set of events satisfy a number of constraints, and gain more confidence about their modeling. All functions in Ariadne walks the same match tree, and so it is quite easy for the user to build new functional queries. All that is needed is the definition of the function that Ariadne should perform while it walks the tree. The user can also extend the event vocabulary of Ariadne at run time, and expresss behavior composed of the newly defined events.
Ave/Ariadne is an event-based abstraction based approach for program debugging. However as revealed in the last example, sometimes tracking an error may involve accumulating local state information as well. Currently this requires re-instrumentation of the program to collect the local state information as attributes to our events which is clearly unacceptable. We are currently investigating an integrated approach of debugging, that collects a minimal state information during execution, which will help the users to refine their event-based behavioral description in an incremental fashion by adding state attributes to track down bugs.