Cours n° 2, 3 octobre 2013

Jean-François Perrot

Ensembles de mots : langages


  1. Les opérations ensemblistes
    1. Réunion, ou union ensembliste
    2. Intersection
    3. Passage au complémentaire

  2. Lois sur les opérations ensemblistes
    1. Commutativité
    2. Associativité
    3. Distributivité
    4. Passage au complémentaire : renversement des inclusions
    5. Passage au complémentaire : les lois de De Morgan

  3. Mots et ensembles de mots
    1. Mot = chaîne de caractères (String)
    2. Concaténation
    3. Ensembles de mots. Langages
    4. Concaténation (ou produit) des langages
    5. L'opération étoile (parfois appelée itération)

  4. Expressions régulières (ou rationnelles)
    1. Notations :
    2. Les trois ensembles B, C et D sont deux à deux disjoints.
    3. Les trois ensembles B, C et D sont tous les trois inclus dans A.
    4. Tout élément de A se trouve dans l'un des trois sous-ensembles B, C ou D.
    5. Des deux inclusions réciproques ...

  1. Les opérations ensemblistes

    Elles sont au nombre de 3, apparentées du point de vue algébrique à l'addition, à la multiplication et à la soustraction des nombres.
    Elles sont étroitement liées aux opérations logiques de disjonction (ou), conjonction (et), et négation (non)

    1. Réunion, ou union ensembliste

      Étant donnés deux ensembles E et F, la réunion de E et de F est l'ensemble des éléments de E et des éléments de F,
      ce qui se reformule en "l'ensemble des éléments de E ou de F".
      La notion d'ensemble étant ce qu'elle est, il n'est pas question de
      "compter deux fois les éléments qui appartiennent aux deux".
      Il faudrait pour celà une notion d'ensemble avec multiplicités
      (connue en informatique sous le nom de bag, par opposition à set),
      c'est une autre histoire.
      On voit ici apparaître le "ou", la disjonction logique notée traditionnellement ⋁ (comme V, initiale du latin vel = ou).
      On écrit : EF = { xxE ⋁ xF }

      Le signe ∪ (Unicode x222A) peut être vu soit comme dérivé arrondi du symbole de disjonction ⋁ (Unicode x22C1),
      soit comme l'initiale de union...

      En termes de prédicats associés, il est clair que la réunion des ensembles correspond à la disjonction des prédicats.
      PE∪F = PE ⋁ PF .

      Notons dès maintenant qu'en programmation, où on cherche à limiter le jeu de caractères employé,
      le symbole le plus utilisé est la barre verticale |  (ASCII 124), parfois doublée.
      Suivant le contexte, il peut noter aussi bien la réunion ensembliste (comme dans les expressions régulières) que la disjonction logique.

      Notons au passage les inclusions EEF, FEF , et que
      la réunion EF peut être définie comme
      le plus petit ensemble G tel que les deux inclusions EG et FG soient vraies.
    2. Intersection

      Étant donnés deux ensembles E et F, l'intersection de E et de F est l'ensemble des éléments qui appartiennent simultanément à E et à F.

      On voit ici apparaître le "et", la conjonction logique notée traditionnellement ⋀ (par renversement de ⋁).
      On écrit : EF = { xxE  xF }

      Le signe ∩ (Unicode x2229) est clairement le renversé  du symbole de réunion ∪ (Unicode x22C1),

      En termes de prédicats associés, il est clair que l'intersection des ensembles correspond à la conjonction des prédicats.
      PE∩F = PE ⋀ PF .

      En programmation, le symbole le plus utilisé est l'esperluette &  (alias "et commercial", ASCII 38), parfois doublée.
      Suivant le contexte, il peut noter aussi bien l'intersection ensembliste (comme dans les expressions régulières étendues) que la conjonction logique.

      Par un hasard malencontreux, on a choisi d'appeler disjoints deux ensembles dont l'intersection est vide (rien à voir avec la disjonction logique !).
      Donc "E et F disjoints" <==> "EF = ∅".
    3. Passage au complémentaire

      Le complémentaire d'un ensemble E est formé des éléments qui n'appartiennent pas à E :
      on le note ∁E = { x | xE }, avec l'opérateur unaire ∁ (Unicode x2201).

      En termes de prédicats associés, il est clair que le passage au complémentaire de l'ensemble correspond à la négation du prédicat.
      P∁E = ¬PE  .

      En programmation, nous verrons une notation spécifique pour le complémentaire dans les expressions régulières.
      Plusieurs symboles sont utilisés pour la négation, notamment le tilde et le point d'exclamation.

  2. Lois sur les opérations ensemblistes


    Les trois opérations de réunion, d'intersection et de passage au complémentaire ont des propriétés remarquables,
    analogues à celles qui permettent de calculer en arithmétique (identités remarquables, etc).
    Nous traiterons d'abord celles des deux opérations binaires ∪et ∩, ensuite celle du passage au complémentaire, qui est unaire.

    Le caractère binaire de ces opérations est essentiel : d'un point de vue mathématique, une opération n'est rien d'autre qu'une fonction,
    et une fonction peut prendre un nombre quelconque d'arguments.
    La distinction entre fonction et opération est affaire de connotation et non de dénotation.
    Justement, les opérations arithmétiques, qui constituent l'archétype des opérations, sont binaires.
    En outre, toute opération à plus de deux argments peut se réaliser comme une composition d'opérations binaires
    (de la même manière que toute opération de choix peut se ramener à une composition de choix binaires).

    1. Commutativité

      L'union et l'intersection sont commutatives, c'est à dire que AB = BA et que AB = BA
      quels que soient les ensembles A et B.
      Il suffit de relire les définitions pour constater que l'ordre des opérandes n'intervient pas.

      Soulignons que la commutativité est une propriété très forte, que beaucoup d'opérations binaires ne possèdent pas !
      la division des nombres est un bon exemple d'opération binaire non-commutative.
      Nous en verrons bientôt apparaître une autre, portant sur les ensembles de mots...

    2. Associativité

      L'union et l'intersection sont associatives, c'est à dire que (AB)∪CA ∪ (BC) et que (AB)∩C = A ∩ (BC)
      quels que soient les ensembles A, B et C.
      Dans ces écritures, la mise entre parenthèses indique l'ordre du calcul :
      • dans (AB)∪C on calcule d'abord (AB) avant de l'ajouter à C
      • dans A ∪ (BC) au contraire, on calcule d'abord (BC) avant de l'ajouter à A 
      • on voit bien qu'a priori ces deux séquennces de calcul n'ont en général aucune raison de donner le même résultat !
        par exemple, la division n'est pas associative [(x/y)/z = x/y.z est bien différent de x/(y/z)]
      Mais, pour nos deux opérations, il suffit de relire les définitions pour voir que le résultat est bien le même.

      L'associativité est une propriété fondamentale qui permet de réorganiser les calculs.
      D'un point de vue de linguiste, on observe ses conséquences pour les notations :
      les parenthèses utilisées pour marquer l'ordre des calculs alourdissent l'écriture, on souhaite s'en débarrasser.
      Justement, l'associativité permet de le faire et d'écrire sans ambiguïté
      • AB C pour la valeur commune à (AB)∪C et à A ∪ (BC)
      • ABC pour la valeur commune à (AB)∩C et à A ∩ (BC).

      Pour une opération non associative comme la division, en revanche, une écriture comme "x/y/z" est ambiguë,
      et il faut une règle de précédence pour l'interpréter [en l'occurrence, ce sera "(x/y)/z"].
      Nous reviendrons longuement sur cette question au second semestre.

    3. Distributivité

      On sait que l'identité "(a + b) c = ac + bc" manifeste que
      la multiplication est distributive par rapport à l'addition ( et non l'inverse).
      Qu'en est-il de nos deux opérations ensemblistes ?

      L'intersection est distributive par  rapport à l'union : (AB) ∩ C = (AC) ∪ (BC).
      En effet, dire qu'un élément appartient à la fois à C d'une part et soit à A soit à B d'autre part (1er membre)
      est exactement équivalent à dire qu'il appartient soit à la fois à C et à A, soit à la fois à C et à B (2è membre).

      Et réciproquement l'union est distributive par  rapport à l'intersection : (AB) ∪ C = (AC) ∩ (BC).
      Pour le voir, montrons successivement les deux inégalités opposées
      [i] (AB) ∪ C ⊆ (AC) ∩ (BC) et [ii] (AB) ∪ C ⊇ (AC) ∩ (BC).

      1. On a évidemment A⊆ A d'où  (AB) ∪ C ⊆ AC
        et de même AB entraîne  (AB) ∪ CBC
        par conséquent (AB) ∪ C est inclus dans l'intersection (AC) ∩ (BC).
        [i] est donc établi.
      2. Soit x un élément de l'intersection (AC) ∩ (BC).
        Si xC, alors il figure dans la réunion (AB) ∪ C.
        Sinon, il doit faire partie de A et de B, sans quoi il ne serait pas dans (AC) ∩ (BC)
        on a donc x ∈ (AB), et là aussi  x ∈ (AB)∪ C.
        [ii] est donc établi, ce qui achève la preuve de la distributivité de ∪ sur ∩.

    4. Passage au complémentaire : renversement des inclusions

      Les opérations d'union et d'intersection sont croissantes par rapport à l'inclusion,
      c'est-à-dire que AB entraîne A ∪ C ⊆ BC et AC ⊆ B ∩C.

      Le passage au complémentaire est au contraire décroissant :
      AB entraîne ∁A ⊇ ∁B.
      Intuitivement, plus un ensemble est gros, plus son complémentaire est petit ...

    5. Passage au complémentaire : les lois de De Morgan

      Elles sont souvent formulées en calcul des propositions :
      avec des notations de programmeur  ~(a|b) = (~a)&(~b) ; ~(a&b) = (~a)|(~b).
      En notations  ensemblistes elles deviennent : [i] ∁(AB) = (∁A)∩(∁B) et [ii] ∁(AB) = (∁A)∪(∁B).

      1. Être dans le complémentaire de AB, c'est être ni dans A, ni dans B,
        donc à la fois dans  le complémentaire de A et dans celui de B,
        c'est-à-dire dans leur intersection.

      2. Être dans le complémentaire de A ∩ B, c'est ne pas être dans A ∩ B,
        donc c'est être hors de A ou hors de B, c'est-à-dire être dans la réunion (∁A)∪(∁B).

      Les lois de De Morgan peuvent se lire comme l'énoncé d'une dualité entre les deux opérations d'union et d'intersection,
      qui motive les couples de symboles choisis pour les désigner : ∪ et ∩ chez les mathématiciens, ⋁ et ⋀ chez les logiciens.
      Cette dualité n'est plus apparente dans le notations barbares des programmeurs '|' et '&'...
  3. Mots et ensembles de mots

  4. Expressions régulières (ou rationnelles)

    Muni de ces opérations et de leurs lois, on peut calculer avec les langages, et obtenir de nouveaux langages.
    Certains de ces calculs peuvent être décrits sous la forme d'expressions
    (de même que les expressions algébriques décrivent certains calculs sur des nombres).
    Comme l'expression représente un calcul, on peut lui associer le résultat de ce calcul, qu'on appelle la valeur de l'expression.

    Précisément, une expression régulière est une expression de ce type
    La suite du cours va étudier la classe des langages qui peuvent être décrits par des expressions régulières.
    Nous pouvons à présent donner un sens précis à cette idée de description :
    il s'agit des langages L pour qui il existe une expression E telle que L soit la valeur de E.

    Exemple : le langage L = { ab, raca, dabra } est la valeur de l'expression
    E = {a}{b} ∪ {r}{a}{c}{a} ∪ {d}{a}{b}{r}{a}.
    La plupart du temps, on commet l'abus de notation consistant à assimiler la lettre et le singleton.
    En notation de programmeur, notre expression s'écrit alors :
    E = ab|raca|dabra.

    Exemple : Étude d'une égalité

    yx*xy*x (notre calcul) = yxxx* | yxyy*x | yxxx*yy*x (calcul de la machine)

    Manipulation qui est à l'origine de cette égalité

    Reprenons-la et voyons ce qu'elle nous dit.
    1. Notations :

      La barre verticale est ici le symbole de la réunion ensembliste.
      Notre égalité s'écrit en notation des mathématiciens :
      yx*xy*x  = yxxx* ∪ yxyy*x ∪ yxxx*yy*x 

      Posons A = yx*xy*x , B = yxxx*, C = yxyy*x, et D = yxxx*yy*x.
      Elle devient A = BCD.

    2. Les trois ensembles B, C et D sont deux à deux disjoints.

      • BC = ∅
        car la troisième lettre d'un mot ∈B doit être x, alors que la troisième lettre d'un mot ∈C doit être y.
      • BD = ∅
        car un mot ∈B ne contient qu'un seul y (à l'initiale), alors qu'un mot ∈D en contient au moins deux (à la pénultième).
      • CD = ∅
        car la troisième lettre d'un mot ∈C doit être y, alors que la troisième lettre d'un mot ∈D doit être x.
    3. Les trois ensembles B, C et D sont tous les trois inclus dans A.

      • BA
        Les mots ∈B sont ceux de A pour lesquels on a choisi un nombre nul de y comme contribution du facteur y*.
        En effet, avec cette hypothèse on obtient le sous-ensemble yx*xx, qui est égal à B puisque  x*x = xx*,
        c'est à dire l'ensemble { xn | n > 0 }.
      • CA
        Les mots ∈C sont ceux de A pour lesquels on a choisi un nombre non nul de y comme contribution du facteur y*,
        et un nombre nul de x comme contribution du facteur x*.
        En effet, avec ces hypothèses on obtient le sous-ensemble yxyy*x, qui est C,
      • DA
        Les mots ∈D sont ceux de A pour lesquels on a choisi un nombre non nul de y comme contribution du facteur y*,
        et un nombre non nul de x comme contribution du facteur x*.
        En effet, avec ces hypothèses on obtient le sous-ensemble yxx*xyy*x, qui est égal à D puisque  x*x = xx*.

      Il s'ensuit que ABCD.
    4. Tout élément de A se trouve dans l'un des trois sous-ensembles B, C ou D.

      Les éléments de A sont tous de la forme  yxnypx , avec n > 0 (à cause de x*x) et p >= 0.
      En notation ensembliste A = { yxnypxn > 0, p >= 0 }.
      Dans cette configuration, on peut distinguer trois cas qui épuisent les possibilités :
      1. p = 0, qui correspond à B = { yxnxn > 0 }
      2. p > 0 et n = 1, qui correspond à C = { yxypx |  p > 0 }
      3. p > 0 et n > 1, qui correspond à D = { yxnypx n > 1, p > 0 }

      Il s'ensuit que A ⊆ BCD.
    5. Des deux inclusions réciproques ...

      ABCD et A ⊆ BCD nous pouvons déduire l'égalité recherchée :
      A = BCD.
      Quod erat demonstrandum.

      Ajoutons que, puisque les trois sous-ensembles sont disjoints, nous avons affaire à une partition de A.
      Sur cette notion importantissime nous reviendrons plus tard.