Isabelle 伊莎贝尔:A*1和A**1的区别
矩阵的Isabelle 伊莎贝尔:A*1和A**1的区别,isabelle,Isabelle,矩阵的**和**之间有什么区别 还有一个*1和一个**mat 1` 例如: lemma myexample: fixes A :: "('a::comm_ring_1)^'n∷finite^'n∷finite" shows "(A * 1 = A) ∧ (A ** (mat 1) = A)" by (metis comm_semiring_1_class.normalizing_semiring_rules(12) matrix_mul_rid) Isabelle中的矩阵被简单地定
**
和**
之间有什么区别
还有一个*1和一个**mat 1`
例如:
lemma myexample:
fixes A :: "('a::comm_ring_1)^'n∷finite^'n∷finite"
shows "(A * 1 = A) ∧ (A ** (mat 1) = A)"
by (metis comm_semiring_1_class.normalizing_semiring_rules(12) matrix_mul_rid)
Isabelle中的矩阵被简单地定义为向量的向量,因此矩阵上的*
继承自向量,而向量上的*
只是组件式乘法。因此,您有(A*B)$i$j=A$i$j*B$i$j
,即*
是矩阵的逐项乘法。我不知道这在任何地方是否真的有用——我不这么认为。它可能只是将矩阵定义为向量的向量的产物。对矩阵进行适当的typedef并将*
定义为它们的正确矩阵乘法可能会更好,但没有这样做肯定是有原因的——可能只是因为这需要更多的工作和大量的复制代码
**
是正确的矩阵乘法mat x
只是对角线上有x
的矩阵,其他地方都有0
,所以当然,mat 1
是单位矩阵,A**mat 1=A
然而,矩阵1
再次是来自向量定义的伪影;n维向量1
被简单地定义为具有n个分量的向量,所有分量都是1
。因此,矩阵1
是其条目均为1
的矩阵,当然还有A*1=A
。这对我来说似乎没有任何用处。Isabelle中的*
类型要求两个参数具有相同的类型;这意味着使用*
进行矩阵乘法只能用于平方矩阵。拥有像('a,'n)squarematrix
这样的类型可能很有用,但到目前为止还没有人提供这样的库。我同意向量的逐点乘法、数字等的定义在数学上是不标准的,而且基本上是无用的。这就是为什么我从未将这些类实例化迁移到定义向量类型的有限笛卡尔积.thy
。最好将这些实例化进一步拆分为可选的导入。