### 2.5.7 Faire une hypothèse sur une variable : assume supposons

assume ou supposons permet de faire des hypothèses sur une variable.
assume ou supposons a comme argument un nom de variable suivi d’une égalité ou d’une inégalité représentant l’hypothèse faite ou bien un nom de variable suivi d’une virgule et de son type. On peut mettre plusieurs hypothèses à condition de les relier par and ou or selon ce que l’on veut faire ! Toutefois, il faut utiliser additionally comme deuxième argument de assume pour spécifier le type de la variable et une plage de valeurs pour cette variable.
assume renvoie le nom de la variable sur laquelle on a fait les hypothèses ou le type de cette variable.
La commande about, qui a comme argument un nom de variable, permet de connaître les hypothèses faites sur cette variable.
Attention Si on fait une autre hypothèse avec assume, l’ancienne hypothèse est effacée : si vous voulez rajoutez une nouvelle hypothèse il faut utiliser la commande additionally ou mettre additionally comme deuxième argument de assume.
Remarques Cela permet de faire de la géométrie interactive tout en faisant du calcul formel. Par exemple, si on met en géométrie :
assume(a=2);assume(b=3); A:=point(a+i*b), la figure sera construite avec les valeurs données aux variables mais les calculs seront faits avec les variables symboliques a et b car pour toutes les sorties graphiques et seulement sur celles-ci la variable est évaluée.
On tape

assume(a=2)

Ou on tape

supposons(a=2)

Ou on tape

assume(a=2)

Ou on tape

supposons(a:=2)

Ou on tape directement :

supposons(a=[2,-5,5,0.1])

On obtient :

un curseur permettant de faire varier a

Lorsque l’on fait varier a, la commande assume(a=2) se transforme en :
supposons(a=[2.1,-5.0,5.0,0.1]) et
les niveaux qui suivent sont évalués. Si il n’y a rien sur le niveau suivant on aura undef en réponse.
Cela signifie que a peut varier entre -5 et 5 avec un pas de 0.1 et que a vaut 2.1. Si sur les deux niveaux suivants on a
evalf(a+2) et evalf(a+3)
les réponses évolueront selon la position du curseur (curseur en 2.1, on aura 4.1 et 5.1 puis curseur en 2.2, on aura 4.2 et 5.2). Mais si sur les deux niveaux suivants on a a+2 et a+3, les réponses seront toujours a+2 et a+3.
On tape pour supposer que la variable formelle a est positive :

assume(a>0)

On obtient :

a

On tape :

about(a)

On obtient :

assume[[],[[0,+infinity]],[0]]

cela signifie que a est une variable réelle appartenant à l’intervalle [0;+∞ et que 0 en est exclu (on a le domaine, l’intervalle et les valeurs exclues).
On tape pour supposer que la variable formelle a est dans [2;4[∪ ]6;∞[ :

assume((a>=2 and a<4) or a>6)

On obtient :

a

On tape :

about(a)

On obtient :

assume[DOM_FLOAT,[[2,4],[6,+(infinity)]],[4,6]]

cela signifie que a est une variable réelle appartenant à [2;4]∪ [6;∞[ et que 4 et 6 sont exclus (on a le domaine, l’intervalle et les valeurs exclues).
On tape :

abs(1-a)

On obtient :

-1+a

On tape pour dire que b est un entier :

assume(b,integer)

On obtient :

DOM_INT

On tape :

about(b)

On obtient :

[DOM_INT]

On tape pour dire que b est un entier de l’intervalle ]−5,10[ :

assume(b,integer);additionally(b>-5 and b<10)

ou on tape :

assume(b,integer);assume(b>-5 and b<10,additionally)

On obtient :

(integer,b)

puis on tape :

about(b)

On obtient :

assume[integer,[[-5,10]],[-5,10]]

ce qui signifie que b est un entier de l’intervalle [-5,10] et que les bornes -5,et 10 en sont exclues.
On tape pour dire que b est un entier de l’intervalle ]−5,10] :

assume(b,integer);additionally(b>-5 and b<=10)

ou on tape :

assume(b,integer);assume(b>-5 and b<=10,additionally)

On obtient :

(integer,b)

puis on tape :

about(b)

On obtient :

assume[integer,[[-5,10]],[-5]]

ce qui signifie que b est un entier de l’intervalle [-5,10] et que la borne -5 en est exclue.
Remarque
Lorsque assume a comme argument une seule égalité et que la commande est tapée dans une ligne d’entrée d’un écran de géométrie, cela met un petit curseur en haut et à droite de cet écran. Le nom du paramètre est noté à droite du curseur. Ce curseur permet de changer la valeur du paramètre et cette valeur sera notée à gauche du curseur. On tape par exemple :
assume(a=[2,-10,10,0.1])
Cela signifie que tous les calculs seront faits avec a quelconque, à condition que les points aient des coordonnèes exactes, mais que la figure sera tracée avec a=2 et que l’on pourra faire varier cette figure avec le petit curseur en fonction de a de -10 à +10, avec un pas de 0.1. Si on met assume(a=[2,-5,5), a varie de -5 à +5 avec un pas de (5-(-5))/100), et si on met assume(a=2), a varie de WX- à WX+ et le pas est ((WX+)-(WX-))/100.

Attention En géométrie il faut donc travailler avec des coordonnèes exactes par exemple :
A:=point(i);assume(b:=2); B:=point(b); puis on tape :
longueur(A,B);
On obtient :
sqrt((-b)`^`2+1)
Mais :
A:=point(0.0+i);assume(b:=2); B:=point(b); puis on tape :
longueur(A,B);
On obtient la valeur approchée de √(1+4) :
2.2360679775
Attention Un paramètre défini par assume n’est évalué que pour les sorties graphiques, sinon il faut utiliser evalf.
Exemple : On tape :
dr(m):=ifte(m==2,droite(x=1),droite(x+(m-2)*y-1))
puis dans un niveau de géométrie, on tape :
supposons(a=[2.0,-5,5,0.1])
dr(evalf(a))
qui renvoie droite(x=2) lorsque a:=2 et droite(y=(-5*x+5)) lorsque a:=2.2 alors que
dr(a) renvoie droite(y=(-1/(a-2)*x+1/(a-2))) quelque soit a et il y aura donc une erreur pour a=2....
Attention à la différence entre assume et element
Si b:=element(0..3,1,0.1) est tapé dans une ligne d’entrée d’un écran de géométrie, cela met aussi un petit curseur en haut et à droite de cet écran avec b=1 et on pourra faire varier b avec le petit curseur de 0 à 3 avec un pas de 0.1. Mais la variable b n’est pas formelle !
On tape

a;b

On obtient :

(a,1)