【发布时间】:2013-12-31 12:18:42
【问题描述】:
在尝试对函数的结果(返回归纳类型)进行案例分析时,我在 Coq 中遇到了一些麻烦。当使用常用策略时,如elim、induction、destroy 等,信息会丢失。
我举个例子:
我们首先有一个这样的函数:
Definition f(n:nat): bool := (* definition *)
现在,假设我们正处于证明特定定理的这一步:
n: nat
H: f n = other_stuff
------
P (f n )
当我应用一种策略时,比如induction (f n),就会发生这种情况:
Subgoal 1
n:nat
H: true = other_stuff
------
P true
Subgoal 2
n:nat
H: false = other_stuff
------
P false
但是,我想要的是这样的:
Subgoal 1
n:nat
H: true = other_stuff
H1: f n = true
------
P true
Subgoal 2
n:nat
H: false = other_stuff
H1: f n = false
------
P false
实际上,我丢失了信息,特别是丢失了有关f n 的任何信息。在我处理的问题中,我需要使用f n = true 或f n = false 的信息,用于其他假设等。
有没有办法做第二个选项?
我尝试使用cut(f n = false \/ f n = true) 之类的东西,但它变得非常烦人,特别是当我连续有几个这样的“特殊”感应时。我想知道是否有一些基本上与上面的cut 完全一样的东西,但策略/证明更少
【问题讨论】: