Runtime Monitoring Language

A system agnostic domain specific language for runtime monitoring and verification

Follow me on GitHub

Solution

// set2: single set with add, delete and size

not_add_true_del(el) not matches add(el,true) | del(el,_);

// event types needed for the approach 'by decomposition' 
add(res) matches add(_,res); 
del(res) matches del(_,res); 
not_size not matches size(_);

Main = ((not_size>>Set)/\Size<0>)!;
Set = del(false)* {let el; add(el,true) ((Set | add(el,false)* del(el,true)) /\ not_add_true_del(el)* del(el,true) all)}?;
Size<s> = ((size(s)\/add(false)\/del(false))Size<s>\/add(true)Size<s+1>\/del(true)Size<s-1>)?;