Sprawl Lemmas untuk Bahasa Biasa dan Bebas Konteks

Dua lemma pertumbuhan adalah pernyataan yang digunakan untuk membuktikan keterbatasan kelas-kelas penting bahasa formal: reguler dan bebas konteks. Pentingnya kelas-kelas ini bagi pemrogram mudah dimengerti: ekspresi reguler (salah satu deskripsi bahasa reguler) sering digunakan dalam pekerjaan, dan bahasa pemrograman yang sintaksnya dijelaskan oleh tata bahasa bebas konteks bahkan lebih dari itu.


Lemma sangat mirip satu sama lain baik dalam formulasi maupun dalam pembuktian. Kedekatan ini tampak begitu indah bagi saya sehingga saya memutuskan untuk mencurahkan seluruh artikel untuk itu.


Rencananya adalah ini: kami memahami apa bahasa reguler dan apa hubungan antara ekspresi reguler dan automata terbatas, kami merumuskan dan membuktikan lemma ekstensi untuk bahasa biasa, menggunakannya untuk membuktikan ketidakteraturan beberapa bahasa. Kemudian kami melakukan trik serupa dengan bahasa bebas konteks, di sepanjang jalan mencari tahu bagaimana mereka berhubungan dengan bahasa biasa dan bagaimana menyiasati pembatasan yang ditemukan menggunakan tata bahasa umum. Pergilah!




KDPV menggambarkan proses pertumbuhan untuk tata bahasa KS


— ( , ) . , , . : Σ. , .. , : ε.


(.. ), : . . , .


1.


: , , .


, :


  • — , ;
  • {ε} — , , , ;
  • {a},aΣ — , .

. A B — , :


  • AB — ;
  • AB={αβ|αA,βB} — : , A, B;
  • A={α1α2...αk|kN0,αiA} — : k A, k .

: N0=N{0}, ,


: AB=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.


. — , . , (). .


. , , .


, , . , , . , — , .


. , , , , .



, bSebuahb|SebuahSebuahbcSebuah


. Sebuahsaya, Sebuahj, Sebuahk — . Sebuahsaya Sebuahk , L.sayak. , Sebuahsaya Sebuahj L.sayaj, Sebuahj SebuahkL.jk. , Sebuahj , L.jj.


Sebuahj, Sebuahsaya Sebuahk ,


L.sayak=L.sayakL.sayajL.jjL.jk


, Sebuahj. , , , .




, , . , - , ε. , . , .


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


, . , , :



, .


3.


L.={Sebuahnbn|nN0}. ε, Sebuahb, SebuahSebuahbb, SebuahSebuahSebuahbbb . ? , .


, , . , , : , Sebuahb. , ? … , , ?


, ! , , .


. L. nN , wL.,|w|n x, y, z, : w=xyz; yε; |xy|n; k0:xykzL..

L — , n, wLn.


w: a0, a1, a2, ..., am. , , m+1 , mn.


n , . ai — , j. xi w, yw, ai aj, zw, aj an.


ai aj , ( !) , , , kN0:xykzL.


ai, aj — . , a0, a1, ..., aj1 . , n. , jn |xy|n, .


: , , ( .. ) , , .


L.={Sebuahnbn|nN0}. n — . Sebuahnbn Sebuahnbn=xyz,
|xy|n, , , xy Sebuah. y Sebuah, . xykz k>1 Sebuah, b , , L.. L.. , L. !


(n)n, . .


4. -


— , .


: () T () N; Σ=NT. SN — .


P. φ Σ: (s1,s2)φ, s1 s2. : . , (s1,s2)φ, s1s2.


β α, α=xs1z, β=xs2z (s1,s2)φ. , — . : αβ.


, β α ( ), s0=α, s1, s2, ..., sk+1=β, : ssayassaya+1. αβ.


s , : sT, Ss. , , .


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


, - :


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.={Sebuahnbn|nN0}:


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

S
aSb
aaSbb
aaaSbbb
aaabbb

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


, - .


5. -


L.={Sebuahnbncn|nN0}. , - Sebuahnbn, , , - :


Sε
SSEBUAHB
SEBUAHSebuahSEBUAHb
BBc
SEBUAHε
Bε


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


- . - L. nN , wL.,|w|n kamu, v, x, y, z, : w=kamuvxyz; vyε; |vxy|n; k0:kamuvkxykzL..

, .


, . , . , :
Sε
ABC
Aa


, , : , — . . .



- acd


, . n=2|N|+1, |N| — , wL,|w|n. . — , .. . , m , |N|+1. , -. , .


B , , B. : , , .


B , SuBz. B , B, BvBy, vyε, .. , . B x.



:


  • SuBz
  • BvBy
  • Bx

, kN0Suvkxykz, vyε.


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


L={anbncn|nN0}. , -. , n — . anbncn.


, anbncn=uvxyz, |vxy|n vyε, uvkxykz .


vxy a, c, .. w a c n b, vxy n.


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




6.


, - . , L={anbncn|nN0}, .


:


Sε
SaHbCE


E , b c. :


Eε


H :


HaHbC
Hε


, , C c. - !


CbbC
CEEc


! 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

: «» ; Cpindah ke kanan garis. Pola serupa sering ditemukan dalam algoritma untuk mesin Turing.


Hal ini juga digunakan dalam membuktikan kesetaraan (dalam beberapa bukan arti paling sederhana) dari mesin Turing dan kalkuli asosiatif berdasarkan tata bahasa. Saya akan memberi tahu Anda tentang hal itu lain waktu.


All Articles