Когда я использую value
, чтобы узнать какое-то значение функции, которая возвращает натуральные числа, я всегда получаю ответ в виде повторных функций-преемников 0, т.е. Suc(Suc(... 0))
, которые иногда трудно читать. Есть ли способ напрямую выводить число, которое возвращает Изабель?Изабелла возвращает номера вместо Suc (Suc (... 0))
ответ
Это то, что я хотел исправить некоторое время назад, но, видимо, я забыл. Угадание Карцигената неверно; это действительно полностью оцененный результат. Проблема в том, что натуральные числа печатаются этим громоздким способом.
Вы можете сделать следующие вещи:
Самый простой способ, чтобы преобразовать число в целое, т.е. вместо
value "foo x y z"
(гдеfoo x y z
является выражением типаnat
, который вы хотите eavluate) вы напишитеvalue "int (foo x y z)"
.Вы можете добавить
~~/src/HOL/Library/Code_Target_Numeral
в список ваших товаров. Это делает генератор кода Изабеллы использовать целые числа произвольной точности целевого языка (в случаеvalue
, это ML и его целые числа на основе GMP) вместо неэффективной нотации преемника. Как побочный эффект, это также печатает натуральные числа в лучшем виде.Вы можете добавить следующий код к вашей теории, которая изменяет способ
value
команда отображает натуральные числа:
Код:
lemma Suc_numeral_bit0: "Suc (numeral (Num.Bit0 n)) = numeral (Num.Bit1 n)"
by (subst Suc_numeral) simp
lemma Suc_numeral_bit1: "Suc (numeral (Num.Bit1 n)) = numeral (Num.Bit0 (n + Num.One))"
by (subst Suc_numeral) simp
lemmas [code_post] =
One_nat_def [symmetric] Suc_numeral_bit0 Suc_numeral_bit1 Num.Suc_1 Num.arith_simps
Обратите внимание, что команда value
является диагностическим только команда. Он в основном используется для быстрых тестов достоверности и отладки настроек генерации кода, и заставить его работать иногда может быть сложным.
По умолчанию value
полагается на генератор кода, то есть Isabelle должен знать, как генерировать исполняемый код для выражения, и если он не может этого сделать, value
, вероятно, не удастся. (Иногда это может также вернуться к некоторым другим стратегиям, нормализации путем оценки или оценки путем упрощения, но обычно они не дают полезного вывода)
Я просто говорю вам об этом, чтобы вы знали, чего ожидать от value
и не создается впечатление, что это неотъемлемая часть Изабель, которую люди используют все время.
Вау, могу я спросить, как вы узнали все это об Изабель? Вы пропили в руководстве (-ах)? Это кажется утомительной (но впечатляющей) задачей, поскольку я обнаружил, что части из них трудно читать. – nicht
Я работаю с этой системой уже более пяти лет, и я работаю на кафедре в Мюнхене в Мюнхене, который совместно развивает Изабель уже несколько лет. Я на самом деле не читал много руководств; они полезны, но большая часть из них не совсем то, что вам абсолютно необходимо * знать как пользователь. Большинство из них вы просто забираете, когда используете систему, или спрашиваете других людей. –
- 1. Превратить <= Ь к успе а <= SUC б
- 2. EDIT: Почему typeof (0) возвращает boolean вместо номера
- 3. Query возвращает null вместо 0
- 4. Enum.reduce возвращает модель вместо номера
- 5. C++ возвращает 7.45058 вместо 0
- 6. curl_errno возвращает 0 вместо 6
- 7. SQL возвращает 0 вместо NULL
- 8. CMTimeGetSeconds возвращает 0 вместо 0.0666667
- 9. Функция возвращает нет вместо номера возврата
- 10. JS replace() возвращает ,,,,,,, вместо номера с запятой
- 11. Oracle C# функция номера возвращает 0 всегда
- 12. getDisplayOriginatingAddress возвращает имя отправителя вместо номера телефона
- 13. Codeigniter num_row возвращает «массив» вместо номера
- 14. DLookup возвращает «0» вместо правильного значения
- 15. Почему эта функция возвращает 0 вместо double?
- 16. счетчик LINQ запрос возвращает 1 вместо 0
- 17. SAPI5 Событие возвращает 42 вместо 0
- 18. PDO exec возвращает 0 вместо затронутых строк
- 19. ASP.NET: WebService Возвращает {объект [0]} вместо Int
- 20. IntByReference возвращает 0 вместо фактического значения
- 21. Угловая Директива - Scope возвращает 0 вместо значения
- 22. Пользовательский выбор api возвращает статус 0 вместо
- 23. Почему GregorianCalendar возвращает 0 вместо MONTH?
- 24. Почему объект getter возвращает null вместо 0?
- 25. Сохраненная процедура возвращает NULL вместо 0
- 26. Cypher Count возвращает null вместо 0
- 27. Почему Math.sqrt возвращает 0 вместо длины вектора?
- 28. Командная цепочка Popen возвращает 0 вместо 1
- 29. Mysql Coalesce возвращает 0 вместо фактического значения
- 30. Подготовленный оператор возвращает 0 вместо 1, почему?
Это похоже на то, что значение не оценивается; это трюк. Я не знаю Изабель, но похоже, что вам нужно подвергнуть оценке. – Carcigenicate
Вы попробовали ответы здесь? http://stackoverflow.com/questions/22687646/simplify-pretty-printing-of-naturals – ammbauer