簡體   English   中英

Coq中的坐標

[英]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)%typelist Rt 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.

PropSetType是排序,這意味着可以歸納地定義Prop類型的東西。

例如,對於natle定義為

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對RplusRlt的定義實際上是公理。 要檢查某物的定義,請使用“ Print命令。

要回答B部分,我想這取決於您對數學分析的理解程度以及定義實數的各種方式。 如果您更熟悉數值方法,則可能需要使用有理數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM