用Coq求解线性方程组

用Coq求解线性方程组,coq,linear-equation,Coq,Linear Equation,我需要证明这个方程组没有解(原因是它被过度确定)。有没有一种简单的方法可以在Coq中实现?也就是说,战术还是图书馆 Require Import Reals. Open Scope R. Lemma no_solution: forall b11 b12 b13 b14 b21 b22 b23 b24 b31 b32 b33 b34 r r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 : R, 1 = r * b11 + r0 * b21 + r

我需要证明这个方程组没有解(原因是它被过度确定)。有没有一种简单的方法可以在Coq中实现?也就是说,战术还是图书馆

Require Import Reals.
Open Scope R.

Lemma no_solution:
  forall 
    b11 b12 b13 b14 b21 b22 b23 b24 b31 b32 b33 b34
    r r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 : R,
   1 = r * b11 + r0 * b21 + r1 * b31    ->
   0 = r * b12 + r0 * b22 + r1 * b32    ->
   0 = r * b13 + r0 * b23 + r1 * b33    ->
   0 = r * b14 + r0 * b24 + r1 * b34    ->
   0 = r2 * b11 + r3 * b21 + r4 * b31   ->
   1 = r2 * b12 + r3 * b22 + r4 * b32   ->
   0 = r2 * b13 + r3 * b23 + r4 * b33   ->
   0 = r2 * b14 + r3 * b24 + r4 * b34   ->
   0 = r5 * b11 + r6 * b21 + r7 * b31   ->
   0 = r5 * b12 + r6 * b22 + r7 * b32   ->
   1 = r5 * b13 + r6 * b23 + r7 * b33   ->
   0 = r5 * b14 + r6 * b24 + r7 * b34   ->
   0 = r8 * b11 + r9 * b21 + r10 * b31  ->
   0 = r8 * b12 + r9 * b22 + r10 * b32  ->
   0 = r8 * b13 + r9 * b23 + r10 * b33  ->
   1 = r8 * b14 + r9 * b24 + r10 * b34  ->
   False.

如果我理解得很好,这组方程不可能同时成立,因为它要求3x4矩阵的秩高于3

结果的主要定理在中称为
mulmx\u max\u rank
。我有更多的工作要做,把你对问题的无结构表达与 用矩阵构造一个比找到正确的定理。本实验在coq-8.7中进行,通过
opam
(软件包版本
1.6.2
)加载
coq-mathcomp ssreflect
coq-mathcomp代数

请注意,这一结果适用于任何字段结构

From mathcomp Require Import all_ssreflect all_algebra.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Import GRing.Theory Num.Theory.

Open Scope ring_scope.

Section Solving_linear_equation_systems_in_Coq.
Variable R : fieldType.

Definition seq2matrix m n (s : seq (seq R)) :=
  \matrix_(i < m, j < n)
     nth 0 (nth nil s i) j.

Lemma no_solution:
  forall 
    b11 b12 b13 b14 b21 b22 b23 b24 b31 b32 b33 b34
    r r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 : R,
   1 = r * b11 + r0 * b21 + r1 * b31    ->
   0 = r * b12 + r0 * b22 + r1 * b32    ->
   0 = r * b13 + r0 * b23 + r1 * b33    ->
   0 = r * b14 + r0 * b24 + r1 * b34    ->
   0 = r2 * b11 + r3 * b21 + r4 * b31   ->
   1 = r2 * b12 + r3 * b22 + r4 * b32   ->
   0 = r2 * b13 + r3 * b23 + r4 * b33   ->
   0 = r2 * b14 + r3 * b24 + r4 * b34   ->
   0 = r5 * b11 + r6 * b21 + r7 * b31   ->
   0 = r5 * b12 + r6 * b22 + r7 * b32   ->
   1 = r5 * b13 + r6 * b23 + r7 * b33   ->
   0 = r5 * b14 + r6 * b24 + r7 * b34   ->
   0 = r8 * b11 + r9 * b21 + r10 * b31  ->
   0 = r8 * b12 + r9 * b22 + r10 * b32  ->
   0 = r8 * b13 + r9 * b23 + r10 * b33  ->
   1 = r8 * b14 + r9 * b24 + r10 * b34  ->
   False.
Proof.
move => b11 b12 b13 b14 b21 b22 b23 b24 b31 b32 b33 b34
   r r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 eq1 eq2 eq3 eq4
   eq5 eq6 eq7 eq8 eq9 eq10 eq11 eq12 eq13 eq14 eq15 eq16.
