添加不在当前假设中的假设

时间:2013-01-08 06:21:06

标签: coq

我有证据,在我的假设中我有:

...
l0 : list
         (list (ATrs.rule (Sig a)) * boolean * option (list positiveInteger) *
          option cpf.dpProof)
H: forall
         x : list (ATrs.rule (Sig a)) * bool * option (list positiveInteger) *
             option cpf.dpProof,
       In x l0 ->
       (let (p, o) := x in
        let (p0, _) := p in
        let (dps, b) := p0 in
        if b
        then
         match o with
         | Some pi => bool_of_result (dpProof n R dps pi)
         | None => false
         end
        else co_scc (dpg_unif_N 100 R D) dps) = true
 ci : list (ATrs.rule (Sig a))
 Hin : In ci l1
===========================
....

我坚持使用打破假设H的技术。如果我有参数x:list (ATrs.rule (Sig a)) * bool * option (list positiveInteger) * option cpf.dpProof和假设Hx: In x l0,那么我可以使用策略:ded (H x Hx)来获取(let (p, ...)的{​​{1}}部分。

因此,在这种情况下,我无法使用H,因为ded (H ci Hin)的类型与ci中的x不同。

我想知道如何添加我想要的假设(Hx)?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

好吧,除非您的上下文包含有关l0的更多信息,否则您永远无法从H推断出任何内容,因为其中一个参数的某些In x l0类型x 1}}。

如果l0在您的上下文和目标中完全不受约束,它实际上可以是任意类型的任意列表,因此您无法伪造In x l0类型的内容因此无法使用H

也许你在某个方面存在矛盾,或者是另一种攻击这种证据的方法。