Kleene-ster

In de wiskunde en informatica is de Kleene-ster een unaire operator op een verzameling strings of een verzameling symbolen. Het toepassen van de Kleene-ster op de verzameling V wordt genoteerd als V*. De operator wordt veel gebruikt in reguliere expressies waarin hij geïntroduceerd werd door Stephen Kleene om bepaalde automaten te karakteriseren.

  1. Als V een verzameling strings is, wordt de Kleene-ster gedefinieerd als de kleinste superset die ε (de lege string) bevat en die gesloten is onder concatenatie van strings.
  2. Als V een verzameling symbolen is, is V* de verzameling met alle strings van symbolen uit V, inclusief de lege string.

Definitie

We definiëren

V 0 = { ϵ } {\displaystyle V_{0}=\{\epsilon \}\,}

en op recursieve wijze de verzameling:

V i + 1 = { w v w V i  en  v V } {\displaystyle V_{i+1}=\{wv\mid w\in V_{i}{\mbox{ en }}v\in V\}} , met i 0 {\displaystyle i\geq 0} .

Als V een formele taal is, dan bevat Vi alle mogelijke strings die ontstaan door i keer een element uit V te nemen (mogelijk dezelfde) en deze te concateneren.

De Kleene-ster kan nu gedefinieerd worden als:

V = i = 0 V i = { ϵ } V 1 V 2 V 3 {\displaystyle V^{*}=\bigcup _{i=0}^{\infty }V_{i}=\left\{\epsilon \right\}\cup V_{1}\cup V_{2}\cup V_{3}\cup \ldots }

V* bevat dus alle mogelijke strings met eindige lengte die gegenereerd kunnen worden met symbolen uit V.

Voorbeelden

De Kleene-ster van een verzameling met strings:

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

De Kleene-ster van een verzameling met symbolen:

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

Generalisatie

De Kleene-ster wordt vaak gegeneraliseerd voor een willekeurige monoïde (M, {\displaystyle \circ } ), een verzameling M en een binaire operatie {\displaystyle \circ } op M zodanig dat:

  • (geslotenheid) a , b M :   a b M {\displaystyle \forall a,b\in M:~a\circ b\in M}
  • (associativiteit) a , b , c M :   ( a b ) c = a ( b c ) {\displaystyle \forall a,b,c\in M:~(a\circ b)\circ c=a\circ (b\circ c)}