Matrix Isabelle:具有常数因子的转置矩阵等式的证明

Matrix Isabelle:具有常数因子的转置矩阵等式的证明,matrix,transpose,isabelle,theorem-proving,Matrix,Transpose,Isabelle,Theorem Proving,我面临以下引理的问题,我认为应该是正确的。我可以用很小的步骤证明到某一点,但是我还没有找到证明整个引理的方法 lemma abc: fixes A :: "'a::comm_ring_1^'n^'n" and l :: 'n and c :: 'a shows "(χ i j. if i = l then c * (transpose A $ i $ j) else (transpose A $ i $ j)) = (χ i j. if i = l then c *

我面临以下引理的问题,我认为应该是正确的。我可以用很小的步骤证明到某一点,但是我还没有找到证明整个引理的方法

lemma abc:
  fixes A :: "'a::comm_ring_1^'n^'n" and l :: 'n and c :: 'a
  shows "(χ i j. if i = l then c * (transpose A $ i $ j) else (transpose A $ i $ j)) = 
         (χ i j. if i = l then c * (A $ j $ i) else (A $ j $ i))"
proof -
  (* here is my draft *)
  have th1: "(χ i j. transpose A $ i $ j) = (χ i j. A $ j $ i)"
    by (simp add: det_transpose transpose_def)
  have "(χ i j. if i = l then (transpose A $ i $ j) else (transpose A $ i $ j)) =
    (χ i j. A $ j $ i)" by (metis column_def row_def row_transpose)
  show ?thesis sorry
qed

在伊莎贝尔开始证明某些东西之前,你应该知道如何在纸上证明它。经验丰富的伊莎贝尔用户并不总是听从自己的建议;。如果你知道如何在纸上证明它,那么如何将纸上的证据翻译成Isabelle/Isar可能还不太清楚。然而,这将使你更容易帮助并表明你理解手头的数学问题,而这与伊莎贝尔本身无关

在下文中,我将解释如何进行此类证明:

lemma abc:
  fixes A :: "'a::comm_ring_1^'n^'n" and l :: 'n and c :: 'a
  shows "(χ i j. if i = l then c * (transpose A $ i $ j) else (transpose A $ i $ j)) = 
         (χ i j. if i = l then c * (A $ j $ i) else (A $ j $ i))"
我注意到的第一件事是抽象χI j。。。。如果我想证明一些关于普通lambda抽象的东西,我肯定想首先去掉它们,例如,为了证明两个函数f和g相等,我会证明所有x的fx=gx。这在伊莎贝尔身上是通过规则表达出来的

ext: (⋀x. ?f x = ?g x) ⟹ ?f = ?g
因为我对多元_分析知之甚少,所以我试图通过

第一个命中目标是我要搜索的,即

Determinants.Cart_lambda_cong: (⋀x. ?f x = ?g x) ⟹ vec_lambda ?f = vec_lambda ?g
因此,我首先使用介绍规则名称应用此规则两次,介绍规则名称尽可能经常应用:

proof (intro Cart_lambda_cong)
现在我必须证明,对于任意I和j,当替换χ参数时,该语句成立,即

  fix i j
  show "(if i = l then c * (transpose A $ i $ j) else (transpose A $ i $ j)) = 
        (if i = l then c * (A $ j $ i) else (A $ j $ i))"
然后应用转置的定义完成证明:

或者我们可以做的不是上面的逐步证明

by (auto intro!: Cart_lambda_cong simp: transpose_def)

在哪里!在介绍告诉系统应积极应用此规则后,如果没有!,但别问我为什么;,我们必须检查应用规则的痕迹以找出答案。

在伊莎贝尔开始证明某些东西之前,你应该知道如何在纸上证明它。经验丰富的伊莎贝尔用户并不总是听从自己的建议;。如果你知道如何在纸上证明它,那么如何将纸上的证据翻译成Isabelle/Isar可能还不太清楚。然而,这将使你更容易帮助并表明你理解手头的数学问题,而这与伊莎贝尔本身无关

在下文中,我将解释如何进行此类证明:

lemma abc:
  fixes A :: "'a::comm_ring_1^'n^'n" and l :: 'n and c :: 'a
  shows "(χ i j. if i = l then c * (transpose A $ i $ j) else (transpose A $ i $ j)) = 
         (χ i j. if i = l then c * (A $ j $ i) else (A $ j $ i))"
