• Aucun résultat trouvé

Lois, structures, matrices en informatique INFO2 - Semaines 43 & 45 Guillaume CONNAN

N/A
N/A
Protected

Academic year: 2022

Partager "Lois, structures, matrices en informatique INFO2 - Semaines 43 & 45 Guillaume CONNAN"

Copied!
188
0
0

Texte intégral

(1)

Lois, structures, matrices en informatique

INFO2 - Semaines 43 & 45

Guillaume CONNAN

IUT de Nantes - Dpt d’informatique

Dernière mise à jour : 24 octobre 2013 à 14:48

(IUT de Nantes - Dpt d’informatique ) 1 / 109

(2)

Sommaire

1 Loi de composition 2 Groupes

3 Anneaux et corps

4 Aparté : ze Haskell Touch 5 Structure d’espace vectoriel 6 Les matrices

(3)

Loi de composition

Sommaire

1 Loi de composition 2 Groupes

3 Anneaux et corps

4 Aparté : ze Haskell Touch 5 Structure d’espace vectoriel 6 Les matrices

(IUT de Nantes - Dpt d’informatique ) 3 / 109

(4)

Loi de composition Définitions

Définition 1 (Loi de composition interne (LCI))

Une loi de composition interne définie sur un ensemble E est une fonction totale (ou application) deEE dans E. On dit alors que E est un magma.

(5)

Loi de composition Définitions

Définition 2 (Stabilité)

Un ensemble E est stable par une opération? si, et seulement si :

³

∀〈x,y〉´³

¡〈x,y〉 ∈E⊗E¢→¡

x?y∈E¢´

(IUT de Nantes - Dpt d’informatique ) 5 / 109

(6)

Loi de composition Définitions

Définition 3 (Loi de composition externe (LCE))

Une loi de composition externe définie sur un ensemble E et à opérateurs dans un ensemble K est une fonction totale (ou application) de KE dans E.

(7)

Loi de composition Définitions

Définition 4 (Morphisme)

SoitE,?〉 etF, †〉deux magmas etϕ une fonction totale deE dansF. On dit que ϕest un morphisme de E dans F si, et seulement si :

¡∀x¢¡∀y¢¡ϕ(x?y)=ϕ(x)†ϕ(y)¢

(IUT de Nantes - Dpt d’informatique ) 7 / 109

(8)

Loi de composition Définitions

Définition 5 (Isomorphisme)

SoitE,?〉 etF, †〉deux magmas etϕ une fonction totale deE dansF. On dit que ϕest un morphisme de E dans F si, et seulement si, c’est un morphisme BIJECTIF de E dans F.

(9)

Loi de composition Propriétés des lois (de composition interne)

Définition 6 (Commutativité)

Une LCI?sur E est commutative si, et seulement si (x)(y)(x?y=y?x)

(IUT de Nantes - Dpt d’informatique ) 9 / 109

(10)

Loi de composition Propriétés des lois (de composition interne)

Définition 7 (Associativité)

Une LCI?sur E est associative si, et seulement si (x)(y)(z)(x?(y?z)=(x?y)?z)

Un magma muni d’une loi associative est appelé... un magma associatif.

(11)

Loi de composition Propriétés des lois (de composition interne)

Définition 8 (Élément neutre)

Un élément neutre e d’une LCI?sur E est un élément e? qui vérifie : (∀x)(x?e?=e??x=x)

Un magma associatif admettant un élément neutre est unmonoïde (ou un magma associatif unifère).

Pouvez-vous démontrer que si l’élément neutre existe, il est unique ?

(IUT de Nantes - Dpt d’informatique ) 11 / 109

(12)

Loi de composition Propriétés des lois (de composition interne)

Définition 8 (Élément neutre)

Un élément neutre e d’une LCI?sur E est un élément e? qui vérifie : (∀x)(x?e?=e??x=x)

Un magma associatif admettant un élément neutre est unmonoïde (ou un magma associatif unifère).

Pouvez-vous démontrer que si l’élément neutre existe, il est unique ?

(13)

Loi de composition Propriétés des lois (de composition interne)

Définition 8 (Élément neutre)

Un élément neutre e d’une LCI?sur E est un élément e? qui vérifie : (∀x)(x?e?=e??x=x)

Un magma associatif admettant un élément neutre est unmonoïde (ou un magma associatif unifère).

Pouvez-vous démontrer que si l’élément neutre existe, il est unique ?

(IUT de Nantes - Dpt d’informatique ) 11 / 109

(14)

Loi de composition Propriétés des lois (de composition interne)

Définition 9 (Élément symétrisable)

Soitx un élément de E. Il est inversible (ou symétrisable) par? si, et seulement si,

(y)(x?y=y?x=e?)

Pouvez-vous démontrer que six admet un symétrique, alors ce symétrique est unique ?

(15)

Loi de composition Propriétés des lois (de composition interne)

Définition 9 (Élément symétrisable)

Soitx un élément de E. Il est inversible (ou symétrisable) par? si, et seulement si,

(y)(x?y=y?x=e?)

Pouvez-vous démontrer que six admet un symétrique, alors ce symétrique est unique ?

(IUT de Nantes - Dpt d’informatique ) 12 / 109

(16)

