type C _;
const p: []a;
const q: [a, a]a;
const r: [](C a);
const x: C int;
const y: C bool;
axiom (p[][:= 5][:= true] == p);
axiom (p[][:= 5][:= true] == r); // error
axiom (p[][:= x][:= y] == p);
axiom (p[][:= x][:= y] == r);
axiom (p[][:= x][:= 5] == r); // error
axiom (p[][:= x][:= y] == p[][:= 5][:= true]);
axiom (q[p[][:= x][:= y], p[][:= 5][:= true]] == p);
axiom (q[p[], p[]][:= 5][:= true] == p);
axiom (exists x:a :: p[][:= 5][:= true] == x);
axiom (exists x:a, y:b :: p[][:= 5][:= true] == q[x,y]); // error
axiom (exists x:a, y:b :: q[x, x] == q[y, y]);