我为正在验证此表单的编译器定义了几种归纳类型
Inductive types := Int | Char | Symbol | Bool.
Inductive val : types -> Type :=
| T : val Bool
| F : val Bool
| Num : nat -> val Int
...
Inductive exp : types -> Type :=
| If : forall {t}, val Bool -> exp t -> exp t -> exp t
etc...
现在这很好并且简化了许多事情,直到我尝试证明一些定理,例如
Theorem example : forall t test (b1 b2 : exp t),
eval (If test b1 b2) = eval b1
\/ eval (If test b1 b2) = eval b2.
现在我想进行简单的案例分析,destruct test
因为只有 2 个案例,T
并F
考虑。但是如果我尝试这样做,我会收到一个错误,通知我该destruct
策略会生成错误类型的术语。它确实如此。
是否有任何类似的策略destruct
可以让我对输入正确的术语进行案例分析并自动发送那些输入错误的术语?我怀疑这是不可能的,在这种情况下,处理此类证明的正确方法是什么?