Loi de composition Propriétés des lois (de composition interne)

Définition 9 (Élément symétrisable)

Soitx un élément de E. Il est inversible (ou symétrisable) par? si, et seulement si,

(y)(x?y=y?x=e?)

Pouvez-vous démontrer que six admet un symétrique, alors ce symétrique est unique ?

(17)

Loi de composition Propriétés des lois (de composition interne)

Définition 10 (Régularité)

Un élément ade E est dit régulier à gauche (ousimplifiable à gauche) si, et seulement si :

¡∀x¢¡y¢¡(a?x=a?y)(x=y)¢ On a une définition similaire de la régularité à droite.

Un élément à la fois régulier à gauche et à droite est dit régulier.

Une loi telle que tout élément soit régulier est dite régulière.

Un élément inversible est régulier (vérifiez-le). Un élément régulier est-il inversible ?

(IUT de Nantes - Dpt d’informatique ) 13 / 109

(18)

Loi de composition Propriétés des lois (de composition interne)

Définition 10 (Régularité)

Un élément ade E est dit régulier à gauche (ousimplifiable à gauche) si, et seulement si :

¡∀x¢¡y¢¡(a?x=a?y)(x=y)¢ On a une définition similaire de la régularité à droite.

Un élément à la fois régulier à gauche et à droite est dit régulier.

Une loi telle que tout élément soit régulier est dite régulière.

Un élément inversible est régulier (vérifiez-le). Un élément régulier est-il inversible ?

(19)

Loi de composition Propriétés des lois (de composition interne)

Définition 10 (Régularité)

Un élément ade E est dit régulier à gauche (ousimplifiable à gauche) si, et seulement si :

¡∀x¢¡y¢¡(a?x=a?y)(x=y)¢ On a une définition similaire de la régularité à droite.

Un élément à la fois régulier à gauche et à droite est dit régulier.

Une loi telle que tout élément soit régulier est dite régulière.

Un élément inversible est régulier (vérifiez-le). Un élément régulier est-il inversible ?

(IUT de Nantes - Dpt d’informatique ) 13 / 109

(20)

Loi de composition Propriétés des lois (de composition interne)

Définition 11 (Distributivité)

On dit que la loi ?définie sur E est distributive sur†définie sur E si, et seulement si :

³

∀x´³∀y´³∀z´³¡x?(y†z)=(x?y)†(x?z)¢∧¡

(y†z)?x=(y?x)†(z?x)¢´

(21)

Loi de composition Propriétés des lois (de composition interne)

Définition 12 (Élément absorbant)

Un élément absorbant d’une LCI ?sur E est un élémenta? qui vérifie : (x)(x?a?=a??x=a?)

Montrez que si un tel élément existe, il est unique.

(IUT de Nantes - Dpt d’informatique ) 15 / 109

(22)

Loi de composition Propriétés des lois (de composition interne)

Définition 12 (Élément absorbant)

Un élément absorbant d’une LCI ?sur E est un élémenta? qui vérifie : (x)(x?a?=a??x=a?)

Montrez que si un tel élément existe, il est unique.

(23)

Loi de composition Propriétés des lois (de composition interne)

Définition 12 (Élément absorbant)

Un élément absorbant d’une LCI ?sur E est un élémenta? qui vérifie : (x)(x?a?=a??x=a?)

Montrez que si un tel élément existe, il est unique.

(IUT de Nantes - Dpt d’informatique ) 15 / 109

(24)

Loi de composition Propriétés des lois (de composition interne)

Définition 13 (Élément involutif)

Soit?une loi sur un ensemble E admettant un élément neutre e?. Alorsx est involutif si, et seulement si,x?x=e?.

Définition 14 (Élément idempotent) Soit?une loi sur un ensemble E.

Alorsx est idempotentsi, et seulement si,x?x=x.

(25)

Loi de composition Propriétés des lois (de composition interne)

Définition 13 (Élément involutif)

Soit?une loi sur un ensemble E admettant un élément neutre e?. Alorsx est involutif si, et seulement si,x?x=e?.

Définition 14 (Élément idempotent) Soit?une loi sur un ensemble E.

Alorsx est idempotentsi, et seulement si,x?x=x.

(IUT de Nantes - Dpt d’informatique ) 16 / 109

(26)

Loi de composition Propriétés des lois (de composition interne)

Définition 13 (Élément involutif)

Soit?une loi sur un ensemble E admettant un élément neutre e?. Alorsx est involutif si, et seulement si,x?x=e?.

Définition 14 (Élément idempotent) Soit?une loi sur un ensemble E.

Alorsx est idempotentsi, et seulement si,x?x=x.

(27)

Groupes

Sommaire

1 Loi de composition 2 Groupes

3 Anneaux et corps

4 Aparté : ze Haskell Touch 5 Structure d’espace vectoriel 6 Les matrices

(IUT de Nantes - Dpt d’informatique ) 17 / 109

(28)

Groupes

(29)

Groupes

Définition 15 (Groupe)

Un groupe est un monoïde tel que tout élément est inversible.

Définition 16 (Sous-groupe)

〈H,?〉est un sous-groupe de G,?〉 si, et seulement si, H est une partie de G et H,?〉est un groupe.