set Inp := seq2matrix 4 3 
           [:: [:: r; r0; r1];
               [:: r2; r3; r4];
               [:: r5; r6; r7];
               [:: r8; r9; r10]].
set B := seq2matrix 3 4 [:: [:: b11; b12; b13; b14];
                            [:: b21; b22; b23; b24];
                            [:: b31; b32; b33; b34]].
suff abs: Inp *m B = 1%:M.
  have : (\rank (Inp *m B) <= 3)%N by apply: mulmx_max_rank.
  by rewrite abs mxrank1.
by apply/matrixP=> [[ [ | [ | [ | [ | ?]]]] pi]]
   [ [ | [ | [ | [ | ?]]]] pj] //;
 rewrite /Inp /seq2matrix /= !(mxE, big_ord_recr, big_ord0) //= add0r /=
  -?(eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12).
Qed.

End Solving_linear_equation_systems_in_Coq.
来自mathcomp的
要求导入所有\u ssreflect所有\u代数。
设置隐式参数。
取消设置严格的隐式。
取消打印。
进口格林格。理论数。理论。
打开范围环\ U范围。
求解线性方程组的章节。
变量R:fieldType。
定义如下:矩阵m n(s:seq(seq R)):=
\矩阵(i
0=r*b12+r0*b22+r1*b32->
0=r*b13+r0*b23+r1*b33->
0=r*b14+r0*b24+r1*b34->
0=r2*b11+r3*b21+r4*b31->
1=r2*b12+r3*b22+r4*b32->
0=r2*b13+r3*b23+r4*b33->
0=r2*b14+r3*b24+r4*b34->
0=r5*b11+r6*b21+r7*b31->
0=r5*b12+r6*b22+r7*b32->
1=r5*b13+r6*b23+r7*b33->
0=r5*b14+r6*b24+r7*b34->
0=r8*b11+r9*b21+r10*b31->
0=r8*b12+r9*b22+r10*b32->
0=r8*b13+r9*b23+r10*b33->
1=r8*b14+r9*b24+r10*b34->
错。
证明。
移动=>b11 b12 b13 b14 b21 b22 b23 b24 b31 b32 b33 b34
r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 eq1 eq2 eq3 eq4
eq5 eq6 eq7 eq8 eq9 eq10 eq11 eq12 eq13 eq14 eq15 eq16。
设置输入:=Seq2矩阵4 3
[::[::r;r0;r1];
[::r2;r3;r4];
[::r5;r6;r7];
[::r8;r9;r10]]。
集合B:=Seq2矩阵34[::::::b11;b12;b13;b14];
[::b21;b22;b23;b24];
[::b31;b32;b33;b34]]。
suff abs:Inp*mb=1%:m。
have:(\rank(Inp*mb)[[[[124][[124][[124][[124]?]]]pi]]
[[|[|[|[|?]]]pj]/;
重写/Inp/seq2matrix/=!(mxE,big\u ord\u recr,big\u ord0)/=add0r/=
-?(eq1、eq2、eq3、eq4、eq5、eq6、eq7、eq8、eq9、eq10、eq11、eq12)。
Qed。
结束求解线性方程组。

如果我理解得很好,这组方程不可能同时成立,因为它要求3x4矩阵的秩高于3

结果的主要定理在中称为
mulmx\u max\u rank
使用矩阵构造一个,而不是找到正确的定理。这个实验是在coq-8.7中进行的,通过
opam
(软件包的版本
1.6.2
)加载
coq mathcomp ssreflect
coq mathcomp代数

请注意,这一结果适用于任何字段结构

From mathcomp Require Import all_ssreflect all_algebra.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Import GRing.Theory Num.Theory.

Open Scope ring_scope.

Section Solving_linear_equation_systems_in_Coq.
Variable R : fieldType.

Definition seq2matrix m n (s : seq (seq R)) :=
  \matrix_(i < m, j < n)
     nth 0 (nth nil s i) j.

Lemma no_solution:
  forall 
    b11 b12 b13 b14 b21 b22 b23 b24 b31 b32 b33 b34
    r r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 : R,
   1 = r * b11 + r0 * b21 + r1 * b31    ->
   0 = r * b12 + r0 * b22 + r1 * b32    ->
   0 = r * b13 + r0 * b23 + r1 * b33    ->
   0 = r * b14 + r0 * b24 + r1 * b34    ->
   0 = r2 * b11 + r3 * b21 + r4 * b31   ->
   1 = r2 * b12 + r3 * b22 + r4 * b32   ->
   0 = r2 * b13 + r3 * b23 + r4 * b33   ->
   0 = r2 * b14 + r3 * b24 + r4 * b34   ->
   0 = r5 * b11 + r6 * b21 + r7 * b31   ->
   0 = r5 * b12 + r6 * b22 + r7 * b32   ->
   1 = r5 * b13 + r6 * b23 + r7 * b33   ->
   0 = r5 * b14 + r6 * b24 + r7 * b34   ->
   0 = r8 * b11 + r9 * b21 + r10 * b31  ->
   0 = r8 * b12 + r9 * b22 + r10 * b32  ->
   0 = r8 * b13 + r9 * b23 + r10 * b33  ->
   1 = r8 * b14 + r9 * b24 + r10 * b34  ->
   False.
Proof.
move => b11 b12 b13 b14 b21 b22 b23 b24 b31 b32 b33 b34
   r r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 eq1 eq2 eq3 eq4
   eq5 eq6 eq7 eq8 eq9 eq10 eq11 eq12 eq13 eq14 eq15 eq16.
set Inp := seq2matrix 4 3 
           [:: [:: r; r0; r1];
               [:: r2; r3; r4];
               [:: r5; r6; r7];
               [:: r8; r9; r10]].
set B := seq2matrix 3 4 [:: [:: b11; b12; b13; b14];
                            [:: b21; b22; b23; b24];
                            [:: b31; b32; b33; b34]].
suff abs: Inp *m B = 1%:M.
  have : (\rank (Inp *m B) <= 3)%N by apply: mulmx_max_rank.
  by rewrite abs mxrank1.
by apply/matrixP=> [[ [ | [ | [ | [ | ?]]]] pi]]
   [ [ | [ | [ | [ | ?]]]] pj] //;
 rewrite /Inp /seq2matrix /= !(mxE, big_ord_recr, big_ord0) //= add0r /=
  -?(eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12).
Qed.

End Solving_linear_equation_systems_in_Coq.
来自mathcomp的
要求导入所有\u ssreflect所有\u代数。
设置隐式参数。
取消设置严格的隐式。
取消打印。
进口格林格。理论数。理论。
打开范围环\ U范围。
求解线性方程组的章节。
变量R:fieldType。
定义如下:矩阵m n(s:seq(seq R)):=
\矩阵(i
0=r*b12+r0*b22+r1*b32->
0=r*b13+r0*b23+r1*b33->
0=r*b14+r0*b24+r1*b34->
0=r2*b11+r3*b21+r4*b31->
1=r2*b12+r3*b22+r4*b32->
0=r2*b13+r3*b23+r4*b33->
0=r2*b14+r3*b24+r4*b34->
0=r5*b11+r6*b21+r7*b31->
0=r5*b12+r6*b22+r7*b32->
1=r5*b13+r6*b23+r7*b33->
0=r5*b14+r6*b24+r7*b34->
0=r8*b11+r9*b21+r10*b31->
0=r8*b12+r9*b22+r10*b32->
0=r8*b13+r9*b23+r10*b33->
1=r8*b14+r9*b24+r10*b34->
错。
证明。
移动=>b11 b12 b13 b14 b21 b22 b23 b24 b31 b32 b33 b34
r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 eq1 eq2 eq3 eq4
eq5 eq6 eq7 eq8 eq9 eq10 eq11 eq12 eq13 eq14 eq15 eq16。
设置输入:=Seq2矩阵4 3
[::[::r;r0;r1];
[::r2;r3;r4];
[::r5;r6;r7];
[::r8;r9;r10]]。
集合B:=Seq2矩阵34[::::::b11;b12;b13;b14];
[::b21;b22;b23;b24];
[::b31;b32;b33;b34]]。
suff abs:Inp*mb=1%:m。
have:(\rank(Inp*mb)[[[[124][[124][[124][[124]?]]]pi]]
[[|[|[|[|?]]]pj]/;
重写/Inp/seq2matrix/=!(mxE,big\u ord\u recr,big\u ord0)/=add0r/=
-?(eq1、eq2、eq3、eq4、eq5、eq6、eq7、eq8、eq9、eq10、eq11、eq12)。
Qed。
结束求解线性方程组。

谢谢!我注意到您使用了
参数R:fieldType。
我可以使用
Coq.Reals.Rdefinitions.R
吗?不,您需要将
Coq.Reals.Rdefinitions.R
更完整地集成到数学组件的数学结构中。在文件
Rstruct.v .现在,我建议您将此文件添加到开发中,尤其是第161行包含
Coq.Reals.Rdefinitio的声明