Homologie d’un graphe

Dans ce post, je vais parler d’homologie (ce sera une petite introduction aux idées de l’homologie simpliciale) et de graphes. En particulier un des objectifs est de prouver par des “méthodes homologiques” la propriété suivante :

Proposition : Soit G un graphe connexe, qui a v sommets (pour “vertex” en anglais) et e arêtes (pour “edge” en anglais). Alors e \geq v-1.

On peut le prouver relativement facilement par récurrence; je vais vous proposer une preuve plus compliquée et qui a l’air plus alambiquée, mais qui me semble conceptuellement plus intéressante qu’une preuve par récurrence où on ne comprend pas forcément “ce qui se passe”.  Et puis cette preuve plus compliquée permet de découvrir un peu l’homologie, c’est un “exemple bébé” d’homologie (voire de topologie algébrique) – elle permettra de compter les “trous” d’un graphe !

Déjà mettons nous d’accord sur ce qu’est un graphe. Pour les besoins de ma preuve, il faudra qu’un graphe soit orienté, i.e. chaque arête sait d’où elle part et vers où elle va. Au vu de l’énoncé, ça ne change rien au résultat (si on a un graphe non orienté, on rajoute des orientations arbitraires) – si on s’entend pour dire que “connexe” ne prend pas en compte l’orientation des arêtes. Finalement, puisque ça ne change rien à la preuve et augmente la généralité, j’autorise mes graphes à avoir plusieurs arêtes entre deux sommets, et j’autorise des arêtes qui bouclent sur un sommet. Pour être sûr que ce soit clair :

Définition : Un graphe est un couple (V,E) muni d’applications s,c : E\to V (pour “source” et “cible”).

V représente l’ensemble des sommets du graphe, E l’ensemble des arêtes, et si e\in E, s(e) est son point de départ, c(e) son point d’arrivée.

Pour définir la connexité d’une manière qui va nous simplifier la vie, on définit une relation d’équivalence sur V : Si v,w sont deux sommets, on dit que (v,w)\in R si il existe e\in E telle que (s(e), c(e)) = (v,w). Notre relation d’équivalence C est alors la relation d’équivalence engendrée par R, c’est-à-dire la plus petite relation d’équivalence contenant R.

Cette définition va nous simplifier la vie parce que pour montrer qu’une relation d’équivalence contient C, il suffit de vérifier que s(e) est relié à c(e) pour toute arête e.

On dit qu’un graphe G= (V,E,s,t) est connexe si C est la relation d’équivalence totale, i.e. pour tous v,w\in V, (v,w)\in C.

Passons à l’homologie ! On va associer des espaces vectoriels à notre graphe G.

L’idée est la suivante : si e est une arête dans G, on veut exprimer que s(e), c(e) ne sont pas tant différents que ça (après tout ils sont reliés par un chemin), donc on veut que leur “différence” c(e)-s(e) soit nulle. Evidemment ça n’a pas de sens, on ne peut pas soustraire deux sommets. Sauf si…

Définition: Soit G un graphe. On définit C_0(G) comme un espace vectoriel  (disons, pour se fixer les idées, sur \mathbb R) dont une base est V; concrètement ses éléments sont des sommes formelles \sum_{v\in V} \lambda_v v, où pour tout v\in V, \lambda_v\in \mathbb R, et où tous sauf un nombre fini des \lambda_v sont nuls (si notre graphe est infini par exemple). On additionne ces sommes formelles de manière évidente, et on les multiplie par des scalaire de la seule manière raisonnable.

De même, on définit C_1(G) comme un espace vectoriel dont une base est E.

Pour faire en sorte que la différence c(e)-s(e) (qui est maintenant bien définie : c’est un élément de C_0(G) !) soit nulle, on définit d: C_1(G)\to C_0(G) sur la base E par d(e) = c(e)-s(e), e\in E.

Ensuite, pour s’assurer que cette quantité est nulle, on quotiente !

On définit H_0(G) = C_0(G)/ d(C_1(G)) et H_1(G) = \ker (d) (pour la preuve, on ne va regarder que H_0(G), mais j’expliquerai comment interpréter H_1(G) après); et notons p : C_0(G) \to H_0(G) la projection canonique.

Soit S la relation définie par (v,w) \in S \iff p(v)=p(w). Il est immédiat que S est une relation d’équivalence; et la définition de d et H_0(G) assure que R\subset S, d’où C\subset S.

En particulier (!) si G est connexe C=S (car C est la relation d’équivalence totale). Il s’ensuit que pour tout v,w \in V, p(v) = p(w), donc H_0(G) est de dimension au plus 1 (il est engendré par \{p(v), v\in V\} qui est de cardinal au plus 1 – le formuler comme ça permet de gérer le cas où V=\emptyset sans exception).

Il s’ensuit que \dim C_0(G) - \dim d(C_1(G)) \leq 1 , ou encore \dim C_0(G) \leq 1 + \dim d(C_1(G)) \leq 1 + \dim C_1(G). Or on connait une base de C_0(G) et une de C_1(G) ! Notant e, v les cardinaux respectifs de E,V, on a v\leq 1+e, ce qui est exactement ce qu’on voulait !