(IUT de Nantes - Dpt d’informatique ) 19 / 109

(30)

Groupes

Définition 15 (Groupe)

Un groupe est un monoïde tel que tout élément est inversible.

Définition 16 (Sous-groupe)

〈H,?〉est un sous-groupe de G,?〉 si, et seulement si, H est une partie de G et H,?〉est un groupe.

(31)

Groupes

Définition 15 (Groupe)

Un groupe est un monoïde tel que tout élément est inversible.

Définition 16 (Sous-groupe)

〈H,?〉est un sous-groupe de G,?〉 si, et seulement si, H est une partie de G et H,?〉est un groupe.

(IUT de Nantes - Dpt d’informatique ) 19 / 109

(32)

Anneaux et corps

Sommaire

1 Loi de composition 2 Groupes

3 Anneaux et corps

4 Aparté : ze Haskell Touch 5 Structure d’espace vectoriel 6 Les matrices

(33)

Anneaux et corps Anneaux

(IUT de Nantes - Dpt d’informatique ) 21 / 109

(34)

Anneaux et corps Anneaux

Définition 17 (Anneau)

Soit A un ensemble muni de deux lois et.

On dit que A,, 〉est un anneau si, et seulement si :

〈A,〉est un groupe commutatif ; est associative ;

est distributive sur.

Si est commutative, alors l’anneau est dit commutatif.

Si admet un élément neutre, l’anneau est ditunitaire.

Les éléments d’un anneau unitaire qui admettent un symétrique par sont dits inversibles. On note A l’ensemble des éléments inversibles de A.

(35)

Anneaux et corps Anneaux

Définition 17 (Anneau)

Soit A un ensemble muni de deux lois et.

On dit que A,, 〉est un anneau si, et seulement si :

〈A,〉est un groupe commutatif ; est associative ;

est distributive sur.

Si est commutative, alors l’anneau est dit commutatif.

Si admet un élément neutre, l’anneau est ditunitaire.

Les éléments d’un anneau unitaire qui admettent un symétrique par sont dits inversibles. On note A l’ensemble des éléments inversibles de A.

(IUT de Nantes - Dpt d’informatique ) 22 / 109

(36)

Anneaux et corps Anneaux

Définition 17 (Anneau)

Soit A un ensemble muni de deux lois et.

On dit que A,, 〉est un anneau si, et seulement si :

〈A,〉est un groupe commutatif ; est associative ;

est distributive sur.

Si est commutative, alors l’anneau est dit commutatif.

Si admet un élément neutre, l’anneau est ditunitaire.

Les éléments d’un anneau unitaire qui admettent un symétrique par sont dits inversibles. On note A l’ensemble des éléments inversibles de A.

(37)

Anneaux et corps Anneaux

Définition 17 (Anneau)

Soit A un ensemble muni de deux lois et.

On dit que A,, 〉est un anneau si, et seulement si :

〈A,〉est un groupe commutatif ; est associative ;

est distributive sur.

Si est commutative, alors l’anneau est dit commutatif.

Si admet un élément neutre, l’anneau est ditunitaire.

Les éléments d’un anneau unitaire qui admettent un symétrique par sont dits inversibles. On note A l’ensemble des éléments inversibles de A.

(IUT de Nantes - Dpt d’informatique ) 22 / 109

(38)

Anneaux et corps Anneaux

Définition 17 (Anneau)

Soit A un ensemble muni de deux lois et.

On dit que A,, 〉est un anneau si, et seulement si :

〈A,〉est un groupe commutatif ; est associative ;

est distributive sur.

Si est commutative, alors l’anneau est dit commutatif.

Si admet un élément neutre, l’anneau est ditunitaire.

Les éléments d’un anneau unitaire qui admettent un symétrique par sont dits inversibles. On note A l’ensemble des éléments inversibles de A.

(39)

Anneaux et corps Anneaux

Définition 17 (Anneau)

Soit A un ensemble muni de deux lois et.

On dit que A,, 〉est un anneau si, et seulement si :

〈A,〉est un groupe commutatif ; est associative ;

est distributive sur.

Si est commutative, alors l’anneau est dit commutatif.

Si admet un élément neutre, l’anneau est ditunitaire.

Les éléments d’un anneau unitaire qui admettent un symétrique par sont dits inversibles. On note A l’ensemble des éléments inversibles de A.

(IUT de Nantes - Dpt d’informatique ) 22 / 109

(40)

Anneaux et corps Anneaux

Définition 17 (Anneau)

Soit A un ensemble muni de deux lois et.

On dit que A,, 〉est un anneau si, et seulement si :

〈A,〉est un groupe commutatif ; est associative ;

est distributive sur.

Si est commutative, alors l’anneau est dit commutatif.

Si admet un élément neutre, l’anneau est ditunitaire.

Les éléments d’un anneau unitaire qui admettent un symétrique par sont dits inversibles. On note A l’ensemble des éléments inversibles de A.

(41)

Anneaux et corps Anneaux

Définition 17 (Anneau)

Soit A un ensemble muni de deux lois et.

On dit que A,, 〉est un anneau si, et seulement si :

〈A,〉est un groupe commutatif ; est associative ;

est distributive sur.

Si est commutative, alors l’anneau est dit commutatif.

