[Agda] libraries for Bin

Sergei Meshveliani mechvel at botik.ru
Tue Jul 3 22:06:27 CEST 2018


On Tue, 2018-07-03 at 11:29 +0100, Martin Escardo wrote:
> 
> On 02/07/18 10:46, mechvel at botik.ru wrote:
> > Also I look now into Coq Standard library, the part for binary natural.
> > Generally, Coq shows the code, and it is difficult to find any reference
> > to the related papers, docs. May be, this particular subject is too
> > simple for a paper, but one page `readme' is desirable.
> > 
> > Looking at the code, I have an impression that the Bin data is defined
> > there with the constructors
> > 
> >                              0#, double, suc-double.
> > 
> > `double' constructs any even number, suc-double any odd number.
> > I suspect that this way binary arithmetic is expressed simpler.
> > Only zero is not uniquely represented. But this can be fixed by
> > introducing four constructors instead.
> 
> I have a very simple binary naturals library with *unique* 
> representations, and which allows linear addition.
> 
> 
> http://www.cs.bham.ac.uk/~mhe/agda-new/BinaryNaturals.html
> 
> data 𝔹 : Set where
>   zero : 𝔹
>   l    : 𝔹 → 𝔹
>   r    : 𝔹 → 𝔹
> [..]


For me, it is easier to understand what is written at the referred page:

  The isomorphic copy is formally constructed from 0 iterating the
  functions L(n)=2n+1 and R(n)=2n+2.

So: instead of       0#, double, suc-double     of Coq  
(not unique for 0)
there are suggested  0#, 2n+1, 2n+2

-- zero, arbitrary odd, arbitrary non-zero even. 
This represents Bin uniquely.

Looks nicer!
Thank you.

------
Sergei




> The interpretation function is
> 
> unary : 𝔹 → ℕ
> unary zero = zero
> unary(l m) = L(unary m)
> unary(r m) = R(unary m)
> 
> where
> 
> double : ℕ → ℕ
> double zero    = zero
> double(succ n) = succ(succ(double n))
> 
> L : ℕ → ℕ
> L n = succ(double n)
> 
> R : ℕ → ℕ
> R n = succ(L n)
> 
> This interpretation function is an equivalence in the sense of HoTT/UF. 
> Its inverse is easy to define:
> 
> Succ : 𝔹 → 𝔹
> Succ zero  = l zero
> Succ(l m)  = r m
> Succ(r m)  = l(Succ m)
> 
> binary : ℕ → 𝔹
> binary zero    = zero
> binary(succ n) = Succ(binary n)
> 
> I am sure people must have considered this isomorphic representation of 
> the natural numbers, though, because it is very simple and natural.
> 
> Martin
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda




More information about the Agda mailing list