Řetězcové operace - String operations

V informatice se v oblasti teorie formálních jazyků často používá řada řetězcových funkcí ; použitý zápis se však liší od zápisu používaného pro počítačové programování a některé běžně používané funkce v teoretické oblasti se při programování používají jen zřídka. Tento článek definuje některé z těchto základních pojmů.

Řetězce a jazyky

Řetězec je konečná posloupnost znaků. Prázdný řetězec je označen . Zřetězení dvou řetězců a je označeno nebo kratší . Zřetězení s prázdným řetězcem nehraje žádnou roli: . Zřetězení řetězců je asociativní: .

Například .

Jazyk je konečný nebo nekonečný soubor řetězců. Kromě obvyklých operací se sadami, jako je sjednocení, křižovatka atd., Lze zřetězení použít na jazyky: pokud jsou oba a jsou jazyky, jejich zřetězení je definováno jako sada zřetězení libovolného řetězce od a libovolného řetězce od , formálně . Znovu je tečka zřetězení kvůli stručnosti často vynechána.

Jazyk skládající se pouze z prázdného řetězce je třeba odlišit od prázdného jazyka . Zřetězení libovolný jazyk s bývalý nedělá žádné změny: při zřetězení s ním vždy dává prázdnou jazyk: . Zřetězení jazyků je asociativní: .

Například zkratkou se sada všech třímístných desetinných čísel získá jako . Sada všech desetinných čísel libovolné délky je příkladem pro nekonečný jazyk.

Abeceda řetězce

Abeceda řetězce je množina všech znaků, které se vyskytují v určitém řetězci. Pokud s je řetězec, jeho abeceda je označena

Abeceda jazyka je množina všech znaků, které se vyskytují v každém řetězci , formálně: .

Sada je například abeceda řetězce a výše uvedená je abeceda výše uvedeného jazyka i jazyka všech desetinných čísel.

Střídání řetězců

Nechť L je jazyk a nechť Σ je jeho abeceda. Substituce řetězce nebo jednoduše substituce je mapování f, které mapuje znaky v Σ na jazyky (případně v jiné abecedě). Tak například, daný znak a ∈ Σ, jeden má f ( a ) = L a kde L a ⊆ Δ * je nějaký jazyk, jehož abeceda je Δ. Toto mapování lze rozšířit na řetězce jako

f (ε) = ε

pro prázdný řetězec ε a

f ( sa ) = f ( s ) f ( a )

pro řetězec sL a znak a ∈ Σ. Substituce řetězců lze rozšířit na celé jazyky jako

Běžné jazyky jsou uzavřeny nahrazením řetězců. To znamená, že pokud je každý znak v abecedě běžného jazyka nahrazen jiným běžným jazykem, výsledkem je stále běžný jazyk. Podobně jsou bezkontextové jazyky uzavřeny substitucí řetězců.

Jednoduchým příkladem je převod f uc (.) Na velká písmena, který lze definovat např. Takto:

charakter namapováno na jazyk Poznámka
X f uc ( x )
< > {< >} mapovat malá písmena na odpovídající velká písmena
< > {< >} namapujte velká písmena na sebe
Ss {‹ SS ›} není k dispozici velká písmena, namapujte na řetězec se dvěma znaky
‹0› {ε} namapujte číslici na prázdný řetězec
‹!› {} zakázat interpunkci, namapovat na prázdný jazyk
... podobné pro ostatní znaky

Pro rozšíření f uc na řetězce máme např

  • f uc (‹Straße›) = {‹S›} ⋅ {‹T›} ⋅ {‹R›} ⋅ {‹A›} ⋅ {‹SS›} ⋅ {‹E›} = {‹STRASSE›},
  • f uc (‹u2›) = {‹U›} ⋅ {ε} = {‹U›} a
  • f uc (‹Go!›) = {‹G›} ⋅ {‹O›} ⋅ {} = {}.

Pro rozšíření f uc do jazyků, máme např

  • f uc ({‹Straße›, ‹u2›, ‹Přejít!›}) = {‹STRASSE›} ∪ {‹U›} ∪ {} = {‹STRASSE›, ‹U›}.

Řetězcový homomorfismus

String homomorphism (často odkazoval se na jednoduše jako homomorfismu v teorii formálních jazyků ) je řetězec substituce taková, že každý znak je nahrazena jediným řetězcem. To znamená, kde je řetězec pro každý znak .

String homomorphisms jsou monoidu morphisms na volné monoid , konzervační prázdný řetězec a binární operaci na zřetězením řetězce . Vzhledem k tomu, jazyk , soubor se nazývá homomorfní obraz o . Inverzní homomorfní obraz z řetězce je definován jako

zatímco inverzní homomorfní obraz jazyka je definován jako

Obecně platí, že zatímco člověk má

a

pro jakýkoli jazyk .