Si admet un élément neutre, l’anneau est ditunitaire.

Les éléments d’un anneau unitaire qui admettent un symétrique par sont dits inversibles. On note A l’ensemble des éléments inversibles de A.

(IUT de Nantes - Dpt d’informatique ) 22 / 109

(42)

Anneaux et corps Corps

Définition 18 (Corps)

SoitK un ensemble muni de deux LCIet . Le triplet〈K,, 〉 possède une structure decorpssi, et seulement si,

〈K,, 〉a une structure d’anneau unitaire ;

〈K\ {e}, 〉a une structure de groupe.

Combien d’éléments a au minimum un corps ?

(43)

Anneaux et corps Corps

Définition 18 (Corps)

SoitK un ensemble muni de deux LCIet . Le triplet〈K,, 〉 possède une structure decorpssi, et seulement si,

〈K,, 〉a une structure d’anneau unitaire ;

〈K\ {e}, 〉a une structure de groupe.

Combien d’éléments a au minimum un corps ?

(IUT de Nantes - Dpt d’informatique ) 23 / 109

(44)

Anneaux et corps Corps

Définition 18 (Corps)

SoitK un ensemble muni de deux LCIet . Le triplet〈K,, 〉 possède une structure decorpssi, et seulement si,

〈K,, 〉a une structure d’anneau unitaire ;

〈K\ {e}, 〉a une structure de groupe.

Combien d’éléments a au minimum un corps ?

(45)

Anneaux et corps Corps

Définition 18 (Corps)

SoitK un ensemble muni de deux LCIet . Le triplet〈K,, 〉 possède une structure decorpssi, et seulement si,

〈K,, 〉a une structure d’anneau unitaire ;

〈K\ {e}, 〉a une structure de groupe.

Combien d’éléments a au minimum un corps ?

(IUT de Nantes - Dpt d’informatique ) 23 / 109

(46)

Anneaux et corps Corps

Définition 18 (Corps)

SoitK un ensemble muni de deux LCIet . Le triplet〈K,, 〉 possède une structure decorpssi, et seulement si,

〈K,, 〉a une structure d’anneau unitaire ;

〈K\ {e}, 〉a une structure de groupe.

Combien d’éléments a au minimum un corps ?

(47)

Anneaux et corps La classes numériques sur Haskell

class (Eq a, Show a) => Num a where (+), (-), (*) :: a -> a -> a negate :: a -> a abs, signum :: a -> a fromInteger :: Integer -> a

À quelle structure algébrique peut-on associer la classeNum?

(IUT de Nantes - Dpt d’informatique ) 24 / 109

(48)

Anneaux et corps La classes numériques sur Haskell

class (Eq a, Show a) => Num a where (+), (-), (*) :: a -> a -> a negate :: a -> a abs, signum :: a -> a fromInteger :: Integer -> a

À quelle structure algébrique peut-on associer la classeNum?

(49)

Anneaux et corps La classes numériques sur Haskell

class (Num a) =>Fractional a where (/) :: a -> a -> a recip :: a -> a

fromRational :: Rational -> a

À quelle structure algébrique peut-on associer la classeFrational?

(IUT de Nantes - Dpt d’informatique ) 25 / 109

(50)

Anneaux et corps La classes numériques sur Haskell

class (Num a) =>Fractional a where (/) :: a -> a -> a recip :: a -> a

fromRational :: Rational -> a

À quelle structure algébrique peut-on associer la classeFrational?

(51)

Aparté : ze Haskell Touch

Sommaire

1 Loi de composition 2 Groupes

3 Anneaux et corps

4 Aparté : ze Haskell Touch 5 Structure d’espace vectoriel 6 Les matrices

(IUT de Nantes - Dpt d’informatique ) 26 / 109

(52)

Aparté : ze Haskell Touch

John Backus (1924 - 2007)

Much of my work has come from being lazy

(53)

Aparté : ze Haskell Touch

John Backus (1924 - 2007)

Much of my work has come from being lazy

(IUT de Nantes - Dpt d’informatique ) 27 / 109

(54)

Aparté : ze Haskell Touch Les fonctions

Spécifier

SPÉCIFIER la fonction : c’est-à-dire parfois (on peut effectivement s’en passer au besoin) la nommer, donner sontype, i.e. son domaine et son codomaine : on parle designature de type et on explique ce qu’elle fait.

double :: Int -> Int

−− c a l c u l e l e d o u b l e d ’ un e n t i e r : l e r é s u l t a t e s t un e n t i e r

(55)

Aparté : ze Haskell Touch Les fonctions

Spécifier

SPÉCIFIER la fonction : c’est-à-dire parfois (on peut effectivement s’en passer au besoin) la nommer, donner sontype, i.e. son domaine et son codomaine : on parle designature de type et on explique ce qu’elle fait.

double :: Int -> Int

−− c a l c u l e l e d o u b l e d ’ un e n t i e r : l e r é s u l t a t e s t un e n t i e r

(IUT de Nantes - Dpt d’informatique ) 28 / 109

(56)

Aparté : ze Haskell Touch Les fonctions

Réaliser

RÉALISER la fonction c’est associer à la fonction spécifiée une expression.

