在COQ中使用集合作为假设和目标

时间:2014-11-26 20:18:38

标签: coq

如何完成以下证明?

1 subgoals
IHt1 : {t' : some_type | something_using t'}
IHt2 : {t' : some_type | something_else_using t'}
______________________________________(1/1)
{t' : some_type | another_thing_involving t'}

我明白{x|P x}符号是sig定义的简写,但我真的无法理解如何使用它。

1 个答案:

答案 0 :(得分:2)

{x : D | P x}直观地说是包含满足谓词D的元素的域P的子集。作为一个命题,如果该子集是非空的,即x0中有证人DP x0为真,则确实如此。

{x : D | P x}类型的对象是包含元素x0 : DP x0证明的对。当您查看{x : D | P x}的定义时,这是可见的,sig (fun x:D => P x)Inductive sig (D:Type) (P:D -> Prop) : Type := exist : forall x:D, P x -> sig P.

的语法糖
D

构造函数的类型是依赖对类型;该对的第一个元素具有类型P x,第二个元素具有x类型,其中{x : D | P x}是第一个元素。

要使用destruct形式的假设,最基本的方法是使用x0 : D策略将其分解为两个组成部分:证人H : P x0和证明destruct IHt1. 1 subgoals t' : some_type H : something_using t' IHt2 : {t'0 : some_type | something_else_using t'0} ______________________________________(1/1) {t'0 : some_type | another_thing_involving t'0}

{x : D | P x}

为了证明exist形式的目标,最基本的是使用exists u. ⋮ ______________________________________(1/1) another_thing_involving u 策略来介绍预期的见证。这留下了一个子目标,证明证人具有所需的财产。

{{1}}