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.

:
, â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. . .
( ) , . - .