Pour cela, on utilise desparamètres formels qui font abstraction des valeurs particulières qui leur seront ensuitesubstituées.

double n = 2 * n

(57)

Aparté : ze Haskell Touch Les fonctions

Réaliser

RÉALISER la fonction c’est associer à la fonction spécifiée une expression.

Pour cela, on utilise desparamètres formels qui font abstraction des valeurs particulières qui leur seront ensuitesubstituées.

double n = 2 * n

(IUT de Nantes - Dpt d’informatique ) 29 / 109

(58)

Aparté : ze Haskell Touch Les fonctions

Utiliser

UTILISER a fonction dans une expression en lui donnant desparamètres effectifs (arguments), c’est-à-dire liés à l’application particulière de la fonction :

*Main> (double 3) + (double 7) 20

(59)

Aparté : ze Haskell Touch Les fonctions

Utiliser

UTILISER a fonction dans une expression en lui donnant desparamètres effectifs (arguments), c’est-à-dire liés à l’application particulière de la fonction :

*Main> (double 3) + (double 7) 20

(IUT de Nantes - Dpt d’informatique ) 30 / 109

(60)

Aparté : ze Haskell Touch Curryfication

Haskell Curry (1900 - 1982)

(61)

Aparté : ze Haskell Touch Curryfication

(IUT de Nantes - Dpt d’informatique ) 32 / 109

(62)

Aparté : ze Haskell Touch Curryfication

Unefonction curryfiéeest une fonction de plusieurs variables transformée en une fonction d’une seule variable qui renvoie une fonction ayant une variable de moins...

Cela permet de créer des fonctions partielles.

(63)

Aparté : ze Haskell Touch Curryfication

Unefonction curryfiéeest une fonction de plusieurs variables transformée en une fonction d’une seule variable qui renvoie une fonction ayant une variable de moins...

Cela permet de créer des fonctions partielles.

(IUT de Nantes - Dpt d’informatique ) 33 / 109

(64)

Aparté : ze Haskell Touch Curryfication

plus x y = x + y

plus :: Integer -> Integer -> Integer

plus x y = x + y

Associativité

f = plus 3

Que vaut f(5)?

*Main> f 5 8

*Main> :t f

f :: Integer -> Integer

(65)

Aparté : ze Haskell Touch Curryfication

plus x y = x + y

plus :: Integer -> Integer -> Integer

plus x y = x + y

Associativité

f = plus 3

Que vaut f(5)?

*Main> f 5 8

*Main> :t f

f :: Integer -> Integer

(IUT de Nantes - Dpt d’informatique ) 34 / 109

(66)

Aparté : ze Haskell Touch Curryfication

plus x y = x + y

plus :: Integer -> Integer -> Integer

plus x y = x + y

Associativité

f = plus 3

Que vaut f(5)?

*Main> f 5 8

*Main> :t f

f :: Integer -> Integer

(67)

Aparté : ze Haskell Touch Curryfication

plus x y = x + y

plus :: Integer -> Integer -> Integer

plus x y = x + y

Associativité

f = plus 3

Que vaut f(5)?

*Main> f 5 8

*Main> :t f

f :: Integer -> Integer

(IUT de Nantes - Dpt d’informatique ) 34 / 109

(68)

Aparté : ze Haskell Touch Curryfication

plus x y = x + y

plus :: Integer -> Integer -> Integer

plus x y = x + y

Associativité

f = plus 3

Que vaut f(5)?

*Main> f 5 8

*Main> :t f

f :: Integer -> Integer

(69)

Aparté : ze Haskell Touch Curryfication

plus x y = x + y

plus :: Integer -> Integer -> Integer

plus x y = x + y

Associativité

f = plus 3

Que vaut f(5)?

*Main> f 5 8

*Main> :t f

f :: Integer -> Integer

(IUT de Nantes - Dpt d’informatique ) 34 / 109

(70)

Aparté : ze Haskell Touch Curryfication

plus x y = x + y

plus :: Integer -> Integer -> Integer

plus x y = x + y

Associativité

f = plus 3

Que vaut f(5)?

*Main> f 5 8

*Main> :t f

f :: Integer -> Integer

(71)

Aparté : ze Haskell Touch Curryfication

F(D,A)

plus∈F¡N,F(N,N)¢

(IUT de Nantes - Dpt d’informatique ) 35 / 109

(72)

Aparté : ze Haskell Touch Curryfication

F(D,A)

plus∈F¡N,F(N,N)¢

(73)

Aparté : ze Haskell Touch Un exemple

Exemple 19

Décrire une fonction qui étant donnés quatre flottants leur associe la moyenne des deux nombres parmi les quatre qui ne sont ni le plus grand ni le plus petit. Par exemple, la moyenne olympique de 10, 8, 12 et 14 est 11 et celle de 12, 12, 12 et 12 est 12.

(IUT de Nantes - Dpt d’informatique ) 36 / 109

(74)

Aparté : ze Haskell Touch Un exemple

Spécification

moyenne_olympique4 :: Float -> Float -> Float -> Float -> Float

−− r e n v o i e l a moyenne o l y m p i q u e de 4 f l o t t a n t s s o u s forme d ’ un f l o t t a n t

(75)

Aparté : ze Haskell Touch Un exemple