Třída regulárních jazyků je uzavřena pod homomorfismy a inverzními homomorfismy. Podobně jsou bezkontextové jazyky uzavřeny pod homomorfismy a inverzními homomorfismy.

Řetězec homomorphism je řekl, aby byl ε-volný (nebo e-volný) jestliže pro všechny a v abecedě . Jednoduché jednopísmenné substituční šifry jsou příklady řetězcových homomorfismů (bez ε).

Příklad homomorfismu řetězce g uc lze také získat definováním podobné výše uvedené substituci: g uc (‹a›) = ‹A›, ..., g uc (‹0›) = ε, ale necháme g uc být nedefinováno na interpunkční znaky. Příklady inverzních homomorfních obrazů jsou

  • g uc −1 ({‹SSS›}) = {‹sss›, ‹sß›, ‹ßs›}, protože g uc (‹sss›) = g uc (‹sß›) = g uc (‹ßs›) = ‹SSS› a
  • g uc −1 ({‹A›, ‹bb›}) = {‹a›}, protože g uc (‹a›) = ‹A›, zatímco ‹bb› nelze dosáhnout pomocí g uc .

Pro tento druhý jazyk platí g uc ( g uc −1 ({‹A›, ‹bb›})) = g uc ({‹a›}) = {‹A›} ≠ {‹A›, ‹bb›} . Homomorfismus g uc není ε-free, protože mapuje např. ‹0› na ε.

Velmi jednoduchým příkladem řetězcového homomorfismu, který mapuje každý znak pouze na znak, je převod řetězce kódovaného EBCDIC na ASCII .

Řetězcová projekce

Pokud to je řetězec, a je abeceda je řetězec projekce ze sa je řetězec, který výsledky tím, že odstraní všechny znaky, které nejsou v . Je psán jako . Formálně je definován odstraněním znaků z pravé strany:

Zde označuje prázdný řetězec . Projekce řetězce je v podstatě stejná jako projekce v relační algebře .

Řetězcová projekce může být povýšena na projekci jazyka . Vzhledem k formálnímu jazyku L je jeho projekce dána vztahem

Správný kvocient

Právo kvocient ze znaku A z řetězce s je zkrácení znakové A v řetězci s , z pravé strany. Označuje se jako . Pokud řetězec nemá na pravé straně znak a , výsledkem je prázdný řetězec. Tím pádem:

Kvocient prázdného řetězce lze vzít:

Podobně, vzhledem k podmnožině monoidů , lze definovat podmnožinu podmnožin jako

Levé kvocienty lze definovat podobně, přičemž operace probíhají nalevo od řetězce.

Hopcroft a Ullman (1979) definují kvocient L 1 / L 2 jazyků L 1 a L 2 ve stejné abecedě jako L 1 / L 2 = { s | ∃ tL 2 . stL 1 }. Nejedná se o zobecnění výše uvedené definice, protože pro řetězec s a odlišné znaky a , b znamená Hopcroftova a Ullmanova definice { sa } / { b } poddajnost {}, spíše než {ε}.

Levý kvocient (definovaný podobně jako Hopcroft a Ullman 1979) singletonského jazyka L 1 a libovolného jazyka L 2 je známý jako Brzozowského derivát ; pokud L 2 je reprezentován regulárním výrazem , může to být i levý kvocient.

Syntaktický vztah

Právo kvocient podmnožiny z monoid definuje vztah rovnocennosti , nazvaný právo syntaktický vztah ze S . Je to dáno

Tento vztah má jednoznačně konečný index (má konečný počet tříd ekvivalence) právě tehdy, pokud jsou kvocienty rodinných práv konečné; to je, pokud

je konečný. V případě, že M je monoid slov nad nějakou abecedou, je S potom běžný jazyk , tj. Jazyk, který lze rozpoznat automatem konečného stavu . To je podrobněji popsáno v článku o syntaktických monoidech .

Správné zrušení

Právo zrušení ze znaku A z řetězce s je odstranění prvního výskytu znaku A v řetězci s , počínaje od pravé straně. Je označen jako a je rekurzivně definován jako

Prázdný řetězec je vždy zrušitelný:

Je zřejmé, že správné zrušení a promítání dojíždí :

Předpony

Tyto předpony řetězec je množina všech prefixů na provázku, s ohledem na daný jazyk:

kde .

Uzavření prefix jazyka je

Příklad:

Jazyk se nazývá předpona uzavřená, pokud .

Operátor uzavření předpony je idempotentní :

Vztah prefix je binární relace tak, že tehdy a jen tehdy, jestliže . Tato relace je konkrétním příkladem pořadí předpon .

Viz také

Poznámky

Reference

  • Hopcroft, John E .; Ullman, Jeffrey D. (1979). Úvod do teorie automatů, jazyků a výpočtu . Reading, Massachusetts: Addison-Wesley Publishing. ISBN  978-0-201-02988-8 . Zbl  0426.68001 . (Viz kapitola 3.)