访问矩阵的“第一个”元素
我想写一个关于矩阵行列式的微不足道的证明,其中矩阵只由一个元素组成(即'n
的基数为1)。
因此,行列式(或det A
)是矩阵中的单个元素。
但是,我不清楚如何引用矩阵的单个元素。我尝试了A $ zero $ zero
,但没有效果。
我目前展示问题的方法是写∀a∈(UNIV :: 'n set). det A = A $ a $ a
。它假设数字类型的基数是1。
写这个关于决定因素的琐碎证据的正确方法是什么?
这是我目前的代码:
theory Notepad
imports
Main
"~~/src/HOL/Library/Polynomial"
"~~/src/HOL/Algebra/Ring"
"~~/src/HOL/Library/Numeral_Type"
"~~/src/HOL/Library/Permutations"
"~~/src/HOL/Multivariate_Analysis/Determinants"
"~~/src/HOL/Multivariate_Analysis/L2_Norm"
"~~/src/HOL/Library/Numeral_Type"
begin
lemma det_one_element_matrix:
fixes A :: "('a::comm_ring_1)^'n∷finite^'n∷finite"
assumes "card(UNIV :: 'n set) = 1"
shows "∀a∈(UNIV :: 'n set). det A = A $ a $ a"
proof-
(*sledgehammer proof of 1, 2 and ?thesis *)
have 1: "∀a∈(UNIV :: 'n set). UNIV = {a}"
by (metis (full_types) Set.set_insert UNIV_I assms card_1_exists ex_in_conv)
have 2:
"det A = (∏i∈UNIV. A $ i $ i)"
by (metis (mono_tags, lifting) "1" UNIV_I det_diagonal singletonD)
from 1 2 show ?thesis by (metis setprod_singleton)
qed
的更新: 的
不幸的是,这是一个较大定理的一部分,已经证明了'n∷finite
>的基数。在这个定理中,矩阵A的类型是
固定为A :: "('a::comm_ring_1)^'n∷finite^'n∷finite
,并且在这个更大的定理中使用行列式的定义。
因此,我不认为我可以将我的矩阵A的类型更改为('a::comm_ring_1)^1^1)
以解决我的更大定理。
答案 0 :(得分:1)
使用A $ zero $ zero
(或A $ 0 $ 0
)不会有效,因为向量是从1索引的:A $ 0 $ 0
未定义,这使得很难证明任何事情。
自己玩一点,我想出了以下引理:
lemma det_one_element_matrix:
"det (A :: ('a::comm_ring_1)^1^1) = A $ 1 $ 1"
by (clarsimp simp: det_def sign_def)
我没有使用类型'a :: finite
并且假设它具有基数1,而是使用标准的Isabelle 1
类型,它将这两个事实编码到类型本身中。 (所有数字都存在类似的类型,因此您可以编写'a ^ 23 ^ 72
)
顺便说一下,在输入上面的引理后,auto solve_direct
很快告诉我库中已经存在一些说明相同结果的内容,一个名为det_1
的引理。
答案 1 :(得分:1)
我觉得我之前的答案是一般情况下更好的解决方案,如果可以使用,所以我会保持原样。在你不能使用这种方法的情况下,遗憾的是事情会变得更加困难。
您需要表明的是:
类型'n
中只能有一个元素,因此每个元素都相等;
此外,det
的定义也引用了排列,因此我们需要证明只存在'n ⇒ 'n
类型的单个函数,它恰好等于函数{{ 1}}。
有了这些,我们可以按如下方式进行证明:
id