Vés al contingut

Clausura de Kleene

De Viki.cat

En lògica matemàtica i en informàtica, la clausura de Kleene (també anomenada estel Kleene) és una operació unària que s'aplica sobre un conjunt de cadenes de caràcters o un conjunt de símbols o caràcters (alfabet), i representa el conjunt de les cadenes que es poden formar prenent qualsevol nombre de cadenes del conjunt inicial, possiblement amb repeticions, i concatenant-les entre si.

L'aplicació de la clausura de Kleene a un conjunt V es denota com a V*. És molt usada en expressions regulars i va ser introduïda en aquest context per Stephen Kleene (1909-1994) per caracteritzar un cert autòmat.

Definició i notació

Donat

<math> V_0=\{\lambda\}\,</math>

es defineix recursivamente

<math> V_{i+1}=\{wv : w\in V_i \mbox{ and } v \in V\}\,</math> on <math>i \ge 0\,.</math>

Si <math>V</math> és un llenguatge formal, aleshores la <math>i</math>-ésima potència de <math>V</math> és l'abreviatura de la concatenació de <math>V</math> amb si mateix <math>i</math> vegades. Això és, <math> V_i</math> pot entendre's com el conjunt de tots els strings de longitud <math>i</math>, format a partir dels símbols en <math>V</math>.


La definició de clausura Kleene en <math>V</math> és <math> V^*=\bigcup_{i \in \N} V_i = \left \{\lambda \right\} \cup V_1 \cup V_2 \cup V_3 \cup \ldots.</math>

És a dir, és la recopilació de totes els possibles strings de longitud finita generats a partir dels símbols en <math>V</math>.

En alguns estudis de llenguatge formal, usen Kleene plus que és una variació de l'operació clausura de Kleene. Kleene plus omet el terme <math>V_0</math> en la unió. En altres paraules, Kleene plus en <math>V</math> és <math> V^+=\bigcup_{i \in \N^{\star}} V_i = V_1 \cup V_2 \cup V_3 \cup \ldots.</math>


Exemples

Exemple de clausura de Kleene aplicada a un caracter:

{"a"}* = {ε, "a", "aa", "aaa", "aaaa", "aaaaa", "aaaaaa",...}

Exemple de clausura de Kleene aplicada a un conjunt de cadenes:

{"ab", "c"}* = {ε, "ab", "c", "abab", "abc", "cab", "cc", "ababab", "ababc", "abcab", "abcc", "cabab", "cabc", "ccab", "ccc",...}

Exemple de clausura de Kleene aplicada a un conjunt de caràcters:

{'a', 'b', 'c'}* = {ε, "a", "b", "c", "aa", "ab", "ac", "ba", "bb", "bc",...}