【发布时间】:2020-09-29 20:18:21
【问题描述】:
例如,我在我的上下文中有这个假设:
Heq: (a =? b) &&
(c =? d) &&
(e =? f) = true
我想改成这样:
Heq: (a = b) /\
(c = d) /\
(e = f)
我看过这个帖子
coq tactic for replacing bools with Prop
但使用这些策略对我来说并不是很简单,因为在我的上下文中的表达式中没有Is_true。
编辑:
Heq 是通过添加 = true 来修改的,因为我第一次从上下文中读取它时出错了。
【问题讨论】:
-
如果您在文件中启用
Set Printing Coercions.,您的目标会改变吗? -
不,它不会改变。
-
我要做的是最终
destruct Heq as (HeqA & HeqB & HeqC)来证明a = b、c = d和e = f三个子目标。应该没那么复杂吧?问题是我无法使用当前 bool 类型的格式来破坏Heq。 -
奇怪的是它没有改变,因为你不能直接断言一个假设的类型为
bool。您提到的Is_true函数在某些 Coq 库中被声明为强制转换,这导致 Coq 在需要将布尔值转换为命题时使用它。默认情况下不显示这些强制,我提到的选项应该显示它们。如果没有强制,假设就不会进行类型检查... -
这可能与
Heq加载到上下文中的方式有关吗?我正在展开一个具有if (a =? b) && (c =? d) && (e =? f) then ... else ...表达式的函数,而这个Heq来自于破坏if,如destruct ((a =? b) && (c =? d) && (e =? f)) eqn:Heq.
标签: coq proof coq-tactic formal-verification