Coq:展开复杂的符号

Coq:展开复杂的符号,coq,Coq,假设我想使用展开策略将~X转换为X->False 我有两种方法:通过不展开或通过展开“~”。 第二种方法显然更方便,因为不需要记住符号后面的定义名称 但是,在更复杂的情况下,我还没有做到这一点: 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) (

假设我想使用
展开
策略将
~X
转换为
X->False

我有两种方法:通过
不展开
或通过
展开“~”
。 第二种方法显然更方便,因为不需要记住符号后面的定义名称

但是,在更复杂的情况下,我还没有做到这一点:

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).
我想在表达中展开它

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

不使用
assn\u sub
。有可能吗?

如果没有可复制的示例,很难说,但是Ssreflect的展开应该可以工作:

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

加上下划线,它似乎起作用了

unfold "_ [ _ |-> _ ]".
你能提供一份详细的报告吗?