É teoricamente possível especificar uma linguagem de programação para a qual não existe implementação? Uma linguagem de programação é uma maneira de definir funções. Uma implementação significa um método para executar um determinado programa nesse idioma em uma determinada entrada para a saída da função correspondente ao programa nessa entrada.
Quais são os requisitos mínimos de um idioma assim?
Respostas:
Geralmente, implementar uma linguagem de programação é, pelo menos, fornecer um intérprete em uma linguagem (ou um compilador a uma linguagem) que não seja mais do que Turing-complete.
Usando esta "definição", podemos especificar uma linguagem de programação como esta:
existe apenas um programa possível
HALT
;especificação de
HALT
: é uma função que resolve o problema de parada .A implementação dessa linguagem de programação requer a solução do problema de parada com a implementação. (O que é impossível, pois nossa implementação não deve ser mais poderosa que uma máquina de Turing).
A especificação lida com a lógica e, portanto, pode exigir muito mais. Outra especificação que será impossível de implementar é "false". (Ou qualquer sentença contraditória na especificação) Mas isso não parece uma especificação, e é por isso que usei o exemplo do problema de parada.
fonte
1/0
ohms ( ∞ )let loop = loop in loop
Apenas uma observação lateral curiosa: o mecanismo de modelo C ++ é completo em Turing
Teorema 1: Na ausência de limites de instanciação, os modelos C ++ estão completos em Turing.
Corolário 1: Na ausência de limites de instanciação, se um compilador C ++ será interrompido ao compilar um determinado programa é indecidível.
... então o próprio C ++ pode ser considerado uma linguagem de programação para a qual não existe "implementação" ... :-D
fonte
Não está claro o que você quer dizer com "linguagem de programação" e "implementação de uma linguagem". Você precisa fornecer definições rigorosas desses dois para obter uma resposta.
Uma linguagem de "programação" para calcular funções (parciais) sobre cadeias de caracteres pode ser considerada um mapeamento de para . Enquanto uma das funções desconectáveis estiver no intervalo, o idioma não poderá ser implementado.2 Σ *Σ∗ 2Σ∗
Por exemplo, pode-se usar aritmética de primeira ordem. Então é fácil definir funções que não são computáveis, por exemplo, a função que fornece um TM , decide se retorna em todas as entradas. Isso pode ser facilmente expresso por uma fórmula de primeira ordem na linguagem da aritmética. Por outro lado, é um resultado fácil na teoria da computabilidade que ela não seja uma função computável; portanto, não pode haver implementação da função.M 0M M 0
Mas esse não é o tipo de linguagem de especificação que as pessoas querem dizer quando usam a frase "linguagem de programação". Uma linguagem de programação costuma ser uma linguagem para expressar funções computáveis (processos, ...) e comunicar as instruções a uma máquina e, portanto, existe uma TM que pode simular esses programas e produzir seus resultados. Portanto, de certa forma, ter uma linguagem de programação que não pode ser implementada não é significativo.
(Meu palpite é que você provavelmente está confundindo linguagens de programação com linguagens de especificação ou linguagens formais . De qualquer forma, podemos definir linguagens que não são computáveis.)
fonte
Existem muitas linguagens especificadas sem uma implementação, por exemplo, o Algol 60 deveria ser uma linguagem para escrever algoritmos, não para ser implementada. Algumas das muitas linguagens "apenas por diversão" foram especificadas muito antes da implementação, o Intercal vem à mente.
fonte