ebooksgratis.com

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
de Bruijn index - Wikipedia, the free encyclopedia

de Bruijn index

From Wikipedia, the free encyclopedia

In mathematical logic, the de Bruijn index is a notation invented by the Dutch mathematician Nicolaas Govert de Bruijn (pronounced [dɪˈbʁœyn]) for representing terms in the λ calculus.[1] Terms written using these indexes are invariant with respect to α conversion, so the check for α-equivalence is the same as that for syntactic equality. Each de Bruijn index is a natural number that represents an occurrence of a variable in a λ-term, and denotes the number of binders that are in scope between that occurrence and its corresponding binder. The following are some examples:

  • The term λx. λy. x, sometimes called the K combinator, is written as λ λ 2 with de Bruijn indexes. The binder for the occurrence x is the second λ in scope.
  • The term λx. λy. λz. x z (y z) (the S combinator), with de Bruijn indexes, is λ λ λ 3 1 (2 1).
  • The term λz. (λy. yx. x)) (λx. z x) is λ (λ 1 (λ 1)) (λ 2 1). See the following illustration, where the binders are coloured and the references are shown with arrows.
    Pictorial depiction of example

De Bruijn indexes are commonly used in higher-order reasoning systems such as automated theorem provers and logic programming systems.[2]

Contents

[edit] Formal definition

Formally, λ-terms (M, N, …) written using de Bruijn indexes have the following syntax (parentheses allowed freely):

M, N, … ::= n | M N | λ M

where nnatural numbers greater than 0 — are the variables. A variable n is bound if it is in the scope of at least n binders (λ); otherwise it is free. The binding site for a variable n is the nth binder it is in the scope of, starting from the innermost binder.

The most primitive operation on λ-terms is substitution: replacing free variables in a term with other terms. In the β-reductionM) N, for example, we must:

  1. find the variables n1, n2, …, nk in M that are bound by the λ in λ M,
  2. decrease the free variables of M to match the removal of the outer λ-binder, and
  3. replace n1, n2, …, nk with N, suitably increasing the free variables occurring in N each time, to match the number of λ-binders the corresponding variable occurs under when substituted.

To illustrate, consider the application

(λ λ 4 2 (λ 1 3)) (λ 5 1)

which might correspond to the following term written in the usual notation

x. λy. z xu. u x)) (λx. w x).

After step 1, we obtain the term λ 4 □ (λ 1 □), where the variables that are substituted for are replaced with boxes. Step 2 lowers the free variables, giving λ 3 □ (λ 1 □). Finally, in step 3 we replace the boxes with the argument; the first box is under one binder, so we replace it with λ 6 1 (which is λ 5 1 with the free variables increased by 1); the second is under two binders, so we replace it with λ 7 1. The final result is λ 3 (λ 6 1) (λ 1 (λ 7 1)).

Formally, a substitution is an unbounded list of term replacements for the free variables, written M1.M2…, where Mi is the replacement for the ith free variable. The increasing operation in step 3 is sometimes called shift and written ↑k where k is a natural number indicating the amount to increase the variables; For example, ↑0 is the identity substitution, leaving a term unchanged.

The application of a substitution s to a term M is written M[s]. The composition of two substitutions s1 and s2 is written s1 s2 and defined by

M [s1 s2] = (M [s1]) [s2].

The rules for application are as follows:

\begin{align}
  n [N_1\ldots N_n\ldots] =& N_n \\
  (M_1\;M_2) [s] =& (M_1[s]) (M_2[s]) \\
  (\lambda\;M) [s] =& \lambda\;(M [1.1[s'].2[s'].3[s']\ldots]) \\
                   & \text{where } s' = s \uparrow^1
\end{align}

The steps outlined for the β-reduction above are thus more concisely expressed as:

M) Nβ M [N.1.2.3…].

[edit] Alternatives to de Bruijn indexes

When using the standard "named" representation of λ-terms, where variables are treated as labels or strings, one has to explicitly handle α-conversion when defining any operation on the terms. The standard Variable Convention[3] of Barendregt is one such approach where α-conversion is applied as needed to ensure that:

  1. bound variables are distinct from free variables, and
  2. all binders bind variables not already in scope.

In practice this is cumbersome, inefficient, and often error-prone. It has therefore led to the search for different representations of such terms. On the other hand, the named representation of λ-terms is more pervasive and can be more immediately understandable by others because the variables can be given descriptive names. Thus, even if a system uses de Bruijn indexes internally, it will present a user interface with names.

De Bruijn indexes are not the only representation of λ-terms that obviates the problem of α-conversion. Among named representations, the nominal logic of Pitts is one approach, where the representation of a λ-term is treated as an equivalence class of all terms rewritable to it using variable permutations.[4] This approach is taken by the Nominal Datatype Package of Isabelle/HOL.[5]

Another common alternative is an appeal to higher-order representations where the λ-binder is treated as a true function. In such representations, the issues of α-equivalence, substitution, etc. are identified with the same operations in a meta-logic.

[edit] See also

  • The de Bruijn notation for λ-terms. This notation has little to do with de Bruijn indexes, but the name "de Bruijn notation" is often (erroneously) used to stand for it.

[edit] References

  1. ^ De Bruijn, Nicolaas Govert (1972). "Lambda Calculus Notation with Nameless Dummies: A Tool for Automatic Formula Manipulation, with Application to the Church-Rosser Theorem". Indagationes Mathematicae 34: 381–392. Elsevier. ISSN 0019-3577. 
  2. ^ Gabbay, Murdoch J.; Pitts, Andy M. (1999). "A New Approach to Abstract Syntax and Binding". 14th Annual Symposium on Logic in Computer Science: 214–224. 
  3. ^ Barendregt, Henk P. (1984). The Lambda Calculus: Its Syntax and Semantics. North Holland. ISBN 0-444-87508-5. 
  4. ^ Pitts, Andy M. (2003). "Nominal Logic: A First Order Theory of Names and Binding". Information and Computation 186: 165–193. doi:10.1016/S0890-5401(03)00138-X. ISSN 0890-5401. 
  5. ^ Nominal Isabelle web-site. Retrieved on 2007-03-28.


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -