Podręcznik

1. Pojęcia podstawowe

1.3. Język

Zbiór wszystkich słów nad ustalonym alfabetem V oznaczamy symbolem V* a dowolny niepusty podzbiór L tego zbioru nazywamy językiem. Do zbioru Vzaliczamy również słowo puste (oznaczane na ogół symbolem ε). Słowo puste ma długość 0. Zbiór Vjest oczywiście nieskończony ale przeliczalny, mamy bowiem

V* = {ε} ∪ V ∪ V∪ ... ∪ Vn ∪ ...

W zbiorze V* definiujemy działanie dwuargumentowe \circ V× V→ Vtzw. konkatenację (ang. concatenation). Jeśli α, β ∈ V* i α = a1a2...an β = b1b2...bto z definicji mamy

a \circ b = a1a2...an \circ b1b2...bn \overset{df}=  a1a2...anb1b2...bn

Jak widać konkatenacja jest zestawianiem słów np. ala konkatenowane z makota daje alamakota, podobnie kot z let daje kotlet.

Jak łatwo sprawdzić działanie konkatenacji jest łączne, tzn. dla każdego  α, β, γ ∈ V* mamy (α \circ β) \circ γ = α \circ (β \circ γ). Mamy ponadto dla każdego α ∈ V*; α \circ ε = ε \circ α = α  zatem słowo puste ε jest jedynką działania \circV× VV*. Inaczej mówiąc konkatenacja ze słowem pustym dowolnego słowa α ∈ Vnie zmienia tego słowa. Zbiór ∈ V* z działaniem konkatenacji \circV× VV jest więc monoidem (czyli półgrupą z jednością). 

Widać natychmiast, że konkatenacja na ogół nie jest działaniem przemiennym w V*, ale zawsze jest działaniem łącznym, tzn. na ogół \cdot y ≠ y \cdot x  dla x, y ∈ V*, ale zawsze tzn. dla każdego x, y, z ∈ V*, mamy:

(\cdot y)  \cdot z  = x \cdot (y  \cdot z)

Język to dowolny podzbiór zbioru V*. Podzbiór ten można definiować na wiele sposobów np. za pomocą wyrażeń regularnych, notacją Backusa-Naura, gramatyką, automatem skończonym itd.. Wszystkie te sposoby poznamy w dalszym ciągu. Istnieje również wiele typów języków m.in. języki regularne, języki bezkontekstowe itd.

Jeśli V ={0,1} to zbiór {0,001 ,100001} jest językiem. 
Sam alfabet V jest również językiem ponieważ jest to zbiór wszystkich jednoliterowych słów nad alfabetem V
Zauważmy, że Vjest zbiorem przeliczalnym, zatem również każdy język jest co najwyżej zbiorem przeliczalnym.
Istota rzeczy: Jeśli weźmiemy kilka słów a może nieskończoną liczbę słów to mamy język. Możemy 2 słowa zestawiać razem tworząc nowe słowo. Nazywa się to konkatenacją.

Złożeniem dwóch języków K i L, gdzie K, LV* nazywamy język

KL \overset{df}{=} { x, y ∈ <em>V<sup>*</sup></em>;<em> </em>x, <em>y</em> ∈ <em>K</em> oraz <em>y</em> ∈ <em>L</em>}

Potęga języka. Potęgę Ljęzyka definiujemy indukcyjnie następująco

L\overset{df}{=} {ε}, L\overset{df}{=} L,  L\overset{df}{=} LLLn+1 \overset{df}{=} LLn, ... 

Potęga liter. Potęgę liter definiujemy indukcyjnie następująco. Niech a będzie dowolną ustaloną literą aVwówczas a\overset{df}{=} {ε}, a\overset{df}{=} aa\overset{df}{=} aa, ..., an+1 \overset{df}{=} aan, ... 

Potęga słów. Potęgę słów definiujemy indukcyjnie następująco. Niech w będzie dowolnym ustalonym słowem, wV*, wówczas w\overset{df}{=} {ε}, w\overset{df}{=} ww\overset{df}{=} ww, ..., wn+1 \overset{df}{=} wwn, ... 

Domknięcie języka (gwiazdeczka Kleen'a) L*. Niech V będzie ustalonym alfabetem a L językiem LV*. Domknięciem języka L nazywamy zbiór L* ⊂ V*, gdzie

L* \overset{df}{=} LL1 ∪ L2 ∪ ...,  ∪ Ln ∪ ...