Aidez Gödel avec sa fonction β [fermé]


13

La fonction β de Gödel prend trois nombres naturels comme arguments.

Il est défini comme β(x,y,z) = rem(x, 1 + (z + 1) · y) = rem(x, (z · y + y + 1) )

où rem (a, b) désigne le reste après la division entière de a par b.

Le β lemme déclare maintenant que:

Pour toute séquence de nombres naturels (k_0, k_1,…, k_n), il existe des nombres naturels b et c tels que, pour tout i ≤ n, β (b, c, i) = k_i.

Gödel a besoin d'aide pour trouver bet cpour toute entrée donnée (k_0, k_1, … , k_n), k_i ∈ ℕ.


Écrivez une fonction qui prend un tableau de longueur n, rempli de nombres naturels, et donne une b,csortie possible qui remplit le lemme du tableau.


N'obtenez pas de solutions par la force brute!

(À mon avis totalement non professionnel, c'est de la force brute lorsque vous obtenez un nombre pour la première fois et que vous effectuez ensuite le calcul. et n'a pas à vérifier s'ils respectent le lemme car ils ont été calculés pour le faire.)

Construisez-les avec les équations et les informations fournies. Le code le plus court gagne, des points bonus si vous le faites Javascriptparce que j'y vais juste:)


Exemple:

[5, 19, 7, 8] -> (1344595, 19)
1344505 % (1 + (0 + 1) * 19) = 5
1344505 % (1 + (1 + 1) * 19) = 19
1344505 % (1 + (2 + 1) * 19) = 7
1344505 % (1 + (3 + 1) * 19) = 8

5
Bienvenue chez PPCG! C'est une bonne première question, mais je recommanderais d'ajouter quelques cas de test pour le rendre plus clair.
Laikoni

4
@Tweakimp Même ainsi, un seul exemple travaillé pourrait aider à clarifier la définition plutôt formelle.
Martin Ender


1
On ne sait pas ce que l'on qualifie de «force brute». De toute évidence, une approche qui parcourt toutes les paires (b, c)jusqu'à ce qu'elle en trouve une qui fonctionne serait de la force brute, et une approche qui s'exécute dans le temps de manière linéaire dans la longueur de l'entrée ne le serait pas, mais il y a un grand écart entre celles-ci. Où est la ligne tracée?
Peter Taylor

6
Quelqu'un a-t-il dit Beta?
Beta Decay

Réponses:


3

JavaScript (ES6), 104 octets

a=>[c=a.reduce(c=>c*++i,Math.max(...a),i=0),a.reduce(g=(x,k)=>x%m-k?g(x+n,k):(n*=m,m+=c,x),0,n=1,m=c+1)]

Renvoie [c, b]sous forme de tableau. La solution qu'elle renvoie n'est pas minimale, cmais je pense qu'elle est minimale bpour le donné c. Pour 120 octets, cela renvoie des solutions minimales dans cet bpour le donné c:

f=(a,c=1,b=a.reduce(g=(x,k)=>x%m-k?d--?g(x+n,k):0/0:n%m?g(x,k,n+=o):(o=n,d=m+=c,x),0,o=n=1,d=m=c+1))=>1/b?[b,c]:f(a,c+1)

Solveur de solution minimale non golfé:

function godel(a) {
    for (c = 0;; c++) {
        var b = 0, n = 1, i = 0;
        for (;;) {
            var m = c * i + c + 1;
            // Increase b until β(b,c,i) = a[i]
            // Adding n won't change output for smaller i
            for (j = 0; j < m; j++) if (b % m != a[i]) b += n;
            if (j == m) break; // couldn't find a remainder, c too low
            i++;
            if (i == a.length) return [b, c]; // Result!
            // Next time we want adding n to b not to change β(b,c,i)
            for (j = 1; n * j % m != 0; j++);
            n *= j;
        }
    }
}

1
Génial! Souhaitez-vous être si gentil et commenter le code? :)
Tweakimp
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.