FRACTRAN

FRACTRAN

FRACTRAN est un langage de programmation exotique et Turing-complet s'appliquant à des entiers naturels. Il a été inventé par le mathématicien John Conway qui en publie une description en 1987[1][note 1].

Il consiste à représenter toute fonction calculable sur des entiers par une liste de fractions.

Pour chercher l'image d'un entier A, on regarde dans la liste la première des fractions qui multipliée par A donne un entier B, puis on applique de nouveau la procédure sur l'entier B. Si aucune des fractions de la liste multipliée par A ne donne un entier la procédure s'arrête.

Sommaire

Exemple

Soit la liste  : \frac 3{10};  \frac 43 .

Si on l'applique à l'entier 14, la procédure s'arrête immédiatement car, ni \frac 3{10} \times 14, ni \frac 23 \times 14 ne donnent un entier.

Si on l'applique à 15, on obtient successivement 20 (car seule \frac 43 \times 15 donne un entier), puis 6 (car \frac {3}{10} \times 20 est entier) , puis 8 (car seule \frac 43 \times 6 donne un entier) et la procédure s'arrête.

Principe

Le principe s'appuie sur l'existence d'une décomposition en produits de facteurs premiers des entiers et sur la notion de valuation p-adique.

Tout entier A possède une décomposition en produit de facteurs premiers unique dans laquelle l'exposant du nombre premier p est appelé valuation de p dans A et est noté vp(A).

Pour un entier A donné, les vp(A) sont tous nuls sauf un nombre fini d'entre eux. Multiplier l'entier A par une fraction permettant d'obtenir un entier B, consiste à opérer des additions et des soustractions sur les vp.

Ainsi la liste précédente opère sur les valuations de 2, 3 et 5. La première fraction enlève 1 aux valuations de 2 et 5 (si cela est possible) et augmente de 1 la valuation de 3, la seconde fraction n'agit que lorsque la valuation de 2 ou de 5 est nulle elle augmente la valuation de 2 de deux unités et baisse celle de 3 d'une unité.

Lorsque A s'écrit 2^a \times 3^b \times 5^c \times A' avec A' premier avec 30, et c \le a , à l'aide de deux boucles, la procédure transforme A en B=2^{a-c} \times 3^{b+c}\times A' puis en 2^{a+2b+c} \times A' et s'arrête alors.

Le programme permet ainsi de définir des opérations sur les valuations.

Opérations basiques

Addition

La liste contenant l'unique fraction \frac 32 permet de faire la somme des valuations de 2 et de 3 : lorsque A s'écrit 2^a \times 3^b \times A' avec A' premier avec 6, la procédure s'applique jusqu'à ce que A soit transformé en 3^{a+b} \times A'.

Multiplication

On peut créer une fonction multiplicative à l'aide d'une boucle additive. Pour cela, il faut introduire la notion d'état dans l'algorithme. Cet algorithme s'applique à un nombre 2a3b et le transforme en 5ab et travaille sur les valuations de 2, 3, 5 mais aussi 7 , 11 et 13 :

Etat courant Condition Action Etat suivant
A v7 > 0 Soustraire1 à v7
ajouter 1 to v3
A
v7 = 0 et
v2 > 0
Soustraire 1 à v2 B
v7 = 0 et
v2 = 0 et
v3 > 0
Soustraire 1 à v3 A
v7 = 0 et
v2 = 0 et
v3 = 0
Stop
B v3 > 0 Soustraire 1 à v3
Ajouter 1 à v5
Ajouter 1 à v7
B
v3 = 0 Rien A

L'état B est une boucle qui ajoute v3 à v5 et déplace aussi v3 en v7 et l'état A est une boucle qui répète la boucle B v2 fois. L'état A remet aussi dans v3 la valeur initiale (présente dans v7) quand la boucle B est terminée.

Pour gérer ces états, de nouvelles variables sont nécessaires : elles jouent le rôle d'indicateurs d'états. Les indicateurs d'état pour la boucle B sont v11 et v13. Deux indicateurs d'états sont nécessaires pour la seule boucle B : en effet, le premier indicateur (v11) étant consommé à l'entrée de la boucle, il est nécessaire d'en posséder un second (v13) pour indiquer au programme qu'il doit continuer dans le même état. L'indicateur v13 est basculé en v11 lors de l'instruction "next" de la boucle.

En ajoutant les indicateurs d'états et les instructions au tableau d'algorithme de la multiplication, on obtient :

Instruction
FRACTRAN
Etat courant Indicateurs
d'état
Condition Action Etat suivant
\frac{3}{7} A Aucun v7 > 0 Soustraire 1 à v7
Ajouter 1 à v3
A
\frac{11}{2} v7 = 0 et
v2 > 0
Soustraire 1 à v2
Mettre v11 à 1
B
\frac{1}{3} v7 = 0 et
v2 = 0 et
v3 > 0
Soustraire 1 à v3 A
v7 = 0 et
v2 = 0 et
v3 = 0
Stop
\frac{5 \cdot 7 \cdot 13}{3 \cdot 11}, \frac{11}{13} B v11, v13 v3 > 0 Soustraire 1 à v3
Ajouter 1 à v5
Ajouter 1 à v7
B
\frac{1}{11} v3 = 0 Mettre v11 à 0 A

