Частичная функция в Coq / недоопределена? - PullRequest
0 голосов
/ 22 ноября 2018

Я пытался написать и проверить компилятор в Agda, используя Конкретную семантику (которая написана для Coq Изабель / HOL) в качестве контрольной точки.Я определяю компиляцию для тех же языков, которые используются в этом тексте.

Для контекста я закончил написание компилятора и сейчас на стадии проверки, однако мне пришлось внести существенную разницу в конкретную семантику в определениивыполнения машинных инструкций.В Agda это различие казалось необходимым, но теперь оно делает этап проверки невероятно сложным.

Пытаясь выполнить более простую версию выполнения инструкций, приведенную в «Конкретной семантике», я натолкнулся на эту строку, которая может объяснить, почемуУ меня возникли проблемы с прямым переводом этого на Агду:

Также полезны заголовок списка, его первый элемент и хвост, остальная часть списка:

fun hd :: 'a list ⇒ 'a
hd (x # xs) = x

Обратите внимание, что, поскольку HOL - это логика полных функций, hd [] определено, но мы не знаем, каков результат. То есть hd [] не является неопределенным, но недоопределенным.

Что означает, что hd [] является недоопределенным?Является ли это эквивалентом наличия неполного шаблона в Agda?

Функция выполнения инструкции сборки в значительной степени зависит от hd.В своей реализации этого в Agda я дал индексы нескольким типам, чтобы позволить мне создавать доказательства того, что в стеке всегда есть минимальное количество элементов, чтобы избежать проблемы неполного сопоставления с образцом.Теперь, когда я пытаюсь проверить компилятор, доказательства являются более сложными, чем доказательства в «Конкретной семантике», поскольку мне приходится работать с этими индексами.

Я что-то упускаю или доказательства в конкретномСемантика неполная с hd [] не определено?

1 Ответ

0 голосов
/ 24 ноября 2018

hd [] в Изабель / HOL определяется;это имеет значение, но вы ничего не знаете об этом значении.Можно доказать, что hd [] = hd [], потому что x = x верно для всех x, но вы не сможете доказать что-либо еще (нетривиально) на hd [].

Я пропустилчто-то или доказательства в Конкретной Семантике неполные с hd [] не определенным?

Они не являются неполными.Доказательства, основанные на поведении hd, скорее всего, предполагают, что список, для которого вызывается hd, не является пустым, или докажут, что он не пуст, основываясь на других предположениях.

...