Coq 如何描述向量化矩阵的乘法?

Coq 如何描述向量化矩阵的乘法?,coq,ssreflect,Coq,Ssreflect,我想计算一个巨大(特定)矩阵的乘积。从复杂性的角度来看,产品应该采用元素表达式的形式 我试图用mxvec/vec\u mx对矩阵进行“矢量化”,并通过一维流计算乘积。但索引访问被enum('I_p*'I_q)这一术语阻止 我想知道enum('I_p*'I_q)的第n个值,因为我想在底层字段中以原语表达式的形式描述矩阵的乘法 我该怎么做?特别是,我如何证明这一说法 From mathcomp Require Import all_ssreflect. Lemma nth_enum_prod p

我想计算一个巨大(特定)矩阵的乘积。从复杂性的角度来看,产品应该采用元素表达式的形式

我试图用
mxvec
/
vec\u mx
对矩阵进行“矢量化”,并通过一维流计算乘积。但索引访问被
enum('I_p*'I_q)
这一术语阻止

我想知道
enum('I_p*'I_q)
的第n个值,因为我想在底层字段中以原语表达式的形式描述矩阵的乘法

我该怎么做?特别是,我如何证明这一说法

From mathcomp Require Import all_ssreflect.

Lemma nth_enum_prod p q (a : 'I_q) :
  val a = index (ord0, a) (enum (prod_finType (ordinal_finType p.+1) (ordinal_finType q))).

我很惊讶,如果您的定义是逐点的,那么您需要对矩阵进行矢量化,通常您应该能够将结果定义为
\matrix_u1;(I,j)op
,例如,矩阵乘法的标准定义是:

\matrix_(i, k) \sum_j (A i j * B j k).
顺便说一下,你的引理的一个快速“肮脏”证明是:

Lemma nth_enum_prod p q (a : 'I_q) : val a = index (@ord0 p, a) (enum predT).
Proof.
have /(_ _ 'I_q) pair_snd_inj: injective [eta pair ord0] by move => n T i j [].
have Hfst : (ord0, a) \in [seq (ord0, x2) | x2 <- enum 'I_q].
  by move=> n; rewrite mem_map /= ?mem_enum.
rewrite enumT !unlock /= /prod_enum enum_ordS /= index_cat {}Hfst.
by rewrite index_map /= ?index_enum_ord.
Qed.

我很惊讶,如果您的定义是逐点的,那么您需要对矩阵进行矢量化,通常您应该能够将结果定义为
\matrix_u1;(I,j)op
,例如,矩阵乘法的标准定义是:

\matrix_(i, k) \sum_j (A i j * B j k).
顺便说一下,你的引理的一个快速“肮脏”证明是:

Lemma nth_enum_prod p q (a : 'I_q) : val a = index (@ord0 p, a) (enum predT).
Proof.
have /(_ _ 'I_q) pair_snd_inj: injective [eta pair ord0] by move => n T i j [].
have Hfst : (ord0, a) \in [seq (ord0, x2) | x2 <- enum 'I_q].
  by move=> n; rewrite mem_map /= ?mem_enum.
rewrite enumT !unlock /= /prod_enum enum_ordS /= index_cat {}Hfst.
by rewrite index_map /= ?index_enum_ord.
Qed.

我之所以需要这个解决方案,是因为矩阵表达式中会出现巨大的零。此外,这些矩阵表达式将被提取为优化代码。你的证据对我很有帮助!感谢you@KazunariTanaka不过,这个解决方案在我看来还是有点混乱,我想说,一旦你对矩阵本身做了一些改进,也许稀疏性应该在较低的层次上处理,就像CoqEAL一样,但确实很难说不多讨论。战斗结束了几个小时,我终于明白了你所说的。我要试着读一读《改进》的论文。。。再次感谢你!我之所以需要这个解决方案,是因为矩阵表达式中会出现巨大的零。此外,这些矩阵表达式将被提取为优化代码。你的证据对我很有帮助!感谢you@KazunariTanaka不过,这个解决方案在我看来还是有点混乱,我想说,一旦你对矩阵本身做了一些改进,也许稀疏性应该在较低的层次上处理,就像CoqEAL一样,但确实很难说不多讨论。战斗结束了几个小时,我终于明白了你所说的。我要试着读一读《改进》的论文。。。再次感谢你!