Réalisation

Nous allons par exemple additionner les quatre nombres, retirer le plus grand et le plus petit puis diviser par 2.

*Main> :t min

min :: Ord a => a -> a -> a

*Main> min ’a’ ’b’

’a’

*Main> min 5 3 3

*Main> min "Tralala" "Pouet Pouet"

"Pouet Pouet"

*Main> min True False False

(IUT de Nantes - Dpt d’informatique ) 38 / 109

(76)

Aparté : ze Haskell Touch Un exemple

Réalisation

Nous allons par exemple additionner les quatre nombres, retirer le plus grand et le plus petit puis diviser par 2.

*Main> :t min

min :: Ord a => a -> a -> a

*Main> min ’a’ ’b’

’a’

*Main> min 5 3 3

*Main> min "Tralala" "Pouet Pouet"

"Pouet Pouet"

*Main> min True False False

(77)

Aparté : ze Haskell Touch Un exemple

Réalisation

Nous allons par exemple additionner les quatre nombres, retirer le plus grand et le plus petit puis diviser par 2.

*Main> :t min

min :: Ord a => a -> a -> a

*Main> min ’a’ ’b’

’a’

*Main> min 5 3 3

*Main> min "Tralala" "Pouet Pouet"

"Pouet Pouet"

*Main> min True False False

(IUT de Nantes - Dpt d’informatique ) 38 / 109

(78)

Aparté : ze Haskell Touch Un exemple

Réalisation

moyenne_olympique4 a b c d =

(s - mini - maxi) / 2 −− l ’ e x p r e s s i o n c o r r e s p o n d a n t à l a mé t h o d e c h o i s i e

where s = a + b + c + d −− l a somme d e s 4 nombres

mini = min a (min b (min c d) ) −− l e p l u s p e t i t d e s 4 maxi = max a (max b (max c d) ) −− l e p l u s grand d e s 4

*Main> moyenne_olympique4 10 8 12 14 11.0

(79)

Aparté : ze Haskell Touch Un exemple

Réalisation

moyenne_olympique4 a b c d =

(s - mini - maxi) / 2 −− l ’ e x p r e s s i o n c o r r e s p o n d a n t à l a mé t h o d e c h o i s i e

where s = a + b + c + d −− l a somme d e s 4 nombres

mini = min a (min b (min c d) ) −− l e p l u s p e t i t d e s 4 maxi = max a (max b (max c d) ) −− l e p l u s grand d e s 4

*Main> moyenne_olympique4 10 8 12 14 11.0

(IUT de Nantes - Dpt d’informatique ) 39 / 109

(80)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

Exemple 20

Décrire une fonction qui étant donnée une liste d’au moins quatre nombres leur associe la moyenne des nombres parmi ceux de la liste qui ne sont ni le plus grand ni le plus petit. Par exemple, la moyenne olympique de 15, 7, 10, 8, 12 et 14 est 11.

(81)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

Min et Max polymorphes

minListe :: (Ord a) => [a] -> a

−− r e n v o i e l e m i n i d ’ une l i s t e d ’ é l é ments o r d o n n a b l e s

maxListe :: (Ord a) => [a] -> a

−− r e n v o i e l e maxi d ’ une l i s t e d ’ é l é ments o r d o n n a b l e s

extr_liste :: (Ord a) => (a -> a -> a) -> [a] -> a

−− r e n v o i e l e m i n i ou l e maxi ( on c h o i s i t en m e t t a n t l a n a t u r e de l ’ extremum en param è t r e ) d ’ une l i s t e d ’ é l é ments o r d o n n a b l e s

(IUT de Nantes - Dpt d’informatique ) 41 / 109

(82)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

Min et Max polymorphes

minListe :: (Ord a) => [a] -> a

−− r e n v o i e l e m i n i d ’ une l i s t e d ’ é l é ments o r d o n n a b l e s

maxListe :: (Ord a) => [a] -> a

−− r e n v o i e l e maxi d ’ une l i s t e d ’ é l é ments o r d o n n a b l e s

extr_liste :: (Ord a) => (a -> a -> a) -> [a] -> a

−− r e n v o i e l e m i n i ou l e maxi ( on c h o i s i t en m e t t a n t l a n a t u r e de l ’ extremum en param è t r e ) d ’ une l i s t e d ’ é l é ments o r d o n n a b l e s

(83)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

Min et Max polymorphes

minListe :: (Ord a) => [a] -> a

−− r e n v o i e l e m i n i d ’ une l i s t e d ’ é l é ments o r d o n n a b l e s

maxListe :: (Ord a) => [a] -> a

−− r e n v o i e l e maxi d ’ une l i s t e d ’ é l é ments o r d o n n a b l e s

extr_liste :: (Ord a) => (a -> a -> a) -> [a] -> a

−− r e n v o i e l e m i n i ou l e maxi ( on c h o i s i t en m e t t a n t l a n a t u r e de l ’ extremum en param è t r e ) d ’ une l i s t e d ’ é l é ments o r d o n n a b l e s

(IUT de Nantes - Dpt d’informatique ) 41 / 109

(84)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

(85)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

m_o4 :: (Fractional t, Ord t) => t -> t -> t -> t -> t

m_o4 a b c d =

