Кто-нибудь когда-либо писал систему (программное обеспечение или подробное объяснение на бумаге с простыми примерами), которая генерирует компьютерные программы? Я ввожу и он создает программу, которая перечисляет простые числа меньше 10. P r i m e ( x ) просто определяется как 1 < x ∧ ∄ A Профессора говорят, что могут, но никто не приводит реальных полных примеров.
17
Ответы:
Это очень активная тема исследования, очень многообещающая, хотя полная автоматизация генерации программ, вероятно, имеет внутренние ограничения (но лучше ли людям?). Но идея по-прежнему очень полезна для значительного содействия созданию программ путем механизации многих этапов и автоматической проверки правильности генерации программ.
Он тесно связан с результатом в логике, называемой соответствием Карри-Говарда (или изоморфизмом), который показывает, что компьютерные программы и математические доказательства очень похожи.
Таким образом, идея заключается в том, что система примет спецификацию вашей программы в качестве доказываемой теоремы. В случае вашего примера это было бы что-то вроде (неофициально): «есть множество всех простых чисел, меньших 10».
Затем вы попытаетесь доказать эту теорему, и существующие системы помогут вам выполнить доказательство, автоматизировать некоторые части, возможно, полное доказательство, и убедиться, что вы никогда не допустите ошибок.
Из этого доказательства можно извлечь программу, которая фактически вычисляет требуемый список простых чисел, которые были первоначально указаны.
Несколько систем были разработаны в прошлом, чтобы прояснить эти идеи. Одним из наиболее известных был LCF с помощью Робин Милнер , который создал язык ML для этой цели. Одна из самых современных систем Coq .
Есть примеры, полностью проработанные, некоторые из них довольно сложные. Вы можете найти некоторые из них в следующей статье , хотя это ни в коем случае не простое чтение и требует глубоких знаний логики.
источник
Необычный ответ: Да, но на момент написания, для большинства нетривиальных программ спецификации кажутся такими же сложными для написания и отладки, как и программы.
Если серьезно, ответ бабу хороший, но я также собираюсь предложить проверить область зависимых типов. Есть довольно хорошая книга, использующая Coq (полный отказ от ответственности: написанный моим другом), но есть также Epigram, Agda и Idris. Изабель / HOL также стоит проверить.
Все они основаны на исчислении конструкций. Если вы хотите знать теоретические основы, посмотрите теорию типов Мартина-Лёфа. Есть несколько хороших представлений вокруг.
источник
Идя по касательной, генераторы программ (то есть системы, которые давали высокоуровневое описание чего-то на каком-то особом языке) существовали вечно. Любой компилятор является одним из них, как и любой из множества генераторов парсеров. В свое время системы, называемые «языки третьего поколения», которые генерировали (большую часть) код типичного бизнес-приложения с учетом описания высокого уровня и каталога доступных данных, были популярны.
источник
Логическое программирование и, в более общем смысле, декларативное программирование принимают в качестве предпосылки именно то, что вы предлагаете: а именно, из логической спецификации, возвращайте результат, удовлетворяющий этой спецификации.
Одна область, которая, кажется, специально обращается к примеру «простых чисел меньше 10», - это программирование ограничений, которое пытается найти решения проблем, связанных с определенными ограничениями, включая целочисленные ограничения, подобные тем, которые вы дали.
Возможно, вы захотите попробовать ECLiPSe для конкретной (с открытым исходным кодом) реализации такой системы.
источник