On the Value of Variables

Call-by-value and call-by-need l-calculi are defined using the distinguished syntactic category of values. In theoretical studies, values are variables and abstractions. In more practical works, values are usually defined simply as abstractions. This paper shows that practical values lead to a more efficient process of substitution--for both call-by-value and call-by-need--once the usual hypothesis for implementations hold terms are closed, reduction does not go under abstraction, and substitution is done in micro steps, replacing one variable occurrence at the time. Namely, the number of substitution steps becomes linear in the number of β-redexes, while theoretical values only provide a quadratic bound.

[1]  Benjamin C. Pierce,et al.  Types and programming languages: the next generation , 2003, 18th Annual IEEE Symposium of Logic in Computer Science, 2003. Proceedings..

[2]  Beniamino Accattoli,et al.  Proof nets and the call-by-value lambda-calculus , 2012, LSFA.

[3]  Robin Milner,et al.  Local Bigraphs and Confluence: Two Conjectures: (Extended Abstract) , 2007, EXPRESS.

[4]  Claudio Sacerdoti Coen,et al.  On the Relative Usefulness of Fireballs , 2015, 2015 30th Annual ACM/IEEE Symposium on Logic in Computer Science.

[5]  Gordon D. Plotkin,et al.  Call-by-Name, Call-by-Value and the lambda-Calculus , 1975, Theor. Comput. Sci..

[6]  Delia Kesner,et al.  A nonstandard standardization theorem , 2014, POPL.

[7]  Beniamino Accattoli,et al.  An Abstract Factorization Theorem for Explicit Substitutions , 2012, RTA.

[8]  Matthias Felleisen,et al.  Parameter-passing and the lambda calculus , 1991, POPL '91.

[9]  Matthias Felleisen,et al.  The Call-by-need Lambda Calculus, Revisited , 2012, ESOP.

[10]  Peter Sestoft,et al.  Deriving a lazy abstract machine , 1997, Journal of Functional Programming.

[11]  Daniel P. Friedman,et al.  Improving the lazy Krivine machine , 2007, High. Order Symb. Comput..

[12]  Simona Ronchi Della Rocca,et al.  The Parametric Lambda Calculus , 2004, Texts in Theoretical Computer Science.

[13]  Beniamino Accattoli Evaluating functions as processes , 2013, TERMGRAPH.

[14]  Andrew Moran,et al.  Improvement in a lazy context: an operational theory for call-by-need , 1999, POPL '99.

[15]  P. J. Landin The Mechanical Evaluation of Expressions , 1964, Comput. J..

[16]  Ugo Dal Lago,et al.  On Constructor Rewrite Systems and the Lambda-Calculus , 2009, ICALP.

[17]  Vincent Danos,et al.  Head Linear Reduction , 2004 .

[18]  David A. Schmidt,et al.  The essence of computation: complexity, analysis, transformation , 2002 .

[19]  Matthias Felleisen,et al.  A call-by-need lambda calculus , 1995, POPL '95.

[20]  John Launchbury,et al.  A natural semantics for lazy evaluation , 1993, POPL '93.

[21]  Olivier Danvy,et al.  A synthetic operational account of call-by-need evaluation , 2013, PPDP.

[22]  Robert J. Simmons,et al.  Substructural Operational Semantics as Ordered Logic Programming , 2009, 2009 24th Annual IEEE Symposium on Logic In Computer Science.

[23]  Ugo Dal Lago,et al.  On the Invariance of the Unitary Cost Model for Head Reduction (Long Version) , 2012, RTA.

[24]  Andrew Moran,et al.  Lambda Calculi and Linear Speedups , 2002, The Essence of Computation.

[25]  Ugo Dal Lago,et al.  (Leftmost-Outermost) Beta Reduction is Invariant, Indeed , 2016, Log. Methods Comput. Sci..

[26]  M. Nivat Fiftieth volume of theoretical computer science , 1988 .

[27]  Mitchell Wand On the correctness of the Krivine machine , 2007, High. Order Symb. Comput..

[28]  Patrick Lincoln,et al.  Linear logic , 1992, SIGA.

[29]  Simona Ronchi Della Rocca,et al.  The Parametric λ-Calculus , 2004 .

[30]  Damiano Mazza,et al.  Distilling abstract machines , 2014, ICFP.

[31]  Delia Kesner,et al.  Reasoning About Call-by-need by Means of Types , 2016, FoSSaCS.

[32]  Matthias Felleisen,et al.  The call-by-need lambda calculus , 1997, Journal of Functional Programming.