我很抱歉,如果这显然是张贴在某处,但我一直在尝试谷歌搜索,所以搜索,但没有发现这一点。
Part A.
在R^2和R^3中是否有定义坐标/矢量和点的标准库?我很想做一些标准的事情,比如添加向量,交叉产品,缩放等等。
如果没有,这是怎么开始的:
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).还有,为什么我跑的时候:
Eval compute in ((2%R) < (3%R))%R.我能不能
= (2 < 3)%R
: Prop而不是
True或者别的什么?
Part B.
这是个好主意吗?我想建立一个用实数计算某些事物的算法,并在Coq中证明该算法的正确性。Coq.Reals.Reals是应该使用的东西,还是真的太抽象了?
发布于 2013-11-06 14:12:52
除了定义Coordinate2之外,您还可以使用(R * R)%type、list R或t R 2,其中在Vector中定义的t A n是大小n的列表。
您可能需要给您的符号一个范围和一个分隔键,以避免与其他符号发生冲突。
Notation "x + y" := (R2plus x y) : r2_scope.
Delimit Scope r2_scope with R2.
Eval compute in ((Point2 0 1) + (Point2 2 3))%R2.Prop、Set和Type是几种类型,这意味着可以归纳地定义Prop类型的东西。
例如,对于nats,le被定义为
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,例如,
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对Rplus和Rlt的定义实际上是公理。要检查某物的定义,请使用Print命令。
要回答B部分,我想这取决于你对数学分析的理解程度,以及定义数学分析的各种方法。如果你对数值方法比较熟悉,你可能会想用理性主义代替。
https://stackoverflow.com/questions/19798413
复制相似问题