我在試圖證明多變量多項式的一些基本事實,因此需要一個多度的類型。在證明isabelle/hol中的解釋時的多態「修復」語句
type_synonym 'v multi_degree = "'v ⇒ nat"
這裏也有一些涉及到有限的支持,更多的東西,但這並不 真正重要的一個問題:爲了模擬這個,我 從自然數一些不明類型的變量名 的使用部分功能。然後我定義添加 多度明顯逐點方式:
definition zero_degree :: "'v multi_degree" where "zero_degree = (λ v. 0)"
definition md_plus :: "'v multi_degree ⇒ 'v multi_degree ⇒ 'v multi_degree" (infix "⊕" 70) where
"(d1 ⊕ d2) = (λ v. d1 v + d2 v)"
lemma assoc_md_plus [simp]: "d1 ⊕ (d2 ⊕ d3) = (d1 ⊕ d2) ⊕ d3"
by (rule; simp add: md_plus_def)
lemma ident_zero_degree [simp]: "d ⊕ zero_degree = d" and "zero_degree ⊕ d = d"
by (auto simp add: md_plus_def zero_degree_def)
lemma sym_md_plus: "d ⊕ d' = d' ⊕ d"
by (rule; simp add: md_plus_def)
現在我想說的是,除多度的有 可交換獨異的結構。寫在明顯的事情是一樣的東西 這樣:
interpretation md: comm_monoid "op ⊕" "zero_degree"
proof
到目前爲止好:輸出
goal (3 subgoals):
1. ⋀a b c. (a ⊕ b) ⊕ c = a ⊕ (b ⊕ c)
2. ⋀a b. a ⊕ b = b ⊕ a
3. ⋀a. a ⊕ zero_degree = a
,我絕對可以證明!但是,如果我現在寫
interpretation md: comm_monoid "op ⊕" "zero_degree"
proof
fix a
show "a ⊕ zero_degree = a" by simp
然後我得到警告
Introduced fixed type variable(s): 'c in "a__"
有沒有辦法避免的警告?現在,我已經被騙了,並證明 解釋與
interpretation md: comm_monoid "op ⊕" "zero_degree"
by (unfold_locales; simp?; rule sym_md_plus)
其工作原理,但並不完全清楚未來的讀者......
非常感謝您 - 我不知道修復「修復」語句中提到的變量類型的語法。另外,感謝關於類型類的提示:我會在第二天或第二天嘗試一下。 –