【发布时间】:2019-05-22 17:14:54
【问题描述】:
我想看一些关于 Coq 形式证明的例子:
\exists A(x1,...,xn)
本质上,目标有一个存在量词。我在以有意义的方式操纵目标以在我的证明中取得进展时遇到问题,并希望看到一些常见操纵策略的示例。
Coq 中有哪些好的存在量词示例可以证明?
我的具体例子:
Theorem Big_Small_ForwardImpl :
forall (P : Program) (S' : State),
(BigStepR (B_PgmConf P) (B_StateConf S')) -> (ConfigEquivR (S_PgmConf P) (S_BlkConf EmptyBlk S')).
Proof.
intros.
induction P.
unfold ConfigEquivR.
refine (ex_intro _ _ _) .
我的背景和目标是:
1 subgoal
l : list string
s : Statement
S' : State
H : BigStepR (B_PgmConf (Pgm l s)) (B_StateConf S')
______________________________________(1/1)
exists N : nat, NSmallSteps N (S_PgmConf (Pgm l s)) (S_BlkConf EmptyBlk S')
但后来改为:
1 subgoal
l : list string
s : Statement
S' : State
H : BigStepR (B_PgmConf (Pgm l s)) (B_StateConf S')
______________________________________(1/1)
NSmallSteps ?Goal (S_PgmConf (Pgm l s)) (S_BlkConf EmptyBlk S')
在使用refine (ex_intro _ _ _) 策略之后。由于我不确定发生了什么,我希望一些更简单的示例可以向我展示如何在我的 Coq 目标中操纵存在量词。
有用的评论:
?Goal 是 Coq 引入的,作为一些 N 的占位符,稍后必须在证明中推导。
【问题讨论】:
-
?Goal是 Coq 引入的,作为一些N的占位符,稍后将在证明中推导出。使用eexists策略时,您可以看到相同的行为。 -
@JM.Gorius 老实说,我不知道一个人是怎么想出这样一个
N的,我认为首先寻找一个更简单的例子会比我实际的例子更容易工作中... -
@J-M.Gorius 谢谢!我不知道那是什么意思。
-
随着证明的进行,Coq 通常可以自动推断出
?Goal的值。您可以继续证明,好像?Goal是一个定义明确的值,让 Coq 在幕后做“脏活”。 -
@J-M.Gorius 也许这就是为什么我需要一个更简单的具体例子来解决这个问题。我现在无法想象我什至可以为目标做些什么......不确定是因为它是一个量词示例还是让我陷入困境......
标签: coq