Relations, applications
© JP. Zanotti [✇ 25/4/2025]
  1. Introduction
  2. Relations, correspondances
    1. 2.1. Définitions
    2. 2.2. Images directes et réciproques
    3. 2.3. Composition des cor­res­pon­dan­ces
  3. Fonctions, applications
    1. 3.1. Fonctions
    2. 3.2. Applications
  4. Injections, surjections, bijections
    1. 4.1. Injections
    2. 4.2. Surjections
    3. 4.3. Bijections
  5. Opérations sur les ensembles
    1. 5.1. Réunion, intersection.
    2. 5.2. Réindexation.
    3. 5.3. Autres opérations.
    4. 5.4. Images et images réciproques d'une réunion et d'une intersection.
    5. 5.5. Partition d'un ensemble
  6. Re­la­tions binaires sur un ensemble
    1. 6.1. Définition et propriétés remarquables
    2. 6.2. Re­la­tions d'équivalence
    3. 6.3. Relations d'ordre
    4. 6.4. Re­la­tions de précédence
  7. Résolution du problème introductif
    1. 7.1. Modélisation avec les graphes
    2. 7.2. Fonctions de Grundy
  8. Travaux pratiques
    1. 8.1. En séance
    2. 8.2. Compléments hors séance
chapitre :

Introduction

Mettre en relation des entités de toute nature est une opération commune et universelle. Le dé­ve­lop­pe­ment rapide des techniques (rebaptisées technologies par tropisme anglophile) n'a-t-il pas trans­for­mé notre planète en monde connecté ? Connecter, associer, relier, joindre, etc. sont des opérations incontournables, fon­da­men­ta­les et om­ni­pré­sen­tes en informatique et en ma­thé­ma­ti­ques.

Les relations permettent de modéliser des systèmes complexes, de résoudre des problèmes pratiques et de concevoir des algorithmes efficaces. Ce concept est au cœur même des bases de données relationnelles, dans lesquelles les données sont organisées en tables codant des relations entres ensembles de données. Les requêtes sont alors fondées sur des opérations permettant de combiner ces différentes relations. Les réseaux de télécommunication sont modélisés par des graphes dans lesquels les relations entre objets connectés jouent un rôle clef, les algorithmes de routage s'appuyent sur ces relations pour déterminer des chemins optimaux entre deux nœuds selon les débits et/ou la latence d'une connection, etc. Les fonctions constituent souvent des objets élémentaires des langages de programmation et sont à la base de l'apprentissage automatique, etc.

Encore une fois, nous allons commencer par exposer un problème ludique dont l'analyse et la résolution mettrons en évidence l'utilité, la versatilité et la force des concepts introduits dans ce chapitre :

Deux joueurs doivent à tour de rôle, retirer une, deux ou trois allumettes d'un tas jusqu'à ce qu'il soit vide. Le joueur qui ne peut plus retirer d'allumettes car le tas est vide a perdu.

Existe-t-il une stratégie gagnante à ce jeu ?

Relations, correspondances

Définitions

On généralise aisément la notion de graphe défini sur le produit cartésien de deux ensembles X et Y au produit cartésien d'un nombre arbitraire d'ensembles Xi :

Soit q un entier non-nul et X:=X1×X2××Xq le produit cartésien de q ensembles Xi. On appelle q-graphe, toute partie GX.
Soit X:=X1×X2××Xq. On appelle re­la­tion q-aire sur X, tout prédicat R à q variables xiXi, i{1,2,,q}. Le q-graphe GX défini par (1)G:={(x1,x2,,xq)XR(x1,x2,,xq)}. est appelé q-graphe de la relation R. Si (x1,x2,,xq)X vérifie R(x1,x2,,xq), alors les q projections xi sont dites en re­la­tion par R.

On parle de relation unaire quand q=1, de relation binaire quand q=2 — auquel cas on retrouve naturellement le vocable usuel de graphe plutôt que 2-graphe — et de relation ternaire quand q=3, etc.

Exemples :

  1. Les couples* au sens propre et au sens de la théorie des ensembles (h,f)H×F formés par un homme et une femme, définissent une re­la­tion binaire entre des éléments particuliers de l'ensemble H des hommes et de l'ensemble F des femmes.
  2. Pour définir une relation de couple moins hétéronormée, il suffit de la considérer sur le produit cartésien E×E d'un même ensemble E d'êtres humains.
  3. Pour filer la métaphore familiale, la re­la­tion de pa­ren­ta­li­té est un exemple de re­la­tion ternaire entre hommes (ensemble H), femmes (ensemble F) et enfants (ensemble E), donc sur le produit cartésien H×F×E, etc.
  4. La pos­si­bi­li­té ou non d'as­sem­bler deux pièces d'un puzzle définit une re­la­tion binaire entre les pièces du puzzle sur le produit cartésien P×PP désigne l'ensemble des pièces du jeu.
  5. Le jumelage entre communes françaises et étrangères constitue une re­la­tion binaire. Ainsi la ville de La Garde est jumelée avec la ville de Montesarchio en Italie ainsi que la ville de Spa en Belgique.
Relations q-aires et q-graphes sont deux facettes d'une même pièce. Il est clair que la donnée d'un q-graphe défini sur un produit cartésien X:=X1××Xq d'ensembles Xi, définit indirectement une relation q-aire R sur ces ensembles. En effet si GX, on lui associe naturellement la relation q-aire définie sur X par (x1,x2,,xq)XR(x1,x2,,xq)(x1,x2,,xq)G.

Parmi tous les types de relations, les relations binaires sont les plus utilisées et font l'objet d'une attention toute particulière. On note gé­né­ra­le­ment une re­la­tion binaire de manière infixe xRy, plutôt que préfixe R(x,y), mimant ainsi plus fidèlement l'ex­pres­sion x est en re­la­tion avec y. Une section spé­ci­fi­que de ce chapitre sera consacrée aux re­la­tions binaires entre éléments d'un même ensemble, i.e. Y=X.

Dans le cadre de cette étude, une re­la­tion binaire entre deux ensembles X et Y est souvent rebaptisée cor­res­pon­dan­ce, à des éléments de X, on fait correspondre des éléments de Y. Sa dé­fi­ni­tion s'appuie directement sur un graphe sans plus faire référence à un prédicat :
Soit X et Y deux ensembles et GX×Y. Le triplet c:=(X,G,Y) est appelé correspondance d'ensemble de départ X, d'ensemble d'arrivée Y et de graphe G.
Soit c:=(X,G,Y) une correspondance. On appelle ensemble de définition de c, la première projection de son graphe pr1(G) notée D(c) et ensemble image de c, la deuxième projection de son graphe pr2(G) notée Im(c).

On représente une cor­res­pon­dan­ce à l'aide d'un diagramme sagittal * En forme de flèche. qui en fournit une in­ter­pré­ta­tion concrète. Les ensembles de départ X et d'arrivée Y sont matérialisés par des patates et chaque couple (x,y) du graphe G par une flèche reliant x à y : xy. La flèche a pour premier mérite de mettre en évi­dence l'asymétrie de la construction puisque (x,y)(y,x).

Diagramme sagittal du jumelage de certaines villes.

Le diagramme sagittal ci-dessus illustre le jumelage de quelques villes. On constate que les villes de Mazaugues et Signes ne sont pas jumelées avec des villes étrangères et que les villes étran­gères de Liski et Vegen ne correspondent à aucun jumelage.

Décrivez en extension les ensembles de départ, d'arrivée, le graphe G ainsi que l'ensemble de définition et l'image de la cor­res­pon­dan­ce définie par le diagramme ci-dessus.
Nous avons les ensembles suivants : X={LaGarde,Toulon,Signes,Mazaugues,Nice}Y={Montesarchio,Alicante,Spa,Cuneo,Mannheim,Liski,Yalta,Norfolk,Vegen,Kronstadt}G={(LaGarde,Montesarchio),(LaGarde,Spa),(Toulon,Manheim),(Toulon,Norfolk),(Toulon,Kronstadt),(Nice,Alicante),(Nice,Cuneo),(Nice,Yalta)}Dc={LaGarde,Toulon,Nice}Im(c)={Montesarchio,Alicante,Spa,Cuneo,Mannheim,Yalta,Norfolk,Kronstadt}
Nous avons noté (X,G,Y) une cor­res­pon­dan­ce alors que dans la littérature ma­thé­ma­ti­que, une cor­res­pon­dan­ce est souvent codée par un triplet (X,Y,G) (on pourrait également considérer le codage (G,X,Y)). Formellement, ces différentes écritures définissent des modèles distincts, mais le triplet joue simplement le rôle d'une boite à trois casiers pour y ranger les données nécessaire à la mo­dé­li­sation de l'objet, ces trois modèles sont donc équivalents et interchangeables. La mo­ti­va­tion de la position infixe plutôt que postfixe ou préfixe du graphe G dans ce cours est à vocation didactique, le graphe G est la description abstraite des flèches du diagramme qui se situent entre les en­semb­les X et Y. L'écriture usuelle postfixe est évidemment justifiée par le fait que nous lisons de gauche à droite et qu'il est logique de présenter les deux ensembles X et Y avant de parler du graphe qui en dépend.

En inversant le sens des flèches du diagramme sagittal d'une cor­res­pon­dan­ce c=(X,G,Y) et en in­ver­sant les rôles des ensembles de départ X et d'arrivée Y, on obtient une nouvelle cor­res­pon­dan­ce ap­pe­lée cor­res­pon­dan­ce réciproque de c et on la note c1.

Le choix de la no­ta­tion c1, qui n'est évidemment pas un quotient dans ce contexte, sera légitimé une fois étudiées la loi de composition des correspondances et ultérieurement les propriétés structurelles des lois de composition dans le chapitre consacré aux groupes.
Écrivez formellement la définition de la cor­res­pon­dan­ce réciproque c1 d'une cor­res­pon­dan­ce c=(X,G,Y).
Soit c=(X,G,Y) une cor­res­pon­dan­ce. On appelle cor­res­pon­dan­ce réciproque de la cor­res­pon­dan­ce c, la cor­res­pon­dan­ce notée c1:=(Y,G1,X)G1 est le graphe défini par G1:={(y,x)Y×X(x,y)G}.
Dans le plan réel R×R, on considère un cercle de rayon R et de centre C, i.e. l'ensemble des points du plan réel qui sont à distance R du point C. Définissez formellement la cor­res­pon­dan­ce c dont le graphe est ce cercle. Quelle est sa cor­res­pon­dan­ce réciproque ?
Si l'on note C=(xC,yC), il s'agit de la cor­res­pon­dan­ce c=(R,G,R) dont le graphe est défini par G:={(x,y)R×Rd((x,y),(xC,yC))=R}. On vérifie aisément que G1:={(x,y)R×Rd((x,y),(yC,xC))=R}.

Images directes et réciproques

