Я только начал в Изабелле, и я получаю сообщение об ошибке объединения типа при работе через упражнения 3.3 в из Concrete Semantics:типа объединения Isabelle/вывод ошибка
Определит функцию замещения
subst :: vname ⇒ aexp ⇒ aexp ⇒ aexp
такой, что
subst x a e
является результатом замены каждого вхождения переменнойx
наa
вe
. Например:subst ''x'' (N 3) (Plus (V ''x'') (V ''y'')) = Plus (N 3) (V ''y'')
Вот что у меня до сих пор:
theory Scratchpad
imports Main
begin
type_synonym vname = string
type_synonym val = int
type_synonym state = "vname ⇒ val"
datatype aexp = N int | V vname | Plus aexp aexp
fun subst :: "vname ⇒ aexp ⇒ aexp ⇒ aexp" where
"subst x (N a) (N e) = (N e)" |
"subst x (N a) (V e) = (if x=e then (N a) else (V e))" |
"subst x (N a) (Plus e1 e2) = Plus(subst(x (N a) e1) subst(x (N a) e2))"
end
Когда третий случай в определении функции закомментирован, выполнение тестов
value "subst ''x'' (N 3) (N 5)"
value "subst ''x'' (N 3) (V ''x'')"
производит (N 5)
и (N 3)
соответственно, поэтому я знаю, что первые две строки работают правильно. Суммируя последние результаты строки в сообщении об ошибке
Тип объединение потерпело неудачу: Clash типов «_ ⇒ _» и «_» список ошибок
Типа в применении: оператор не типа функции
оператора : х :: голец список
Операнд: N A :: Aexp
Я не думаю, что это проблема синтаксиса, хотя я еще не совсем уверен, что цели различных типов кавычки как таковые (например, двойные кавычки по сравнению с двумя одинарными кавычками). От this answer, я считаю, что Изабель назначает x
как тип функции в правой части строки, чего я не хочу.
Что означают сообщения об ошибках (конкретно и вообще), и как это исправить?
Это заслуживает голосования, но у меня пока нет репутации 15. Я должен буду помнить, что я вернулся. Вы встречаетесь с ошибкой с круглыми скобками. Я на самом деле заметил и исправил это в более простых случаях, но в этом случае не мог видеть. Maddening. Одно наблюдение: вы могли бы определить фразу «язык терминов»? В лучшем случае я все еще неясен в отношении различий между Isabelle, HOL и Isar и уровнями синтаксиса. – user3376010
Чтобы ответить на ваш вопрос о языке терминов *, я обращаюсь к главе 7 «Внутренний синтаксис - язык терминов» [Справочное руководство по Изабель/Изар] (http://isabelle.in.tum.de/dist /Isabelle2014/doc/isar-ref.pdf). – chris