struct Node {}
datatype Interface =
int(inf: Map<Node, FlowDom>,
dom: Set<Node>,
fm: Map<Node, Map<Node, FlowDom>>)
datatype FlowDom = fd(pc: Int);
pure predicate fdEq(p1: FlowDom, p2:FlowDom) { p1.pc == p2.pc }
procedure test(hd: Node, I: Interface)
requires (forall y: Node ::
!(y in dom(I)) ==> fdEq(I.fm[hd][y], fd(0)))
ensures (forall y: Node ::
!(y in dom(I)) ==> fdEq(I.fm[hd][y], fd(0)))
{}
Example that cannot be proven:
A term generator for
fdEq(..) -> known(fdEq(..))is automatically added (but why?), but it appears not to generate the needed known term.