Czy istnieje algorytm / systematyczna procedura sprawdzania, czy język jest prawidłowy?
Innymi słowy, biorąc pod uwagę język określony w formie algebraicznej (pomyśl o czymś takim jak ), sprawdź, czy język jest prawidłowy, czy nie. Wyobraź sobie, że piszemy serwis internetowy, który pomaga uczniom we wszystkich zadaniach domowych; użytkownik określa język, a usługa internetowa odpowiada „zwykły”, „nieregularny” lub „nie wiem”. (Chcielibyśmy, aby serwis internetowy odpowiadał „Nie wiem” tak rzadko, jak to możliwe.) Czy istnieje jakieś dobre podejście do automatyzacji? Czy to jest wykonalne? Czy jest to rozstrzygalne (tj. Czy można zagwarantować, że nigdy nie będziemy musieli odpowiadać „nie wiem”)? Czy istnieją rozsądnie wydajne algorytmy do rozwiązania tego problemu i możliwe jest udzielenie odpowiedzi innej niż „nie wiem” dla wielu / większości języków, które mogą powstać w praktyce?
Klasyczną metodą udowodnienia, że język nie jest regularny, jest pompowanie lematu. Wygląda jednak na to, że w pewnym momencie wymaga ręcznego wglądu (np. Wybranie słowa do pompowania), więc nie jestem pewien, czy można go przekształcić w coś algorytmicznego.
Klasyczną metodą udowodnienia, że język jest prawidłowy, byłoby użycie twierdzenia Myhill – Nerode w celu uzyskania automatu stanu skończonego. To wygląda na obiecujące podejście, ale wymaga umiejętności wykonywania podstawowych operacji na językach w formie algebraicznej. Nie jest dla mnie jasne, czy istnieje systematyczny sposób symbolicznego wykonywania wszystkich operacji, które mogą być potrzebne, na językach w formie algebraicznej.
Aby pytanie było dobrze postawione, musimy zdecydować, w jaki sposób użytkownik określi język. Jestem otwarty na sugestie, ale myślę coś takiego:
gdzie jest wyrażeniem słownym, a S jest systemem liniowych nierówności względem zmiennych długości, z następującymi definicjami:
Każde z jest wyrażeniem słownym. (Reprezentują one zmienne, które mogą przyjąć dowolne słowo w Σ ∗ .)
Każde z jest wyrażeniem słownym. (Tutaj x r oznacza odwrotność ciągu x .)
Każda z liter jest wyrażeniem słownym. (Niejawnie, Σ = { a , b , c , … } , więc a , b , c , … reprezentują pojedynczy symbol w alfabecie.)
Każdy z to słowo, wyrażenie, jeśli η jest długość zmiennej.
Łączenie wyrażeń słownych jest wyrażeniem słownym.
Każde z jest zmienną długością. (Reprezentują one zmienne, które mogą przyjmować dowolne liczby naturalne).
Każdy z Jest zmienną długością. (Reprezentują one długość odpowiadającego słowa.)
Wydaje się to wystarczająco szerokie, aby poradzić sobie z wieloma przypadkami, które widzimy w ćwiczeniach z podręczników. Oczywiście możesz zastąpić dowolną inną tekstową metodę określania języka w formie algebraicznej, jeśli masz lepszą sugestię.