A Library for Rational Numbers (QArith)
License
coq-contribs/qarith
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A Library for Rational Numbers (QArith) P. Letouzey This contribution is a proposition for what could become a QArith Standard Library. The need for such a QArith Standard Library seems clear from the number of users contribution dealing with Rationals. There are at least: Rocq/RATIONAL Nijmegen/QArith Nijmegen/C-CoRN/model/field/Fraction_Rat.v and probably more. The present contribution is based on C-CoRN (former FTA) file, enhanced via the use of Coq's tools for Setoids. In particular, it inherits its definition of Q datatype: Record Q : Set := Qmake { Qnum: Z; Qden: positive }. The immediate problem with this representation is the lack of canonicity. In particular, from the Coq point of view, 1/2 <> 2/4. In Rocq/RATIONAL, this issue is addressed via a quotient type. In Nijmegen/QArith, another representation is chosen, that fulfill the canonicity. The third way we propose is to stick to the simple original definition, and to define a setoid equality predicate over Q. Two reasons for this third way: - Coq has now tools to deal with Setoid equalities, Setoid Rewrite and Setoid Replace. There is even a Setoid Ring adapation of the Ring tactic (see file Qring.v) - This simple representation allows a relatively small library, and at the same time gives relatively efficient extracted functions. On the contrary, the Nijmegen/QArith clever data-representation seems to have as drawback slow operations (Qplus is done via decoding to nat numbers, adding in nat, and then recoding, is that correct ?) THE FILES: QArith.v: basic definitions and lemmas, Q seen as a Setoid. Qring.v: Q seen as a Setoid Ring, some example of Ring tactic being used. Qreals.v: Unlike Ring, the Field tactic does currently not work over Setoids. In the meanwhile, we can emulate a Field over Q by injecting the equality inside Coq Reals, and then using Field. This file provides a tactic QField which do that. Qreduction.v: Transforming a fraction into its reduced form. SQRT2: In this subdirectory can be found a small experiment about constructive reals made with the help of H. Schwichtenberg. Even if this experiment is not in a finished state, I've included it along with QArith as a example of use for these rationals and as a test-suite.
About
A Library for Rational Numbers (QArith)
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published