首页
学习
活动
专区
圈层
工具
发布

Coq坐标
EN

Stack Overflow用户
提问于 2013-11-05 20:34:47
回答 1查看 140关注 0票数 1

我很抱歉,如果这显然是张贴在某处,但我一直在尝试谷歌搜索,所以搜索,但没有发现这一点。

Part A.

在R^2和R^3中是否有定义坐标/矢量和点的标准库?我很想做一些标准的事情,比如添加向量,交叉产品,缩放等等。

如果没有,这是怎么开始的:

代码语言:javascript
复制
Require Import Coq.Reals.Reals.

Inductive Coordinate2 : Type := Point2: R -> R -> Coordinate2.

Definition R2plus (u:Coordinate2) (v:Coordinate2) : Coordinate2 :=
match u, v with
 | (Point2 ux uy),(Point2 vx vy)=>(Point2 ((ux+vx)%R) ((uy+vy)%R))
end.  

(* etc. *)

Notation "x + y" := (R2plus x y).

还有,为什么我跑的时候:

代码语言:javascript
复制
Eval compute in ((2%R) < (3%R))%R.

我能不能

代码语言:javascript
复制
= (2 < 3)%R
: Prop

而不是

代码语言:javascript
复制
 True

或者别的什么?

Part B.

这是个好主意吗?我想建立一个用实数计算某些事物的算法,并在Coq中证明该算法的正确性。Coq.Reals.Reals是应该使用的东西,还是真的太抽象了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-06 14:12:52

除了定义Coordinate2之外,您还可以使用(R * R)%typelist Rt R 2,其中在Vector中定义的t A n是大小n的列表。

您可能需要给您的符号一个范围和一个分隔键,以避免与其他符号发生冲突。

代码语言:javascript
复制
Notation "x + y" := (R2plus x y) : r2_scope.
Delimit Scope r2_scope with R2.
Eval compute in ((Point2 0 1) + (Point2 2 3))%R2.

PropSetType是几种类型,这意味着可以归纳地定义Prop类型的东西。

例如,对于nats,le被定义为

代码语言:javascript
复制
Inductive le : nat -> nat -> Prop :=
  | le_n : forall n, le n n
  | le_S : forall n m : nat, le n m -> le n (S m).
  • 2 <= 2是真的,因为它有le_n 2居住
  • 2 <= 3是真的,因为它有le_S 2 2 (le_n 2)居住
  • 2 <= 4是真的,因为它有le_S 2 3 (le_S 2 2 (le_n 2))居住
  • 3 <= 2是假的,因为它没有人居住

要使2 <= 3还原为True,必须定义le,例如,

代码语言:javascript
复制
Fixpoint le (n m : nat) : Prop :=
  match n with
  | 0 => True
  | S n =>
    match m with
    | 0 => False
    | S m => le n m
    end
  end.

Coq对RplusRlt的定义实际上是公理。要检查某物的定义,请使用Print命令。

要回答B部分,我想这取决于你对数学分析的理解程度,以及定义数学分析的各种方法。如果你对数值方法比较熟悉,你可能会想用理性主义代替。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19798413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档