Lambda Count
The lambda-calculus is a universal model of computation at the core of functional programming languages. It is based on lambda-terms, a minimal programming language featuring only function definitions, function calls and variables. Lambda-terms are built according to the following rules:
- Any variable (single letter, from some infinite alphabet) is a lambda-term.
- If and are lambda-terms, then is a lambda-term, called the application of to .
- If is a variable and is a term, then is a lambda-term, called an abstraction. An abstraction defines an anonymous function, taking as parameter and sending back .
A lambda-term is said to be closed if for all variables , all occurrences of within are contained within some abstraction in . The smallest such abstraction is said to bind the occurrence of the variable . In other words, a lambda-term is closed if all its variables are bound to parameters of enclosing functions definitions. For example, the term is closed, while the term is not because is not bound.
Also, we can rename variables as long as no binding abstraction changes. This means that and should be considered equivalent since we merely renamed a parameter. Two terms equivalent modulo such renaming are called -equivalent. Note that and are not -equivalent, since the abstraction binding the first variable was the outer one and becomes the inner one. However, and are -equivalent.
The following table regroups the lambda-terms that can be written with at most symbols, symbols being parenthesis, , dot and variables.
Let be the number of distinct closed lambda-terms that can be written using at most symbols, where terms that are -equivalent to one another should be counted only once. You are given that , , and .
Find . Give the answer modulo .
lambda计数
lambda演算是作为函数式编程语言核心的一种通用计算模型。这种模型基于lambda项,这是一种只包含函数定义、函数调用和变量的极简编程语言。lambda项根据如下的规则进行构建:
- 任意变量(由单个字母表示,假定字母表的长度无穷)都是lambda项。
- 如果和是lambda项,那么也是lambda项,这被称为将应用到上。
- 如果是一个变量而是一个lambda项,那么是一个lambda项,这被称为抽象。 一个抽象定义了一个匿名函数,其中是参数并返回。
如果在一个lambda项中出现过的所有变量均包含于中的某个抽象,则称为闭合的,并称包含的抽象中最小的一个绑定了。换言之,如果一个lambda项中出现的所有变量都被绑定为某个函数定义中的参数,则它是闭合的。例如,lambda项是闭合的,而lambda项则不是,因为并未被绑定。
另外,只要不改变抽象的绑定关系,我们可以随意重命名变量。这意味着和应当被认为是等价的,因为我们只是重命名了一个参数。在这样的重命名中等价的两个lambda项被称为-等价。注意和并不是-等价的,因为前者中绑定第一个变量的抽象是外层的抽象,而后者中则变成了内层的抽象。不过,和是-等价的。
如下的表格展示了所有可以用至多个符号表示的lambda项,这里的符号包括括号,,点号和变量名。
记为可以用至多个符号表示的不同闭合lambda项的数目,其中-等价的lambda项只计算一次。已知,,以及。
求,并将答案对取模。
Gitalking ...