在Isabelle中访问矩阵的第一个元素

时间:2014-03-23 17:13:39

标签: matrix isabelle

访问矩阵的“第一个”元素

我想写一个关于矩阵行列式的微不足道的证明,其中矩阵只由一个元素组成(即'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)以解决我的更大定理。

2 个答案:

答案 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