[Agda] announce of Binary-3.0

Sergei Meshveliani mechvel at botik.ru
Sat Jan 13 16:25:57 CET 2018


Announcement
------------

   Binary-3.0  -- a Pure Binary Natural Number Arithmetic library 
                  for Agda

is available on 

   ftp://ftp.botik.ru/pub/local/Mechveliani/binNat/

(see license.txt and the manual README.agda in the archive).


Binary-3.0  is a pure, regular-performance, complete, and certified 
            binary arithmetic for natural numbers
            written in Agda.

It has been tested under  Agda 2.5.3, MAlonzo, lib-0.14.


It is also suggested as a replacement for the Bin part in
Standard library lib-0.14  
(the modules Data.Bin.agda, Data.Bin.Properties.agda).



`Pure'  
means that Binary-3.0 never uses a built-in arithmetic (on Nat) to 
essentially change performance.
The performance order is supposed to remain with replacing the Nat 
arithmetic with the naive unary arithmetic.

`Regular performance' 
means that the arithmetic on Bin of Binary-3.0 has a regular performance
cost order -- the one expected for the corresponding known naive
operations with bit lists.
Examples:
*  The comparison  <-cmp x y  on Bin costs  O(|x| + |y|),  
                                            where  |z| = bitLength z.

*  Division with remainder  divMod x y y≢0  on Bin is implemented as a
loop 
   of  {s = shift n dr  for certain n;  dd := dd -. s}  repeated O(|x|)
times. 
   So that it costs  O( |x|^2 ).

`Complete'  
means that all the items are implemented that are usually
required for standard arithmetic. There are provided the
following items.

*  DecTotalOrder instance for Bin,
                 for  x <= y  defined on Bin as   x < y or x == y.
*  StrictTotalOrder instance for Bin, _<_.
*  The bijection property for the map pair  toNat, fromNat. 
*  Subtraction _-._ on Bin,  with the needed properties proved.
*  The proofs for isomorphism for _+_, _*_, _-._  for toNat, fromNat.
*  The monotonicity proofs for  toNat, fromNat  for _<=_ and Nat._<=_.
   A similar monotonicity for _<_ and Nat._<=_ are proved.
*  Various kinds of monotonicity for  _+_, _*_, _-._   for _<=_ 
   and _<_  are proved.
*  The  CommutativeSemiring  instance  for Bin.
*  Division with remainder  and  GCD   for Bin.
*  The demonstration/test programs for  divMod and gcd.


`Certified'  means that everything is proved in Agda which is regularly 
             required of the above operations.


Usage of Standard library lib-0.14
-----------------------------------

Bin0.agda  _copies_ the following items from  Data.Bin of Standard
lib-0.14:

  Bin⁺,    data Bin,   2^_,        toBits,   ⌊log₂_⌋,    _*2,  
  _*2+1,   ⌊_/2⌋,      Carry,      addBits,  addCarry,   _+_,
  _*_,     fromBits,   addBitList, 

The last three have a slight change in implementation.

Nothing else about Bin is taken from Standard lib-0.14.

The definition for inequalities on Bin is totally changed in Bin0, Bin1.


More detailed explanations are given in  README.agda.


Binary-3.0  has been tested under  Agda 2.5.3,
and it relies on Standard library lib-0.14.

It also includes the module  LtReasoning.agda  -- a support for
inequality reasoning by Ulf Norell.

Installation: 
              agda -c $agdaLibOpt GCDTest.agda


Comments and improvements are welcome.

---------------------
Sergei D. Meshveliani
mechvel at botik.ru




More information about the Agda mailing list