(s - mini - maxi) / 2 where {

s = a + b + c + d ;

mini = min d (min c (min a b)) ; maxi = max d (max c (max a b))

}

(IUT de Nantes - Dpt d’informatique ) 43 / 109

(86)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

som_liste :: (Num typ) => [typ] -> typ

som_liste [] =

error "Ta liste est vide !!"

som_liste (tete_de_liste : []) =

tete_de_liste

som_liste (tete_de_liste : liste_décapitée) = (+) tete_de_liste (som_liste liste_décapitée)

(87)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

minListe :: ( Ord t)=> [t] -> t

minListe [] =

error "Ta liste est vide !!"

minListe (tete : []) =

tete

minListe (tete : liste_décapitée) =

min tete (minListe liste_décapitée)

(IUT de Nantes - Dpt d’informatique ) 45 / 109

(88)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

maxListe [] =

error "Ta liste est vide !!"

maxListe (tete : []) =

tete

maxListe (tete : liste_décapitée) = max tete (maxListe liste_décapitée)

(89)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

(IUT de Nantes - Dpt d’informatique ) 47 / 109

(90)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

op_liste = foldl1 fold comme...

lcomme...

(91)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

op_liste = foldl1 fold comme...

lcomme...

(IUT de Nantes - Dpt d’informatique ) 48 / 109

(92)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

op_liste = foldl1 fold comme...

lcomme...

(93)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

: :

: :

: Vide 7

2.5 3

2 4

min 4 min

2 min

3 min

2.5 7

(IUT de Nantes - Dpt d’informatique ) 49 / 109

(94)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

*Main> :t opListe

opListe :: (a -> a -> a) -> [a] -> a

*Main> :t opListe min

opListe min :: Ord a => [a] -> a

*Main> opListe min [4, 2, 3, 2.5, 7]

2.0

*Main> opListe max [4, 2, 3, 2.5, 7]

7.0

*Main> opListe (+) [4, 2, 3, 2.5, 7]

18.5

*Main> opListe (*) [4, 2, 3, 2.5, 7]

420.0

(95)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

Longueur d’une liste ?

*Main> length [2,3,6,7]

4

(IUT de Nantes - Dpt d’informatique ) 51 / 109

(96)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

Longueur d’une liste ?

*Main> length [2,3,6,7]

4

(97)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

*Main> (opListe (+) [2,3,6,7]) / (length [2,3,6,7])

<interactive>:27:25:

No instance for (Fractional Int) arising from a use of ‘/’

Possible fix: add an instance declaration for (Fractional Int) In the expression:

(opListe (+) [2, 3, 6, 7]) / (length [2, 3, 6, 7]) In an equation for ‘it’:

it = (opListe (+) [2, 3, 6, ....]) / (length [2, 3, 6, ....])

(IUT de Nantes - Dpt d’informatique ) 52 / 109

(98)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

*Main> (opListe (+) [2,3,6,7]) / (length [2,3,6,7])

<interactive>:27:25:

No instance for (Fractional Int) arising from a use of ‘/’

Possible fix: add an instance declaration for (Fractional Int) In the expression:

(opListe (+) [2, 3, 6, 7]) / (length [2, 3, 6, 7]) In an equation for ‘it’:

it = (opListe (+) [2, 3, 6, ....]) / (length [2, 3, 6, ....])

(99)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

*Main> :t length length :: [a] -> Int

*Main> :t (/)

(/) :: Fractional a => a -> a -> a

(IUT de Nantes - Dpt d’informatique ) 53 / 109

(100)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

*Main> :t foldl1

foldl1 :: (a -> a -> a) -> [a] -> a

*Main> :t foldl

foldl :: (a -> b -> a) -> a -> [b] -> a

(101)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

longListeFrac :: (Fractional nb) => [patates] -> nb

longListeFrac xs = foldl (\acc patate

-> 1 + acc) 0 xs

*Main> longListeFrac [’a’..’z’]

26.0

(IUT de Nantes - Dpt d’informatique ) 55 / 109

(102)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

longListeFrac :: (Fractional nb) => [patates] -> nb

longListeFrac xs = foldl (\acc patate

-> 1 + acc) 0 xs

*Main> longListeFrac [’a’..’z’]

26.0

(103)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

Alternative récursive :

LongListeFrac :: Fractional nb => [patates] -> nb

LongListeFrac [] = 0

LongListeFrac (tete : liste_décapitée) = 1 + (LongListeFrac liste_décapitée)

(IUT de Nantes - Dpt d’informatique ) 56 / 109

(104)

Aparté : ze Haskell Touch Polymorphisme - abstraction - récursion - listes

m_o :: (Ord t, Fractional t) => [t] -> t

m_o liste_notes =

if nb_notes <= 0 then error "Liste trop courte !"

else

(som_notes - note_mini - note_maxi) / nb_notes

where {

som_notes = som_liste liste_notes ; note_mini = minListe liste_notes ; note_maxi = maxListe liste_notes ;

nb_notes = (LongListeFrac liste_notes) - 2 }

(105)

Aparté : ze Haskell Touch Définition récursive d’un type

Qu’est-ce qu’un mot ?

(IUT de Nantes - Dpt d’informatique ) 58 / 109

(106)

