[英]Coordinates in Coq
如果這顯然是張貼在某處,我深表歉意,但是我一直在嘗試Google搜索和SO搜索,但尚未找到任何內容。
A部分
是否存在用於定義Coq中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
或者其他的東西?
B部分
這是個好主意嗎? 我想建立一種使用實數計算某些事物的算法,並證明該算法在Coq中是正確的。 Coq.Reals.Reals是正確使用的東西,還是真的太抽象?
除了定義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
類型的東西。
例如,對於nat
, 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))
居住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部分,我想這取決於您對數學分析的理解程度以及定義實數的各種方式。 如果您更熟悉數值方法,則可能需要使用有理數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.