Conjectura de Collatz:
O seguinte programa sempre pára:
void function( ArbitraryInteger input){
while( input > 1){
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
// Halt here
}
Pequena variação (ainda uma conjectura, porque se baseia em um resultado da de Collatz):
Para algumas entradas, o programa a seguir nunca entrará no mesmo estado duas vezes (onde o estado é determinado pelo valor mantido por "entrada"):
void function( ArbitraryInteger input){
while( input >= 1){ // notice the "="
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
}
Observe que o segundo programa nunca pára, independentemente de o primeiro programa parar ou não.
Acredita-se que o primeiro programa sempre termine para qualquer entrada, no entanto, não temos a prova disso, e ainda pode existir algum número inteiro para o qual o programa não seja interrompido (também há um prêmio de US $ 100 por prová-lo) .
O segundo programa também é interessante: afirma que o programa nunca entrará no mesmo estado duas vezes para alguma entrada, o que basicamente exige que o primeiro programa tenha uma sequência conhecida por divergir sem repetir. Não requer apenas que a conjectura de Collatz seja falsa, mas exige que ela seja falsa e sem loops , além do óbvio loop 1,4,2,1.
Se Collatz tiver apenas contra-exemplos em loop, a variação na conjectura é falsa
Se Collatz é falso sem loops, a variação na conjectura é verdadeira
Se Collatz for verdadeiro, a variação é falsa
Se Collatz é falso, porque possui loops e porque possui um número para o qual diverge, a variação na conjectura é verdadeira (apenas requer um número para o qual diverge sem inserir um loop)
Acho que a variação é mais interessante (não apenas porque a encontrei por acidente e a notei graças a @LieuweVinkhuijzen), mas porque na verdade exige uma prova real. Por força bruta, podemos encontrar um loop um dia ou outro (e esse será um loop com mais de 70 números: o estado da arte atual é que não pode haver loops infinitos menores que 68 ou mais) e brute forçar não é interessante: é apenas trituração de números. No entanto, não podemos forçar brutalmente uma sequência divergente infinita, não sabemos se realmente terminará sem uma prova real.
Edição: Eu pulei a parte sobre Collatz Conjecture desculpe, eu realmente respondi de cor com um algoritmo que li sobre alguns anos atrás, eu não esperava que isso já fosse mencionado.
EDIT2: Um comentário me fez notar que eu escrevi o algoritmo com um erro, no entanto, esse erro realmente torna minha resposta diferente da conjectura de Collatz (mas uma variação direta dele).