Clausura de Kleene

De Viquipèdia
Dreceres ràpides: navegació, cerca

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ó[modifica | modifica el codi]

Donat

 V_0=\{\lambda\}\,

es defineix recursivamente

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

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


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

És a dir, és la recopilació de tots els possibles strings de longitud finita generats a partir dels símbols en V.

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


Exemples[modifica | modifica el codi]

Exemple de clausura de Kleene aplicada a un caràcter:

{"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",...}