没有在 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 的新手,如果有明显的方法我不知道,我深表歉意。
你需要给定理命名。对于假设事物,请使用 Parameter
和 Axiom
(这在技术上意味着同一件事,但您可以用来非正式地区分概念和事实)。
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. *)
相比之下,Definition
和Theorem
用于定义和证明事物。假设了 ZFC 公理后,您可以证明集合不是其自身的元素。 Theorem
命令先取一个定理名(以后用来指代):
Theorem no_self_elem : forall x, ~ elem x x.
Proof.
(* tactics here. *)
Qed.
我有兴趣尝试使用 Coq 构建集合论。我想定义一个类型 sets
而不指定其成员是什么,以及一个将两个集合映射到 Prop
Definition elem (s1 s1 : sets) : Prop.
然后我会提出集合论假设的公理,并将定理表达为(例如)
Theorem : ZFC -> (forall s : sets, ~ elem s s).
但是,上面的语法不起作用。这个想法可以在 Coq 中实现吗?在 Coq 中有没有更好的方法来实现这个目标?我是 Coq 的新手,如果有明显的方法我不知道,我深表歉意。
你需要给定理命名。对于假设事物,请使用 Parameter
和 Axiom
(这在技术上意味着同一件事,但您可以用来非正式地区分概念和事实)。
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. *)
相比之下,Definition
和Theorem
用于定义和证明事物。假设了 ZFC 公理后,您可以证明集合不是其自身的元素。 Theorem
命令先取一个定理名(以后用来指代):
Theorem no_self_elem : forall x, ~ elem x x.
Proof.
(* tactics here. *)
Qed.