當我使用value
找出某個返回自然數的函數的值時,我總是以迭代的Successor函數的形式獲得答案0,即,有時難以閱讀的Suc(Suc(... 0))
。 有沒有辦法直接輸出Isabelle返回的號碼?Isabelle返回數字而不是Suc(Suc(... 0))
回答
這是我以前想解決的問題,但顯然我忘了。 Carcigenate的猜測是不正確的。這確實是全面評估的結果。問題在於自然數以這種笨拙的方式印刷出來。
你可以做以下的事情:
最簡單的方法是將數字轉換成整數,即代替
value "foo x y z"
(其中foo x y z
是類型nat
要eavluate的表情)你寫value "int (foo x y z)"
。您可以將
~~/src/HOL/Library/Code_Target_Numeral
添加到您的導入。這使得Isabelle的代碼生成器使用目標語言的任意精度整數(在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
我已經在這個系統工作了五年多,而且我一直在慕尼黑工業大學的一個椅子上工作,現在共同開發Isabelle幾年。我沒有真正閱讀過很多手冊;他們是有幫助的,但其中大部分並不是真正的東西,你絕對需要知道作爲用戶。大多數情況下,當你使用系統時,或者通過詢問其他人時,你都會接受。 –
- 1. 車削一個<= b鍵SUC一個<= SUC b
- 2. 返回空而不是0
- 3. 計數返回空白,而不是0
- 4. Cypher計數返回null而不是0
- 5. 返回0 1而不是數據值
- 6. charAt(0)不返回第一個數字,而是第二個
- 7. 返回 「批准」 列的值 「是\ 0 \ 0 \ 0 \ 0 \ 0 \ 0」,而不是 「是」
- 8. indexOfObject首次返回0而不是NSNotFound
- 9. SQL查詢返回0而不是NULL
- 10. 返回SUM零(0),而不是空的
- 11. 使DAX返回0而不是空白
- 12. table.getSelectedRow()默認返回0,而不是-1
- 13. MenuItem.getItemId返回0而不是ItemId
- 14. 爲什麼返回-1而不是0?
- 15. Count()返回0而不是NULL
- 16. 如何返回0而不是#Error?
- 17. Javascript「」.length返回1而不是0
- 18. 返回0而不是實際值
- 19. curl_errno返回0而不是6
- 20. C++返回7.45058而不是0
- 21. PDO返回0而不是rowcount
- 22. 函數返回字符[]而不是int
- 23. 返回字符而不是整數
- 24. Mysql返回*****而不是數字
- 25. waitpid/wexitstatus返回0而不是正確的返回碼
- 26. 計數,函數返回空記錄集需要返回0,而不是
- 27. 如何返回,而不是NA數字(0),當條件不中的R
- 28. $$ array [0]返回數組名稱的字母而不是數組的值
- 29. gmp_strval舍入爲0而不是返回接近於0但不爲0的數字。PHP
- 30. Highcharts:在數據標籤中返回N/A值而不是0%
這聽起來像值沒有評估;這是一個thunk。我不知道伊莎貝爾,但看起來你需要強制評估。 – Carcigenicate
你在這裏試過答案嗎? http://stackoverflow.com/questions/22687646/simplify-pretty-printing-of-naturals – ammbauer