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
。最好将这些实例化进一步拆分为可选的导入。