Si c=(X,G,Y) est une cor­res­pon­dan­ce, l'image directe par c d'une partie AX de l'ensemble de départ, notée c(A), est le sous-ensemble des éléments de l'ensemble d'arrivée Y atteints par les éléments de A. Ainsi pour la partie A:={La Garde, Nice} de l'exemple introductif, on a

c(A)={Montesarchio, Spa, Alicante, Cuneo, Yalta}.

Réciproquement, l'image réciproque par c d'une partie BY, notée c1(B), est l'image directe de B pour la cor­res­pon­dan­ce réciproque c1. Toujours avec l'exemple introductif et en considérant B:={Spa, Kronstad}, on a

c1(B)={La Garde, Toulon}.

Plus formellement :

Soit c=(X,G,Y) une cor­res­pon­dan­ce et A une partie de X. On appelle image directe de A par c, le sous-ensemble de Y noté c(A) et défini par (2)c(A):={yYxA (x,y)G}.
Soit c=(X,G,Y) une cor­res­pon­dan­ce et B une partie de Y. On appelle image réciproque de B par c, l'image directe de B pour la cor­res­pon­dan­ce réciproque c1 de c : (3)c1(B):={xXyB (x,y)G}. Si B est réduit à un singleton {y}, tout élément xc1(B) est appelé antécédent de y.

D'après cette définition, on a donc Im(c)=c(X). Notons qu'il est bien plus efficace de garder une image mentale d'une cor­res­pon­dan­ce sous forme de diagramme sagittal pour retrouver aisément toutes ces définitions que de les apprendre par cœur. Pour reprendre la métaphore musicale de l'introduction de ce cours, il est beaucoup plus simple de retenir et fredonner la mélodie d'une chanson pour en retrouver la partition plutôt que d'apprendre cette partition.

Quel est le graphe de la cor­res­pon­dan­ce réciproque de la cor­res­pon­dan­ce définie dans cet exercice ?

Composition des cor­res­pon­dan­ces

Le terme de cor­res­pon­dan­ce est familier du lecteur qui a voyagé et a dû changer de train durant son périple. Pour illustrer le propos, on modélise une fiche horaire entre deux villes par une cor­res­pon­dan­ce g=(X,G,Y) où les ensembles X et Y contiennent respectivement les heures de départ et d'arrivée des différents trains reliant les deux villes X et Y. Si l'on dispose d'une deuxième cor­res­pon­dan­ce h=(Y,H,Z) reliant les villes Y et Z, on définit implicitement une fiche horaire entre les villes X et Z en passant par Y dont la modélisation mathématique n'est autre que la composition des cor­res­pon­dan­ces h et g. Il suffit de rabouter les flèches qui arrivent en Y avec celles qui en partent et d'observer pour chaque élément de X quels sont les éléments correspondants dans Z :

Diagramme sagittal de 2 cor­res­pon­dan­ces g et h.

Pour filer la métaphore ferrovaire, on observe dans le diagramme ci-dessus qu'il y a deux trains qui partent à 4h de la ville X et permettent d'arriver à destination à la ville Z à 7h ou 10h en passant par la ville Y. Il s'agit bien d'une cor­res­pon­dan­ce entre les villes X et Z. Il ne reste qu'à la définir for­mel­le­ment.

