1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
const a, b:int; const c:int extends a, b; procedure P() returns () { var x:int; assert c <: a; assume c <: x && x <: a; assert x == c || a == x; assert x == b; // should not be provable } procedure Q() returns () { assume b <: a; assert b == a; }