Jakie są ograniczenia całkowitego programowania funkcjonalnego? Nie jest to kompletna metoda Turinga, ale nadal obsługuje dużą część możliwych programów. Czy istnieją ważne konstrukcje, które można napisać w języku kompletnym Turinga, ale nie w języku funkcjonalnym?
I czy słuszne jest stwierdzenie, że programy napisane w całkowicie funkcjonalnych językach mogą być całkowicie analizowane statycznie, podczas gdy analiza statyczna w językach kompletnych Turinga jest ograniczona przez takie rzeczy jak problem z zatrzymaniem? Nie mam na myśli tego, że we wszystkich językach funkcjonalnych wszystko można ustalić statycznie, ponieważ niektóre rzeczy są znane tylko w czasie wykonywania, ale mam na myśli, że teoretycznie programy napisane w idealnym funkcjonalnym języku programowania można analizować, tak aby wszystko, co Teoretycznie można określić statycznie Można ustalić statycznie. Czy też nadal istnieją nierozstrzygalne problemy dziedziczone w językach funkcjonalnych, które powodują, że analiza statyczna jest niekompletna? Niektóre problemy zawsze będą nierozstrzygalne, bez względu na to, w jakim języku są napisane, ale interesują mnie takie problemy, które są dziedziczone w tym języku,
źródło
X
jest(identity X)
to maszyna Turinga, która się zatrzymuje?” Jasne, że nie wydaje się być oidentity
, ale w jaki sposób można zdefiniować „o”?Wadą tego jest jednak to, że ograniczenia mocy ekspresyjnej wszystkich języków są zasadniczo ograniczeniami mocy ekspresyjnej samej matematyki . Na przykład funkcje definiowane w Coq (asystent dowodu) to te, które można udowodnić, że można je obliczyć za pomocą ZFC, z niezliczoną liczbą niedostępnych kardynałów. Tak więc w Coq można zdefiniować dowolną funkcję, którą można by w pełni zadowolić pracującego matematyka.
Drugą stroną jest to, że matematyka jest trudna! Dlatego nie ma łatwego sensu, w którym wszystkie języki są „w pełni analizowalne” - nawet jeśli wiesz, że funkcja się kończy, być może nadal będziesz musiał wykonać wiele pracy twórczej, aby udowodnić, że ma właściwość, którą chcesz. Na przykład sam fakt, że funkcja od list do list jest sumą, nie prowadzi cię daleko do udowodnienia, że jest to funkcja sortująca ...
źródło