簡體   English   中英

在Coq中將nat轉換為Q.

[英]Conversion of nat to Q in Coq

如何在Coq中將nat轉換為Q(Rational)?

我希望能夠寫出這樣的東西:

Require Import Coq.QArith.QArith.
Open Scope Q_scope.

Definition a := 2/3.

當我嘗試這樣做時,Coq告訴我:

Error: The term "2" has type "nat" while it is expected to have type "Q".

你可以這樣寫:

Definition a := Z.of_nat 2 # Pos.of_nat 3.

#運算符只是Q類型的Qmake構造函數的表示法。 該構造函數將Zpositive元素作為參數,因此您需要強制轉換才能將nat放入其中。

如果您使用的是文字數字語法,您也可以直接使用Zpositive

Definition a := 2 # 3.

不同之處在於這個定義不會提到nat的轉換; 數字已經是正確的類型,因為Coq直接將數字符號解釋為Zpositive

我個人不太喜歡標准的Coq有理數字庫,因為它使用等價而不是Leibniz相等; 也就是說, Q 1 # 12 # 2元素相當於有理數,但根據Coq的相等性不相等:

Goal (1 # 1 <> 2 # 2).
congruence.
Qed.

有一個叫做setoid rewrite的功能,可以讓你假裝它們是平等的。 它的工作原理是只允許你重寫你證明與Q上的等價概念兼容的函數。 但是,仍然存在比萊布尼茨平等更難使用的情況。

您還可以嘗試使用Ssreflect和MathComp包的rat庫(請參閱此處的文檔)。 它有一個與萊布尼茨平等有效的理性定義,它比Coq更全面。

暫無
暫無

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

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