Skip to content

Substitution in statement is incorrect. #1056

Description

@bgregoir
require import AllCore.

module S = {
  proc f(x:int) = { }

  proc g (x:int) = { return x;}
 
}.

lemma eager_f_sample y : eager [
  S.f(y);, S.g ~ S.g, S.f(y); :
    ={x} ==> ={res} ].
proof.
eager proc; inline *; swap{1} 1; sim.
qed.

lemma eager_f_sample' z : eager [
  S.f(z);, S.g ~ S.g, S.f(z); :
    ={x} ==> ={res} ].
proof.
apply (eager_f_sample z).
qed.

The problem come from the substitution, the forall use F_subst.bind_local to substitute "y" by "z", but it should also
bind using F_subst.bind_elocal.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions