代码之家  ›  专栏  ›  技术社区  ›  Farley Knight

如何证明(对于所有x,p x/\q x)->(对于所有x,p x)【在coq中】

  •  4
  • Farley Knight  · 技术社区  · 15 年前

    如何证明(对于所有x,p x/\q x)->(对于所有x,p x)在coq中?已经试了几个小时了,但还没弄清楚如何将前因分解成可乐可以消化的东西。(显然我是个新手。)

    4 回复  |  直到 14 年前
        1
  •  4
  •   tonfa    14 年前

    只需应用h就可以更快地完成,但是这个脚本 应该更清楚。

    Lemma foo : forall (A:Type) (P Q: A-> Prop), (forall x, P x /\ Q x) -> (forall x, P x).
    intros.
    destruct (H x). 
    exact H0.
    Qed.
    
        2
  •  2
  •   starblue    15 年前

    尝试

    elim (H x).
    
        3
  •  2
  •   Farley Knight    15 年前

    事实上,当我发现这个的时候我发现了这个:

    Mathematics for Computer Scientists 2

    在第5课中,他解决了完全相同的问题,并使用“cut(p x/\q x)”,将目标从“p x”重新写入“p x/\q x->p x”。从那里你可以做一些操作,当目标仅仅是“p x/\q x”时,你可以应用“for all x:p x/\q x”,剩下的就很简单了。

        4
  •  2
  •   Henri    14 年前
    Assume ForAll x: P(x) /\ Q(x)
       var x; 
          P(x) //because you assumed it earlier
       ForAll x: P(x)
    (ForAll x: P(x) /\ Q(x)) => (ForAll x: P(x))
    

    直觉上,如果所有X,P(X)和Q(X)保持不变,那么所有X,P(X)保持不变。