Sprawl Lemmas fĂŒr regulĂ€re und kontextfreie Sprachen

Zwei Wachstumsspannen sind Aussagen, die verwendet werden, um die Begrenzung wichtiger Klassen formaler Sprachen zu beweisen: regelmĂ€ĂŸig und kontextfrei. Die Bedeutung dieser Klassen fĂŒr Programmierer ist leicht zu verstehen: RegulĂ€re AusdrĂŒcke (eine der Beschreibungen regulĂ€rer Sprachen) werden in der Arbeit hĂ€ufig verwendet, und Programmiersprachen, deren Syntax durch kontextfreie Grammatiken beschrieben wird, sind es noch mehr.


Die Deckspelzen sind einander sowohl in Formulierungen als auch in Proofs sehr Àhnlich. Diese NÀhe schien mir so wunderbar, dass ich mich entschied, einen ganzen Artikel zu widmen.


Der Plan lautet wie folgt: Wir verstehen, was regulĂ€re Sprachen sind und in welcher Beziehung regulĂ€re AusdrĂŒcke und endliche Automaten stehen. Wir formulieren und beweisen ein Erweiterungslemma fĂŒr regulĂ€re Sprachen und verwenden es, um die UnregelmĂ€ĂŸigkeit mehrerer Sprachen zu beweisen. Dann machen wir einen Ă€hnlichen Trick mit kontextfreien Sprachen. Dabei erfahren wir, wie sie sich auf regulĂ€re Sprachen beziehen und wie man entdeckte EinschrĂ€nkungen mithilfe allgemeiner Grammatiken umgeht. Gehen!




KDPV veranschaulicht den Wachstumsprozess fĂŒr KS-Grammatiken


— ( , ) . , , . : ÎŁ. , .. , : Δ.


(.. ), : . . , .


1.


: , , .


, :


  • ∅ — , ;
  • {Δ} — , , , ;
  • {a},a∈Σ — , .

. A B — , :


  • AâˆȘB — ;
  • A⋅B={αÎČ|α∈A,ÎČ∈B} — : , A, B;
  • A∗={α1α2...αk|k∈N0,αi∈A} — : k A, k .

: N0=NâˆȘ{0}, ,


: A⋅B=AB.


. , , . , PuTTY, - :


http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+

, url' , , , , url'. .


: ([0-9]), ([s]?), (a+ — , aa*, .. ) . , , .


, ( ), | (), * () . , .


, :


a b c ( d e ∗ f | d e )


, :


abcde
abcdf
abcdef
abcdeef
abcdeeef
abcdeeeef

.


2.


. — , . , (). .


. , , .


, , . , , . , — , .


. , , , , .



, b a b | a a b ∗ c a


. a i, a j, a k — . a i a k , L i k. , a i a j L i j, a j a k — L j k. , a j , L j j.


a j, a i a k ,


L.' I k =LikâˆȘLij⋅L ∗ j j ⋅Ljk


, einj. , , , .




, , . , - , Δ. , . , .


, . : ; , , , , ; , , , , .


, . , , :



, .


3.


L.={einnbn|n∈N.0}}. Δ, einb, eineinbb, eineineinbbb . ? , .


, , . , , : , ein — b. , ? 
 , , ?


, ! , , .


. L. n∈N. , ∀w∈L.,|w|≄n x, y, z, : w=xyz; y≠Δ; |xy|≀n; ∀k≄0::xykz∈L..

L — , n, w∈L — n.


w: a0, a1, a2, ..., am. , , m+1 , m≄n.


n , . ai — , j. x — i w, y — w, ai aj, z — w, aj an.


ai aj , ( !) , , , ∀k∈N0:xykz∈L.


ai, aj — . , a0, a1, ..., aj−1 . , n. , j≀n |xy|≀n, .


: , , ( .. ) , , .


L.={einnbn|n∈N.0}}. n — . einnbn einnbn=xyz,
|xy|≀n, , , xy ein. y ein, . xykz k>1 ein, b , , L.. L.. , L. !


(n)n, . .


4. -


— , .


: () T. () N.; ÎŁ=N.âˆȘT.. S.∈N. — .


P.. φ ÎŁ: (s1,s2)∈φ, s1 s2. : . , (s1,s2)∈φ, s1→s2.


