Arithmétique - L2 Informatique - 2022-2023¶


Enseignants: San Vũ Ngọc & Pierre Houedry & Fabien Narbonne¶


(IRMAR, Université de Rennes 1)



Références¶

  • Page Web: https://perso.univ-rennes1.fr/san.vu-ngoc/blog/arithmetique/

  • Cours de base: http://exo7.emath.fr/cours/livre-algebre-1.pdf

  • Cours avancé: https://perso.univ-rennes1.fr/christophe.mourougane/enseignements/2014-15/AR1/poly-test.pdf



Python¶

Langage très facile à apprendre, beaucoup d'aide en ligne. Attention aux indentations.

In [1]:
for i in range(5):
    print (i)
print ("Hello")
print (i) # Horreur
0
1
2
3
4
Hello
4

I. Introduction¶

N'hésitez pas à fouiller sur internet. Par exemple,

  • La Chaîne Youtube "Science4all" de Lê Nguyên Hoang

  • La Chaîne "Micmaths" de Mickaël Launay

  • Les "5 minutes Lebesgue" de l'Institut de Recherche Mathématiques de Rennes !

II. Entiers naturels et relatifs¶

1. construction des entiers naturels¶

In [2]:
from IPython.display import IFrame

IFrame("https://www.youtube.com/embed/oKprCgIKWxo?rel=0&&showinfo=0",560,315)
Out[2]:
In [3]:
zero = frozenset()
zero
Out[3]:
frozenset()
In [4]:
un = frozenset([zero])
un
Out[4]:
frozenset({frozenset()})
In [5]:
deux = frozenset([zero,un])
deux
Out[5]:
frozenset({frozenset(), frozenset({frozenset()})})
In [6]:
trois = frozenset([zero,un,deux])
trois
Out[6]:
frozenset({frozenset(),
           frozenset({frozenset()}),
           frozenset({frozenset(), frozenset({frozenset()})})})
In [7]:
len(zero)
Out[7]:
0
In [8]:
len(un)
Out[8]:
1
In [9]:
len(trois)
Out[9]:
3
In [10]:
trois == deux.union([deux])
Out[10]:
True
In [11]:
def successeur(chiffre):
    return chiffre.union([chiffre])
    
In [12]:
un == successeur(zero)
Out[12]:
True
In [13]:
deux == successeur(trois)
Out[13]:
False
In [14]:
for n in trois:
    print(n)
frozenset()
frozenset({frozenset()})
frozenset({frozenset(), frozenset({frozenset()})})

L'addition étant définie par récurrence, on peut chercher à la programmer par une fonction récursive. Mais, attention, une fonction récursive est en fait une récurrence inversée: étant donné $n$, on doit appeler la fonction avec $n-1$. Le problème est qu'ici on n'a pas (encore, voir plus bas !) défini la soustraction (ou même la fonction "prédecesseur" ou "-1").

On s'en sort en examinant ce que fait la définition par récurrence de $n+k$: c'est succ(succ(...(succ(n+0))..)) où l'opération succ est effectuée $k$ fois. On peut donc programmer:

In [15]:
def addition(n,k):
    r = n
    for _i in k:  # on parcourt l'ensemble "k", qui contient "k éléments"
        r = successeur(r)
    return r
In [16]:
addition(deux,un)
Out[16]:
frozenset({frozenset(),
           frozenset({frozenset()}),
           frozenset({frozenset(), frozenset({frozenset()})})})
In [17]:
_ == trois
Out[17]:
True

Évidemment, ce n'est pas une représentation efficace des entiers !

In [18]:
def of_int(n):
    assert (n >= 0)
    if n == 0:
        return (zero)
    else:
        return successeur(of_int(n - 1))
