考慮以下Isabelle的最小工作示例,其中我定義了兩個不同的函數func1和func2,它們應該模擬Eulers Totient函數。
奇怪的是,明顯的定義是錯誤的,並通過引入∈ℕ
導致正確的,但尚未確定的定義,只是略微改變了定義。
(我穿插代碼的確切問題,因爲這使得它可能更清楚我所指的)。當函數返回1時,函數返回0,消除不合格
theory T
imports
Complex_Main
"~~/src/HOL/Number_Theory/Number_Theory"
begin
(* Part I*)
definition func1 :: "nat ⇒ nat"
where "func1 n = card {m. m≤n ∧ coprime n m}"
lemma func1_equals : "func1 1 = 2" (* This equation is obviously false...*)
by (auto simp: func1_def)
(* Question 1: Why is this proof correct according to Isabelle? *)
(* Part II*)
definition func2 :: "nat ⇒ nat"
where "func2 n = card {m. m∈ℕ ∧ m≤n ∧(coprime n m)}"
(* Slightly changed definition by incorporating ∈ℕ*)
lemma func2_equals : "func2 1 = 1"
apply (auto simp: func2_def)
(* Unproved subgoal <<card {m ∈ ℕ. m ≤ Suc 0} = Suc >> looks more promising *)
oops
(* Question 2: Which proof method should I use to prove the last lemma?
Interestingly, sledgehammer runs out of time...*)
Question 3: Analogous to Q2 but for func2 4 = 2 ? The difference now is that
the preliminary <<apply (auto simp: func2_def)>> rewrites to a slightly
different subgoal. *)
end
有沒有更好的方法來定義歐拉總功能?
感謝您的詳細和周密的答覆。是的,Phi功能有點陡峭的學習曲線。然而,我的問題是,這些例子幾乎都是微不足道的 - 幾乎是具體語義書籍的第一部分中的所有內容(內容幾乎與編程和證明教程https://isabelle.in相同。 tum.de/doc/prog-prove.pdf ,其中一位作者,我現在正在閱讀)有一個非常短的證明或太複雜。 – nicht