Me gustaría un ejemplo de quine en cálculo lambda puro . Me sorprendió bastante no poder encontrar uno buscando en Google. La página quine enumera quines para muchos idiomas "reales", pero no para el cálculo lambda.
Por supuesto, esto significa definir lo que quiero decir con una quine en el cálculo lambda, que hago a continuación. (Estoy pidiendo algo bastante específico).
En algunos lugares, por ejemplo, Larkin y Stocks (2004), veo lo siguiente citado como una expresión "autorreplicante": . Esto se reduce a sí mismo después de un solo paso de reducción beta, dándole una sensación de quine de alguna manera. Sin embargo, no se parece a quine porque no termina: las reducciones beta adicionales seguirán produciendo la misma expresión, por lo que nunca se reducirán a la forma normal. Para mí, un quine es un programa que termina y se genera solo, por lo que me gustaría una expresión lambda con esa propiedad.
Por supuesto, cualquier expresión que no contenga redexes ya está en forma normal y, por lo tanto, terminará y se generará. Pero eso es demasiado trivial. Por lo tanto, propongo la siguiente definición con la esperanza de que admitirá una solución no trivial:
definición (provisional): Una quine en cálculo lambda es una expresión de la forma
Dado que el cálculo lambda es tan equivalente a Turing como cualquier otro idioma, parece que esto debería ser posible, pero mi cálculo lambda está oxidado, así que no puedo pensar en un ejemplo.
Referencia
James Larkin y Phil Stocks. (2004) "Expresiones autorreplicantes en el cálculo de Lambda" Conferencias en Investigación y práctica en tecnología de la información, 26 (1), 167-173. http://epublications.bond.edu.au/infotech_pubs/158
fuente
Respuestas:
Desea un término tal que ∀ M ∈ Λ :Q ∀M∈Λ
No especificaré más restricciones sobre (por ejemplo, con respecto a su forma y si se está normalizando) y le mostraré que definitivamente no debe estar normalizándose.Q
Suponga que está en forma normal. Elija M ≡ x (podemos hacerlo porque el teorema debe mantenerse para todas las M ). Luego hay tres casos.Q M≡x M
Entonces, si tal existe, no puede estar en forma normal.Q
Para completar, suponga que tiene una forma normal, pero no está en forma normal (tal vez se está normalizando débilmente), es decir, ∃ N ∈ β -nf con N ≢ Q tal que ∀ M ∈ Λ : Q M ⊳ β Q ⊳ β NQ ∃N∈β-nf N≢Q ∀M∈Λ
Entonces con también debe existir una secuencia de reducción Q x ⊳ β N x ⊳ β N , porque:M≡x Qx⊳βNx⊳βN
Pero tenga en cuenta que no es posible mediante el argumento (1) anterior, por lo que nuestra suposición de que Q tiene una forma normal no es sostenible.Nx⊳βN Q
Si permitimos tal , entonces, estamos seguros de que debe ser no normalizado. En ese caso, simplemente podemos usar un combinador que elimine cualquier argumento que reciba. La sugerencia de Denis funciona bien: Q ≡ ( λ z . ( Λ x . Λ z . ( X x ) ) ( λ x . Λ z . ( X x ) ) ) Luego en solo dos reducciones β : Q MQ
Este resultado no es muy sorprendente, ya que esencialmente está pidiendo un término que elimine cualquier argumento que reciba, y esto es algo que a menudo veo mencionado como una aplicación directa del teorema del punto fijo.
fuente
Por un lado, esto es imposible, porque se supone que una quine genera su propio código, y el cálculo lambda puro no tiene medios para realizar la salida.
Por otro lado, si supone que el término resultante es la salida, entonces cada forma normal es una quine.
fuente
Aquí hay una propuesta:
fuente
if z==p then return q, otherwise return q
. (Pseudocode because I'm not sure if it's even possible to define the equality operator for arbitrary expressions in lambda calculus, but I think you see what I mean.)