Operacje na łańcuchach
W informatyce , w obszarze teorii języka formalnego , często wykorzystuje się różne funkcje łańcuchowe ; jednak używana notacja różni się od tej używanej do programowania komputerów , a niektóre powszechnie używane funkcje w sferze teoretycznej są rzadko używane podczas programowania. W tym artykule zdefiniowano niektóre z tych podstawowych terminów.
Struny i języki
Łańcuch to skończony ciąg znaków. Pusty ciąg jest oznaczony przez . Połączenie dwóch łańcuchów jest oznaczone przez krócej przez . Łączenie z pustym ciągiem nie ma znaczenia: . \ cdot (t \ cdot u) = (s \ cdot t ) } .
Na przykład .
Język to skończony lub nieskończony zbiór ciągów znaków . Oprócz zwykłych operacji na zbiorach, takich jak suma, przecięcie itp., Konkatenację można zastosować do języków: jeśli zarówno i są językami, ich konkatenacja zdefiniowany jako zbiór konkatenacji dowolnego ciągu z z , formalnie . Ponownie, kropka konkatenacji pomijana dla zwięzłości.
Język składający \ . Łączenie dowolnego języka z pierwszym nie powoduje żadnych zmian: , podczas gdy konkatenacja z tym ostatnim zawsze daje pusty język: . Łączenie języków jest asocjacyjne: .
Na przykład skrót , zbiór wszystkich trzycyfrowych liczb dziesiętnych otrzymuje się jako . Zbiór wszystkich liczb dziesiętnych o dowolnej długości jest przykładem języka nieskończonego.
Alfabet ciągu
Alfabet łańcucha to zbiór wszystkich znaków, które występują w określonym ciągu. Jeśli s jest ciągiem, jego alfabet jest oznaczony przez
Alfabet języka to zbiór wszystkich znaków, które występują w dowolnym ciągu Alph .
Na przykład zbiór to alfabet łańcucha , a powyższy alfabetem powyższego języka , a także języka wszystkich liczb dziesiętnych.
Podstawianie ciągów
Niech L będzie językiem , a Σ jego alfabetem. Podstawienie łańcucha lub po prostu podstawienie to odwzorowanie f , które odwzorowuje znaki w Σ na języki (prawdopodobnie w innym alfabecie). Zatem, na przykład, mając znak a ∈ Σ, mamy f ( a )= L a, gdzie L a ⊆ Δ * jest językiem, którego alfabetem jest Δ. To odwzorowanie można rozszerzyć na ciągi jako
- fa (ε)=ε
dla pustego łańcucha ε i
- fa ( sa ) = fa ( s ) fa ( za )
dla ciągu s ∈ L i znaku a ∈ Σ. Podstawienia ciągów można rozszerzyć na całe języki, jak
Języki regularne są zamknięte pod podstawieniem łańcucha. Oznacza to, że jeśli każdy znak w alfabecie języka regularnego zostanie zastąpiony innym językiem regularnym, wynikiem jest nadal język regularny. Podobnie języki bezkontekstowe są zamknięte pod podstawieniem łańcucha.
Prostym przykładem jest konwersja f uc (.) na wielkie litery, którą można zdefiniować np. następująco:
postać | odwzorowane na język | uwaga |
---|---|---|
X | f uc ( x ) | |
‹ a › | { ‹ A › } | odwzoruj znak małej litery na odpowiedni znak wielkiej litery |
‹A › _ _ | { ‹ A › } | mapuj wielkie litery na siebie |
‹ ß › | { ‹ SS › } | brak dostępnych znaków wielkich liter, zamapuj na łańcuch dwuznakowy |
‹0› | {ε} | mapuj cyfrę na pusty ciąg |
‹!› | {} | zakazać interpunkcji, mapować na pusty język |
... | podobnie dla innych znaków |
Dla rozszerzenia f uc na łańcuchy mamy np
- f uc (‹Straße›) = {‹S›} ⋅ {‹T›} ⋅ {‹R›} ⋅ {‹A›} ⋅ {‹SS›} ⋅ {‹E›} = {‹STRASZA›},
- f uc (‹u2›) = {‹U›} ⋅ {ε} = {‹U›}, oraz
- f uc (‹Go!›) = {‹G›} ⋅ {‹O›} ⋅ {} = {}.
Dla rozszerzenia f uc na języki mamy np
- f uc ({ ‹Straße›, ‹u2›, ‹Go!› }) = { ‹STRASSE› } ∪ { ‹U› } ∪ { } = { ‹STRASSE›, ‹U› }.
Homomorfizm strun
Homomorfizm ciągów (często określany po prostu jako homomorfizm w teorii języka formalnego ) to podstawienie ciągu znaków w taki sposób, że każdy znak jest zastępowany pojedynczym ciągiem. To znaczy gdzie znaków dla .
Homomorfizmy strunowe to morfizmy monoidalne na wolnej monoidzie , zachowujące pustą strunę i binarną operację konkatenacji strun . Biorąc język zbiór nazywa się L { Odwrotny homomorficzny obraz jest jako
podczas gdy odwrotny homomorficzny obraz języka jest zdefiniowany jako
Ogólnie , podczas gdy ma się
I
dla dowolnego języka .
Klasa języków regularnych jest zamknięta na homomorfizmy i homomorfizmy odwrotne. Podobnie języki bezkontekstowe są zamknięte na homomorfizmy i homomorfizmy odwrotne.
Mówi się, że homomorfizm strun jest wolny od ε (lub wolny od e), Σ { \ . Proste jednoliterowe szyfry podstawieniowe są przykładami (wolnych od ε) homomorfizmów łańcuchowych.
Przykładowy homomorfizm struny g uc można również otrzymać definiując podobnie do powyższego podstawienia: g uc (‹a›) = ‹A›, ..., g uc (‹0›) = ε, ale pozwalając g uc być niezdefiniowanym na znakach interpunkcyjnych. Przykładami odwrotnych obrazów homomorficznych są
- g uc −1 ({ ‹SSS› }) = { ‹sss›, ‹sß›, ‹ßs› }, ponieważ g uc (‹sss›) = g uc (‹sß›) = g uc (‹ßs›) = ‹SSS›, i
- g uc −1 ({ ‹A›, ‹bb› }) = { ‹a› }, ponieważ g uc (‹a›) = ‹A›, natomiast ‹bb› nie może być osiągnięte przez g uc .
Dla tego ostatniego języka g uc ( g uc −1 ({ ‹A›, ‹bb› })) = g uc ({ ‹a› }) = { ‹A› } ≠ { ‹A›, ‹bb› } . Homomorfizm g uc nie jest wolny od ε, ponieważ odwzorowuje np. ‹0› na ε.
Bardzo prostym przykładem homomorfizmu napisów, który odwzorowuje każdy znak tylko na jeden znak, jest konwersja łańcucha zakodowanego w EBCDIC na ASCII .
Projekcja strun
Jeśli s jest ciągiem, a , projekcja ciągu s jest ciągiem powstałym w wyniku usunięcia wszystkich znaków, których nie ma w displaystyle . Jest napisane jako . Jest to formalnie zdefiniowane przez usunięcie znaków z prawej strony:
Tutaj oznacza ciąg . Projekcja struny jest zasadniczo taka sama jak projekcja w algebrze relacyjnej .
Projekcja łańcuchowa może zostać podniesiona do projekcji języka . Biorąc pod uwagę język formalny L , jego projekcja jest dana przez
- potrzebne źródło ]
Właściwy iloraz
Prawy iloraz znaku a z łańcucha s jest obcięciem znaku a w łańcuchu s , z prawej strony. Jest oznaczony jako . Jeśli łańcuch nie ma po prawej stronie, wynikiem jest pusty ciąg. Zatem:
Iloraz pustego łańcucha można przyjąć:
Podobnie, biorąc pod uwagę podzbiór monoidu , można zdefiniować podzbiór ilorazu jako
Lewe ilorazy można zdefiniować podobnie, przy czym operacje odbywają się po lewej stronie łańcucha. [ potrzebne źródło ]
Hopcroft i Ullman (1979) definiują iloraz L 1 / L 2 języków L 1 i L 2 w tym samym alfabecie jako L 1 / L 2 = { s | ∃ t ∈ L 2 . st ∈ L 1 }. Nie jest to uogólnienie powyższej definicji, ponieważ dla łańcucha s i różnych znaków a , b , definicja Hopcrofta i Ullmana implikuje { sa } / { b } plonowanie {} zamiast { ε }.
Lewy iloraz (zdefiniowany podobnie jak Hopcroft i Ullman 1979) języka singletonowego L 1 i dowolnego języka L 2 jest znany jako pochodna Brzozowskiego ; jeśli L 2 jest reprezentowane przez wyrażenie regularne , więc może być lewym ilorazem.
Relacja składniowa
Właściwy iloraz definiuje relację zwaną właściwą _ S . _ Podaje się przez
Relacja ma wyraźnie skończony indeks (ma skończoną liczbę klas równoważności) wtedy i tylko wtedy, gdy iloraz praw rodziny jest skończony; czyli jeśli
jest skończony. W przypadku, gdy M jest monoidem słów nad jakimś alfabetem, S jest wtedy językiem regularnym , to znaczy językiem, który może być rozpoznany przez automat skończony . Zostało to omówione bardziej szczegółowo w artykule na temat monoidów składniowych . [ potrzebne źródło ]
Właściwe anulowanie
Prawidłowe anulowanie znaku a z łańcucha s to usunięcie pierwszego wystąpienia znaku a w łańcuchu s , zaczynając od prawej strony. Jest oznaczony jako i jest definiowany rekurencyjnie jako
Pusty ciąg można zawsze anulować:
Oczywiście, prawe anulowanie i dojazd do projekcji :
- potrzebne źródło ]
Przedrostki
Prefiksy łańcucha to zbiór wszystkich przedrostków łańcucha, w odniesieniu do danego języka:
gdzie .
Zamknięcie przedrostka języka to
Przykład:
Język nazywa się przedrostkiem zamkniętym , jeśli .
Operator zamknięcia przedrostka jest idempotentny :
Relacja przedrostkowa jest relacją binarną taką, że wtedy i tylko wtedy, gdy . Ta relacja jest szczególnym przykładem kolejności przedrostków . [ potrzebne źródło ]
Zobacz też
- Porównanie języków programowania (funkcje łańcuchowe)
- Lemat Leviego
- String (informatyka) — definiowanie i realizacja bardziej podstawowych operacji na stringach
Notatki
- Hopcroft, John E.; Ullman, Jeffrey D. (1979). Wprowadzenie do teorii automatów, języków i obliczeń . Reading, Massachusetts: Wydawnictwo Addison-Wesley. ISBN 978-0-201-02988-8 . Zbl 0426.68001 . (Patrz rozdział 3.)