O problema indutivo do separador invariante da aritmética de Presburger é indecidível.
Não conheço uma prova na literatura para apontá-lo. (Parece uma pergunta tão direta que suponho que esteja em algum lugar por aí.) A prova que me veio a seguir segue aproximadamente a mesma construção que o problema da parada. Aqui está uma breve visão geral. Em primeiro lugar, assumir um procedimento de decisão existe e, em seguida, construir uma máquina de S com entrada M . S usa D para decidir a não terminação de M em si mesmo e, em seguida, S reverte a saída. Em seguida, usamos a construção de S para mostrar que D deve dar uma resposta incorreta sobre a execução de S em si.DSMSDMSSDS
Em vez de uma redução no problema de parada, a prova é para todos os efeitos e uma reafirmação da prova do problema de parada. É um pouco detalhado, pois exigirá que a condição exata mais forte possa ser expressa. (Se uma prova mais simples for possível, eu estaria muito interessado em ouvi-la.) Agora, vamos aos detalhes sangrentos.
O problema separador invariante indutivo para Presburger aritmética é para um determinado 4-tupla onde ˉ v é um conjunto finito de nomes de variáveis, I n i t e B a d são fórmulas de Presburger cujas variáveis livres estão em ˉ v , N e x t é a fórmula de Presburger cujas variáveis livres estão em ˉ v ou ˉ⟨v¯,Init,Next,Bad⟩v¯InitBadv¯Nextv¯(uma cópia inicial de ˉ v ) existe uma fórmulaϕna aritmética de Presburger com variáveis livres em ˉ v, de modo que:v¯′v¯ϕv¯
- Init⟹ϕ
- ϕ∧Next⟹ϕ′
- ϕ⟹¬Bad
onde inicia todas as variáveis livres em ϕ .ϕ′ϕ
Suponha que esse problema seja decidível. Existe então uma máquina de Turing que decide o problema do separador (para uma determinada codificação de fórmulas de Presburger). Seja D uma máquina de Turing determinística que simula D ' . D termina e decide o problema do separador.D′DD′D
Uma atribuição variável ao longo de um conjunto finito de variáveis representa um conjunto ⋀ v i = c i onde c i é um número inteiro constante.{vi}⋀vi=cici
Também assumirei a existência de uma máquina de Turing para o compilador aritmético Presburger com algumas restrições razoáveis, mas fortes. C toma como entrada de uma máquina de Turing H com um único estado final, t e r m e uma entrada w , e construções Presburger fórmulas I n i t e n e x t ao longo de um conjunto finito de variáveis °° v . Informalmente, exigimos que os caminhos das fórmulas de Presburger simulem a execução de M em wCCMtermwInitNextv¯Mw. Além disso, exigimos que seja uma simulação de etapas. Formalmente, exigimos que:
- designa uma única constante para todos os estados de controlo em H e deixar a constante de t e r m ser ⟨ t e r m ⟩ ,CMterm⟨term⟩
- inclui uma variável p c in ˉ v que rastreia o estado de controle de M a cada passo da execução,Cpcv¯M
- gera I n i t de estar sob a forma de uma atribuição variável ao longo ˉ v ,CInitv¯
- assegura que N e x t tenha um sucessor único em atribuições variáveis acima de ˉ v (que são alcançáveis de I n i t ) se M for determinístico,CNextv¯InitM
- para que exista uma função injetiva de um estado de M (controle e fita) para uma atribuição de variável sobre b a r v, de modo que N e x t tenha um sucessor, o estado inicial de M em w é mapeado para exatamente I n i t e o estado de controle M atribui consistentemente p c ,fMbarvNextMwInitMpc
- é determinístico eC
- termina.C
Agora construa a máquina de Turing que usa uma máquina de Turing M como entrada e faça o seguinte (em pseudocódigo):SM
S(M):
Run C(M,M) to get v, Init and Next
Simulate D on v, Init, Next, Bad := (pc = <term>)
If D says a separator exists:
terminate
If D says no separator exists:
loop: goto loop
DSSS(S)CInitNextSSiS(S)siiv¯i=f(si)NextInitSCNextInitf(s0)=v¯i=Init
DϕS(S)termkCDv¯1…v¯kϕpc=⟨term⟩D
DS(S)loopkksk+1=sk+2=…kϕ=⋁k+1i=1v¯iϕNextInit
- Init⟹ϕInitv¯1
- ϕ∧Next⟹ϕ′Nextiv¯iv¯′i+1
- ϕ⟹¬Badv¯ipc≠⟨term⟩
ϕ⟨v¯,Init,Next,Bad⟩D
D
Realizar esse exercício realmente me fez apreciar o trabalho de Jerome Leroux em separadores para sistemas de adição de vetores.