Luca Franceschini
VORTEX 2019
18 July 2019, London, UK
Goals:
iterator matches { name: 'iterator' };
hasNext(res) matches { name: 'hasNext', result: res };
next matches { name: 'next' };
Main = empty ∨ iterator (hasNext(true) next)* hasNext(false);
Event domain: method calls
iterator(id) matches { name: 'iterator', resultId: id };
hasNext(id, res) matches { name: 'hasNext', result: res, targetId: id };
next(id) matches { name: 'next', targetId: id };
Main = empty ∨ { let id;
iterator(id)
(hasNext(id, true) next(id))*
hasNext(id, false)
};
Event domain: method calls
iterator(id) matches { name: 'iterator', resultId: id };
hasNext(id, res) matches { name: 'hasNext', result: res, targetId: id };
next(id) matches { name: 'next', targetId: id };
Main = empty ∨ { let id; iterator(id)
(Main | (hasNext(id, true) next(id))* hasNext(id, false))
};
Event domain: method calls
// event types push(val), pop(val), size(s) to be defined
Stack<s> = size(s)* { let val;
push(val) Stack<s+1> pop(val) Stack<s>
}?;
Main = Stack<0>;
// event types enq(val), deq and deq(val) to be defined
Main = { let val;
enq(val)
((deq | Main ) ∧ ( deq ≫ deq(val) all))
}?;
Context-sensitive property!
4-value logic for the verdict (RV-LTL, Bauer et al.):