string_dec и строка в библиотеке Ocaml

У меня есть файл:

  • String0.ml извлеченный из String.v (Это из библиотеки Coq)

  • String.ml: это струнная библиотека Ocaml

После извлечения моего тестового файла из Coq в Ocaml, я хочу использовать String.ml в библиотеке Ocaml, поэтому я пишу команду замены, чтобы заменить все String0 в String,

Проблема в файле test.vЯ использовал одно из определений:

Definition beq_string := beq_dec string_dec.

функция string_dec не встречается в библиотеке Ocaml, но имеет в библиотеке строк Coq

Так что у меня ошибка при компиляции test.ml

open String
let beq_string = beq_dec string_dec

Ошибка: несвязанное значение string_dec

Я хочу использовать библиотеку строк Ocaml для всех моих файлов извлечения. Как я могу собрать string_dec?

2 ответа

Решение

Извлечь string_dec функция также.

Если вы готовы немного доверять библиотеке OCaml, вы получите намного лучшую производительность, извлекая beq_string использовать встроенное равенство для строк:

Extract Constant beq_string => "((=) : string->string->bool)".

Создайте модуль MyString.ml, содержащий:

module String0 = struct
  include String
  let string_dec = function ... (* the definition of string_dec *)
end

и во всех ваших файлах, сгенерированных Coq, начните с

open MyString

Тогда вам не нужно переименовывать String0 в String, и он будет использовать функции, определенные в модуле String, плюс string_dec функция, которую вы определили.

Другие вопросы по тегам