Существует ли какой-либо инструмент для создания прототипа семантики и системы типов языка программирования, который также позволяет выполнять некоторую проверку моделей стандартных свойств, например, правильности типа?
Я спрашиваю об этом, потому что я читаю книгу по Alloy, и она предоставляет именно ту функциональность, которая мне нужна, но для моделей, выраженных с использованием реляционной логики.
Я знаю Отта , но он не имеет такого рода возможности «модель проверки», так как она ориентирована на генерацию кода для доказательства систем ассистентов.
Любое упоминание о существовании такого инструмента было бы неплохо.
reference-request
programming-languages
semantics
model-checking
Родриго Рибейро
источник
источник
Ответы:
Хотя существуют платформы, созданные специально для создания прототипов языков программирования (включая их семантику, системы типов, оценку, а также проверку свойств о них), наилучший выбор зависит от вашего конкретного случая и конкретных потребностей.
С учетом вышесказанного, вы можете выбрать несколько (возможно, не столь внятных) альтернатив (включая те, которые вы уже упомянули):
Обратите внимание, что существует компромисс между тем, насколько просто использовать каркас / инструмент (например, так же просто, как выложить определение на бумаге или в латексе), и насколько мощными являются механизмы для проверки свойств языка (например, встраивание язык в доказательстве теорем может позволить проверить очень сложные свойства).
[1] Кейси Кляйн, Джон Клементс, Кристос Димулас, Карл Истлунд, Матиас Феллайзен, Мэтью Флэтт, Джей А. Маккарти, Джон Рафкинд, Сэм Тобин-Хохштадт и Роберт Брюс Финдлер. Проведите исследование: об эффективности облегченной механизации. ПОПЛ, 2012.
[2] Дэниел Джексон. Alloy: облегченная нотация для моделирования объектов. TOSEM, 2002.
[3] Грег Деннис, Феликс Чанг, Даниэль Джексон. Модульная проверка кода с помощью SAT. ISSTA, 2006
[4] Система формального доказательства Coq
[5] Формальные рассуждения о программах. Адам Чипала, 2016
[6] Леон автоматизированная система для проверки, восстановления и синтеза функциональных программ Scala
источник