Quand on écrit la liste d'instructions FRACTRAN, on doit mettre les instructions de l'état A en dernier car l'état A n'a pas d'indicateur d'état, c'est l'état par défaut.

Ainsi le programme FRACTRAN de multiplication est la liste suivante :


\left( \frac{455}{33}, \frac{11}{13}, \frac{1}{11}, \frac{3}{7}, \frac{11}{2}, \frac{1}{3} \right)

Si on entre le nombre 2a3b, le programme rend 5ab[note 2].

Soustraction

La simple fraction \frac 16 permet de transformer le nombre 2a3b en

  • 2ab30 , si a > b ;
  • 203ba, si b > a ;
  • 2030 si a = b.


Division euclidienne

La division euclidienne de a par b (a et b entiers naturels, b > 1) est la donnée de deux entiers naturels q et r tels que r < b et a = bq + r. Cette division euclidienne peut être vue comme une boucle de soustractions : diviser a par b, c'est ôter b à a autant de fois qu'il est nécessaire, le nombre de fois où cette soustraction est effectuée correspond à q, la dernière valeur dans a correspond au reste.

L'algorithme travaille lors sur v2 contenant a, v3 contenant b , v5 destiné à contenir q, et v7 destiné à contenir r. Ces variables sont complétées par 4 indicateurs d'états v11, v13, v17, v19.

Le programme FRACTRAN qui suit consiste en trois états :

  • l'état A opère différemment selon que v3 est plus petit ou plus grand que v2;
    • si v3 ≤ v2, la boucle retranche v3 à v2, vide v3 dans v7, ajoute 1 à v5 et passe à l'état B ;
    • si v3 > v2, la boucle vide v2 dans v7 et passe à l'état X.
  • l'état B est une sur-boucle qui ré-effectue la boucle A après avoir au préalable vidé v7 dans v3;
  • l'état X consiste à vider v3 quand v2 est vide et v3 est non vide.
Instructions
FRACTRAN
Etat courant Indicateurs
d'état
Conditions Actions Etat suivant
\frac{7 \cdot 13}{2 \cdot 3 \cdot 11}, \frac{11}{13} A v11, v13 v2 > 0 et
v3 > 0
Soustraire 1 à v2
Soustraire 1 à v3
Ajouter 1 à v7
A
\frac{1}{3 \cdot 11} v2 = 0 et
v3 > 0
Soustraire 1 à v3
Mettre v11 à 0
X
\frac{5 \cdot 17}{11} v3 = 0 Ajouter 1 à v5
Mettre v11 à 0
Mettre v17 à 1
B
\frac{3 \cdot 19}{7 \cdot 17}, \frac{17}{19} B v17, v19 v7 > 0 Soustraire 1 à v7
Ajouter 1 à v3
B
\frac{11}{17} v7 = 0 Mettre v11 à 1
Mettre v17 à 0
A
\frac{1}{3} X v3 > 0 Soustraire 1 à v3 X
v3 = 0 Stop

L'écriture du programme est alors :

\left( \frac{91}{66}, \frac{11}{13}, \frac{1}{33}, \frac{85}{11}, \frac{57}{119}, \frac{17}{19}, \frac{11}{17}, \frac{1}{3} \right)

Il suffit d'entrer 2a3b11 pour obtenir en sortie 5q7ra = bq + r avec 0 \le r < d.

Exemples plus complexes

Certains programmes bouclent indéfiniment et sont propices à la génération de suites

Algorithme des nombres premiers de Conway

Le programme suivant est présenté par John Conway dans le livre coécrit avec Richard Guy, The book of numbers. John Conway les appelle « les 14 fractions fantastiques »[1].

\frac{17}{91}; \frac{78}{85}; \frac{19}{51}; \frac{23}{38}; \frac{29}{33}; \frac{77}{29}; \frac{1}{17}; \frac{11}{13}; \frac{13}{11}; \frac{15}{14}; \frac{15}{2}; \frac{55}{1}

Ce programme, appliqué à l'entier 2, génère une suite qui contient tous les termes de la forme 2pp est un nombre premier. Réciproquement, toute puissance de 2 dans cette suite a pour exposant 1 ou un nombre premier. Cette suite porte le nom de Conway primegame[2]

L'algorithme est essentiellement un algorithme de division euclidienne. Le principe est le suivant : partant d'un nombre de la forme 2n7m où 0 ≤ m < n, l'algorithme tente de diviser n+1 par tous les nombres de n à 1, jusqu'à ce qu'il trouve le plus grand entier k tel que k divise n+1 et retourne alors 2n + 17k − 1. Les seuls cas où l'algorithme rend une puissance de 2 sont les cas où k=1, c'est-à-dire les cas où n+1 est premier[note 3].

Suite de Fibonacci

Le programme suivant

23/95, 57/23, 17/39, 130/17, 11/14, 35/11, 19/13, 1/19, 35/2, 13/7, 7