我注意到的第一件事是抽象χI j。。。。如果我想证明一些关于普通lambda抽象的东西,我肯定想首先去掉它们,例如,为了证明两个函数f和g相等,我会证明所有x的fx=gx。这在伊莎贝尔身上是通过规则表达出来的

ext: (⋀x. ?f x = ?g x) ⟹ ?f = ?g
因为我对多元_分析知之甚少,所以我试图通过

第一个命中目标是我要搜索的,即

Determinants.Cart_lambda_cong: (⋀x. ?f x = ?g x) ⟹ vec_lambda ?f = vec_lambda ?g
因此,我首先使用介绍规则名称应用此规则两次,介绍规则名称尽可能经常应用:

proof (intro Cart_lambda_cong)
现在我必须证明,对于任意I和j,当替换χ参数时,该语句成立,即

  fix i j
  show "(if i = l then c * (transpose A $ i $ j) else (transpose A $ i $ j)) = 
        (if i = l then c * (A $ j $ i) else (A $ j $ i))"
然后应用转置的定义完成证明:

或者我们可以做的不是上面的逐步证明

by (auto intro!: Cart_lambda_cong simp: transpose_def)

在哪里!在介绍告诉系统应积极应用此规则后,如果没有!,但别问我为什么;,我们必须检查应用规则的踪迹才能找到答案。

查看引理可以发现转置A$i$j=A$j$i对所有A,i,j都有效,这可以通过简化程序轻松证明:

lemma transpose_eq: "⋀i j. transpose A $ i $ j = A $ j $ i" by (simp add: transpose_def)
如果我们用subst方法手工应用这个方程,你的引理可以很容易地解出来 只是重写if表达式的分支:

lemma abc:
  fixes A :: "'a::comm_ring_1^'n^'n" and l :: 'n and c :: 'a
  shows "(χ i j. if i = l then c * (transpose A $ i $ j) else (transpose A $ i $ j)) = 
         (χ i j. if i = l then c * (A $ j $ i) else (A $ j $ i))"
  apply (subst transpose_eq)
  apply (subst transpose_eq)
  apply (rule refl)
  done
因此,我们应该能够使用带有apply simp add:transpose_eq的简化器,而不是subst,对吗?它不起作用的原因是一致性规则。基本上,简化者知道一条规则if_weak_cong,该规则明确禁止简化if表达式的分支。将目标保持在可管理的大小通常是一个好主意。因此,我们需要删除此规则:

  apply (simp add: transpose_def cong del: if_weak_cong)
解你原来的引理


有关更深入的答案,请参见。

查看引理,可以发现转置a$i$j=a$j$i适用于所有a,i,j,这可以通过简化器轻松证明:

lemma transpose_eq: "⋀i j. transpose A $ i $ j = A $ j $ i" by (simp add: transpose_def)
如果我们用subst方法手工应用这个方程,你的引理可以很容易地解出来 只是重写if表达式的分支:

lemma abc:
  fixes A :: "'a::comm_ring_1^'n^'n" and l :: 'n and c :: 'a
  shows "(χ i j. if i = l then c * (transpose A $ i $ j) else (transpose A $ i $ j)) = 
         (χ i j. if i = l then c * (A $ j $ i) else (A $ j $ i))"
  apply (subst transpose_eq)
  apply (subst transpose_eq)
  apply (rule refl)
  done
因此,我们应该能够使用带有apply simp add:transpose_eq的简化器,而不是subst,对吗?它不起作用的原因是一致性规则。基本上,简化者知道一条规则if_weak_cong,该规则明确禁止简化if表达式的分支。将目标保持在可管理的大小通常是一个好主意。因此,我们需要删除此规则:

  apply (simp add: transpose_def cong del: if_weak_cong)
解你原来的引理


要获得更深入的答案,请参阅。

请经常参阅,将引理尽可能一般化是一个好主意。所以如果你能证明pij=qij,不要证明χij。P i j=χi j。Q i j,谢谢你,拉尔斯。我先这么做了,但想排除这是一个错误源,所以选择了长的一个。经常看到,让你的引理尽可能一般是一个好主意。所以如果你能证明pij=qij,不要证明χij。P i j=χi j。Q i j,谢谢你,拉尔斯。我先这么做了,但想排除这是一个错误源,所以我花了很长的时间。谢谢你的回答。我认为两个答案都一样好,但我不得不挑一个。谢谢你的回答。我认为两个答案都一样好,但必须选择一个。