// 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" procedure P() returns () { assume (forall m : [t]bool :: // uses "infinitely many" map types (forall x : t :: m[x] == false)); } procedure Q() returns () { var h : [int] bool; assume (forall m : [t]bool, x : t :: m[x] == false); assert !h[42]; assert false; // should really be provable } procedure R() returns () { var h : [int] bool; assume (forall m : [t]bool, x : t :: m[x] == false); assert !h[42]; assert !h[42 := true][42]; assert false; // wow }