Aparté : ze Haskell Touch Définition récursive d’un type

« glop »

:+

:+

:+

:+

Vide p

o l

g

(107)

Aparté : ze Haskell Touch Définition récursive d’un type

« glop »

:+

:+

:+

:+

Vide p

o l

g

(IUT de Nantes - Dpt d’informatique ) 59 / 109

(108)

Aparté : ze Haskell Touch Définition récursive d’un type

data Mot = Vide

| Char :+ Mot

(109)

Aparté : ze Haskell Touch Définition récursive d’un type

data Mot = Vide

| Char :+ Mot deriving (Show)

(IUT de Nantes - Dpt d’informatique ) 61 / 109

(110)

Aparté : ze Haskell Touch Définition récursive d’un type

data Mot = Vide

| Char :+ Mot deriving (Show, Eq)

(111)

Aparté : ze Haskell Touch Définition récursive d’un type

*Main> let m = ’g’ :+ (’l’ :+ (’o’ :+ (’p’ :+ Vide)))

*Main> m

’g’ :+ (’l’ :+ (’o’ :+ (’p’ :+ Vide)))

*Main> let m = ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

<interactive>:44:9:

Couldn’t match expected type Char’ with actual type ‘Mot’

In the first argument of ‘(:+)’, namely ’g’ :+ ’l’ :+ ’o’ :+ ’p’

In the expression: ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

In an equation for ‘m’: m = ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

(IUT de Nantes - Dpt d’informatique ) 63 / 109

(112)

Aparté : ze Haskell Touch Définition récursive d’un type

*Main> let m = ’g’ :+ (’l’ :+ (’o’ :+ (’p’ :+ Vide)))

*Main> m

’g’ :+ (’l’ :+ (’o’ :+ (’p’ :+ Vide)))

*Main> let m = ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

<interactive>:44:9:

Couldn’t match expected type Char’ with actual type ‘Mot’

In the first argument of ‘(:+)’, namely ’g’ :+ ’l’ :+ ’o’ :+ ’p’

In the expression: ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

In an equation for ‘m’: m = ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

(113)

Aparté : ze Haskell Touch Définition récursive d’un type

infixr :+

data Mot = Vide

| Char :+ Mot deriving (Show, Eq)

*Main> let m = ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

*Main> m

’g’ :+ (’l’ :+ (’o’ :+ (’p’ :+ Vide)))

(IUT de Nantes - Dpt d’informatique ) 64 / 109

(114)

Aparté : ze Haskell Touch Définition récursive d’un type

infixr :+

data Mot = Vide

| Char :+ Mot deriving (Show, Eq)

*Main> let m = ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

*Main> m

’g’ :+ (’l’ :+ (’o’ :+ (’p’ :+ Vide)))

(115)

Aparté : ze Haskell Touch Définition récursive d’un type

*Main> let m = ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

*Main> m

’g’ :+ (’l’ :+ (’o’ :+ (’p’ :+ Vide)))

*Main> :t m m :: Mot

(IUT de Nantes - Dpt d’informatique ) 65 / 109

(116)

Aparté : ze Haskell Touch Définition récursive d’un type

*Main> let m = ’g’ :+ ’l’ :+ ’o’ :+ ’p’ :+ Vide

*Main> m

’g’ :+ (’l’ :+ (’o’ :+ (’p’ :+ Vide)))

*Main> :t m m :: Mot

(117)

Aparté : ze Haskell Touch Définition récursive d’un type

Sélecteurs

tete :: Mot -> Char

−− r e n v o i e l e p r e m i e r c a r a c t è r e d ’ un mot a v e c un f i l t r a g e p a r m o t i f tete Vide = error "Mot vide !"

tete (t :+ q) = t

*Main> tete m

’g’

Et la queue ?

(IUT de Nantes - Dpt d’informatique ) 66 / 109

(118)

Aparté : ze Haskell Touch Définition récursive d’un type

Sélecteurs

tete :: Mot -> Char

−− r e n v o i e l e p r e m i e r c a r a c t è r e d ’ un mot a v e c un f i l t r a g e p a r m o t i f tete Vide = error "Mot vide !"

tete (t :+ q) = t

*Main> tete m

’g’

Et la queue ?

Références

Documents relatifs

- Considérons la famille des séries rationnelles définies de la manière suivante : une série S est dans cette famille si les pôles de la fraction rationnelle associée à S

Pour montrer qu'un ensemble est un espace vectoriel réel il sut de montrer que c'est un sous espace vectoriel d'un espace vectoriel usuel..

Automates à états finis avec sortie Automates à pile..

5 Quelques lois discrètes classiques Loi uniforme (discrète) Loi de Bernoulli Loi binomiale Loi de Pascal Loi de Poisson.. (IUT de Nantes - Dpt d’informatique ) 2

Formez les couples (x , y) tels que x soit le grand-père de y. Formez les couples (x , y) tels que x soit le frère

Exercices faits en cours et démonstrations de propriétés du cours Exercice C 1.1 Théorème de Pythagore et

La matrice ܤ ainsi définie est unique. 2) Si l’une des conditions précédentes est vérifiée, on dit que ܣ et ܤ sont inversibles et inverses l’une de l’autre... Si

Préciser