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 "_ [ _ |-> _ ]".
你能提供一份详细的报告吗?