用Coq求解线性方程组
我需要证明这个方程组没有解(原因是它被过度确定)。有没有一种简单的方法可以在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
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的声明