[Agda] Nat arithmetic properties

Sergei Meshveliani mechvel at botik.ru
Thu Sep 22 22:08:24 CEST 2016


Another reason for necessity of n-ary provable arithmetic:

  _≤?_  of Data.Nat.decTotalOrder  is slow.

Probably this is because it is not built-in
(and how can it? assuming that the result may contain a proof made of
many certain constructors).

This leads, for example, to that sorting of the list  [10000 ... 1]  is
done many times faster when the numbers are binary-coded
(and it is applied _≤?_ of DecTotalOrder for Bin).

------
Sergei



On Thu, 2016-09-22 at 22:30 +0400, Sergei Meshveliani wrote:
> On Thu, 2016-09-22 at 12:38 -0400, Wolfram Kahl wrote:
> > Sergei,
> > 
> > On Wed, Sep 21, 2016 at 02:34:28PM +0200, Ulf Norell wrote:
> > > How is this better than what we do at the moment? It seems to me that
> > > your postulated properties of the macro digit operations are going to be
> > > more
> > > complicated than what we postulate right now (namely that Haskell Integer
> > > arithmetic implement the expected functions on natural numbers).
> > 
> > Indeed.
> > 
> > One possibly interesting avenue to expore in this direction,
> > and requiring no modification of Agda, would be starting from the fact
> > that GHC supports two implementations of Haskell Integer:
> > 
> >  * The default implementation calls the GPL-licenced GMP library via the FFI
> > 
> >  * An alternative implementation (called SimpleInteger?)
> >    for GPL-averse contexts is, if I remember correctly, implemented in Haskell.
> >    (So that would be some kind of lists of Macrodigits already.)
> > 
> > You could go and implement your lists of Macrodigits in Agda, and
> > use Agda's reverse FFI to export this to Haskell to replace SimpleInteger.
> > 
> > And try to be faster! ;-)
> 
> 
> 1) In principle:  Agda Standard library needs a proved arithmetic for
> Nat which is several times faster that the existing one of Data.Bin. 
> 
> 2) For example, Bin._+_ is  2^n times  faster than Nat._+_ (unary), 
> and can be supplied with all the necessary proofs
> (mainly: a proof for that the ring of Nat is isomorphic to the ring of
> Bin, this is enough).
> 
> 3) Further, _+_ for the  Hexa -coded naturals is can be programmed in
> Agda, so that it will be several times faster than Bin._+_, and will be
> supplied with the proof for that the ring of Nat is isomorphic to the
> ring of Hexa).
> And this does not need any built-ins (no postulates) for digits.
> But it will be about 8 times slower than Integer._+_ in GHC
> (because 4-Hexa-digit numbers are summed by one macrodigit operation in
> GHC, and because a digit operation in Hexa in Agda is not in one step).
> 
> 4) As to doing the same for lists of large macrodigits (say 64 bit
> digit), there it will have sense to make the digit operations built-in
> (with several postulated properties) an all the rest written in Agda,
> with proofs.
> 
> 
> But  I am not currently going to implement any of these things.
> These are only my notes, comments.
> 
> []





More information about the Agda mailing list