Il est à noter que cette preuve montre que l’égalité arrive “rarement” : en effet pour qu’on ait égalité, il faut déjà que H_0(G) soit de dimension 1, donc G non vide; et ensuite il faut que d soit injective (i.e. H_1(G) = 0 : on voit déjà poindre le bout de son nez), ce qui, au vu de sa définition, est relativement rare.

En fait on peut interpréter H_1(G) “indépendamment” pour voir plus précisément quand ça arrive.

L’idée est la suivante : on veut regarder quand d(x) = 0. Si x= e\in E est dans la base, cette équation nous dit que e est une boucle sur s(e). En fait, plus généralement, les éléments de H_1(G) représentent des cycles dans G.

Je ne vais pas rentrer dans les détails (qui sont pour le coup un peu pénibles à écrire à cause des orientations), mais l’idée est la suivante : si e_1,...,e_n est un cycle (disons orienté, pour me simplifier la vie), c’est-à-dire que c(e_i) = s(e_{i+1}) pour i\leq n-1 et c(e_n) = s(e_1), alors \sum_i e_i \in H_1(G) : c’est un calcul rapide que je vous laisse.

Si c’est un cycle, mais pas orienté (i.e. s’il faut éventuellement renverser le sens de certaines arêtes pour obtenir un cycle orienté), on a la même chose mais en rajoutant des signes devant les arêtes qu’il faut retourner : je vous laisse en exercice le fait d’écrire précisément ce que j’ai dit, et de faire la vérification.

On peut alors vérifier que les cycles minimaux (c’est-à-dire qu’ils ne peuvent pas être décomposés en plus petits cycles, et qu’ils ne contiennent pas deux fois la même arête de suite – orientés ou pas) forment une base de H_1(G); ainsi \dim H_1(G) compte le “vrai” nombre de cycles dans G (si C_1,C_2 sont deux cycles autour du sommet v, alors faire C_1 puis C_2 est aussi un cycle, mais on ne veut pas le compter, on le voit comme C_1+C_2)

Il s’ensuit que H_1(G) = 0 si et seulement si G n’a pas de cycles ! Cela nous donne automatiquement le cas d’égalité : si G est connexe, on a e= v-1 si et seulement si G est non vide et ne contient aucun cycle; i.e. si c’est un arbre non vide.

En fait, avec à peine plus de travail (je vous le laisse donc en exercice! ) on peut montrer que \dim H_0(G) est le nombre de composantes connexes de G (les classes d’équivalence de la relation C; en fait montrer que la relation S est toujours égale à C), c’est-à-dire le nombre de “trous 0-dimensionnels” de G, et \dim H_1(G) est le nombre de cycles minimaux, donc le nombre de “trous 1-dimensionnels”.

Cela semble indiquer qu’on peut continuer, avec des H_n(G) qui compteraient les “trous n-dimensionnels”. C’est le cas: en fait si on rajoute par exemple des “faces” à notre graphe, c’est-à-dire un ensemble F avec trois applications d_0, d_1, d_2: F\to E (imaginer les faces comme des triangles pleins, et d_i est le i-ème bord du triangle) on peut imaginer “combler” certains trous : imaginons par exemple un graphe sur 3 sommets 0,1,2, avec une arête de 0 à 1, une de 1 vers 2, et une de 0 vers 2, on a clairement un “trou” au milieu. Maintenant, si on met une face f dont les bords sont précisément ces trois arêtes, on peut imaginer notre “figure” comme un triangle plein, qui n’a donc pas de trou.

Plus généralement, on peut imaginer des “n-faces” pour tout n. Une des manières de faire ça est la théorie des “ensembles simpliciaux”, leur homologie est définie de manière très similaire à ce que j’ai fait là, et on peut définir H_n qui “compte les trous n-dimensionnels” (par exemple on peut construire un ensemble simplicial qui ressemble à une 2-sphère, qui aura précisément un trou 2-dimensionnel, et aucun autre trou, comme le dessin le suggère). Je ne rentrerai pas là-dedans dans ce post, mais c’est très intéressant.

Je conclus sur une remarque qui n’a l’air de rien mais qui peut, dans des contextes plus généraux, avoir un intérêt : j’ai regardé des \mathbb R-espaces vectoriels, mais j’aurais pu regarder des k-espaces vectoriels pour n’importe quel corps k; en fait j’aurais même pu regarder des R-modules pour n’importe quel anneau R; même si pour ces derniers l’argument de la dimension ne fonctionne pas forcément. Pour le H_0 cela ne change pas grand chose, et en fait pour le H_1 d’un graphe non plus; mais il y a des ensembles simpliciaux pour lesquels il y a une vraie différence (par exemple un ensemble simplicial qui représenterait \mathbb RP^2, le plan projectif réel)

Leave a comment