The following should verify, but fails. If t is changed to "int", it does verify. This seems to have something to do with the treatment of :| for non-primitive types like seq<int>.
```
type t = seq<int>
predicate P(x:t)
function F(x:t) : int
function C() : int { assume (exists x :: P(x)); var x :| P(x); F(x) }
lemma L(x:t)
{
assume P(x);
assume forall y :: P(y) ==> y == x;
assert F(x) == C(); // FAILS
}
```
```
type t = seq<int>
predicate P(x:t)
function F(x:t) : int
function C() : int { assume (exists x :: P(x)); var x :| P(x); F(x) }
lemma L(x:t)
{
assume P(x);
assume forall y :: P(y) ==> y == x;
assert F(x) == C(); // FAILS
}
```