0
votes

Suppose I want to convert ~X to X -> False using unfold tactic.

I have two options how to do it: either by unfold not or by unfold "~". The second way is apparently more convenient since there is no need to remember what definition name stays behind the notation.

However I haven't managed to do it in more complex cases:

Definition assn_sub X a P : Assertion :=
  fun (st : state) =>
    P (X !-> aeval st a ; st).

Notation "P [ X |-> a ]" := (assn_sub X a P)
  (at level 10, X at next level).

and I want to unfold it in expression

((fun st0 : state => st0 Y = st0 X + st0 Z) [Z |-> Y - X]) st

without using assn_sub. Is it possible?

2

2 Answers

1
votes

With underscores, it seems to work.

unfold "_ [ _ |-> _ ]".
0
votes

Hard to say without a reproducible example, but Ssreflect's unfold should work:

rewrite /(_[_|->_]).