没有在 coq 中明确指定类型的实例

Not explicitly specifying instances of a type in coq

我有兴趣尝试使用 Coq 构建集合论。我想定义一个类型 sets 而不指定其成员是什么,以及一个将两个集合映射到 Prop

的函数

Definition elem (s1 s1 : sets) : Prop.

然后我会提出集合论假设的公理,并将定理表达为(例如)

Theorem : ZFC -> (forall s : sets, ~ elem s s).

但是,上面的语法不起作用。这个想法可以在 Coq 中实现吗?在 Coq 中有没有更好的方法来实现这个目标?我是 Coq 的新手,如果有明显的方法我不知道,我深表歉意。

你需要给定理命名。对于假设事物,请使用 ParameterAxiom(这在技术上意味着同一件事,但您可以用来非正式地区分概念和事实)。

Parameter set : Type.
Parameter elem : set -> set -> Prop.

Axiom set_extensionality : forall x y, (forall z, elem z x <-> elem z y) -> x = y.
(* etc. *)

相比之下,DefinitionTheorem用于定义和证明事物。假设了 ZFC 公理后,您可以证明集合不是其自身的元素。 Theorem命令先取一个定理名(以后用来指代):

Theorem no_self_elem : forall x, ~ elem x x.
Proof.
  (* tactics here. *)
Qed.