appliqué à l'entier 3, génère une suite qui contient tous les termes de la forme 2a3b où a et b sont deux termes consécutifs de la suite de Fibonacci. Réciproquement, tout terme de la suite de la forme 2a3b a pour exposant deux termes consécutifs de la suite de Fibonacci.

L'algorithme est essentiellement un algorithme d'addition qui consiste, en partant de 2a3b à fournir 2b3a + b.

Suite de Syracuse

Ce programme présenté par Kenneth G. Monks[3] :

1/11, 136/15; 5/17; 4/5; 26/21; 7/13; 1/7; 33/4, 5/2; 7

appliqué à 2N, génère une suite qui contient successivement tous les termes 2b, où b parcourt les termes de la suite de Syracuse de premier terme N. Réciproquement, toute puissance de 2 dans cette suite a pour exposant un élément de la suite de Syracuse. L'idée de Kenneth Monks est d'étudier les suites de Syracuse cycliques en cherchant les propriétés des suites cycliques générées par ce programme[3].

Notes et références

  • Notes
  1. dans l'article FRACTRAN : A simple universal programming language for arithmétic, paru dans le livre de Cover et Gopinath, Open problems in communication et computation.
  2. Des algorithmes similaires sont décrits dans cette page ou sur ce blog.
  3. Pour une explication détaillée, voir Julian Havil, Nonplussed!:mathemalical proof of implausible ideas, Princeton University Press, 2007, ISBN 9780691120560
  • Références
  1. a et b Julian Havil, Nonplussed!:mathemalical proof of implausible ideas, p 162-163.
  2. suite A007542 de l’OEIS
  3. a et b Kenneth G. Monks, « 3x+1 minus the + », in Discrete Mathematics and Theoretical Computer Science 5, 2002, 47–54

Ressources bibliographiques

  • John Conway, « FRACTRAN: A simple universal programming language for arithmetic », in Open problems in communication and computation, Thomas M. Cover (Editor), B. Gopinath (Editor), Springer; 1 edition (November 9, 1987);
  • Julian Havil, Nonplussed!:mathemalical proof of implausible ideas, Princeton University Press, 2007;
  • Kenneth G. Monks, « 3x+1 minus the + », in Discrete Mathematics and Theoretical Computer Science 5, 2002, 47–54.

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article FRACTRAN de Wikipédia en français (auteurs)

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • FRACTRAN — is a Turing complete functional esoteric programming language invented by the mathematician John Conway. FRACTRAN programs are given as a list of fractions which are applied to a single argument p as follows: #multiply p by each fraction fnof; in …   Wikipedia

  • Formule Pour Les Nombres Premiers — Formules pour les nombres premiers En mathématiques, la recherche de formules exactes donnant tous les nombres premiers (ou même donnant uniquement des nombres premiers) s est généralement avérée vaine, ce qui a amené à se contenter de formules… …   Wikipédia en Français

  • Formule pour les nombres premiers — Formules pour les nombres premiers En mathématiques, la recherche de formules exactes donnant tous les nombres premiers (ou même donnant uniquement des nombres premiers) s est généralement avérée vaine, ce qui a amené à se contenter de formules… …   Wikipédia en Français

  • Formula for primes — In mathematics, a formula for primes is a formula generating the prime numbers, exactly and without exception. No easily computable such formula is known. A great deal is known about what, more precisely, such a formula can and cannot be.Prime… …   Wikipedia

  • Conjecture de Syracuse — En mathématiques, on appelle suite de Syracuse une suite d entiers naturels définie de la manière suivante : On part d un nombre entier plus grand que zéro ; s’il est pair, on le divise par 2 ; s’il est impair, on le multiplie par… …   Wikipédia en Français

  • Formules pour les nombres premiers — En mathématiques, la recherche de formules exactes donnant tous les nombres premiers (ou même donnant uniquement des nombres premiers) s est généralement avérée vaine, ce qui a amené à se contenter de formules approchées. Cette page recense les… …   Wikipédia en Français

  • John Horton Conway — Pour les articles homonymes, voir Conway. John Horton Conway John Horton Conway en 2005 Naissance 26& …   Wikipédia en Français

  • Langage de programmation exotique — Un langage de programmation exotique est un langage de programmation imaginé comme un test des limites de la création de langages de programmation, un exercice intellectuel ou encore une blague, sans aucune intention de créer un langage… …   Wikipédia en Français

  • Suite de Fibonacci — La suite de Fibonacci est une suite d entiers très connue. Elle doit son nom à Leonardo Fibonacci, dit Leonardo Pisano, un mathématicien italien du XIIIe siècle qui, dans un problème récréatif posé dans un de ses ouvrages, le Liber Abaci,… …   Wikipédia en Français

  • Projet:Mathématiques/Liste des articles de mathématiques — Cette page n est plus mise à jour depuis l arrêt de DumZiBoT. Pour demander sa remise en service, faire une requête sur WP:RBOT Cette page recense les articles relatifs aux mathématiques, qui sont liés aux portails de mathématiques, géométrie ou… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”