ÎČ Î±, α=xs1z, ÎČ=xs2z (s1,s2)∈φ. , — . : α⊹ÎČ.


, ÎČ Î± ( ), s0=α, s1, s2, ..., sk+1=ÎČ, : sich⊱sich+1. α⇒ÎČ.


s , : s∈T.∗, S.⇒s. , , .


, - (-), — . , - , - .


, - :


S.→(S.)S.
S.→Δ


, , . , - , . ; .


, , «» :


def BuildPath(queue, parents, parent):
    path = []
    while parents[parent] != parent:
        path += [queue[parent]]
        parent = parents[parent]
    return path[::-1]

def Solve(rules, target):
    queue = ['S']
    parents = [0]

    idx = 0
    while idx < len(queue):
        current = queue[idx]

        for rule in rules:
            entryIdx = current.find(rule[0])
            while entryIdx != -1:
                new = current[:entryIdx] + rule[1] + current[entryIdx + len(rule[0]):]

                if new == target:
                    path = [queue[0]] + BuildPath(queue, parents, idx) + [new]
                    return path

                queue.append(new)
                parents.append(idx)

                entryIdx = current.find(rule[0], entryIdx + 1)

        idx += 1

, , , , , ; ! :


rules = [
    ("S", "(S)S"),
    ("S", ""),
]
target = "(()())()"
print('\n'.join(Solve(rules, target)))

S
(S)S
((S)S)S
((S)(S)S)S
((S)(S)S)(S)S
(()(S)S)(S)S
(()()S)(S)S
(()())(S)S
(()())()S
(()())()

- L.={einnbn|n∈N.0}}:


rules = [
    ("S", "aSb"),
    ("S", ""),
]
target = "aaabbb"
print('\n'.join(Solve(rules, target)))

S
aSb
aaSbb
aaaSbbb
aaabbb

- , . , -, . , - : , , , .


, - .


5. -


L.={einnbncn|n∈N.0}}. , - einnbn, , , - :


S.→Δ
S.→EINB.
EIN→einEINb
B.→B.c
EIN→Δ
B.→Δ


einnbncm. , m n? « » , , . , , . -,


- . - L. n∈N. , ∀w∈L.,|w|≄n u, v, x, y, z, : w=uvxyz; vy≠Δ; |vxy|≀n; ∀k≄0::uvkxykz∈L..

, .


, . , . , :
S→Δ
A→BC
A→a


, , : , — . . .



- acd


, . n=2|N|+1, |N| — , w∈L,|w|≄n. . — , .. . , m , |N|+1. , -. , .


B , , B. : , , .


B , S⊱uBz. B , B, B→vBy, vy≠Δ, .. , . B x.



:


  • S⊱uBz
  • B⊱vBy
  • B⊱x

, ∀k∈N0S⊱uvkxykz, vy≠Δ.


vxy. .. B, , |N|. , 2|N|+1=n. |vxy|≀n.


L.={einnbncn|n∈N.0}}. , -. , n — . einnbncn.


, einnbncn=uvxyz, |vxy|≀n vy≠Δ, uvkxykz .


vxy ein, c, .. w ein c n b, vxy n.


uvkxykz k. , k>1 m, uvkxykz=einmbmcm, L.. , -!




6.


, - . , L.={einnbncn|n∈N.0}}, .


:


S.→Δ
S.→einH.bC.E.


E. , b c. :


E.→Δ


H. :


H.→einH.bC.
H.→Δ


, , C. c. - !


C.b→bC.
C.E.→E.c


! 5 , :


rules = [
    ("S", "aHbCE"),
    ("H", ""),
    ("H", "aHbC"),
    ("Cb", "bC"),
    ("CE", "Ec"),
    ("E", ""),
]
target = "aaabbbccc"
print('\n'.join(Solve(rules, target)))

S
aHbCE
aaHbCbCE
aaaHbCbCbCE
aaaHbbCCbCE
aaaHbbCbCCE
aaaHbbbCCCE
aaaHbbbCCEc
aaaHbbbCEcc
aaaHbbbEccc
aaaHbbbccc
aaabbbccc

: «» ; C. . .


( ) , . - .


All Articles