[英]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
構造函數的表示法。 該構造函數將Z
和positive
元素作為參數,因此您需要強制轉換才能將nat
放入其中。
如果您使用的是文字數字語法,您也可以直接使用Z
和positive
:
Definition a := 2 # 3.
不同之處在於這個定義不會提到nat
的轉換; 數字已經是正確的類型,因為Coq直接將數字符號解釋為Z
和positive
。
我個人不太喜歡標准的Coq有理數字庫,因為它使用等價而不是Leibniz相等; 也就是說, Q
1 # 1
和2 # 2
元素相當於有理數,但根據Coq的相等性不相等:
Goal (1 # 1 <> 2 # 2).
congruence.
Qed.
有一個叫做setoid rewrite的功能,可以讓你假裝它們是平等的。 它的工作原理是只允許你重寫你證明與Q
上的等價概念兼容的函數。 但是,仍然存在比萊布尼茨平等更難使用的情況。
您還可以嘗試使用Ssreflect和MathComp包的rat
庫(請參閱此處的文檔)。 它有一個與萊布尼茨平等有效的理性定義,它比Coq更全面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.