Zastanawiałem się, kiedy języki zawierające taką samą liczbę wystąpień dwóch podciągów będą normalne. Wiem, że język zawierający taką samą liczbę 1 i 0 nie jest regularny, ale jest językiem takim jak , gdzie = liczba wystąpień podłańcucha „001” jest równa liczbie wystąpień podłańcucha „ 100 " zwykły? Zauważ, że ciąg „00100” zostanie zaakceptowany.L { w ∣ }
Moja intuicja mówi mi, że tak nie jest, ale nie jestem w stanie tego udowodnić; Nie mogę go przekształcić w formę, którą można pompować za pomocą lematu pompującego, więc jak mogę to udowodnić? Z drugiej strony próbowałem zbudować DFA lub NFA lub wyrażenie regularne i nie udało mi się również na tych frontach, więc jak mam postępować? Chciałbym to ogólnie zrozumieć, nie tylko w przypadku proponowanego języka.
źródło
Odpowiedzi:
Odpowiedź pochodzi z pytania.
Jak zauważył Hendrik Jan, w q5 powinna być dodatkowa pętla samoistna 0.
źródło
To podchwytliwe pytanie. Spróbuj zbudować ciąg, który zawiera dwa 001 i nie zawiera 100, i zobacz, dlaczego nie możesz tego zrobić. Jeśli X = „liczba 001”, a Y = „liczba 100”, to X = Y lub X = Y ± 1.
Kiedy zdasz sobie sprawę z podstępu, staje się mało prawdopodobne, aby język był nieregularny, a następnie zbudowanie DFA jest dość proste. Istnieje tylko 8 stanów z ich przejściami, jeśli następnym symbolem jest 0/1:
Stan początkowy to S0, a S0, S1, C0, C1, C2 akceptują stany.
źródło