// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t" // RUN: %diff "%s.n.expect" "%t" // RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t" // RUN: %diff "%s.p.expect" "%t" // RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t" // RUN: %diff "%s.a.expect" "%t" // different map type classes with the same arity const c : [int] bool; const d : [ref] bool; const e : [a] bool; const f : [a] a; axiom (c[17] ==> c[19]); axiom (forall x:t :: e[x]); axiom (!d[null]); axiom (forall x:t :: f[x] == x); procedure P() returns () { var x : [a] bool; assume !c[19]; assert !c[17]; x := e; x[true] := false; x[17] := true; assert !x[true]; assert !(forall y:t :: x[y]); assert x != e; assert f[x] == x; assert f[17] > 17; // should not be provable } type ref; const null : ref;