Eu vi duas expressões lambda diferentes para a função lógica NOT.
Um deles apenas aplica seu parâmetro a constantes true
e false
internamente em uma ordem inversa:
e o outro que captura mais dois parâmetros em vez de passá-los para a função retornada externamente e aplica a eles na ordem inversa também:
dos quais o outro parece um pouco mais simples (e também é mais simples quando codificado em binário).
Portanto, minha pergunta é a seguinte:
existe alguma transformação que possa me levar de uma dessas representações para a outra?
Vejo que eles são equivalentes "extensionalmente", isto é, ambos produzem os mesmos resultados. Mas eu gostaria de "provar" de alguma forma por transformações algébricas, como as das conversões alfa, beta e eta. Infelizmente, nada disso pode me ajudar neste caso: Alpha é apenas para renomear. Beta funciona apenas para chamadas de função, mas não temos aqui nenhuma chamada de função que possa ser reduzida, pois é livre no corpo da função (embora não seja toda a expressão) em todas essas expressões até que realmente invoquemos NOT
algo. O mais próximo parece ser o eta, que está relacionado à equivalência extensional e aos parâmetros de encaminhamento, mas quando os parâmetros estão sendo revertidos, não é mais um encaminhamento simples e o eta parece não se aplicar aqui.
Há mais alguma regra de conversão em falta?
(Bem, acho que eles não vão pular duas letras gregas sem motivo específico, não é?)
PS: Esta questão é na verdade um modelo, uma vez que existem muitas outras definições para outras funções que têm várias formas diferentes que parecem ser extensionalmente equivalentes, mas completamente diferentes em relação às regras de redução conhecidas. Eu escolhi o exemplo mais simples deste problema.
Editar:
para esclarecer melhor o que eu gostaria de saber, aqui está um diagrama mostrando as etapas de redução para as duas versões da not
função:
http://sasq.comyr.com/Stuff/Lambda/Not.png
Como você pode ver, eles realmente reduzem os mesmos resultados (ao contrário do que Jonathan Gallagher estava dizendo abaixo). Isto é o que eu já sei: eles são confluentes e, portanto, são equivalentes a Church-Rosser. O que eu não sei, no entanto, é se existe alguma regra de conversão (semelhante a alfa, beta e eta) que possa me permitir transformar uma forma de not
outra. Isso me permitiria, pelo menos, garantir que algumas outras funções (mais complicadas que essas duas aqui) também sejam equivalentes, o que pode ser difícil quando elas podem reduzir para mais do que apenas duas respostas possíveis. Gostaria de saber se existe alguma regra de conversão que permita converter uma definição intensional em outra quandoduas funções já são extensionalmente equivalentes (ou seja, fornecem os mesmos resultados para os mesmos parâmetros). Ou (o que seria melhor) se alguma função puder ser convertida de alguma forma na outra, mesmo que eu não saiba se elas são extensionalmente equivalentes.