Coq:展开棘手的符号

时间:2019-05-27 16:17:11

标签: coq

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

我有两种选择方法:通过unfold not或通过unfold "~"。 第二种方法显然更方便,因为不需要记住什么定义名称留在符号后面。

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

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_sub。有可能吗?

2 个答案:

答案 0 :(得分:1)

带有下划线,似乎很有效。

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

答案 1 :(得分:0)

很难说,没有可复制的例子,但是Ssreflect的展开应该起作用:

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