Matrix Isabelle矩阵算法:使用不同的符号在库中确定线性行集合

Matrix Isabelle矩阵算法:使用不同的符号在库中确定线性行集合,matrix,isabelle,theorem-proving,Matrix,Isabelle,Theorem Proving,我最近开始使用伊莎贝尔定理证明器。当我想证明另一个引理时,我想使用一个不同于引理“det_linear_row_setsum”中使用的符号,它可以在HOL库中找到。更具体地说,我想使用“χI j表示法”而不是“χI”。一段时间以来,我一直在试图建立一个等价的表达式,但还没有弄明白 (* ORIGINAL lemma from library *) (* from HOL/Multivariate_Analysis/Determinants.thy *) lemma det_linear_row_

我最近开始使用伊莎贝尔定理证明器。当我想证明另一个引理时,我想使用一个不同于引理“det_linear_row_setsum”中使用的符号,它可以在HOL库中找到。更具体地说,我想使用“χI j表示法”而不是“χI”。一段时间以来,我一直在试图建立一个等价的表达式,但还没有弄明白

(* ORIGINAL lemma from library *)
(* from HOL/Multivariate_Analysis/Determinants.thy *)
lemma det_linear_row_setsum:
  assumes fS: "finite S"
  shows "det ((χ i. if i = k then setsum (a i) S else c i)::'a::comm_ring_1^'n^'n) = setsum (λj. det ((χ i. if i = k then a  i j else c i)::'a^'n^'n)) S"
proof(induct rule: finite_induct[OF fS])
  case 1 thus ?case apply simp  unfolding setsum_empty det_row_0[of k] ..
next
  case (2 x F)
  then  show ?case by (simp add: det_row_add cong del: if_weak_cong)
qed


首先,弄清楚原始引理是怎么说的:
a
是由
i
j
索引的向量族,
c
是由
i
索引的向量族。左侧矩阵的
k
-第行是集合
S
中所有
j
范围内的向量
akj
的总和。 其他行取自
c
。在右边,矩阵是相同的,除了行
k
现在是
akj
,并且
j
在外和中绑定

如您所知,向量族
a
仅用于索引
i=k
,因此您可以用
%\uj替换
a
。vec1$j
。矩阵
A
产生行族,即
c
变成
%r。A$r
。然后,您只需利用
(χn.x$n)=x
(定理
向量逆
)并通过
if
集合推动
$
。结果如下:

lemma mydet_linear_row_setsum:
  assumes fS: "finite S"
  fixes A :: "'a::comm_ring_1^'n^'n" and k :: "'n" and vec1 :: "'vec1 => 'a^'n"
  shows "det (χ r c . if r = k then setsum (%j. vec1 j $ c) S else A $ r $ c) =
    (setsum (%j. (det(χ r c . if r = k then vec1 j $ c else A $ r $ c))) S)"
为了证明这一点,您只需撤销扩展和推送,引理
if_distrib
cond_application_beta
,以及
setsum_component
可能会帮助您这样做

lemma mydet_linear_row_setsum:
  assumes fS: "finite S"
  fixes A :: "'a::comm_ring_1^'n^'n" and k :: "'n" and vec1 :: "'vec1 => 'a^'n"
  shows "det (χ r c . if r = k then setsum (%j. vec1 j $ c) S else A $ r $ c) =
    (setsum (%j. (det(χ r c . if r = k then vec1 j $ c else A $ r $ c))) S)"