Soit g=(X,G,Y) et h=(Y,H,Z) deux cor­res­pon­dan­ces. On appelle com­po­si­tion des cor­respondances h et g, la cor­res­pon­dan­ce f=(X,F,Z) dont le graphe est défini par (4)F:={(x,z)X×ZyY  (x,y)G  (y,z)H}. On note cette cor­res­pon­dan­ce hg (que l'on lit h rond g) et (5)AXhg(A)=h(g(A)).

Avec l'exemple du diagramme sagittal ci-dessus, on a : hg({3})={7}hg({7})={10}hg({4})={7,10}hg({8})=hg({5})={4}hg({0})=hg({1})={10}

Il ne faut pas être perturbé par l'ordre dans lequel on écrit la com­po­si­tion hg alors que la cor­res­pon­dan­ce g s'applique avant la cor­res­pon­dan­ce h. Nous mettons souvent et très logiquement la chronologie des événements que nous dé­cri­vons en cohérence avec l'ordre de lecture, donc de gauche à droite chez les occidentaux. La notation des cor­res­pon­dan­ces étant préfixe et comme la cor­res­pon­dan­ce h s'applique après la cor­res­pon­dan­ce g, elle agit sur g(A) soit h(g(A)). Si les cor­res­pon­dan­ces avaient été notées de manière postfixe, i.e. (A)g au lieu de g(A), tout rentrerait dans l'ordre…
Soit f=(X,G,Y), g=(Y,H,Z) et h=(Z,I,T) trois cor­res­pon­dan­ces. Vérifiez que (6)h(gf)=(hg)f. Cette propriété est appelée associativité de la composition.
Quel est le graphe de la cor­res­pon­dan­ce ccc est la cor­res­pon­dan­ce définie dans cet exercice ?
Soit f=(X,G,Y) et g=(Y,H,Z) deux cor­res­pon­dan­ces. Démontrez que (gf)1=f1g1.

Fonctions, applications

Fonctions

Une fonction désigne un type de cor­res­pon­dan­ce particulière telle qu'il y a au plus une flèche qui part d'un élément xX. C'est la transposition mathématique du terme largement employé dans le langage courant. Le montant à régler au parcmètre est fonction de la durée de stationnement, votre note au contrôle continu de l'ecue de Mathématiques pour l'Informatique est fonction du nombre de bonnes réponses, etc. Dans ce contexte, il ne peut y avoir qu'un seul montant à régler qui cor­res­pond avec la durée de stationnement et qu'une seule note associée au nombre de bonnes ré­pon­ses.

Ainsi, l'exemple de la figure 1 n'est pas une fonction car, entre autres, la ville de La Garde est en cor­res­pon­dan­ce avec deux villes étrangères. La condition à respecter pour qu'une cor­res­pon­dan­ce définisse une fonction s'exprime for­mel­le­ment de la manière suivante :

Une cor­res­pon­dan­ce f=(X,G,Y) est appelée cor­res­pon­dan­ce fonctionnelle ou fonction si et seulement si elle satisfait la condition suivante : (7)(x,y1,y2)X×Y2((x,y1)G  (x,y2)G)(y1=y2).

La façon d'exprimer mathématiquement au plus dans l'expression formelle (7) ci-dessus peut sembler sur­pre­nante, mais elle répond bien à la contrainte : si deux couples avec la même première projection x appartiennent au graphe de la cor­res­pon­dance, alors leurs deuxièmes projections sont né­ces­sai­re­ment éga­les, autrement dit ces deux couples sont égaux.

Nous n'avons pas encore étudié formellement le cardinal #X d'un ensemble fini X, mais nous aurions pu définir alors une fonction à l'aide de la propriété suivante plus simple à in­ter­pré­ter : xX  f({x}) est fini et #f({x})1.

La définition d'une fonction via l'assertion (7) est préférable car elle ne nécessite pas l'outillage des entiers naturels et de la cardinalité.

Exprimez formellement qu'une cor­res­pon­dan­ce n'est pas fonctionnelle en écrivant la négation de l'expression (7). Réécrivez la définition d'une fonction en remplaçant l'expression (7) par sa contraposée.
La négation de la proposition (7) est (x,y1,y2)X×Y2((x,y1)G  (x,y2)G)(y2y1). La contraposée de la proposition (7) est (x,y1,y2)X×Y2(y1y2)((x,y1)G  (x,y2)G).

Dans le diagramme ci-dessous nous représentons la fonction qui associe le taux de tva à une activité ou une vente (si elle est assujettie à cette taxe).

Diagramme sagittal d'une fonction f=(X,G,Y).

Comme on peut le constater par l'absence d'une flèche, les soins d'une carrie dentaire ne sont pas assujetis à la tva (les actes médicaux ne sont pas soumis à cette taxe). On aurait pu rajouter un taux de 0% dans l'ensemble d'arrivée et inclure le couple (carrie,0%) au graphe G, mais il est plus cohérent de le modéliser sans cet arc puisque la tva ne s'applique pas aux actes médicaux. On note également que certains taux de tva ne correspondent à aucune activité/vente.

Soit xX, d'après la caractérisation d'une fonction (7), soit l'image directe f({x}) du singleton {x} est l'ensemble vide , soit c'est un singleton {y}. Ceci justifie la définition suivante :

Soit f:XY une fonction, xD(f) et y l'unique élément de Y tel que f({x})={y}. On dit alors que f est définie en x et que y est l'image de x par f notée f(x).

L'ensemble de définition de la fonction dont le diagramme sagittal est donné en figure 3 est :

(8)D(f)={glace, alcool, cinéma, smartphone, livre}.

Dans l'autre sens, si l'on se donne yY et que la partie f1({y}) n'est pas vide, elle n'est pas nécessairement réduite à un unique élément, y peut donc posséder plusieurs antécédents.

La fonction f associée au diagramme de la figure 2 n'est pas définie en carrie. L'image de cinéma est 2,1%, ce que l'on écrit f(cinema)=2,1%. Il est important de réaliser que la notation f(x) n'a de sens que si la fonction f est définie en x, en revanche f({x}) a toujours un sens, c'est l'image directe du singleton {x} par la cor­res­pon­dan­ce f qui serait égale à l'ensemble vide dans le cas où la fonction n'est pas définie en x. Par définition un élément xX admet au plus une image par la fonction f, mais un élément yY peut avoir plusieurs antécédents. Par exemple smartphone et alcool sont deux antécédents de 20%. Les valeurs 15%, 30% et 75% n'admettent pas d'antécédents.

Le lecteur averti pourrait contester ce modèle ma­thé­ma­ti­que simplifié en avan­çant que la tva de certains produits dépend du lieu de consommation. En effet, la tva ap­pli­quée à une glace est différente selon qu'elle est consommée sur place (5,5%) ou emportée (10%). Au­tre­ment dit, il faudrait deux flèches pour la glace, une vers la valeur 5,5%, l'autre vers 10%, le bon modèle mathématique serait alors la cor­res­pon­dan­ce. Ce modèle serait tout de même incomplet, puisque l'information codant le fait que la glace est consommée ou non sur place n'est pas intégrée au modèle. Ce type de modélisation sera étudié en détail dans l'enseignement de théorie des graphes de la licence.

On utilise souvent l'écriture f:XY pour définir une fonction f=(X,G,Y) même si son graphe G n'est pas spécifié. Cette omission est justifiée par le fait que f étant une fonction, elle est définie en tout élément x de son domaine de définition D(f) et son graphe G est par conséquent G:={(x,y)X×Y(xD(f))(y=f(x))}.

Parfois l'image f(x) d'un élément x de X par une fonction f peut être calculée. En effet, nous verrons dans un prochain chapitre que les ensembles peu­vent être équipés de lois de composition internes, comme l'addition ou la multiplication sur R par exemple. Dans ce cas, cela induit une vision dynamique de la fonction* l'utilisation mas­sive de flèches renforce éga­le­ment cet­te dynamique., comme s'il s'agissait d'une machine qui traitait la matière première x en entrée et qui fournissait le produit fini y en sortie :

y
Vision schématique d'une fonction calculable.

Par exemple la fonction f qui calcule la circonférence d'un cercle en fonction de son rayon r est définie par f:RR, dont le graphe est l'ensemble des couples (r,f(r)) tels que f(r)=2πr. Dans de tels cas, on complète souvent l'expression f:XY avec l'expression du calcul qu'elle effectue : (9)f:RRr2πr

Il faut noter la différence entre la flèche qui relie les ensembles de départ et d'arrivée et celle munie d'un talon qui relie un élément de l'ensemble de départ à son image (quand elle existe) dans l'en­sem­ble d'arrivée.

Il n'est pas toujours possible de calculer une fonction, c'est-à-dire d'exprimer l'image d'un élément par un processus calculatoire. La théorie de la calculabilité enseignée en mas­ter d'informatique a précisément pour objectif d'étudier cette question et d'en tirer des conséquences sur ce que nous pouvons réaliser ou non avec des ordinateurs.
On considère la fonction f:RR définie par f(x):=1/x. Quel est son domaine de définition ? Même question pour g(x):=x. Même question pour gf et fg.

Applications

Une fonction f=(X,G,Y) telle que D(f)=X, est appelée application de X dans Y. L'ensemble des applications de X dans Y est noté YX.

La notation YX peut sembler ét­ran­ge à pre­miè­re vue. Nous verrons pourquoi il s'agit d'une bonne notation dans le chapitre consacré à la com­binatoire.

La fonction définie en (9) est bien une application, elle est en effet définie en tout nombre réel r. En revanche, la fonction (10)f:RRx1/x n'est pas une application puisqu'elle n'est pas définie en 0. Son domaine de définition est l'ensemble D(f)=R{0}. Notons que si cette fonction n'est pas définie en 0, ce n'est pas pour un quelconque interdit, mais parce qu'elle est définie via son graphe qui est constitué des couples (x,y)R×R satisfaisant l'équation xy=1. Ce graphe ne contient donc aucun couple (x,y) tel que x=0 ou y=0.

Exprimez le graphe G de la fonction définie en (10) sans utiliser d'écriture en compréhension.
Il suffit de retirer de l'ensemble de tous les couples de réels ceux dont l'une ou l'autre des projections est nulle : G=(R×R)(({0}×R)(R×{0})).

On dit que deux applications f:XY et g:XY coïncident sur une partie AXX si elles sont égales en tout élément de A : (11)xAf(x)=g(x).

Soit f:XY une application et A une partie de X. L'application de AY qui coïncide avec f sur A est ap­pe­lée restriction de f à A et notée f/A.

Il est très facile d'obtenir une application à partir d'une fonction qui n'est pas définie en tout point de son ensemble de départ X. Il suffit de remplacer X par le domaine de définition D(f) de cette fonc­tion, autrement dit de considérer sa restriction f/D(f). Dans le cas de la fonction de la figure 2, il suffit d'éliminer carrie de l'en­sem­ble X, i.e. le nouvel ensemble de départ est X:=D(f) :

Diagramme sagittal de l'application obtenue par res­tric­tion de cette fonction à son domaine de définition.

Quant à la fonction f définie en (10), il suffit d'éliminer 0 pour en faire une application, il s'agit de la fonction g:RR définie par g(x):=1x. Attention, gf. En effet, une fonction est avant tout une cor­res­pon­dan­ce, c'est-à-dire un triplet, or deux triplets sont égaux si et seulement si leurs trois projections sont égales respectivement. Autrement dit deux cor­res­pon­dan­ces sont égales si et seu­le­ment si elles ont même en­sem­ble de départ, même ensemble d'arrivée et même graphe

Soit X,Y,X,Y des ensembles tels que XX et YY. On considère deux ap­pli­ca­tions f:XY et g:XY. Quelle définition proposez-vous pour exprimer que g est un prolongement de f selon votre acception du terme prolongement ?
On dit que g est un prolongement de f si et seulement si g coïncide avec f sur X.
Fonctions et applications sont deux concepts très voisins en théorie des en­semb­les. Historiquement le terme fonction était plutôt utilisé pour exprimer qu'une quantité physique variait selon une autre quantité physique (autrement dit les fonctions numériques de R dans R) alors que le terme application avait une connotation plus géométrique, comme une carte. Le terme anglo-saxon map qui est la traduction du mot application est explicite à ce sujet.

La confusion entre fonction et application dans les textes mathématiques est courante et distinguer les deux peut sembler superfétatoire. En effet, quel est l'intérêt de considérer comme ensemble de départ un autre ensemble que l'ensemble de définition d'une fonction puisqu'elle n'est pas définie ailleurs ? Le premier est d'attirer l'attention sur cet ensemble de définition qu'il ne faut surtout pas négliger, et l'autre est que les questions qui vont suivre sur les propriétés remarquables des applications se justifient naturellement en considérant la correspondance réciproque qui peut être ou non une fonction, une application. Quoi qu'il en soit, il est très facile de transformer une fonction en application, il suffit de considérer que son ensemble de départ est son ensemble de définition.

Si la cor­res­pon­dan­ce réciproque f1 d'une fonction f est elle-même une fonction, elle est appelée fonction réciproque. La section suivante est consacrée à l'étude des cor­res­pon­dan­ces ré­ci­pro­ques et de leur statut.

Les cor­res­pon­dan­ces réciproques des cor­res­pon­dan­ces des figures 1 & 2 définissent-elles des fonctions ? La fonction de R dans R définie par xx2 est-elle une application ? Sa cor­res­pon­dan­ce ré­ci­pro­que est-elle une fonction ?

Injections, surjections, bijections

Quand on se donne une cor­res­pon­dan­ce, il est naturel de s'intéresser à la cor­res­pon­dan­ce réciproque (voir exercice), ne serait-ce que parce que sa construction est extrêmement simple, il suffit d'inverser le sens des flèches et d'échanger le rôle de l'ensemble de départ et de l'ensemble d'arrivée. L'étude de la réversibilité du processus est intéressante, en particulier quand il s'agit d'une fonction calculable.

On réalise immédiatement en construisant la cor­res­pon­dan­ce réciproque de l'application de ce dia­gram­me que celle-ci n'est plus une application, (ni 30%, ni 75% n'ont d'image), ni mê­me une fonction (deux flè­ches partent de la valeur 20%). Quelles sont les conditions que doit satisfaire une application pour que sa cor­res­pon­dan­ce réciproque soit une fonction, ou mieux une application ?

Pour que la cor­res­pon­dan­ce réciproque soit une fonction, il ne faut pas que deux éléments distincts x1 et x2 de l'ensemble de départ aient la même image y (comme smart­phone et alcool qui ont la même tva à 20%), sans quoi la cor­res­pon­dan­ce inverse aurait deux flèches partant de y, l'une vers x1 et l'autre vers x2 ce qui est interdit pour une fonction.

Injections

Une application f:XY est dite injective, ou injection, si deux éléments quelconques et distincts de X ont des images distinctes dans Y : (12)(x1,x2)X×X(x1x2)(f(x1)f(x2)). Dans ce cas on écrit f:XY.

La contraposée de la proposition logique (12) est très souvent utilisée pour démontrer qu'une ap­pli­ca­tion est injective, à savoir (13)(x1,x2)X×X(f(x1)=f(x2))(x1=x2). Il est en effet plus aisé de faire des déductions en partant d'une égalité que de la négation d'une égalité.

Indépendamment de l'étude des cor­res­pon­dan­ces réciproques, l'in­jec­ti­vi­té est une propriété fort in­té­res­sante et souvent nécessaire pour modéliser certaines contraintes. Pour établir une communication té­lé­pho­ni­que, on cherche a priori à exclure la possiblité que deux numéros de téléphone soient as­so­ciés à la même carte sim* Subscriber Identity Mo­du­le, la table de cor­res­pon­dan­ce dont disposent les opérateurs n'est ni plus ni moins qu'une application in­jec­ti­ve. De la même manière, deux numéros de sécurité sociale dis­tincts sont associés à des in­di­vi­dus dis­tinc­ts, etc.

À gauche une application injective, à droite non.

Soit X et Y deux ensembles tels que XY. L'application f:XY définie par f(x):=x est une injection appelée injection canonique. Si Y=X, cette application est appelée application iden­ti­té de X et on la note IdX.

La cor­res­pon­dan­ce réciproque f1 d'une injection f est donc une fonction. Si elle est définie en yY, autrement dit s'il existe xX tel que f1({y})={x}, alors x est l'image de y par f1 et on la note f1(y).

Si l'on veut que cette fonction réciproque soit également une application, il faut que tous les éléments de l'ensemble d'arrivée soient atteints par une flèche de manière à ce que tous les éléments de l'ensemble Y aient une image pour la cor­res­pon­dan­ce réciproque.

Surjections

Une application f:XY est dite surjective, ou appelée surjection, si tout élément yY admet (au moins) un antécédent : (14)yY  xXy=f(x). Dans ce cas on écrit f:XY.

Cette propriété peut être satisfaite sans que l'application soit injective, tout élément de l'ensemble d'arrivée peut donc avoir plusieurs antécédents. C'est le cas de l'application à gauche dans la figure ci-dessous, elle est surjective mais pas injective. Celle de droite n'est ni injective ni surjective.

À gauche une application surjective, à droite non. Aucune n'est injective.

Bijections

Une application f:XY est dit bijective, ou appelée bijection, si elle est à la fois injective et surjective. Dans ce cas on écrit f:XY. L'ensemble des bijections de X dans X est noté S(X).

On aurait tout aussi bien pu donner la définition suivante : une application f est bijective si et seu­le­ment si sa cor­res­pon­dan­ce réciproque f1 est une application.

Une bijection associe de manière unique chaque élément d'un ensemble à un autre et ré­ci­pro­que­ment. Si les ensembles de départ et d'arrivée sont par exemple constitués respectivement par des étu­diant⋅e⋅s de sciences et de lettres, disposer d'une bi­jec­tion revient à créer des couples monogames où chacun⋅e a exactement un⋅e petit⋅e ami⋅e :

Diagramme sagittal d'une application bijective.

Les trois notions, injection, surjection et bijection sont absolument fondamentales en mathématiques et en informatique. Ces objets servent non seulement à la modélisation mais également à compter. L'existence d'une solution à une équation du type f(x)=y d'inconnue x est liée à la surjectivité de f et l'unicité d'une solution à l'injectivité de f. Avant même d'avoir défini ce qu'est un ensemble fini* la compréhension in­tui­ti­ve du concept est suf­fi­san­te ici., il semble évident que si les ensembles de départ et d'arrivée sont finis et en bijection, ils ont le même nombre d'éléments. Il n'est pas rare que l'on dénombre les éléments d'un ensemble en établissant une bijection avec un autre en­sem­ble dont on connaît le cardinal. Dans le même ordre d'idées et intuitivement, disposer d'une injection (resp. une surjection) entre un ensemble X et un ensemble Y impose que l'ensemble Y est plus grand que X (resp. plus petit que X).

Soit X et Y deux ensembles. Démontrez que les deux assertions suivantes sont équi­va­len­tes 
  1. Il existe une injection de X dans Y ;
  2. Il existe une surjection de Y dans X.

Un premier résultat important sur les bijections est lié à la composition des ap­pli­ca­tions.

La composée de deux applications injectives (resp. surjective, bijective) est injective (resp. surjective, bijective).
Notons f:XY et g:YZ ces applications. Dans une premier temps, supposons que f et g soient injectives. Soit x1 et x2 deux éléments de X tels que gf(x1)=gf(x2). On a donc g(f(x1))=g(f(x2)) ce qui entraîne que f(x1)=f(x2) puisque g est injective puis que x1=x2 puisque f est injective. Autrement dit gf est injective.

Supposons à présent que f et g soient surjectives. Soit zZ, il nous faut montrer qu'il admet un antécédent xX par gf, autrement dit qu'il existe un élément xX tel que z=gf(x). Comme g est surjective, on sait que z admet un antécédent y par g, c'est-à-dire tel que z=g(y), mais f étant surjective également, y admet lui aussi un antécédent xX pour f, autrement dit y=f(x). Par conséquent, on a z=g(y)=g(f(x))=gf(x) et gf est donc surjective.

Soit f:XY et g:YZ deux applications. Montrez que si gf est injective alors f est nécessairement injective et que si gf est surjective alors g est nécessairement surjective.
Notons f:XY et g:YZ ces applications. Supposons que gf soit injective. Alors pour tout (x,x)X2 tel que xx, on a g(f(x))g((f(x)) ce qui impose que f(x)f(x) c'est-à-dire que f soit injective. Supposons que gf soit surjective. Alors pour tout zZ, il existe xX tel que g(f(x))=z, donc z admet au moins f(x) comme antécédent par g qui est par conséquent surjective.
Une application f:XY est bijective si et seulement s'il existe une application g:YX telle que (15)gf=IdX  et  fg=IdY. Dans ce cas, l'application g est unique, il s'agit de l'application réciproque f1 de f appelée bi­jec­tion réciproque.
S'il existe g:YX qui satisfait (15), alors d'après la proposition précédente, f est surjective comme IdY et elle est injective comme IdX donc bijective. Symétriquement g est bijective. D'autre part, si f:XY est bijective, alors il existe une application g:YX qui satisfait (15), c'est l'application qui a tout élément de Y associe son unique antécédent par f. On conclut avec l'unicité, considérons deux applications g1 et g2 qui satisfont (15), alors g1fg2=IdXg2=g2g1fg2=g1IdY=g1 Et on en déduit que g1=g2.

Soit f:XX une application. On peut donc composer f avec elle même puisque les ensembles de départ et d'arrivée sont confondus. Par convention, on note fn:=ffn1 avec f0:=IdX. L'ap­pli­ca­tion fn est ap­pe­lée n-ème itérée de f.

Une application bijective f:XX telle que f2=IdX est appelée in­vo­lu­tion ou dite involutive, autrement dit elle est sa propre bijection réciproque. Par exemple l'ap­pli­ca­tion f:RR définie par x1x.

Une application f:XX telle que f2=f est dite idem­po­ten­te. Par exemple la valeur absolue dans R, en effet ||x||=|x|.

Soit f:XY et g:YZ deux bijections. Démontrez que (16)(gf)1=f1g1. Généralisez à la composition de n applications f1,f2,,fn où pour tout i{1,2,,n}, fi:XiYi avec Yi=Xi+1 : (17)(fnfn1f2f1)1=f11f21fn11fn1.

Revenons aux images directes et réciproques dans le cas où la cor­res­pon­dan­ce est une fonction f:XY. Alors l'égalité (2) devient :

(18)f(A):={yYxA  y=f(x)}. et on a (19)f1(B):={xXf(x)B}.

On rappelle que P(X) désigne l'ensemble des parties d'un ensemble X. Soit A:={g,b,e}P(X) et B:={0,7,8}P(Y) pour l'application f:XY définie par le diagramme sagittal ci-dessous. On a f(A)={5,1} et f1(B)={a,c,d}.

Diagramme sagittal d'une application f:XY. L'en­semb­le A est une partie de X et l'ensemble B une partie de Y.
Avec la fonction définie par le diagramme sagittal de la figure 8, calculez
  1. f(X),
  2. f1({0,2}),
  3. f1(f({e,c})),
  4. f(f1({5,8})),
  5. f1().
Attention à ne pas confondre f({x}) avec f(x), ainsi avec l'exemple de la figure ci-dessus, on a f({c})={7} alors que f(c)=7. Dans l'autre sens, il ne faut surtout pas confondre f1({y}) avec f1(y), la confusion est encore plus grave. En effet, autant l'image ré­ci­pro­que f1({y}) existe toujours, autant l'expression f1(y) n'a de sens que si la cor­res­pon­dan­ce réciproque f1 de f est bien une fonction et définie en y de surcroît ce qui impose que f soit injective et que yD(f1). Cependant, les abus de langage sont légions et il n'est pas rare de voir écrit f1(y) au lieu de f1({y}) quand bien même la fonction n'est pas injective. Tout ceci est sans conséquence si l'on comprend ce que l'on fait et les objets que l'on manipule.

De la même ma­niè­re que l'on transforme facilement une fonction f:XY en application en remplaçant son en­semb­le de départ X par le domaine de définition D(f), on transforme une application quelconque en surjection en remplaçant son ensemble d'arrivée Y par son image Im(f).

Soit f:XX une application. On dit qu'une partie AX est stable par f si elle vérifie f(A)A et invariante par f si on a l'égalité f(A)=A. Si xX est tel que f(x)=x, on dit que c'est un point fixe de X par f.
Soit X et Y deux ensembles et f et g deux applications de XY. Tout x0X tel que f(x0)=g(x0) est appelé solution de l'équation f(x)=g(x) d'inconnue x.
C'est principalement quand les ensembles sont munis d'opérations algébriques que l'on étudie des équations, par exemple l'addition et la multiplication dans R. Ces opérations permettent de transformer les expressions de ces applications pour déterminer la ou les solutions si elles existent. Par exemple, si on considère l'application f:RR définie par xx1 et que l'on cherche ses points fixes, on doit résoudre l'équation (20)1x=x et la fonction g de la définition ci-dessus est l'application identité xx de R dans R. Quelques manipulations algébriques légitimées par les propriétés de l'addition et de la multiplication de l'addition dans R (les trouver en guise d'exercice) fournissent successivement les identités équivantes suivantes (1x=x)  (1=x2)  (x21=0)  (x+1)(x1)=0. Dans un anneau intègre et a fortiori dans un corps, un produit de facteurs est nul si et seulement si l'un au moins des facteurs est nul, il y a donc deux solutions à cette dernière équation. Ce sont les deux points fixes de l'application f et l'ensemble des solutions de l'équation (20) est le sous-ensemble {1,1} de R.
Soit I et X deux ensembles. On appelle famille d'éléments d'un ensemble X et d'ensemble d'indexation I, toute application x:IX. L'image d'un élément iI est notée xi plutôt que x(i), et l'ensemble image de l'application x définit l'ensemble des éléments de la famille. On note une telle famille (xi)iI.

Dans cette définition, rien ne distingue une famille d'une application, si l'on excepte l'usage des lettres I et X pour dé­si­gner respectivement l'ensemble de départ et d'arrivée en lieu et place des usuels X et Y. Il s'agit ici de formaliser l'écriture mathématique indicielle xi pour désigner un élément d'un ensemble X. For­mel­lement on définit la famille x:IX et on écrit simp­le­ment xi au lieu de x(i).

Nous n'avons pas encore étudié l'ensemble des entiers naturels N, mais il est plus pertinent de ne pas différer les définitions suivantes :

On appelle suite d'éléments d'un ensemble X, toute famille d'éléments de X indexée par l'ensemble des entiers naturels N, i.e. toute application de N dans X. On appelle système d'éléments d'un ensemble X, toute famille d'éléments de X dont l'en­semb­le d'indexation est un ensemble fini. On appelle séquence ou suite finie d'éléments de X, tout système dont l'en­semb­le d'indexation est un intervalle a,b de N.
Certains auteurs donnent des définitions différentes des suites. L'existence de plusieurs définitions pour un même objet peut sembler déroutant mais ne pose aucun problème tant que l'on rappelle le sens que l'on donne à cet objet dans un discours mathématique. Ces rappels préalables sont in­dis­pen­sa­bles si la définition utilisée n'est pas celle qui est communément admise.

Ce qui importe dans ces trois notions est l'ordre dans lequel les éléments de ces trois types de familles sont rangés. C'est explicite pour une séquence ou une suite et pour un système dont l'ensemble d'indexation est totalement ordonné. C'est implicite pour un système dont l'ensemble d'indexation n'est pas ordonné, puisque étant fini, il est en bijection avec {iN1in}, ses éléments peuvent donc être ordonnés via cette bijection.

Considérons le système (xi)iI muni de l'ensemble d'indexation I={a,b,c,,z} équipé de l'ordre alphabétique. On peut donc écrire xa, xb, etc.

Nous avons vu au chapitre dédié à la logique des prédicats et la théorie zf, comment était construit le produit cartésien de deux ensembles X et Y et comment on pouvait le généraliser au produit cartésien de q>2 ensembles X1,X2,,Xq. On peut désormais procéder autrement avec une construction à la fois plus simple et plus générale. C'est tout simplement le produit fini de la séquence (Xi)iI d'ensemble d'indexation I:={1,2,,q}.

Soit (Xi)iI une famille d'ensembles. On appelle ensemble produit de la famille (Xi)iI, l'ensemble définit ci-dessous et noté (21)iIXi:={(xi)iIiI  xiXi}. La fonction pri:iIXiXi définie par pri(x):=xix:=(xi)iI est ap­pe­lée i-ème projection.

Opérations sur les ensembles

Réunion, intersection.

Soit (Xi)iI une famille d'ensembles. On montre que les deux ensembles suivant existent : iIXi:={xiI xXi}iIXi:={xiI xXi}. Il s'agit respectivement de la réunion de la famille (Xi)iI et de l'intersection de la famille (Xi)iI.

Réindexation.

Si l'on se donne une application surjective φ:JI, on peut faire une réindexation de la famille (Xi)iI, i.e.

iIXi=jJXφ(j)iIXi=jJXφ(j).

Autres opérations.

Soit (Xi)iI et (Yj)jJ deux familles d'ensembles. On a

(22)(iIXi)(jJYj)=(i,j)I×J(XiYis),(23)(iIXi)(jJYj)=(i,j)I×J(XiYis).

Soit (Xi)iI et (Yj)jI deux familles d'ensembles de même ensemble d'indexation I telles que iI  XiYi. Alors

(24)iIXiiIYi,(25)iIXiiIYi.

Soit (Xi)iI une famille de parties d'un ensemble X. Alors

(26)XiIXi=iI(XXi),(27)XiIXi=iI(XXi).
Soit A une partie d'un ensemble X. On appelle fonction indicatrice de A, la fonction 1A:X{0,1} définie par 1A(x):={1si xA,0sinon.

Images et images réciproques d'une réunion et d'une intersection.

Soit f:XY une application, (Xi)iI une famille de parties de l'ensemble X et (Yi)iI une famille de parties de l'ensemble Y. On a

(28)f(iIXi)=iIf(Xi),f(iIXi)iIf(Xi).f1(iIXi)=iIf1(Xi),f1(iIXi)=iIf1(Xi).

L'image réciproque d'une réunion (ou d'une intersection) est donc toujours la réunion (ou l'intersection) des images réciproques. En revanche, si l'image d'une réunion est bien la réunion des images, l'image d'une intersection n'est pas l'intersection des images.

Dans le plan euclidien, tracez les deux demi-droites A et B définies par (29)A:={(x,y)R×Rx0  y=1},B:={(x,y)R×Rx0  y=0}. Montrez que AB=. Considérons l'application f:R×RR×R définie par f(x,y):=(x,0). Calculez f(A)f(B). Quelle propriété une application f devrait satisfaire pour que l'inclusion en (28) soit une égalité ?

Partition d'un ensemble

Étudier un ensemble X en le découpant en parties cohérentes est très utile. On peut par exemple partitionner la population mondiale selon les pays, partitionner les instruments de musique selon qu'ils sont à vent, à corde ou à percussion, etc. Les trois propriétés ma­thé­ma­ti­ques exigées pour ce découpage sont très naturelles : les parties ne doivent pas être vides, deux parties différentes ne doivent pas contenir d'éléments communs et la réunion de toutes ces parties est l'ensemble X tout entier :

On appelle partition d'un ensemble X, toute famille (Xi)iI de parties de X qui satisfait les trois conditions suivantes :
  1. iIXi,
  2. (i,j)I×I(ij)(XiXj=),
  3. iIXi=X.
Les parties Xi sont appelées les classes de la partition.
En anticipant sur la section suivante, une partition d'un ensemble X est intimement liée à une relation d'équivalence sur X. Si (Xi)iI est une partition de X, on vérifie aisément que la relation R sur X définie par xRyiI  (xXi)(yXi) est une relation d'équivalence. Les classes de X pour cette relation sont évidemment les Xi, d'où la terminologie dans la définition. Réciproquement, si on a une relation d'équivalence R définie sur un ensemble X, les classes d'équivalences forment une partition de X.

Une famille d'ensembles (Xi)iI dont la réunion contient un ensemble X s'appelle un recouvrement de X (à la manière des tuiles d'un toit qui le recouvrent et se chevauchent par endroit). Une partition est donc un cas particulier de recouvrement.

Re­la­tions binaires sur un ensemble

Définition et propriétés remarquables

Comme nous l'avions annoncé dans la première section, une re­la­tion binaire sur un ensemble X est tout simplement une re­la­tion binaire qui met en re­la­tion des éléments d'un même ensemble X. Ce modèle est si versatile et fécond, qu'il a engendré à lui seul une théorie, la théorie des graphes. Cette théorie connaît des développements permanents, elle est enseignée dans toutes les formations d'in­for­ma­ti­que et à tous niveaux. C'est l'un des modèles les plus utisés dans cette discipline scien­ti­fi­que, il est donc très important de le comprendre et le maîtriser. Son rôle universel justifie d'en donner une définition spécifique, même s'il s'agit d'un cas particulier de la définition d'une re­la­tion q-aire.

On appelle re­la­tion binaire sur un ensemble X, tout prédicat R(x,y) à deux variables dans l'ensemble X. L'ensemble {(x,y)X2R(x,y)} est appelé le graphe de la re­la­tion binaire R.

On rappelle que l'on note souvent une relation binaire de manière infixe, i.e. xRy au lieu de R(x,y). Les re­la­tions binaires ne sont que des cas particuliers de cor­res­pon­dan­ces, on les représente également par leurs diagrammes sagittaux, en se contentant cette fois des flèches qui relient les éléments entre eux, autrement dit du graphe. Le schéma de la patate pour représenter l'ensemble de référence X devient superflu. Un couple (x,x) dans ce diagramme est alors représenté par une boucle.

Par exemple :

Graphe d'une re­la­tion binaire sur l'ensemble X:={a,b,c,d,e,f,g,h,i}.

Décrivez en extension le graphe G de la relation binaire décrite dans le diagramme sagittal ci-dessus.
C'est l'ensemble G:={(a,b),(a,c),(b,b),(b,e),(d,d),(e,f),(f,e),(g,g),(g,h),(h,g),(i,i)}.

Comme nous l'avions déjà noté dans la section consacrée aux relations q-aires générales, une relation définit un graphe et réciproquement, ce sont deux façons équivalentes de considérer le même concept mathématique. Dans le cadre de la théorie des graphes, on préfère définir la relation a posteriori et mettre l'accent sur le graphe, d'où la définition suivante employée dans ce cadre.

On appelle graphe, tout couple G:=(X,U)X est un ensemble dont les éléments sont appelés sommets de G et UX×X dont les couples sont appelés arcs de G.

Il faut noter dans cette définition que G ne désigne plus l'ensemble des couples définis sur un produit cartésien, rôle dévolu à U, mais le couple constitué de l'ensemble des sommets X et de l'ensemble des arcs U. Le graphe est dit fini ou infini suivant la cardinalité de l'ensemble de ses sommets.

La relation R associée au graphe G au sens de cette définition est alors caractérisée par la pro­po­si­tion suivante : (30)(x,y)X2xRy(x,y)U. Les re­la­tions binaires, et par conséquent les graphes au sens de la définition ci-dessus, peuvent posséder des propriétés re­mar­qua­bles.

Soit R une relation binaire définie sur un ensemble X. On définit les propriétés suivantes :
  1. Réflexivité : xXxRx ;
  2. Symétrie : (x,y)X2xRyyRx ;
  3. Transitivité : (x,y,z)X³(xRy  yRz)xRz.
  4. Antiréflexivité : xX¬(xRx) ;
  5. Antisymétrie : (x,y)X2(xRy  yRx)x=y ;
  6. Asymétrie : (x,y)X2xRy  ¬(yRx) ;
  7. Antitransitivité : (x,y,z)X3(xRy  yRz) ¬(xRz).

On parlera donc de relation réflexive ou de graphe réflexif, de relation symétrique ou de graphe symétrique, etc.

L'asymétrie est plus contraignante que l'antisymétrie, elle est parfois qualifiée d'antisymétrie forte (par opposition l'antisymétrie est alors qualifiée d'antisymétrie faible). Dans un graphe asymétrique, il ne peut y avoir de boucle (x,x) alors que c'est possible dans un graphe antisymétrique.

Il faut immédiatement noter que les propriétés 4, 5 et 7 ne sont pas les négations des propriétés 1, 2 et 3 respectivement. Par exemple, la négation de la réflexivité s'écrit :

xX  ¬(xRx).

Autrement dit, il suffit d'un unique élément dans X qui n'est pas en re­la­tion avec lui-même pour que la propriété de réflexivité ne soit pas satisfaite, quand bien même tous les autres éléments de X sont en re­la­tion avec eux-mêmes. L'antiréflexivité est bien plus contraignante, et le préfixe anti est là pour le signifier, une re­la­tion antiréflexive impose qu'aucun élément ne soit en re­la­tion avec lui-même. Similairement, une re­la­tion binaire peut ne pas être symétrique (resp. transitive) sans pour autant être antisymétrique (resp. an­ti­tran­si­ti­ve).

Écrivez la négation logique de chacune des propriétés 2 à 7.
Quelles pro­prié­tés sont satisfaites par la relation binaire définie par le diagramme sagittal précédent ?
Pour chacune des propriétés 1, 2 et 3, trouvez un exemple de re­la­tion binaire sur un ensemble à deux éléments, qui satisfait :
  1. Une seule des trois propriétés,
  2. Deux des trois propriétés,
  3. Les trois propriétés.
et dessiner son graphe.

Faites de même avec une re­la­tion sur un ensemble à trois éléments. Listez toutes les re­la­tions binaires sur une ensemble à 1 élement. Quelles propriétés satisfont ces re­la­tions ?

Il est courant quand on dispose d'une relation binaire R sur un ensemble de considérer sa fermeture transitive. L'idée est simple et naturelle, l'expression les amis de mes amis sont mes amis l'illustre parfaitement. On construit à partir d'une relation R sa fermeture transitive R en rajoutant* La construction ef­fec­ti­ve de cette nou­vel­le re­la­tion né­ces­si­te d'éla­bo­rer un al­go­ri­thme. au graphe de la relation R les couples (x,y) nécessaires pour que cette nouvelle relation soit transitive.

La définition suivante nous sera utile dans les chapitres à venir, lorsque nous munirons les ensembles de nouveaux outils. Elle dit simplement qu'une application est compatible avec une relation binaire si deux éléments en relation ont la même image (Le prix f(x) payé par des personnes x du même âge est le même).

On dit qu'une application f:XY est compatible avec une relation binaire R sur X si et seulement si (31)(x,y)XxRyf(x)=f(y).

Re­la­tions d'équivalence

La notion de re­la­tion d'équivalence est déjà parfaitement intégrée par tous et en dehors de tout contexte mathématique. Dans les phrases Mettez un chapeau, , les termes tournevis, chapeau et homme ne font pas référence à un tournevis, un chapeau ou une voiture en particulier, mais à une classe dont les éléments ont des caractéristiques communes. Le formalisme mathématique tente de saisir l'es­sen­ce de ce concept :

Une re­la­tion binaire R définie sur un ensemble X, à la fois réflexive, symétrique et transitive est appelée re­la­tion d'équi­valen­ce sur X. L'ensemble (32)x:={yXxRy}. est la classe d'équivalence de x pour R et tout élément de x est un représentant de cette classe. L'ensemble des classes d'équivalence est appelé en­semb­le quotient de X par R, on le note X/R.

On peut définir aisément une re­la­tion sur l'ensemble des voitures, on dira par exemple que deux voitures sont en re­la­tion s'il s'agit du même modèle. La re­la­tion est évidemment réflexive, une voiture est bien du même modèle qu'elle même. La re­la­tion est également symétrique, si la voiture x est du même modèle que la voiture y, la voiture y est bien du même modèle que x. Elle est aussi transitive, puisque si la voiture x est du même modèle que la voiture y, qui elle même est du même modèle que la voiture z, alors la voiture x est du même modèle que la voiture z. Le lecteur perspicace aura deviné qu'en définissant une re­la­tion binaire à partir de caractéristiques communes entre objets, elle sera toujours une re­la­tion d'équivalence.

Le couple classe d'équivalence/représentant est à la théorie des ensembles ce que le couple hyperonyme/hyponyme est à la linguistique. L'Interceptor de Mad Max est un re­pré­sen­tant (hyponyme) de la classe (hyperonyme) des Ford Falcon XB.

La terminologie ensemble quotient et le symbole de division sont légitimés par le fait que l'on a divisé l'ensemble X en classes suivant la relation R. Le théorème suivant montre que partitions et relations d'équivalence sur un ensemble sont deux concepts étroitements liés. Quand plusieurs relations sont en jeu, la classe d'équivalence d'un élément xX pour une relation R est notée x/R pour éviter les confusions.

Démontrez que si R est une relation d'équivalence sur un ensemble X et xX, alors (33)xRy  x=y.
Dans le sens direct, soit (x,y)X2 et supposons que xRy. Soit ax, donc aRx et par transitivité de R, on en déduit que aRy, soit ay, ce qui prouve que xy. Le raisonnement est symétrique pour démontrer que yx et l'axiome d'extension permet de conclure. Pour l'implication réciproque, si x=y alors xyxRy.
Soit X un ensemble. Si R est une relation d'équivalence définie sur X alors l'ensemble quotient X/R est une partition de X. Réciproquement, si PP(X) est une partition de X, alors il existe une unique relation d'équivalence R sur X telle que X/R=P, définie par (34)xRyCP  (xC) et (yC).
Démontrez ce théorème.

L'application φ:XX/R définie par φ(x):=x qui à un élément x de X associe sa classe d'équi­va­len­ce x est évidemment surjective puisque l'ensemble d'arrivée est constitué de ses images, elle est appelée surjection canonique.

L'ensemble quotient X/R est une partie de quel ensemble ?
C'est un sous-ensemble de P(X).

Que doit satisfaire une application f:XY pour être compatible avec une relation d'équivalence R (deux éléments de X en relation doivent posséder la même image) ?

Soit f:XY une application, R une relation d'équivalence définie sur X et φ:XX/R la surjection canonique. L'application f est compatible avec R si et seulement s'il existe une ap­pli­ca­tion g:X/RY telle que f=gφ : (35)XfYφgX/R Dans ce cas g est unique, on dit qu'elle est déduite de f par passage au quotient X/R.
Montrons que la condition est nécessaire. Par hypothèse pour tout couple x,y) tel que xRy on a f(x)=f(y), autrement dit la cor­res­pon­dan­ce g d'ensemble de départ X/R et d'arrivée Y qui associe f(x) à la classe x est une application puisque f(x) ne dépend pas du représentant x de la classe, on peut donc écrire g(x):=f(x).

Réciproquement supposons qu'il existe une application g:X/RY telle que f=gφ. Montrons que si xRy alors f(x)=f(y). On a f(x)=gφ(x)=g(x)=g(y)car xRyx=y=gφ(y)=f(y)

Malgré les apparences, ce théorème n'a rien de bien compliqué. On a fait des paquets de tous les individus qui ont la même image par f, et l'application g n'est rien d'autre qu'une version de f définie sur ces paquets.

Dans la section consacrée aux fonctions et aux applications, nous avons étudié comment transformer une fonction f:XY quelconque en application, il suffit de remplacer l'ensemble de départ par le domaine de définition D(f) de la fonction, puis comment transformer cette application en surjection, il suffit de remplacer l'ensemble d'arrivée par l'image f(X) de f. Mais comment transformer cette dernière application en injection afin d'obtenir une bijection ?

L'étude que nous venons de mener nous donne la solution, il suffit de regrouper tous les éléments qui ont la même image par f, autrement dit de remplacer les éléments de l'ensemble de départ par leur classe d'équivalence pour la relation d'équivalence xRyf(x)=f(y) (par construction f est com­pa­tib­le avec R). Le diagramme sagittal ci-dessous explicite cette construction. Les éléments h et i sont écartés de l'ensemble de départ X pour faire de f une fonction et 3 et 6 sont écartés de l'ensemble d'arrivée Y pour faire de f une surjection. On obtient les 3 classes d'équivalence {b,g,e}, {c} et {a,d}.

Décomposition canonique d'une application f:XY. Les éléments yf(X) sont grisés.

L'application bijective ainsi construite est notée f et appelée application décomposition canonique · de f. Les ap­pli­ca­tions qui relient les quatre ensembles X, Y, X/R et f(X) sont souvent représentées dans un dia­gram­me appelé diagramme commutatif :

(36)XfYφjX/Rff(X)
Diagramme commutatif de la décomposition ca­no­ni­que d'une application f:XY.

Dans un diagramme commutatif, plusieurs chemins peuvent relier deux ensembles et les différentes compositions d'applications suivant ces chemins différents sont égales. Ici deux chemins relient X à Y, le premier est constitué d'une seule flèche, celle étiquetée f, et l'autre est constitué de trois flèches étiquetées φ, f et j l'injection canonique. On a donc f=jfφ.

Relations d'ordre

Trier des objets est une opération très courante, même pour un être humain, mais de toutes les opérations réalisées par les ordinateurs, c'est celle qui occupe de loin la plus grande part du temps cpu mondial. Trier des objets n'est possible que si l'on dispose d'un critère pour les comparer.

Une re­la­tion binaire définie sur un ensemble X à la fois réflexive, an­ti­sy­mé­tri­que et transitive est appelée re­la­tion d'ordre sur X. Le couple (X,) est appelé un ens­em­ble ordonné.
Soit (X,) un ensemble ordonné. Deux éléments x et y de X sont dits comparables si et seulement si (xy)(yx). Si tous les éléments de X sont com­pa­ra­bles deux-à-deux, la relation d'ordre est dite totale sinon partielle.

La re­la­tion binaire définie sur X par xy si et seulement si xy et xy est appelée ordre strict associé à . Attention ! l'ordre strict n'est pas une re­la­tion d'ordre.* La terminologie est ici particulièrement ma­la­droi­te.

Soit a et b deux éléments d'un ensemble totalement ordonné (X,) tels que ab. On définit les intervalles suivants :

[a,b]:={xXax et xb},]a,b]:={xXax et xb},[a,b[:={xXax et xb},]a,b[:={xXax et xb}.

Ces intervalles sont dits respectivement fermé, semi-ouvert à gauche, semi-ouvert à droite et ouvert. On définit également les demi-droites :

[a,[:={xXax},]a,[:={xXax},],b]:={xXxb},],b[:={xXxb}.
Dans le cas particulier où la relation d'ordre est l'ordre naturel sur N, les simplets crochets sont souvent remplacés par les doubles crochets et .

Certaines relations d'ordre sont tellement utilisées qu'elles bénéficient d'un symbole spécifique. C'est le cas de l'or­dre naturel défini sur l'ensemble N des entiers naturels qui est noté ou . Il s'agit d'une relation d'ordre total. C'est précisément par analogie avec l'ordre naturel que le symbole générique a été choisi pour représenter une relation d'ordre quelconque. On dira d'ailleurs de deux éléments x et y tels que xy que x est plus petit que y. Il faut néanmoins garder à l'esprit que cette analogie ne concerne que la terminologie, on peut parfaitement définir d'autres re­la­tions binaires sur l'ensemble des entiers naturels telles xy alors que x>y pour l'ordre strict > associé à l'ordre naturel , (cf. par exemple la relation de divisibilité dans cet exercice).

On démontre aisément que l'inclusion définie sur l'ensemble P(X) des parties d'un ensemble X est une re­la­tion d'ordre. L'ordre strict associé est noté . La terminologie héritée de l'ordre naturel ne prête pas à confusion ici puisqu'il est d'usage de dire que l'ensemble A est plus petit que l'en­sem­ble B si AB.

Démontrez que la relation binaire d'inclusion définie sur l'ensemble P(X) des parties d'un ensemble X est une re­la­tion d'ordre.
Nous utilisons le symbole pour représenter la relation d'inclusion entre en­sem­bles alors que de nombreux auteurs utilisent encore le symbole . Il s'agit de garder une cohérence entre les notations des différentes relations d'ordre. La propriété de réflexivité d'une relation d'ordre invite à suggérer l'égalité dans la graphie du symbole et à l'enlever pour l'ordre strict associé. C'est le choix qui a été fait pour la relation d'ordre naturel avec les symboles (ou ) pour l'ordre et < pour l'ordre strict. Si l'inclusion est représentée par le symbole , comment représenter l'inclusion stricte ? Des solutions ont été fournies par l'in­tro­duc­tion d'une multitude de notations plus ou moins baroques : ou encore voire , ce que nous souhaitons éviter.

La relation d'inclusion définie sur des ensembles est une relation d'ordre partiel. Considérons par exemple l'ensemble X:={a,b,c}. L'ensemble de ses parties est

(37)P(X)={,{a},{b},{c},{a,b},{a,c},{b,c},X}.

On ne peut pas comparer les parties {a,b} et {c} avec la relation d'inclusion par exemple, aucun des deux n'est inclus dans l'autre. Quand on dispose d'une relation d'ordre sur un ensemble fini comme ici, on représente le graphe de la relation à l'aide d'un dia­gram­me appelé diagramme de Hasse# Helmut Hasse est un mathématicien allemand. de la relation :

Diagramme de Hasse de la relation sur l'en­semb­le {∅,{a},{b},{c},{a,b},{a,c},{b,c},X}.

Le diagramme de Hasse d'une relation d'ordre est construit de bas en haut. Si l'on a xy, on dessine un arc reliant le sommet x vers le sommet y qui est placé au dessus de x. On ne représente aucune des relations que l'on peut déduire par transitivité. Dans l'exemple ci-dessus, l'ensemble vide est inclus dans toutes les parties de X, mais on ne trace que les trois arcs le reliant aux trois singletons, puisque les autres arcs peuvent être déduits par transitivité. Ce diagramme permet dans une certaine mesure de visualiser la relation étudiée et mettre en évidence quelques éléments re­mar­qua­bles que nous allons étudier dans la suite.

Cette représentation n'a d'intérêt que pour une relation d'ordre partielle. En effet si la relation d'or­dre est totale, le diagramme sera constitué de tronçons verticaux reliant les différents éléments de l'ensemble X. Par exemple pour l'ensemble X:={0,1,2,3} muni de l'ordre naturel :

Diagramme de Hasse de l'ordre naturel sur l'en­semb­le des entiers {0,1,2,3}.

Quand on dispose d'une relation d'ordre sur un ensemble X, certains éléments de l'ensemble peu­vent posséder des propriétés remarquables.

Soit (X,) un ensemble ordonné et A une partie de X. Un élément mX tel que (38)xA  mx(resp. xA  xm) est appelé un minorant (resp. majorant) de A.

Une partie A à la fois minorée et majorée, est appelée partie bornée. Il n'existe pas nécessairement de minorant ou de majorant à une partie d'un ensemble, par exemple la demi-droite [0,[ de R n'admet pas de majorant, et Z n'admet pas de minorant.

Soit (X,) un ensemble ordonné et A une partie de X. Si a est un minorant (resp. majorant) de A et aA, alors a est unique. On l'appelle le plus petit élément ou le minimum (resp. le plus grand élément ou maximum) de A et on le note min A (resp. max A).
S'il existe un plus grand minorant (resp. un plus petit majorant) d'une partie A d'un ensemble ordonné (X), il est appelé infimum ou borne inférieure (supremum ou borne supérieure) de A et on le note infA (resp. supA).

Dans l'exemple de la figure 13, le plus petit élément et le plus grand élément de P(X) pour l'inc­lu­sion existent, il s'agit respectivement de min P(X)= et max P(X)=X. L'ensemble des en­tiers naturels N admet un plus petit élément pour l'ordre naturel, il s'agit de 0. En revanche N n'admet pas de plus grand élément par essence, c'est l'une des trois propriétés qui le caractérisent comme nous le verrons au chapitre suivant.

La borne inférieure de A appartient à A si et seu­le­ment si A admet un plus petit élément et dans ce cas infA=minA. De même, la borne supérieure de A appartient à A si et seu­le­ment si A admet un plus grand élément et dans ce cas supA=maxA.

Soit f:XY une application à valeurs dans un ensemble ordonné (Y,) et AX. On parlera du minimum et du maximum de f sur A en lieu et place de min f(A) et max f(A), s'ils existent. De même on parlera de la borne inférieure et de la borne supérieure de f pour inf f(A) et sup f(A), s'ils existent. On les note respectivement (39)minxA f(x),maxxA f(x),infx A f(x),supx A f(x).

Nous avons vu qu'un ensemble ordonné n'admet pas néessairement de plus petit ou de plus grand élément, a fortiori si la relation d'ordre est partielle puisque tous les éléments ne sont pas comparables. Cependant, on peut se demander s'il existe des éléments qui soient plus petits ou plus grands que tous ceux avec qui la comparaison est possible ?

Soit (X,) un ensemble ordonné. Un élément a de X tel que (40)xX   xax=a(resp. xX   axx=a) est appelé un élément minimal (resp. un élément maximal) de X pour la relation .

Si l'on reprend la relation d'inclusion de la figure 13, mais que l'on restreint la relation à l'en­sem­ble * Cliquez pour mo­di­fier le diagramme de la figure 10., les éléments minimaux sont les trois singletons {a}, {b} et {c}. L'en­sem­ble des élé­ments maximaux est réduit à X qui est aussi le plus grand élément.

Il existe des moyens conventionnels de définir de nouvelles relations d'ordre à partir d'une ou plu­sieurs relations d'ordre prédéfinies. Quand on se donne une relation d'ordre sur un ensemble X, la relation d'ordre notée définie par xyyx est appelée l'ordre opposé de l'ordre . Quand on restreint une relation d'ordre définie sur un ensemble X à une partie YX, la relation ainsi crée s'appelle l'ordre induit par l'ordre sur Y. Si l'on se donne une famille (Xi,i)iI d'ensembles ordonnés, la relation définie sur l'ensemble produit X:=iIXi par

(41)(xi)iI(yi)jIiI  xiiyi.

est une relation d'ordre appelée l'ordre produit des relations i. Les relations d'ordre i peuvent être totales sans que l'ordre produit le soit. Considérons par exemple l'ordre produit sur l'ensemble des couples d'entiers naturels munis chacun de l'ordre naturel : (x,y)(x,y)(xx)(yy). Les couples (1,2) et (2,1) ne sont pas comparables. Pour obtenir une relation d'ordre total sur ce produit cartésien il faut fournir un peu plus d'efforts.

Limitons nous au cas fini où l'ensemble d'indexation est I:=1,n avec n un entier naturel non-nul. On définit une relation binaire entre deux n-uplets (xi)iI et (yi)iI par (xi)iI(yi)iI si et seulement s'il existe un rang k1,n1 tel que leurs i-èmes projections coïncident pour tout i1,k1 et que xkkyk ou que leurs i-èmes projections sont toutes égales sauf pour i=nxnnyn. Il s'agit d'une relation d'ordre total appelée ordre lexicographique.

Malgré une définition qui semble alambiquée, c'est une relation bien connue du lecteur. Si les en­sem­bles Xi désignent tous le même alphabet latin muni de l'ordre alphabétique, il s'agit de l'ordre du dictionnaire. C'est également l'ordre qui est utilisé pour ranger les nombres réels quand ils sont re­pré­sen­tés sous forme décimale.

On définit la relation de divisibilité sur l'ensemble des entiers naturels N par abcN  ac=b. Démontrez qu'il s'agit d'une relation d'ordre partiel. Vérifiez que 0 est le plus grand élément pour cette relation. Existe-t-il un plus petit élément ? Si l'on restreint cette relation à l'ensemble N{0,1}, existe-t-il toujours un plus petit élément ? Un plus grand élément ? Quels sont alors les éléments minimaux s'il en existe ? Les éléments maximaux s'il en existe ?

Tracez le diagramme de Hasse de la relation de divisibilité restreinte à l'ensemble {1,2,3,,20}.
Écrivez sous forme logique avec quantificateurs la définition de l'ordre lexicographique entre n-uplets (xi)iI et (yi)iI. Démontrez qu'il s'agit bien d'une relation d'ordre et que si les n relations d'ordre i sont totales alors l'ordre lexicographique est une relation d'ordre total.
Pour réaliser des algorithmes de tri comparatif, il est nécessaire que la relation d'ordre utilisée pour comparer les objets soit totale.
Démontrez que pour tout couple (x,y)I×II est un intervalle ou une demi-droite, tout élément compris entre x et y appartient à l'intervalle I.
Soit (X,X) et (Y,Y) deux ensembles ordonnés. Une application f:XY est appelée application croissante (resp. application décroissante) si et seulement si (42)(x,x)X×XxXxf(x)Yf(x).(43)(resp. (x,x)X×XxXxf(x)Yf(x).)

Attention, la négation de la croissance n'est pas la décroissance ! En effet une application peut très bien croître par moment et décroître par d'autres. Si l'on remplace dans la définition les relations d'ordre X et Y par leurs ordres stricts X et Y on parle d'application strictement croissante et strictement décroissante. Une application qui est croissante ou décroissante (resp. strictement croissante ou décroissante) est dite application monotone (resp. application strictement monotone).

Dé­mon­trez que toute application monotone et injective est strictement monotone. Démontrez que la composition de deux applications monotone est monotone.

Re­la­tions de précédence

Dans les systèmes multiprocesseurs multiprogrammés, on modélise le fonctionnement des processus par un ensemble T de tâches à réaliser. Ces tâches sont re­pré­sen­tées par des couples T=(d,f) dont la première projection d est l'instant où la tâche T débute son exécution et la seconde projection f est l'instant où elle finit son exécution. Certaines tâches ne peuvent débuter leur exécution qu'une fois que d'autres tâches ont fini la leur. Ces différentes contraintes temporelles sont modélisées par une relation binaire définie sur l'ensemble T des tâches à réaliser. Si T et T sont deux tâches, on interprète TT par la tâche T termine son exécution avant que la tâche T=(d,f) ne débute la sienne, i.e.

df.

On dit alors que la tâche T précède la tâche T ou que la tâche T succède la tâche T.

Une re­la­tion binaire définie sur un ensemble X à la fois antiréflexive, anti­sy­mé­tri­que et transitive est appelée re­la­tion de pré­cé­den­ce sur X.

Si deux tâches T et T sont telles que l'exécution de l'une ne nécessite pas l'exécution de l'autre au préalable, i.e. telles que ¬(TT)¬(TT), on dit que ce sont des tâches parallèles et on écrit TT, sinon elles sont en série. La relation est antiréflexive, en effet une tâche T ne peut pas terminer son exécution avant même d'avoir com­men­cé, elle est antisymétrique et bien sûr transitive.

Le graphe d'une relation de précédence est représenté par un diagramme qui omet tous les arcs que l'on peut déduire par transitivité. Deux questions classiques sont étudiées dans les cours de systèmes d'exploitation des formations en informatique :

  1. Trouver un ordonnancement séquentiel de l'ensemble des tâches compatible avec la relation de précédence ;
  2. Trouver un ordonnancement parallèle de l'ensemble des tâches compatible avec la relation de précédence.

Le premier cas correspond à la situation où les différentes tâches sont exécutées par un unique pro­ces­seur, le deuxième cas si le système alloue plusieurs processeurs pour exécuter des tâches en pa­ral­lè­le. Considérons par exemple la relation de précédence définie sur l'ensemble T:={T1,T2,,T9} par la fermeture transitive G du graphe

G:={(T7,T4), (T4,T1), (T1,T2), (T2,T3), (T4,T5),(T5,T2), (T5,T6), (T8,T5), (T8,T9), (T9,T6)}.

Son diagramme de précédence est représenté ci-dessous. Seuls les numéros des tâches sont indiqués :

Diagramme de précédence de la relation sur un en­semb­le de tâches.

Pour organiser un séquencement de ces 9 tâches, que ce soit de manière séquentielle ou parallèle, il faut bien sûr commencer par des tâches T qui n'ont aucun arc incident vers le sommet correspondant dans le diagramme, c'est-à-dire telles qu'il n'existe aucune tâche T telle que TT. Il n'y a que les tâches T7 et T8 qui ne sont précédées par aucune tâche.

Un ordonnancement séquentiel possible (il n'y pas nécessairement unicité) comme solution du pre­mier problème est :

T7T4T8T5T1T9T6T2T3.

Nous verrons au chapitre consacré à la combinatoire qu'une telle solution constitue une permutation de l'ensemble {1,2,,9}. L'ordonnancement parallèle solution du second problème est :

(T7T8)(T4T9)(T5T1)(T2T6)T3.

Ces solutions sont faciles à trouver à la main sur une instance aussi petite que celle de cet exemple, mais dans toute leur généralité ces problèmes nécessitent d'élaborer des algorithmes pour les résoudre et on souhaite qu'ils soient efficaces.

D'autres questions sont soulevées par les relations de précédences. Il ne faut pas que dans un graphe de précédence apparaisse un circuit, c'est-à-dire une séquence Ti1,Ti2,,Tik de tâches telle que

(44)j1,k1  TijTij+1  et  TikTi1.

Plus simplement, la condition (44) exprime qu'il ne faut jamais être en mesure de partir d'une tâche T du graphe et d'y revenir en suivant des flèches. La raison est simple, si un tel circuit existe, alors par transitivité de la relation , on a TT ce qui contredit l'antiréflexivité.

Comment savoir s'il existe des circuits dans un graphe ? Est-on capable de les trouver rapidement ? C'est ce genre de questions qui sont étudiées en théorie des graphes et on en saisit bien l'utilité.

En théorie de la complexité, en master, qui a pour objectif de classifier des problèmes en termes de ressources en temps et/ou en espace nécessaires pour les résoudre, on définit une relation binaire entre langages définis sur un même alphabet Σ appelée transformation polynomiale, qui est réflexive et transitive mais qui n'est ni symétrique, ni antisymétrique. Cette relation joue un rôle majeur dans cette théorie et cette classification.

Résolution du problème introductif

Modélisation avec les graphes

La modélisation de ce problème, appelé Jeu de Nim, se fait dans le cadre de la théorie des graphes.

Notons n le nombre d'allumettes sur le tas au début de la partie et considérons le graphe G:=(X,U) d'ensemble de sommets X:=0,n et d'arcs U:={(k,)X×X1k3}. Autrement dit, X contient toutes les valeurs possibles du nombre d'allumettes sur le tas lors du déroulement des parties et on relie une valeur k à une valeur si et seulement s'il s'agit d'un coup autorisé.

Graphe du jeu de Nim pour 9 allumettes.

Chaque sommet k de ce graphe code une position du jeu et un joueur dans cette position doit choisir parmi les 3 coups possibles (k,k+1), (k,k+2) et (k,k+3), celui ou ceux qui peuvent l'amener à une victoire, si un tel coup existe.

Il n'est pas difficile de constater que si un joueur est en position 3, 2 ou 1, il peut toujours amener le joueur adverse dans la position perdante 0 puisqu'il peut retirer 1, 2 ou 3 allumettes. Mais pour être certain d'être dans l'une de ces trois positions gagnantes, il fallait nécessairement que le joueur adverse soit en position 4 au préalable, elle aussi perdante par conséquent, et ainsi de suite. Cette analyse empirique montre qu'un joueur dans l'une des positions en jaune peut toujours amener le joueur adverse sur l'une des positions perdantes en rouge. Par conséquent, le joueur qui connaît cette stratégie et qui commence cette partie est sûr de gagner, sinon il faut qu'il compte sur l'ignorance du joueur adverse pour pouvoir se retrouver sur une position gagnante avant que toutes les allumettes soient retirées.

Le graphe G=(X,U) définit indirectement la correspondance (X,U,X) que nous noterons encore G par abus de langage. Observons les propriétés de la partie A:={0,4,8}. Aucune flèche ne permet de relier deux sommets de A, on dit dans ce cas que A est indépendante du graphe G : (45)(x,y)A2  (x,y)U. D'autre part, tout sommet hors de A est relié à un sommet de A, et on dit alors que A est une absorbante du graphe G : (46)yA xA  (y,x)U Une partie A de X à la fois indépendante et absorbante est appelée noyau du graphe G

Notons qu'un graphe n'admet pas nécessairement de noyau, mais s'il en admet un celui-ci est unique, ce qui permet de parler du noyau d'un graphe. Le cas échéant, on dispose d'une stratégie générale pour gagner à tous les jeux similaires. Par exemple, deux personnes veulent cueillir des fleurs à tour de rôle sur une rangée de n fleurs, mais ils ne peuvent qu'en couper une à chaque fois et il est interdit de cueillir une fleur à côté d'une fleur qui a été coupée. La cueillette s'arrête quand il n'est plus possible de cueillir de fleur. Quel stratégie faut-il adopter pour être le dernier à cueillir une fleur ? Autre exemple : deux joueurs sont faces à plusieurs tas de pièces et peuvent retirer chacun leur tour un nombre arbitraire de pièces mais d'un seul tas, qui peut en revanche être différent à chaque tour de jeu. Comment éviter d'être celui qui ne pourra plus retirer de pièce ?

Calculez le noyau des graphes qui modélisent les deux jeux cités dans les exemples précédents, pour une rangée de 7 fleurs pour le premier jeui et pour trois tas de 3, 4 et 2 pièces pour le deuxième jeu.

La question qui se pose à présent est de déterminer comment calculer le noyau d'un tel graphe autrement que de manière empirique ?

Fonctions de Grundy

de la section :

Le mathématicien britannique Patrick Grundy s'est intéressé à ce type de problèmes et a développé l'outillage nécessaire en théorie des graphes pour les analyser et identifier les positions gagnantes et perdantes. Dans le graphe modélisant les différentes configurations du jeu des allumettes et les transitions qui les relient, on constate aisément que l'on peut regrouper les sommets suivant leur statut dans le déroulement du jeu : les sommets 0, 4 et 8 qui sont les positions perdantes, les sommets 1, 5 et 9 qui permettent de les atteindre en retirant 1 allumette, les sommets 2, 6 en retirant 2 allumettes et les sommets 3 et 7 en retirant 3 allumettes. Il y a donc 4 groupes de positions différents dans le graphe.

Plus généralement, s'il y a m groupes de positions différentes, une fonction de Grundy g fournit simplement pour un sommet xX du graphe, le numéro g(x) de son groupe, sachant que les groupes sont numérotés de 0 à m1 et que la valeur nulle est attribuée aux sommets du noyau du graphe.

Soit G=(X,U) un graphe antiréflexif. On appelle fonction de Grundy, toute application g:XN telle que (47)xXg(x)=min(Ng(G({x}))).

On comprend aisément l'intérêt d'une telle fonction, les positions gagantes/perdantes sont déterminées par la valeur de leur fonction de Grundy. Reste à déterminer les conditions qu'un graphe doit satisfaire pour qu'il admette une fonction de Grundy et, le cas échéant, comment construire cette fonction.

Montrez que si un graphe G=(X,U) admet une fonction de Grundy, alors il admet

Travaux pratiques

L'objectif de ce TP est de transposer en Python quelques manipulations vues en cours sur les correspondances, fonctions et applications.

En séance

Une cor­res­pon­dan­ce c:=(X,G,Y) est codée dans un fichier texte contenant un couple du graphe G par ligne. Cliquez sur ce lien et sauvegardez cet exemple dans le répertoire où vous écrirez vos scripts.

Un couple (x,y) est codé par la séquence x > y. Une ligne contenant > y sans premier membre (resp. x > sans second membre) code un élément de l'ensemble d'arrivée (resp. de départ) qui n'est pas en relation avec un élément de l'ensemble de départ (resp. d'arrivée). Cela permet de déterminer tous les éléments des ensembles de départ X et d'arrivée Y de la correspondance, y compris ceux qui ne sont pas en relation.

Écrivez une fonction Python Lire(nomfichier) qui lit le fichier dont le nom est passé en paramètre et renvoie un triplet (X,G,Y) codé à l'aide d'un tuple Python comportant :
  1. L'ensemble de départ X codé par un set.
  2. Le graphe G codé par un dictionnaire. Les éléments x de X tels que (x,y)G constituent les clefs de ce dictionnaire et la valeur associée à une clef x est l'image directe de x codée par un set. On ne codera pas la clef vide dans le dictionnaire (celle qui correspond à une ligne > y sans premier membre).
  3. L'ensemble d'arrivée Y codé par un set.
Pour la correspondance fournie en exemple, on a donc : la fonction doit donc renvoyer le tuple (X,G,Y).
Indications : voir les travaux pratiques #2 pour la lecture d'un fichier texte et la manipulation des ensembles (type set).

On rappelle que l'on peut découper une chaîne de caractères chaine suivant un séparateur sep (une chaîne de caractère également, par défaut un espace) grâce à la méthode split(sep) qui renvoie la liste des sous-chaînes séparées par la chaîne sep. Ici on obtient la liste constitué des deux termes du couple en utilisant le symbole > comme séparateur :

1 couple = chaine.rstrip().split(">")
L'appel à rstrip() permet d'éliminer le caractère invisible retour charriot à la fin de chaque ligne du fichier. Vous pourrez utiliser la fonction et la procédure suivantes pour formater un ensemble et une cor­res­pon­dan­ce c  (cliquer ici pour les télécharger. Leurs modes d'emploi sont fournis en commentaire :
1 def Formater(X):
2 return str(X).replace("'",'')
3 def Afficher(names, c):
4 print(names[0],":")
5 for i in range(3):
6 print("\t"+names[i+1]+" = ",Formater(c[i]))
7 print()
Écrivez une fonction Python DomaineDef(c) qui renvoie le domaine de définition de la cor­res­pon­dan­ce c passée en paramètre.
Écrivez une fonction Python CreerDico(c) qui renvoie un dictionnaire dont les clefs sont tous les xDef(c). La valeur associée à chaque clef x est l'image directe de {x} par c, i.e. c({x}). Voir les travaux pratiques #3 pour l'usage des dictionnaires. Pour l'exemple fourni, en notant D ce dictionnaire, on a D["a"]={"1","2"}, D["b"]={"1"}, D["c"]={"2","3"} et D["e"]={"4"}.
Écrivez une fonction Python EstFonction(c) qui décide (renvoie vrai ou faux) si la cor­res­pon­dan­ce c passée en paramètre est une fonction.

Indication : Utilisez le dictionnaire de c et vérifier que pour toute entrée, sa valeur contient au plus un élément.

Écrivez une fonction Python EstApplication(c) qui décide si la cor­res­pon­dan­ce c passée en paramètre est une application.

Indication : appliquer littéralement la définition du cours.

Écrivez une fonction Python Reciproque(c) qui renvoie la cor­res­pon­dan­ce réciproque de celle passée en paramètre.
Écrivez une fonction Python ImageDirecte(c,A) qui renvoie l'image directe d'une partie A de l'ensemble de départ de la cor­res­pon­dan­ce c passée en paramètre.
Écrivez une fonction Python ImageReciproque(c,B) qui renvoie l'image réciproque d'une partie B de l'ensemble d'arrivée de la cor­res­pon­dan­ce c passée en paramètre.
Écrivez une fonction Python Composer(g,f) qui renvoie la composition gf des deux cor­res­pon­dan­ces f et g passées en paramètres. Composez cette cor­res­pon­dan­ce avec sa cor­res­pon­dan­ce ré­ci­pro­que. Est-ce l'identité ?

Indication : n supposera que l'ensemble d'arrivée de la cor­res­pon­dan­ce f est égal à l'ensemble de départ de g.

Compléments hors séance

Écrivez une fonction Python EstInjection(c) qui décide si la cor­res­pon­dan­ce c passée en paramètre est une injection.
Écrivez une fonction Python EstSurjection(c) qui décide si la cor­res­pon­dan­ce c passée en paramètre est une surjection.
Écrivez un script Python qui réalise la décomposition canonique d'une application f:XY. Les fonctions sont encore une fois encodées par leurs graphes codés dans un fichier texte. Pour cela, écrivez une fonction DC(f) qui renvoie la liste des couples (A,y) formés par les classes d'équivalence A suivant R et de l'image commune y des représentants de la classe A.
Écrivez une fonction en Python Comparer(x,y) qui compare deux chaînes de ca­rac­tères x et y pour l'ordre l'ordre lexicographique sur l'alphabet latin et renvoie 1 si xy, 0 si x=y et 1 si yx. Écrivez un programme qui saisit deux chaînes de ca­rac­tères et les compare.