require import List.
module M = {
var r : int option
proc hd(xs : int list) = {
r <- match r with | None => None | Some _ => None end;
match xs with
| [] => { }
| x :: xs => r <- Some x;
end;
return r;
}
}.
hoare toto &m y ys:
M.hd: arg = y :: ys ==> res = Some y.
proof.
proc. sp.
match. (* Fails with "anomaly: EcLib.EcCoreGoal.InvalidGoalShape" *)
MFE