如何在coq中定义仿射集

如何在coq中定义仿射集,coq,Coq,最终,我试图用我的方法在R^n中定义一个仿射集。但首先我试着用QxQ中的点和Q中的系数。 我想把C定义为QxQ的一个子集,如果对于C中的任何x,y和Q中的t,tx+(1-t)y在C中 我读了我认为有用的答案,但我需要更像C={x | x=t1*x1+t2*x2的东西,其中x1,x2在C/\t1+t2=1}中 A={x | f(x)=0}你所拥有的和你的链接问题之间的区别在于你没有定义一个单独的子集。相反,通常应该定义子集,然后引入谓词来确定给定子集是否仿射 让我们从你想要的定义开始 我想把C定义

最终,我试图用我的方法在R^n中定义一个仿射集。但首先我试着用QxQ中的点和Q中的系数。 我想把C定义为QxQ的一个子集,如果对于C中的任何x,y和Q中的t,tx+(1-t)y在C中


我读了我认为有用的答案,但我需要更像C={x | x=t1*x1+t2*x2的东西,其中x1,x2在C/\t1+t2=1}中

A={x | f(x)=0}你所拥有的和你的链接问题之间的区别在于你没有定义一个单独的子集。相反,通常应该定义子集,然后引入谓词来确定给定子集是否仿射

让我们从你想要的定义开始

我想把C定义为QxQ的一个子集,如果对于C中的任何x,y和Q中的t,tx+(1-t)y在C中

因此,我们应该得到一个子集
C
,并说(非正式地说)
isafine C:=forall(xy:C)(t:Q),t*x+(1-t)*y:C
。虽然它使用了一些集合论惯例,但它非常接近形式。主要的一点是,我们没有证明一个给定的元素在一个给定的类型中:无论何时定义它,该元素都有一个固定的类型

实际上,我们在这里要说的是,我们对
R^n
元素在子集
C
中的含义有了一些概念。事实上,这是一个非常好的子集定义:
子集R^n:=R^n->Prop
,也就是说,子集是一个函数,它接受一个点并返回一个命题,这个命题可能是真的,也可能不是真的,这取决于该点是否在子集中。这类似于集合论中集合
X
的动力集
2^X
,除了我们使用
Prop
而不是
2

然后,为了量化子集
C:R^n->Prop
的所有元素,我们对所有x:R^n,cx->…执行类似的操作,可以将其理解为“对于R^n中的所有x,如果x在C中,那么…”

下面是我将如何形式化您想要的内容(给定
Q
的定义以及标量乘法和向量加法的定义)


你所拥有的和你用
A={x | f(x)=0}
链接的问题之间的区别在于你没有定义一个子集。相反,通常应该定义子集,然后引入谓词来确定给定子集是否仿射

让我们从你想要的定义开始

我想把C定义为QxQ的一个子集,如果对于C中的任何x,y和Q中的t,tx+(1-t)y在C中

因此,我们应该得到一个子集
C
,并说(非正式地说)
isafine C:=forall(xy:C)(t:Q),t*x+(1-t)*y:C
。虽然它使用了一些集合论惯例,但它非常接近形式。主要的一点是,我们没有证明一个给定的元素在一个给定的类型中:无论何时定义它,该元素都有一个固定的类型

实际上,我们在这里要说的是,我们对
R^n
元素在子集
C
中的含义有了一些概念。事实上,这是一个非常好的子集定义:
子集R^n:=R^n->Prop
,也就是说,子集是一个函数,它接受一个点并返回一个命题,这个命题可能是真的,也可能不是真的,这取决于该点是否在子集中。这类似于集合论中集合
X
的动力集
2^X
,除了我们使用
Prop
而不是
2

然后,为了量化子集
C:R^n->Prop
的所有元素,我们对所有x:R^n,cx->…执行类似的操作,可以将其理解为“对于R^n中的所有x,如果x在C中,那么…”

下面是我将如何形式化您想要的内容(给定
Q
的定义以及标量乘法和向量加法的定义)

你是说“凸集”吗?你是说“凸集”吗?
Definition Subsets (A: Type) := A -> Prop.

Definition IsAffine (C: Subsets (Q * Q)) :=
  forall (x y: Q * Q), C x -> C y -> forall t: Q, C (t * x + (1 - t) * y).