geometry - 如何在 Coq 中将直线公理定义为两点
问题描述
我试图在Coq中找到一个类似于几何中的线公理的示例公理:如果给定两个点,那么在这两个点之间存在一条线。我想看看如何在 Coq 中定义它。固有地选择这个简单的直线公理来查看非常原始的东西是如何定义的,因为我很难在自然语言之外定义它。
具体来说,我已经看到了这两个公理,并且想知道在 Coq 中如何定义这两个公理:
- 任何两个不同的点总是确定一条线
- 一条线的任意两个不同点唯一地确定这条线
似乎您可以将它们合并到一个定义中,所以我想从语法和语义上了解如何在 Coq 中编写它。
我真的不知道如何编写 Coq,只是想看看他们是如何做到的。但是,如果我要尝试,它似乎是这样的:
Axiom line : forall ptA:Point ptB:Point, line ptA ptB.
但这需要一个 Line 和一个 Point 对象。
Axiom line : forall ptA ptB, line ptA ptB.
Definition Line ptA ptB -> (...) No idea.
Definition Point ...
解决方案
这是一种可能性。连接词exists!
意味着独特的存在。
Axiom point : Type.
Axiom line : Type.
Axiom lies_in : point -> line -> Prop.
Axiom ax : forall (p1 p2 : point), p1 <> p2 ->
exists! l : line, lies_in p1 l /\ lies_in p2 l.
推荐阅读
- spotfire - 我无法在节点管理器(Spotfire Server 7.11.2)上安装 Web Player 和 AutomationServices
- r - 如何将属性列表转换为表格?
- jquery - 如何在我的 html 中包含我的 header.html?
- c# - 如何以 c# windows 形式将剪贴板数据粘贴到另一个应用程序
- python - 理解 jinja2.Packageloader()
- c# - 减少编译为 Wasm 的 .NET 占用空间
- javascript - 如何将数据推送到空二维数组中的特定子数组
- ddev - ddev 权限问题 - 无法停止、rm 或终止项目
- javascript - 如何捕捉 XMLHttpRequest 的 onload 方法中抛出的错误
- scala - 在scala中访问请求的GRPC上下文