Boost logo

Boost :

Subject: Re: [boost] De Bruijn Bind (alternate bind syntax) Interest?
From: Larry Evans (cppljevans_at_[hidden])
Date: 2013-06-23 11:40:40

On 09/02/10 16:08, David Sankel wrote:> 2010/9/2 David Sankel
>> 2010/9/2 Dave Abrahams <dave_at_[hidden]>
>> On Thu, Sep 2, 2010 at 11:57 AM, David Sankel <camior_at_[hidden]> wrote:
>>>> Hello all,
>>>> I've been working on an alternate bind syntax based on De Bruijn
>>>> indices[1].
>>>> The syntax is very simple, yet the terms are very powerful.
>>>> Here is an example of a function const that takes in an argument c and
>>>> returns another function that, for all input, returns c:
>>>> //λx.λy.x = λλ1 with De Bruijn indices.
>>> Not according to the page you linked below. What am I missing?
>>> [1]
>> Sorry about that. The wikipedia page uses 1-indexed indices where I'm
>> 0-indexed indices. So, increment 1 on all my examples to get the
>> syntax.
> I'm beginning to think it is better to use 1-indexing instead of
> all around. It will be both compatible with the Wikipedia page and
> to boost bind/lambda users.
> Funny thing is, I started with 1-indexing but changed it to 0-indexing for
> the fallacious reasoning of the arrrrgh function that Dave A mentioned.
Hi David,

I looked at the web page mentioned in your first post to this thread
and could not understand the flip example:

  For flip, I'm introducing subscripts on abstractions (λ) to indicate
  the number of arguments. For the variables (1,2,etc.) I use a
  subscript to indicate which argument of the abstraction it refers

    flip = λx.λ(y,z).x(z,y) = λ₁λ₂1(1₁, 2â‚€)

which seems to have a 0 for the subscript of 2. and 1 for the
subscript of 1. That's consistent with the argument indices starting
at 0 (1₁ corresponds z {the 2nd argument in the argument list, (z,y)},
and 2â‚€ corresponds to y {the 1st argument in the argument list,
(z,y)}); however, subscrited numbers should be the same since both y
and z are bound by the same lamba, the nearest one corresponding to
number 1. Hence, shouldn't the above be:

    flip = λx.λ(y,z).x(z,y) = λ₁λ₂2â‚€(1₁, 1â‚€)

? Also, since the abstraction indices seem to start at 1, shouldn't
the argument indices also start at 1? I think that would make the
notation more consistent, and would result in:

    flip = λx.λ(y,z).x(z,y) = λ₁λ₂2_1(1_2, 1_1)

(where a subscript of I have been replaced with _I).

Boost list run by bdawes at, gregod at, cpdaniel at, john at