Chcę wiedzieć, czy można rozwiązać następujący problem:
Instancja: NFA A z n stanami
Pytanie: Czy istnieje jakaś liczba pierwsza p, taka, że A akceptuje pewien ciąg długości p.
Wierzę, że ten problem jest nierozstrzygalny, ale nie mogę tego udowodnić. Decydent może łatwo mieć algorytm, aby dowiedzieć się, czy określona liczba jest liczbą pierwszą, ale nie widzę, w jaki sposób byłby w stanie przeanalizować NFA wystarczająco szczegółowo, aby dokładnie wiedzieć, jakie długości może produkować. Mógłby zacząć testować łańcuchy za pomocą NFA, ale dla nieskończonego języka może się nigdy nie zatrzymać (a zatem nie decydować).
Oczywiście NFA można łatwo zmienić na DFA lub wyrażenie regularne, jeśli rozwiązanie tego potrzebuje, oczywiście.
To pytanie zastanawiam się jako samodzielnie przygotowane pytanie przygotowawcze do finału, które pojawi się za 2 tygodnie.
Odpowiedzi:
Długości łańcuchów akceptowane przez DFA tworzą zestaw półliniowy (jak w twierdzeniu Parikha dla języków bezkontekstowych), ich opis nie jest zbyt trudny do uzyskania (zasadniczo splatając wszystkie możliwe cykle automatu), i przez Twierdzenie Dirichleta, że dowolny postęp arytmetyczny postaci z zawiera nieskończoność liczb pierwszych.a + b k gcd ( a , b ) = 1
Połączenie powyższych elementów daje algorytm do sprawdzenia, czy Twój zwykły (a nawet pozbawiony kontekstu język) zawiera ciągi liczb pierwszych. Zdecydowanie nie jest to proste pytanie, IMVHO ...
źródło