In [19]:
of_int(0)
Out[19]:
frozenset()
In [20]:
of_int(2) == deux
Out[20]:
True
In [21]:
dix = of_int(10)
In [22]:
len (dix)
Out[22]:
10
In [23]:
dix
Out[23]:
frozenset({frozenset(),
           frozenset({frozenset()}),
           frozenset({frozenset(), frozenset({frozenset()})}),
           frozenset({frozenset(),
                      frozenset({frozenset()}),
                      frozenset({frozenset(), frozenset({frozenset()})})}),
           frozenset({frozenset(),
                      frozenset({frozenset()}),
                      frozenset({frozenset(), frozenset({frozenset()})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})})})}),
           frozenset({frozenset(),
                      frozenset({frozenset()}),
                      frozenset({frozenset(), frozenset({frozenset()})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})})})}),
           frozenset({frozenset(),
                      frozenset({frozenset()}),
                      frozenset({frozenset(), frozenset({frozenset()})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})})})}),
           frozenset({frozenset(),
                      frozenset({frozenset()}),
                      frozenset({frozenset(), frozenset({frozenset()})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})})})})}),
           frozenset({frozenset(),
                      frozenset({frozenset()}),
                      frozenset({frozenset(), frozenset({frozenset()})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()}),
                                                                             frozenset({frozenset(),
                                                                                        frozenset({frozenset()})})})})})})})}),
           frozenset({frozenset(),
                      frozenset({frozenset()}),
                      frozenset({frozenset(), frozenset({frozenset()})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()}),
                                                                             frozenset({frozenset(),
                                                                                        frozenset({frozenset()})})})})})})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()}),
                                                                             frozenset({frozenset(),
                                                                                        frozenset({frozenset()})})})})})}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()}),
                                                                             frozenset({frozenset(),
                                                                                        frozenset({frozenset()})})})})}),
                                            frozenset({frozenset(),
                                                       frozenset({frozenset()}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()}),
                                                                             frozenset({frozenset(),
                                                                                        frozenset({frozenset()})})})}),
                                                       frozenset({frozenset(),
                                                                  frozenset({frozenset()}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()})}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()}),
                                                                             frozenset({frozenset(),
                                                                                        frozenset({frozenset()})})}),
                                                                  frozenset({frozenset(),
                                                                             frozenset({frozenset()}),
                                                                             frozenset({frozenset(),
                                                                                        frozenset({frozenset()})}),
                                                                             frozenset({frozenset(),
                                                                                        frozenset({frozenset()}),
                                                                                        frozenset({frozenset(),
                                                                                                   frozenset({frozenset()})})})})})})})})})})
In [24]:
cinq = of_int(5)
In [25]:
addition(cinq, cinq) == dix
Out[25]:
True

2. L'ensemble de "tous" les entiers naturels¶

Python 3 utilise par défaut des entiers "longs" de taille arbitraire (ou presque...)

In [26]:
2**62
Out[26]:
4611686018427387904
In [27]:
n=2**1234
n
Out[27]:
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184
In [28]:
type(n)
Out[28]:
int
In [29]:
IFrame("https://www.youtube.com/embed/oqMYAVV-hsA?rel=0&&showinfo=0",560,315)
Out[29]:

Langages informatiques: Attention aux implémentations des entiers!¶

Le danger vient souvent des langages non strictement typés, ou de l'utilisation d'un type mal compris (int au lieu de bigint). Dans la plupart des langages informatiques, le type "int" est en fait cyclique: par exemple pour des entiers codés sur 64bit, on aura:

4611686018427387903 + 1 = -4611686018427387904

Mais il y a pire. Par exemple javascript est buggué: https://jsconsole.com/ (ou même la console de votre navigateur, si vous n'y croyez pas). Essayez 2**55.

(Pourquoi la réponse donnée 36028797018963970 ne peut pas être correcte ?) Imaginez si un ingénieur utilise ça pour contrôler la trajectoire d'une fusée dans l'espace...

Essayez 2**55 == 2**55 - 1

Exemple de langage fortement typé: ocaml.

En python 3, le passage aux entiers "longs" est automatique (et invisible à l'utilisateur), c'est très pratique pour nous. (Mais pas forcément très performant.) Attention, ce n'est pas le cas en python 2.

In [30]:
2**55, 2**62-1
Out[30]:
(36028797018963968, 4611686018427387903)

3. Ordre¶

In [31]:
sorted([5,1,3,8,10,2])
Out[31]:
[1, 2, 3, 5, 8, 10]

Python utilise <= pour tester l'inclusion des frozenset, donc c'est tout bon pour nous !

In [32]:
deux <= trois
Out[32]:
True

Comment trouver le prédécesseur d'un entier $n$ ? (c'est-à-dire $n-1$). Astuce: c'est le plus grand élement du frozenset $n$:

In [33]:
max(trois)
Out[33]:
frozenset({frozenset(), frozenset({frozenset()})})
In [34]:
max(trois) == deux
Out[34]:
True
In [35]:
def pred (n):
    return max(n)

On peut re-définir l'addition avec une fonction récursive plus naturelle:

In [36]:
def addition_rec (n,k):
    if k == zero:
        return n
    else:
        return successeur(addition(n,pred(k)))
In [37]:
s = addition_rec (deux, trois)
s
Out[37]:
frozenset({frozenset(),
           frozenset({frozenset()}),
           frozenset({frozenset(), frozenset({frozenset()})}),
           frozenset({frozenset(),
                      frozenset({frozenset()}),
                      frozenset({frozenset(), frozenset({frozenset()})})}),
           frozenset({frozenset(),
                      frozenset({frozenset()}),
                      frozenset({frozenset(), frozenset({frozenset()})}),
                      frozenset({frozenset(),
                                 frozenset({frozenset()}),
                                 frozenset({frozenset(),
                                            frozenset({frozenset()})})})})})
In [38]:
len(s)
Out[38]:
5
In [39]:
s == addition(deux, trois)
Out[39]:
True
In [40]:
s == addition_rec(trois, deux)
Out[40]:
True