Existem técnicas para resolver equações funcionais para funções desconhecidas no cálculo lambda?
Suponha que eu tenha a função de identidade definida extensionalmente como tal:
(isto é, por escrever uma equação para o comportamento esperado dessa função) e agora eu quero resolver isso para fazendo alguma transformação algébrica para obter a fórmula intensional para essa função:
que informa exatamente como a função faz o que era esperado (ou seja, como implementá-la no cálculo lambda).
Obviamente, a função de identidade é usada apenas como exemplo. Estou interessado em métodos mais gerais de resolver essas equações. Em particular, gostaria de encontrar uma função que atenda ao seguinte requisito:
isto é, "injeta" a função dada na função lambda fornecida antes de seu "corpo" (que é uma expressão arbitrária do lambda), possivelmente desmontando-a e construindo uma nova, para que se torne um parâmetro ao qual a função é aplicada.
fonte
Eu acho que tenho uma resposta parcial, em relação à equação com a função de identidade:
Queremos resolvê-lo, encontrando a fórmula para , que terá a forma ( λ p . M ) com alguma expressão ainda desconhecida como seu corpo. Vamos substituí-lo por na equação original:I (λp.M) IM I
aplique a função em no lado esquerdo:x
Mas o que temos aqui? :> Esta equação é a fórmula para a expressão que estamos procurando, depois de substituir todas as ocorrências de nela por , e diz que ela deve parecer com o lado direito depois :) Em outras palavras, a função we estava procurando é:p xM p x
qual, é claro, é a resposta certa :)
Vamos tentar a mesma abordagem para encontrar a fórmula para o combinador . Queremos que funcione de tal maneira que, quando aplicado a si mesmo, se produza aplicado a si mesmo:ω
Agora vamos encontrar a fórmula para que é da forma para alguma expressão ainda desconhecido . Substituindo isso na equação, obtemos:ω (λx.M) M
A aplicação ao parâmetro no lado esquerdo fornece a fórmula para :M
Isso diz que, depois de substituir cada ocorrência de em por ela produziu , então podemos deduzir que a expressão original antes da substituição deveria ter sido portanto, a função que procurávamos deveria parece com isso:x M ω ωω M xx
que é realmente o caso :)
Tenho a sensação, no entanto, de que pode ficar tão fácil só porque o lado direito já estava no formato que procuramos.
fonte