diff options
Diffstat (limited to 'docs/htmldoc/mathcomp.algebra.mxpoly.html')
| -rw-r--r-- | docs/htmldoc/mathcomp.algebra.mxpoly.html | 704 |
1 files changed, 704 insertions, 0 deletions
diff --git a/docs/htmldoc/mathcomp.algebra.mxpoly.html b/docs/htmldoc/mathcomp.algebra.mxpoly.html new file mode 100644 index 0000000..f9e95f9 --- /dev/null +++ b/docs/htmldoc/mathcomp.algebra.mxpoly.html @@ -0,0 +1,704 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<link href="coqdoc.css" rel="stylesheet" type="text/css" /> +<title>mathcomp.algebra.mxpoly</title> +</head> + +<body> + +<div id="page"> + +<div id="header"> +</div> + +<div id="main"> + +<h1 class="libtitle">Library mathcomp.algebra.mxpoly</h1> + +<div class="code"> +<span class="comment">(* (c) Copyright 2006-2016 Microsoft Corporation and Inria. <br/> + Distributed under the terms of CeCILL-B. *)</span><br/> +<span class="id" title="keyword">Require</span> <span class="id" title="keyword">Import</span> <a class="idref" href="mathcomp.ssreflect.ssreflect.html#"><span class="id" title="library">mathcomp.ssreflect.ssreflect</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + This file provides basic support for formal computation with matrices, + mainly results combining matrices and univariate polynomials, such as the + Cayley-Hamilton theorem; it also contains an extension of the first order + representation of algebra introduced in ssralg (GRing.term/formula). + rVpoly v == the little-endian decoding of the row vector v as a + polynomial p = \sum_i (v 0 i)%:P * 'X^i. + poly_rV p == the partial inverse to rVpoly, for polynomials of degree + less than d to 'rV_d (d is inferred from the context). + Sylvester_mx p q == the Sylvester matrix of p and q. + resultant p q == the resultant of p and q, i.e., \det (Sylvester_mx p q). + horner_mx A == the morphism from {poly R} to 'M_n (n of the form n'.+1) + mapping a (scalar) polynomial p to the value of its + scalar matrix interpretation at A (this is an instance of + the generic horner_morph construct defined in poly). + powers_mx A d == the d x (n ^ 2) matrix whose rows are the mxvec encodings + of the first d powers of A (n of the form n'.+1). Thus, + vec_mx (v *m powers_mx A d) = horner_mx A (rVpoly v). + char_poly A == the characteristic polynomial of A. + char_poly_mx A == a matrix whose detereminant is char_poly A. + mxminpoly A == the minimal polynomial of A, i.e., the smallest monic + polynomial that annihilates A (A must be nontrivial). + degree_mxminpoly A == the (positive) degree of mxminpoly A. + mx_inv_horner A == the inverse of horner_mx A for polynomials of degree + smaller than degree_mxminpoly A. + integralOver RtoK u <-> u is in the integral closure of the image of R + under RtoK : R -> K, i.e. u is a root of the image of a + monic polynomial in R. + algebraicOver FtoE u <-> u : E is algebraic over E; it is a root of the + image of a nonzero polynomial under FtoE; as F must be a + fieldType, this is equivalent to integralOver FtoE u. + integralRange RtoK <-> the integral closure of the image of R contains + all of K (:= forall u, integralOver RtoK u). + This toolkit for building formal matrix expressions is packaged in the + MatrixFormula submodule, and comprises the following: + eval_mx e == GRing.eval lifted to matrices (:= map_mx (GRing.eval e)). + mx_term A == GRing.Const lifted to matrices. + mulmx_term A B == the formal product of two matrices of terms. + mxrank_form m A == a GRing.formula asserting that the interpretation of + the term matrix A has rank m. + submx_form A B == a GRing.formula asserting that the row space of the + interpretation of the term matrix A is included in the + row space of the interpretation of B. + seq_of_rV v == the seq corresponding to a row vector. + row_env e == the flattening of a tensored environment e : seq 'rV_d. + row_var F d k == the term vector of width d such that for e : seq 'rV[F]_d + we have eval e 'X_k = eval_mx (row_env e) (row_var d k). +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Set Implicit Arguments</span>.<br/> + +<br/> +<span class="id" title="keyword">Import</span> <span class="id" title="var">GRing.Theory</span>.<br/> +<span class="id" title="keyword">Import</span> <span class="id" title="var">Monoid.Theory</span>.<br/> + +<br/> +<span class="id" title="keyword">Local Open</span> <span class="id" title="keyword">Scope</span> <span class="id" title="var">ring_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Import</span> <span class="id" title="var">Pdiv.Idomain</span>.<br/> +</div> + +<div class="doc"> + Row vector <-> bounded degree polynomial bijection +</div> +<div class="code"> +<span class="id" title="keyword">Section</span> <a name="RowPoly"><span class="id" title="section">RowPoly</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="RowPoly.R"><span class="id" title="variable">R</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Ring.Exports.ringType"><span class="id" title="abbreviation">ringType</span></a>) (<a name="RowPoly.d"><span class="id" title="variable">d</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>).<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Types</span> <span class="id" title="var">u</span> <span class="id" title="var">v</span> : <a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">rV</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#RowPoly.R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">_d</span></a>.<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Types</span> <span class="id" title="var">p</span> <span class="id" title="var">q</span> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#RowPoly.R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="rVpoly"><span class="id" title="definition">rVpoly</span></a> <span class="id" title="var">v</span> := <a class="idref" href="mathcomp.algebra.poly.html#ae876944c1ac880ac0794dfc7e1a5c1d"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.poly.html#ae876944c1ac880ac0794dfc7e1a5c1d"><span class="id" title="notation">poly_</span></a><a class="idref" href="mathcomp.algebra.poly.html#ae876944c1ac880ac0794dfc7e1a5c1d"><span class="id" title="notation">(</span></a><span class="id" title="var">k</span> <a class="idref" href="mathcomp.algebra.poly.html#ae876944c1ac880ac0794dfc7e1a5c1d"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#RowPoly.d"><span class="id" title="variable">d</span></a><a class="idref" href="mathcomp.algebra.poly.html#ae876944c1ac880ac0794dfc7e1a5c1d"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.algebra.poly.html#ae876944c1ac880ac0794dfc7e1a5c1d"><span class="id" title="notation">(</span></a><span class="id" title="keyword">if</span> <a class="idref" href="mathcomp.ssreflect.eqtype.html#insub"><span class="id" title="definition">insub</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a> <span class="id" title="keyword">is</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#Some"><span class="id" title="constructor">Some</span></a> <span class="id" title="var">i</span> <span class="id" title="keyword">then</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a> 0 <span class="id" title="var">i</span> <span class="id" title="keyword">else</span> 0<a class="idref" href="mathcomp.algebra.poly.html#ae876944c1ac880ac0794dfc7e1a5c1d"><span class="id" title="notation">)</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="poly_rV"><span class="id" title="definition">poly_rV</span></a> <span class="id" title="var">p</span> := <a class="idref" href="mathcomp.algebra.matrix.html#5cbf3f9f063e1ee805c433f40b533623"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.matrix.html#5cbf3f9f063e1ee805c433f40b533623"><span class="id" title="notation">row_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#5cbf3f9f063e1ee805c433f40b533623"><span class="id" title="notation">(</span></a><span class="id" title="var">i</span> <a class="idref" href="mathcomp.algebra.matrix.html#5cbf3f9f063e1ee805c433f40b533623"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#RowPoly.d"><span class="id" title="variable">d</span></a><a class="idref" href="mathcomp.algebra.matrix.html#5cbf3f9f063e1ee805c433f40b533623"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="coef_rVpoly"><span class="id" title="lemma">coef_rVpoly</span></a> <span class="id" title="var">v</span> <span class="id" title="var">k</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">)`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <span class="id" title="keyword">if</span> <a class="idref" href="mathcomp.ssreflect.eqtype.html#insub"><span class="id" title="definition">insub</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a> <span class="id" title="keyword">is</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#Some"><span class="id" title="constructor">Some</span></a> <span class="id" title="var">i</span> <span class="id" title="keyword">then</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a> 0 <span class="id" title="var">i</span> <span class="id" title="keyword">else</span> 0.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="coef_rVpoly_ord"><span class="id" title="lemma">coef_rVpoly_ord</span></a> <span class="id" title="var">v</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_d</span></a>) : <a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">)`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a> 0 <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="rVpoly_delta"><span class="id" title="lemma">rVpoly_delta</span></a> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> (<a class="idref" href="mathcomp.algebra.matrix.html#delta_mx"><span class="id" title="definition">delta_mx</span></a> 0 <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.poly.html#9f0d1035fe3072a93b6e6065c1932def"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.poly.html#9f0d1035fe3072a93b6e6065c1932def"><span class="id" title="notation">X</span></a><a class="idref" href="mathcomp.algebra.poly.html#9f0d1035fe3072a93b6e6065c1932def"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="rVpolyK"><span class="id" title="lemma">rVpolyK</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#poly_rV"><span class="id" title="definition">poly_rV</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="poly_rV_K"><span class="id" title="lemma">poly_rV_K</span></a> <span class="id" title="var">p</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#RowPoly.d"><span class="id" title="variable">d</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#poly_rV"><span class="id" title="definition">poly_rV</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="poly_rV_is_linear"><span class="id" title="lemma">poly_rV_is_linear</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Linear.Exports.linear"><span class="id" title="abbreviation">linear</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#poly_rV"><span class="id" title="definition">poly_rV</span></a>.<br/> + <span class="id" title="keyword">Canonical</span> <span class="id" title="var">poly_rV_additive</span> := <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Additive.Exports.Additive"><span class="id" title="abbreviation">Additive</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#poly_rV_is_linear"><span class="id" title="lemma">poly_rV_is_linear</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">poly_rV_linear</span> := <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Linear.Exports.Linear"><span class="id" title="abbreviation">Linear</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#poly_rV_is_linear"><span class="id" title="lemma">poly_rV_is_linear</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="rVpoly_is_linear"><span class="id" title="lemma">rVpoly_is_linear</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Linear.Exports.linear"><span class="id" title="abbreviation">linear</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">rVpoly_additive</span> := <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Additive.Exports.Additive"><span class="id" title="abbreviation">Additive</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly_is_linear"><span class="id" title="lemma">rVpoly_is_linear</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">rVpoly_linear</span> := <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Linear.Exports.Linear"><span class="id" title="abbreviation">Linear</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly_is_linear"><span class="id" title="lemma">rVpoly_is_linear</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#RowPoly"><span class="id" title="section">RowPoly</span></a>.<br/> + +<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Resultant"><span class="id" title="section">Resultant</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="Resultant.R"><span class="id" title="variable">R</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Ring.Exports.ringType"><span class="id" title="abbreviation">ringType</span></a>) (<a name="Resultant.p"><span class="id" title="variable">p</span></a> <a name="Resultant.q"><span class="id" title="variable">q</span></a> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Let</span> <a name="Resultant.dS"><span class="id" title="variable">dS</span></a> := (<a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Resultant.q"><span class="id" title="variable">q</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">).-1</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Resultant.p"><span class="id" title="variable">p</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">).-1</span></a>)%<span class="id" title="var">N</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="Sylvester_mx"><span class="id" title="definition">Sylvester_mx</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#Resultant.R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_dS</span></a> := <a class="idref" href="mathcomp.algebra.matrix.html#col_mx"><span class="id" title="definition">col_mx</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#band"><span class="id" title="abbreviation">band</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Resultant.p"><span class="id" title="variable">p</span></a>) (<a class="idref" href="mathcomp.algebra.mxpoly.html#band"><span class="id" title="abbreviation">band</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Resultant.q"><span class="id" title="variable">q</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="Sylvester_mxE"><span class="id" title="lemma">Sylvester_mxE</span></a> (<span class="id" title="var">i</span> <span class="id" title="var">j</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_dS</span></a>) :<br/> + <span class="id" title="keyword">let</span> <span class="id" title="var">S_</span> <span class="id" title="var">r</span> <span class="id" title="var">k</span> := <a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#891e51846c7d1d63a9cb5458374cf308"><span class="id" title="notation">*+</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#891e51846c7d1d63a9cb5458374cf308"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#j"><span class="id" title="variable">j</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#891e51846c7d1d63a9cb5458374cf308"><span class="id" title="notation">)</span></a> <span class="id" title="tactic">in</span><br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#Sylvester_mx"><span class="id" title="definition">Sylvester_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <span class="id" title="keyword">match</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#split"><span class="id" title="definition">split</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> <span class="id" title="keyword">with</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inl"><span class="id" title="constructor">inl</span></a> <span class="id" title="var">k</span> ⇒ <a class="idref" href="mathcomp.algebra.mxpoly.html#S_"><span class="id" title="variable">S_</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Resultant.p"><span class="id" title="variable">p</span></a> <span class="id" title="var">k</span> | <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inr"><span class="id" title="constructor">inr</span></a> <span class="id" title="var">k</span> ⇒ <a class="idref" href="mathcomp.algebra.mxpoly.html#S_"><span class="id" title="variable">S_</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Resultant.q"><span class="id" title="variable">q</span></a> <span class="id" title="var">k</span> <span class="id" title="keyword">end</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="resultant"><span class="id" title="definition">resultant</span></a> := <a class="idref" href="mathcomp.algebra.matrix.html#eb4ffa5ff7cedec9d00c8af444fb9631"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.matrix.html#eb4ffa5ff7cedec9d00c8af444fb9631"><span class="id" title="notation">det</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Sylvester_mx"><span class="id" title="definition">Sylvester_mx</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#Resultant"><span class="id" title="section">Resultant</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="resultant_in_ideal"><span class="id" title="lemma">resultant_in_ideal</span></a> (<span class="id" title="var">R</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.ComRing.Exports.comRingType"><span class="id" title="abbreviation">comRingType</span></a>) (<span class="id" title="var">p</span> <span class="id" title="var">q</span> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>) :<br/> + <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#19ab5cfd7e4f60fa14f22b576013bd96"><span class="id" title="notation">></span></a> 1 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#19ab5cfd7e4f60fa14f22b576013bd96"><span class="id" title="notation">></span></a> 1 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#602b9943a639fb973abed6e2c7854421"><span class="id" title="notation">{</span></a><span class="id" title="var">uv</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#602b9943a639fb973abed6e2c7854421"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#d19c7eafd0e2d195d10df94b392087b5"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#602b9943a639fb973abed6e2c7854421"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#uv"><span class="id" title="variable">uv</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#c4877bbfe60d8f22b47ac99ace86216a"><span class="id" title="notation">.1</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d82a7d96d3659d805ffe732283716822"><span class="id" title="notation">∧</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#uv"><span class="id" title="variable">uv</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#f4827404159513e7fd691b60b7877737"><span class="id" title="notation">.2</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#602b9943a639fb973abed6e2c7854421"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#resultant"><span class="id" title="definition">resultant</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">)%:</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#uv"><span class="id" title="variable">uv</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#c4877bbfe60d8f22b47ac99ace86216a"><span class="id" title="notation">.1</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#22058a36a53dac65c94ca403bc62650a"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#ae4d81913e6239182a9ac7467ffde8cd"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#uv"><span class="id" title="variable">uv</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#f4827404159513e7fd691b60b7877737"><span class="id" title="notation">.2</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#22058a36a53dac65c94ca403bc62650a"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#602b9943a639fb973abed6e2c7854421"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="resultant_eq0"><span class="id" title="lemma">resultant_eq0</span></a> (<span class="id" title="var">R</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.IntegralDomain.Exports.idomainType"><span class="id" title="abbreviation">idomainType</span></a>) (<span class="id" title="var">p</span> <span class="id" title="var">q</span> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>) :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#resultant"><span class="id" title="definition">resultant</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> 0<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> (<a class="idref" href="mathcomp.algebra.polydiv.html#Pdiv.Idomain.gcdp"><span class="id" title="definition">gcdp</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a>) <a class="idref" href="mathcomp.ssreflect.ssrnat.html#19ab5cfd7e4f60fa14f22b576013bd96"><span class="id" title="notation">></span></a> 1<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="HornerMx"><span class="id" title="section">HornerMx</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="HornerMx.R"><span class="id" title="variable">R</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.ComRing.Exports.comRingType"><span class="id" title="abbreviation">comRingType</span></a>) (<a name="HornerMx.n'"><span class="id" title="variable">n'</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>).<br/> +<span class="id" title="keyword">Variable</span> <a name="HornerMx.A"><span class="id" title="variable">A</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#HornerMx.R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n</span></a>.<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Types</span> <span class="id" title="var">p</span> <span class="id" title="var">q</span> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#HornerMx.R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="horner_mx"><span class="id" title="definition">horner_mx</span></a> := <a class="idref" href="mathcomp.algebra.poly.html#horner_morph"><span class="id" title="definition">horner_morph</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">a</span> ⇒ <a class="idref" href="mathcomp.algebra.matrix.html#scalar_mx_comm"><span class="id" title="lemma">scalar_mx_comm</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#a"><span class="id" title="variable">a</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#HornerMx.A"><span class="id" title="variable">A</span></a>).<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">horner_mx_additive</span> := <a class="idref" href="mathcomp.algebra.ssralg.html#f4cde972a26515a86aeac58343f1e022"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#f4cde972a26515a86aeac58343f1e022"><span class="id" title="notation">additive</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#f4cde972a26515a86aeac58343f1e022"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#f4cde972a26515a86aeac58343f1e022"><span class="id" title="notation">]</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">horner_mx_rmorphism</span> := <a class="idref" href="mathcomp.algebra.ssralg.html#778d861598c34ba1d4bea8b9adaae863"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#778d861598c34ba1d4bea8b9adaae863"><span class="id" title="notation">rmorphism</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#778d861598c34ba1d4bea8b9adaae863"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#778d861598c34ba1d4bea8b9adaae863"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="horner_mx_C"><span class="id" title="lemma">horner_mx_C</span></a> <span class="id" title="var">a</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#a"><span class="id" title="variable">a</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#a"><span class="id" title="variable">a</span></a><a class="idref" href="mathcomp.algebra.matrix.html#6bc5aad53caab585f4bb088e10501342"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.matrix.html#6bc5aad53caab585f4bb088e10501342"><span class="id" title="notation">M</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="horner_mx_X"><span class="id" title="lemma">horner_mx_X</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">X</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#HornerMx.A"><span class="id" title="variable">A</span></a>. <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="horner_mxZ"><span class="id" title="lemma">horner_mxZ</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Linear.Exports.scalable"><span class="id" title="abbreviation">scalable</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">horner_mx_linear</span> := <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Linear.Exports.AddLinear"><span class="id" title="abbreviation">AddLinear</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mxZ"><span class="id" title="lemma">horner_mxZ</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">horner_mx_lrmorphism</span> := <a class="idref" href="mathcomp.algebra.ssralg.html#8900f6ae77a86586561e15965d5870c7"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#8900f6ae77a86586561e15965d5870c7"><span class="id" title="notation">lrmorphism</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#8900f6ae77a86586561e15965d5870c7"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#8900f6ae77a86586561e15965d5870c7"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="powers_mx"><span class="id" title="definition">powers_mx</span></a> <span class="id" title="var">d</span> := <a class="idref" href="mathcomp.algebra.matrix.html#31137a9382a4a6a96e5b27ab39a7efe6"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.matrix.html#31137a9382a4a6a96e5b27ab39a7efe6"><span class="id" title="notation">matrix_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#31137a9382a4a6a96e5b27ab39a7efe6"><span class="id" title="notation">(</span></a><span class="id" title="var">i</span> <a class="idref" href="mathcomp.algebra.matrix.html#31137a9382a4a6a96e5b27ab39a7efe6"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#d"><span class="id" title="variable">d</span></a><a class="idref" href="mathcomp.algebra.matrix.html#31137a9382a4a6a96e5b27ab39a7efe6"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#mxvec"><span class="id" title="definition">mxvec</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#HornerMx.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#fb22424322c3d7eb9b837dfca65ce21e"><span class="id" title="notation">^+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="horner_rVpoly"><span class="id" title="lemma">horner_rVpoly</span></a> <span class="id" title="var">m</span> (<span class="id" title="var">u</span> : <a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">rV_m</span></a>) :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#vec_mx"><span class="id" title="definition">vec_mx</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#9c6b777e699b0b93592b907e7450465e"><span class="id" title="notation">×</span></a><a class="idref" href="mathcomp.algebra.matrix.html#9c6b777e699b0b93592b907e7450465e"><span class="id" title="notation">m</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#powers_mx"><span class="id" title="definition">powers_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a>).<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#HornerMx"><span class="id" title="section">HornerMx</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="CharPoly"><span class="id" title="section">CharPoly</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="CharPoly.R"><span class="id" title="variable">R</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Ring.Exports.ringType"><span class="id" title="abbreviation">ringType</span></a>) (<a name="CharPoly.n"><span class="id" title="variable">n</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>) (<a name="CharPoly.A"><span class="id" title="variable">A</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n</span></a>).<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Types</span> <span class="id" title="var">p</span> <span class="id" title="var">q</span> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="char_poly_mx"><span class="id" title="definition">char_poly_mx</span></a> := <a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">X</span></a><a class="idref" href="mathcomp.algebra.matrix.html#6bc5aad53caab585f4bb088e10501342"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.matrix.html#6bc5aad53caab585f4bb088e10501342"><span class="id" title="notation">M</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#d70623330b2787db6b196e37db7d8f45"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#map_mx"><span class="id" title="definition">map_mx</span></a> (@<a class="idref" href="mathcomp.algebra.poly.html#polyC"><span class="id" title="definition">polyC</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.R"><span class="id" title="variable">R</span></a>) <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.A"><span class="id" title="variable">A</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="char_poly"><span class="id" title="definition">char_poly</span></a> := <a class="idref" href="mathcomp.algebra.matrix.html#eb4ffa5ff7cedec9d00c8af444fb9631"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.matrix.html#eb4ffa5ff7cedec9d00c8af444fb9631"><span class="id" title="notation">det</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly_mx"><span class="id" title="definition">char_poly_mx</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Let</span> <a name="CharPoly.diagA"><span class="id" title="variable">diagA</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">|</span></a> <span class="id" title="var">i</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">]</span></a>.<br/> +<span class="id" title="keyword">Let</span> <a name="CharPoly.size_diagA"><span class="id" title="variable">size_diagA</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.diagA"><span class="id" title="variable">diagA</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Let</span> <a name="CharPoly.split_diagA"><span class="id" title="variable">split_diagA</span></a> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">q</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#add995903469f3735748795c8f1b81bd"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#add995903469f3735748795c8f1b81bd"><span class="id" title="notation">prod_</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#add995903469f3735748795c8f1b81bd"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.algebra.ssralg.html#add995903469f3735748795c8f1b81bd"><span class="id" title="notation"><-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.diagA"><span class="id" title="variable">diagA</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#add995903469f3735748795c8f1b81bd"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#add995903469f3735748795c8f1b81bd"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">X</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#d70623330b2787db6b196e37db7d8f45"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">P</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#add995903469f3735748795c8f1b81bd"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#ae4d81913e6239182a9ac7467ffde8cd"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">.-1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="size_char_poly"><span class="id" title="lemma">size_char_poly</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="char_poly_monic"><span class="id" title="lemma">char_poly_monic</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">is</span></a> <a class="idref" href="mathcomp.algebra.poly.html#monic"><span class="id" title="definition">monic</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="char_poly_trace"><span class="id" title="lemma">char_poly_trace</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.n"><span class="id" title="variable">n</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#19ab5cfd7e4f60fa14f22b576013bd96"><span class="id" title="notation">></span></a> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_n</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">.-1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#941c6d086004545bd62614d0213e75e5"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#9e9debb16249584408eaef095f6716eb"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.matrix.html#9e9debb16249584408eaef095f6716eb"><span class="id" title="notation">tr</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="char_poly_det"><span class="id" title="lemma">char_poly_det</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_0</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#fb22424322c3d7eb9b837dfca65ce21e"><span class="id" title="notation">(</span></a>- 1<a class="idref" href="mathcomp.algebra.ssralg.html#fb22424322c3d7eb9b837dfca65ce21e"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#fb22424322c3d7eb9b837dfca65ce21e"><span class="id" title="notation">^+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.n"><span class="id" title="variable">n</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#22058a36a53dac65c94ca403bc62650a"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#eb4ffa5ff7cedec9d00c8af444fb9631"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.matrix.html#eb4ffa5ff7cedec9d00c8af444fb9631"><span class="id" title="notation">det</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly.A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#CharPoly"><span class="id" title="section">CharPoly</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mx_poly_ring_isom"><span class="id" title="lemma">mx_poly_ring_isom</span></a> (<span class="id" title="var">R</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Ring.Exports.ringType"><span class="id" title="abbreviation">ringType</span></a>) <span class="id" title="var">n'</span> (<span class="id" title="var">n</span> := <a class="idref" href="mathcomp.algebra.mxpoly.html#n'"><span class="id" title="variable">n'</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a>) :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">phi</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">rmorphism</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">}</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ca13a32469ebe56c9f4cc99d00e8eeba"><span class="id" title="notation">[/\</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#bijective"><span class="id" title="inductive">bijective</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#phi"><span class="id" title="variable">phi</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ca13a32469ebe56c9f4cc99d00e8eeba"><span class="id" title="notation">,</span></a><br/> + <span class="id" title="keyword">∀</span> <span class="id" title="var">p</span>, <a class="idref" href="mathcomp.algebra.mxpoly.html#phi"><span class="id" title="variable">phi</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><a class="idref" href="mathcomp.algebra.matrix.html#6bc5aad53caab585f4bb088e10501342"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.matrix.html#6bc5aad53caab585f4bb088e10501342"><span class="id" title="notation">M</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.poly.html#map_poly"><span class="id" title="definition">map_poly</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#scalar_mx"><span class="id" title="definition">scalar_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ca13a32469ebe56c9f4cc99d00e8eeba"><span class="id" title="notation">,</span></a><br/> + <span class="id" title="keyword">∀</span> <span class="id" title="var">A</span>, <a class="idref" href="mathcomp.algebra.mxpoly.html#phi"><span class="id" title="variable">phi</span></a> (<a class="idref" href="mathcomp.algebra.matrix.html#map_mx"><span class="id" title="definition">map_mx</span></a> <a class="idref" href="mathcomp.algebra.poly.html#polyC"><span class="id" title="definition">polyC</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">P</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ca13a32469ebe56c9f4cc99d00e8eeba"><span class="id" title="notation">&</span></a> <span class="id" title="keyword">∀</span> <span class="id" title="var">A</span> <span class="id" title="var">i</span> <span class="id" title="var">j</span> <span class="id" title="var">k</span>, <a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#phi"><span class="id" title="variable">phi</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">)`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_k</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#j"><span class="id" title="variable">j</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">)`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_k</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ca13a32469ebe56c9f4cc99d00e8eeba"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Theorem</span> <a name="Cayley_Hamilton"><span class="id" title="lemma">Cayley_Hamilton</span></a> (<span class="id" title="var">R</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.ComRing.Exports.comRingType"><span class="id" title="abbreviation">comRingType</span></a>) <span class="id" title="var">n'</span> (<span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n'</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a>) :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 0.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eigenvalue_root_char"><span class="id" title="lemma">eigenvalue_root_char</span></a> (<span class="id" title="var">F</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Field.Exports.fieldType"><span class="id" title="abbreviation">fieldType</span></a>) <span class="id" title="var">n</span> (<span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#F"><span class="id" title="variable">F</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n</span></a>) <span class="id" title="var">a</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxalgebra.html#eigenvalue"><span class="id" title="definition">eigenvalue</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#a"><span class="id" title="variable">a</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.poly.html#root"><span class="id" title="definition">root</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="mathcomp.algebra.mxpoly.html#a"><span class="id" title="variable">a</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="MinPoly"><span class="id" title="section">MinPoly</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="MinPoly.F"><span class="id" title="variable">F</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Field.Exports.fieldType"><span class="id" title="abbreviation">fieldType</span></a>) (<a name="MinPoly.n'"><span class="id" title="variable">n'</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>).<br/> +<span class="id" title="keyword">Variable</span> <a name="MinPoly.A"><span class="id" title="variable">A</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.F"><span class="id" title="variable">F</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n</span></a>.<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Types</span> <span class="id" title="var">p</span> <span class="id" title="var">q</span> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.F"><span class="id" title="variable">F</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Fact</span> <a name="degree_mxminpoly_proof"><span class="id" title="lemma">degree_mxminpoly_proof</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">d</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#2841ad707bf668c5fe86250d8f31a3f6"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#2841ad707bf668c5fe86250d8f31a3f6"><span class="id" title="notation">rank</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#2841ad707bf668c5fe86250d8f31a3f6"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#powers_mx"><span class="id" title="definition">powers_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#d"><span class="id" title="variable">d</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#2841ad707bf668c5fe86250d8f31a3f6"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#d"><span class="id" title="variable">d</span></a>.<br/> + <span class="id" title="keyword">Definition</span> <a name="degree_mxminpoly"><span class="id" title="definition">degree_mxminpoly</span></a> := <a class="idref" href="mathcomp.ssreflect.ssrnat.html#ex_minn"><span class="id" title="definition">ex_minn</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#degree_mxminpoly_proof"><span class="id" title="lemma">degree_mxminpoly_proof</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mxminpoly_nonconstant"><span class="id" title="lemma">mxminpoly_nonconstant</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#d"><span class="id" title="abbreviation">d</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#19ab5cfd7e4f60fa14f22b576013bd96"><span class="id" title="notation">></span></a> 0.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="minpoly_mx1"><span class="id" title="lemma">minpoly_mx1</span></a> : (1<a class="idref" href="mathcomp.algebra.matrix.html#6bc5aad53caab585f4bb088e10501342"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.matrix.html#6bc5aad53caab585f4bb088e10501342"><span class="id" title="notation">M</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Ad"><span class="id" title="abbreviation">Ad</span></a>)%<span class="id" title="var">MS</span>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="minpoly_mx_free"><span class="id" title="lemma">minpoly_mx_free</span></a> : <a class="idref" href="mathcomp.algebra.mxalgebra.html#row_free"><span class="id" title="definition">row_free</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Ad"><span class="id" title="abbreviation">Ad</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="horner_mx_mem"><span class="id" title="lemma">horner_mx_mem</span></a> <span class="id" title="var">p</span> : (<a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Ad"><span class="id" title="abbreviation">Ad</span></a>)%<span class="id" title="var">MS</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="mx_inv_horner"><span class="id" title="definition">mx_inv_horner</span></a> <span class="id" title="var">B</span> := <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> (<a class="idref" href="mathcomp.algebra.matrix.html#mxvec"><span class="id" title="definition">mxvec</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#9c6b777e699b0b93592b907e7450465e"><span class="id" title="notation">×</span></a><a class="idref" href="mathcomp.algebra.matrix.html#9c6b777e699b0b93592b907e7450465e"><span class="id" title="notation">m</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#pinvmx"><span class="id" title="definition">pinvmx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Ad"><span class="id" title="abbreviation">Ad</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mx_inv_horner0"><span class="id" title="lemma">mx_inv_horner0</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#mx_inv_horner"><span class="id" title="definition">mx_inv_horner</span></a> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 0.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mx_inv_hornerK"><span class="id" title="lemma">mx_inv_hornerK</span></a> <span class="id" title="var">B</span> : (<a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Ad"><span class="id" title="abbreviation">Ad</span></a>)%<span class="id" title="var">MS</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#mx_inv_horner"><span class="id" title="definition">mx_inv_horner</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="minpoly_mxM"><span class="id" title="lemma">minpoly_mxM</span></a> <span class="id" title="var">B</span> <span class="id" title="var">C</span> : (<a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Ad"><span class="id" title="abbreviation">Ad</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#C"><span class="id" title="variable">C</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Ad"><span class="id" title="abbreviation">Ad</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#22058a36a53dac65c94ca403bc62650a"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#C"><span class="id" title="variable">C</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#bfc118b745d1a8ee504472dad1db645c"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Ad"><span class="id" title="abbreviation">Ad</span></a>)%<span class="id" title="var">MS</span>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="minpoly_mx_ring"><span class="id" title="lemma">minpoly_mx_ring</span></a> : <a class="idref" href="mathcomp.algebra.mxalgebra.html#mxring"><span class="id" title="definition">mxring</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#Ad"><span class="id" title="abbreviation">Ad</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="mxminpoly"><span class="id" title="definition">mxminpoly</span></a> := <a class="idref" href="mathcomp.algebra.poly.html#9f0d1035fe3072a93b6e6065c1932def"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.poly.html#9f0d1035fe3072a93b6e6065c1932def"><span class="id" title="notation">X</span></a><a class="idref" href="mathcomp.algebra.poly.html#9f0d1035fe3072a93b6e6065c1932def"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#d"><span class="id" title="abbreviation">d</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#d70623330b2787db6b196e37db7d8f45"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#mx_inv_horner"><span class="id" title="definition">mx_inv_horner</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#fb22424322c3d7eb9b837dfca65ce21e"><span class="id" title="notation">^+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#d"><span class="id" title="abbreviation">d</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="size_mxminpoly"><span class="id" title="lemma">size_mxminpoly</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p_A"><span class="id" title="abbreviation">p_A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#d"><span class="id" title="abbreviation">d</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mxminpoly_monic"><span class="id" title="lemma">mxminpoly_monic</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#p_A"><span class="id" title="abbreviation">p_A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">is</span></a> <a class="idref" href="mathcomp.algebra.poly.html#monic"><span class="id" title="definition">monic</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="size_mod_mxminpoly"><span class="id" title="lemma">size_mod_mxminpoly</span></a> <span class="id" title="var">p</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.polydiv.html#538b21ac9fb9938cd88200e5780e8f9d"><span class="id" title="notation">%%</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p_A"><span class="id" title="abbreviation">p_A</span></a>) <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#d"><span class="id" title="abbreviation">d</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mx_root_minpoly"><span class="id" title="lemma">mx_root_minpoly</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p_A"><span class="id" title="abbreviation">p_A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 0.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="horner_rVpolyK"><span class="id" title="lemma">horner_rVpolyK</span></a> (<span class="id" title="var">u</span> : <a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">rV_d</span></a>) :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#mx_inv_horner"><span class="id" title="definition">mx_inv_horner</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>)) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="horner_mxK"><span class="id" title="lemma">horner_mxK</span></a> <span class="id" title="var">p</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#mx_inv_horner"><span class="id" title="definition">mx_inv_horner</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.polydiv.html#538b21ac9fb9938cd88200e5780e8f9d"><span class="id" title="notation">%%</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p_A"><span class="id" title="abbreviation">p_A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mxminpoly_min"><span class="id" title="lemma">mxminpoly_min</span></a> <span class="id" title="var">p</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p_A"><span class="id" title="abbreviation">p_A</span></a> <a class="idref" href="mathcomp.algebra.polydiv.html#8d02531a91f8648b92789372c052c0ad"><span class="id" title="notation">%|</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="horner_rVpoly_inj"><span class="id" title="lemma">horner_rVpoly_inj</span></a> : @<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#1ce49b162eb757fc4a2e0ce4df0ee5cd"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#1ce49b162eb757fc4a2e0ce4df0ee5cd"><span class="id" title="notation">M_n</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">rV_d</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#1b4394c5c1740ef3dc9e4224084970bb"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#1b4394c5c1740ef3dc9e4224084970bb"><span class="id" title="notation">o</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mxminpoly_linear_is_scalar"><span class="id" title="lemma">mxminpoly_linear_is_scalar</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#d"><span class="id" title="abbreviation">d</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> 1<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#is_scalar_mx"><span class="id" title="definition">is_scalar_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mxminpoly_dvd_char"><span class="id" title="lemma">mxminpoly_dvd_char</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#p_A"><span class="id" title="abbreviation">p_A</span></a> <a class="idref" href="mathcomp.algebra.polydiv.html#8d02531a91f8648b92789372c052c0ad"><span class="id" title="notation">%|</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eigenvalue_root_min"><span class="id" title="lemma">eigenvalue_root_min</span></a> <span class="id" title="var">a</span> : <a class="idref" href="mathcomp.algebra.mxalgebra.html#eigenvalue"><span class="id" title="definition">eigenvalue</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#a"><span class="id" title="variable">a</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.poly.html#root"><span class="id" title="definition">root</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p_A"><span class="id" title="abbreviation">p_A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#a"><span class="id" title="variable">a</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#MinPoly"><span class="id" title="section">MinPoly</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + Parametricity. +</div> +<div class="code"> +<span class="id" title="keyword">Section</span> <a name="MapRingMatrix"><span class="id" title="section">MapRingMatrix</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="MapRingMatrix.aR"><span class="id" title="variable">aR</span></a> <a name="MapRingMatrix.rR"><span class="id" title="variable">rR</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Ring.Exports.ringType"><span class="id" title="abbreviation">ringType</span></a>) (<a name="MapRingMatrix.f"><span class="id" title="variable">f</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">rmorphism</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#aR"><span class="id" title="variable">aR</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rR"><span class="id" title="variable">rR</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">}</span></a>).<br/> +<span class="id" title="keyword">Variables</span> (<a name="MapRingMatrix.d"><span class="id" title="variable">d</span></a> <a name="MapRingMatrix.n"><span class="id" title="variable">n</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>) (<a name="MapRingMatrix.A"><span class="id" title="variable">A</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MapRingMatrix.aR"><span class="id" title="variable">aR</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="map_rVpoly"><span class="id" title="lemma">map_rVpoly</span></a> (<span class="id" title="var">u</span> : <a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">rV_d</span></a>) : <a class="idref" href="mathcomp.algebra.mxpoly.html#fp"><span class="id" title="abbreviation">fp</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rVpoly"><span class="id" title="definition">rVpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#9f6c421a139de435ca847198e46df8c0"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#9f6c421a139de435ca847198e46df8c0"><span class="id" title="notation">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="map_poly_rV"><span class="id" title="lemma">map_poly_rV</span></a> <span class="id" title="var">p</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#9f6c421a139de435ca847198e46df8c0"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#poly_rV"><span class="id" title="definition">poly_rV</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#9f6c421a139de435ca847198e46df8c0"><span class="id" title="notation">)^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#9f6c421a139de435ca847198e46df8c0"><span class="id" title="notation">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#poly_rV"><span class="id" title="definition">poly_rV</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#fp"><span class="id" title="abbreviation">fp</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:></span></a> <a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">rV_d</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="map_char_poly_mx"><span class="id" title="lemma">map_char_poly_mx</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#map_mx"><span class="id" title="definition">map_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#fp"><span class="id" title="abbreviation">fp</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly_mx"><span class="id" title="definition">char_poly_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapRingMatrix.A"><span class="id" title="variable">A</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly_mx"><span class="id" title="definition">char_poly_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapRingMatrix.A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#9f6c421a139de435ca847198e46df8c0"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#9f6c421a139de435ca847198e46df8c0"><span class="id" title="notation">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="map_char_poly"><span class="id" title="lemma">map_char_poly</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#fp"><span class="id" title="abbreviation">fp</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapRingMatrix.A"><span class="id" title="variable">A</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#char_poly"><span class="id" title="definition">char_poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapRingMatrix.A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#9f6c421a139de435ca847198e46df8c0"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#9f6c421a139de435ca847198e46df8c0"><span class="id" title="notation">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapRingMatrix"><span class="id" title="section">MapRingMatrix</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="MapResultant"><span class="id" title="section">MapResultant</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="map_resultant"><span class="id" title="lemma">map_resultant</span></a> (<span class="id" title="var">aR</span> <span class="id" title="var">rR</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Ring.Exports.ringType"><span class="id" title="abbreviation">ringType</span></a>) (<span class="id" title="var">f</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">rmorphism</span></a> <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#aR"><span class="id" title="variable">aR</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rR"><span class="id" title="variable">rR</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">}</span></a>) <span class="id" title="var">p</span> <span class="id" title="var">q</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.algebra.poly.html#lead_coef"><span class="id" title="definition">lead_coef</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>) <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.algebra.poly.html#lead_coef"><span class="id" title="definition">lead_coef</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a>) <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#resultant"><span class="id" title="definition">resultant</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a>)<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#resultant"><span class="id" title="definition">resultant</span></a> (<a class="idref" href="mathcomp.algebra.poly.html#map_poly"><span class="id" title="definition">map_poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>) (<a class="idref" href="mathcomp.algebra.poly.html#map_poly"><span class="id" title="definition">map_poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a>).<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapResultant"><span class="id" title="section">MapResultant</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="MapComRing"><span class="id" title="section">MapComRing</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="MapComRing.aR"><span class="id" title="variable">aR</span></a> <a name="MapComRing.rR"><span class="id" title="variable">rR</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.ComRing.Exports.comRingType"><span class="id" title="abbreviation">comRingType</span></a>) (<a name="MapComRing.f"><span class="id" title="variable">f</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">rmorphism</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#aR"><span class="id" title="variable">aR</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rR"><span class="id" title="variable">rR</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">}</span></a>).<br/> +<span class="id" title="keyword">Variables</span> (<a name="MapComRing.n'"><span class="id" title="variable">n'</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>) (<a name="MapComRing.A"><span class="id" title="variable">A</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MapComRing.aR"><span class="id" title="variable">aR</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n'</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="map_powers_mx"><span class="id" title="lemma">map_powers_mx</span></a> <span class="id" title="var">e</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#powers_mx"><span class="id" title="definition">powers_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapComRing.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">)^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#powers_mx"><span class="id" title="definition">powers_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapComRing.A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">f</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="map_horner_mx"><span class="id" title="lemma">map_horner_mx</span></a> <span class="id" title="var">p</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapComRing.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">)^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#horner_mx"><span class="id" title="definition">horner_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapComRing.A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#434323eabd83251a96adefe7e9c505c5"><span class="id" title="notation">f</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#fp"><span class="id" title="abbreviation">fp</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>).<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapComRing"><span class="id" title="section">MapComRing</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="MapField"><span class="id" title="section">MapField</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="MapField.aF"><span class="id" title="variable">aF</span></a> <a name="MapField.rF"><span class="id" title="variable">rF</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Field.Exports.fieldType"><span class="id" title="abbreviation">fieldType</span></a>) (<a name="MapField.f"><span class="id" title="variable">f</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">rmorphism</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#aF"><span class="id" title="variable">aF</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#rF"><span class="id" title="variable">rF</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">}</span></a>).<br/> +<span class="id" title="keyword">Variables</span> (<a name="MapField.n'"><span class="id" title="variable">n'</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>) (<a name="MapField.A"><span class="id" title="variable">A</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MapField.aF"><span class="id" title="variable">aF</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d837c1a28d718b1ce93b8aa0ad2f20fe"><span class="id" title="notation">_n'</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="degree_mxminpoly_map"><span class="id" title="lemma">degree_mxminpoly_map</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#degree_mxminpoly"><span class="id" title="definition">degree_mxminpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapField.A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#041fb544cfc5686d5af02f919429c54f"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#041fb544cfc5686d5af02f919429c54f"><span class="id" title="notation">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#degree_mxminpoly"><span class="id" title="definition">degree_mxminpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapField.A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mxminpoly_map"><span class="id" title="lemma">mxminpoly_map</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#mxminpoly"><span class="id" title="definition">mxminpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapField.A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#041fb544cfc5686d5af02f919429c54f"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#041fb544cfc5686d5af02f919429c54f"><span class="id" title="notation">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#fp"><span class="id" title="abbreviation">fp</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#mxminpoly"><span class="id" title="definition">mxminpoly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapField.A"><span class="id" title="variable">A</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="map_mx_inv_horner"><span class="id" title="lemma">map_mx_inv_horner</span></a> <span class="id" title="var">u</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#fp"><span class="id" title="abbreviation">fp</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#mx_inv_horner"><span class="id" title="definition">mx_inv_horner</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapField.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#mx_inv_horner"><span class="id" title="definition">mx_inv_horner</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapField.A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#041fb544cfc5686d5af02f919429c54f"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#041fb544cfc5686d5af02f919429c54f"><span class="id" title="notation">f</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#041fb544cfc5686d5af02f919429c54f"><span class="id" title="notation">^</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#041fb544cfc5686d5af02f919429c54f"><span class="id" title="notation">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#MapField"><span class="id" title="section">MapField</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="IntegralOverRing"><span class="id" title="section">IntegralOverRing</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="integralOver"><span class="id" title="definition">integralOver</span></a> (<span class="id" title="var">R</span> <span class="id" title="var">K</span> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Ring.Exports.ringType"><span class="id" title="abbreviation">ringType</span></a>) (<span class="id" title="var">RtoK</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#K"><span class="id" title="variable">K</span></a>) (<span class="id" title="var">z</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#K"><span class="id" title="variable">K</span></a>) :=<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">p</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">is</span></a> <a class="idref" href="mathcomp.algebra.poly.html#monic"><span class="id" title="definition">monic</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.algebra.poly.html#root"><span class="id" title="definition">root</span></a> (<a class="idref" href="mathcomp.algebra.poly.html#map_poly"><span class="id" title="definition">map_poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>) <a class="idref" href="mathcomp.algebra.mxpoly.html#z"><span class="id" title="variable">z</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="integralRange"><span class="id" title="definition">integralRange</span></a> <span class="id" title="var">R</span> <span class="id" title="var">K</span> <span class="id" title="var">RtoK</span> := <span class="id" title="keyword">∀</span> <span class="id" title="var">z</span>, @<a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#K"><span class="id" title="variable">K</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#z"><span class="id" title="variable">z</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="IntegralOverRing.B"><span class="id" title="variable">B</span></a> <a name="IntegralOverRing.R"><span class="id" title="variable">R</span></a> <a name="IntegralOverRing.K"><span class="id" title="variable">K</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Ring.Exports.ringType"><span class="id" title="abbreviation">ringType</span></a>) (<a name="IntegralOverRing.BtoR"><span class="id" title="variable">BtoR</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a>) (<a name="IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">rmorphism</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#K"><span class="id" title="variable">K</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">}</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_rmorph"><span class="id" title="lemma">integral_rmorph</span></a> <span class="id" title="var">x</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.BtoR"><span class="id" title="variable">BtoR</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#1b4394c5c1740ef3dc9e4224084970bb"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#1b4394c5c1740ef3dc9e4224084970bb"><span class="id" title="notation">o</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.BtoR"><span class="id" title="variable">BtoR</span></a>) (<a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_id"><span class="id" title="lemma">integral_id</span></a> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_nat"><span class="id" title="lemma">integral_nat</span></a> <span class="id" title="var">n</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#af5c1d7e13410a0a6c3dff5441ac8477"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#af5c1d7e13410a0a6c3dff5441ac8477"><span class="id" title="notation">R</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral0"><span class="id" title="lemma">integral0</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a> 0. <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral1"><span class="id" title="lemma">integral1</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a> 1. <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_poly"><span class="id" title="lemma">integral_poly</span></a> (<span class="id" title="var">p</span> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.K"><span class="id" title="variable">K</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>) :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#df1ced36fc33ce188051218bca314374"><span class="id" title="notation">(</span></a><span class="id" title="keyword">∀</span> <span class="id" title="var">i</span>, <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_i</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#df1ced36fc33ce188051218bca314374"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#df1ced36fc33ce188051218bca314374"><span class="id" title="notation">↔</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#4509b22bf26e3d6d771897e22bd8bc8f"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.K"><span class="id" title="variable">K</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralRange"><span class="id" title="definition">integralRange</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing.RtoK"><span class="id" title="variable">RtoK</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverRing"><span class="id" title="section">IntegralOverRing</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="IntegralOverComRing"><span class="id" title="section">IntegralOverComRing</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="IntegralOverComRing.R"><span class="id" title="variable">R</span></a> <a name="IntegralOverComRing.K"><span class="id" title="variable">K</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.ComRing.Exports.comRingType"><span class="id" title="abbreviation">comRingType</span></a>) (<a name="IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">rmorphism</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#R"><span class="id" title="variable">R</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#K"><span class="id" title="variable">K</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">}</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_horner_root"><span class="id" title="lemma">integral_horner_root</span></a> <span class="id" title="var">w</span> (<span class="id" title="var">p</span> <span class="id" title="var">q</span> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.K"><span class="id" title="variable">K</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>) :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">is</span></a> <a class="idref" href="mathcomp.algebra.poly.html#monic"><span class="id" title="definition">monic</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.poly.html#root"><span class="id" title="definition">root</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#w"><span class="id" title="variable">w</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#4509b22bf26e3d6d771897e22bd8bc8f"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.K"><span class="id" title="variable">K</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralRange"><span class="id" title="definition">integralRange</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#4509b22bf26e3d6d771897e22bd8bc8f"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.K"><span class="id" title="variable">K</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralRange"><span class="id" title="definition">integralRange</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#q"><span class="id" title="variable">q</span></a><a class="idref" href="mathcomp.algebra.poly.html#9956cd3926e9966aa6979e465e39d037"><span class="id" title="notation">.[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#w"><span class="id" title="variable">w</span></a><a class="idref" href="mathcomp.algebra.poly.html#9956cd3926e9966aa6979e465e39d037"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_root_monic"><span class="id" title="lemma">integral_root_monic</span></a> <span class="id" title="var">u</span> <span class="id" title="var">p</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#e6408d45e92e642f7d1652448339ba09"><span class="id" title="notation">is</span></a> <a class="idref" href="mathcomp.algebra.poly.html#monic"><span class="id" title="definition">monic</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.poly.html#root"><span class="id" title="definition">root</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#4509b22bf26e3d6d771897e22bd8bc8f"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.K"><span class="id" title="variable">K</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralRange"><span class="id" title="definition">integralRange</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Hint Resolve</span> (<a class="idref" href="mathcomp.algebra.mxpoly.html#integral0"><span class="id" title="lemma">integral0</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a>) (<a class="idref" href="mathcomp.algebra.mxpoly.html#integral1"><span class="id" title="lemma">integral1</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a>) (@<a class="idref" href="mathcomp.algebra.poly.html#monicXsubC"><span class="id" title="lemma">monicXsubC</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.K"><span class="id" title="variable">K</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Let</span> <a name="IntegralOverComRing.XsubC0"><span class="id" title="variable">XsubC0</span></a> (<span class="id" title="var">u</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.K"><span class="id" title="variable">K</span></a>) : <a class="idref" href="mathcomp.algebra.poly.html#root"><span class="id" title="definition">root</span></a> (<a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">X</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#d70623330b2787db6b196e37db7d8f45"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">P</span></a>) <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>. <br/> +<span class="id" title="keyword">Let</span> <a name="IntegralOverComRing.intR_XsubC"><span class="id" title="variable">intR_XsubC</span></a> <span class="id" title="var">u</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> (<a class="idref" href="mathcomp.algebra.ssralg.html#941c6d086004545bd62614d0213e75e5"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.poly.html#ffd3fc7e3c529f4febe87040923e7332"><span class="id" title="notation">X</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#d70623330b2787db6b196e37db7d8f45"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">%:</span></a><a class="idref" href="mathcomp.algebra.poly.html#5d46c3ff21505243f65fdae89313c246"><span class="id" title="notation">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#4509b22bf26e3d6d771897e22bd8bc8f"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.K"><span class="id" title="variable">K</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralRange"><span class="id" title="definition">integralRange</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_opp"><span class="id" title="lemma">integral_opp</span></a> <span class="id" title="var">u</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> (<a class="idref" href="mathcomp.algebra.ssralg.html#941c6d086004545bd62614d0213e75e5"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_horner"><span class="id" title="lemma">integral_horner</span></a> (<span class="id" title="var">p</span> : <a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.K"><span class="id" title="variable">K</span></a><a class="idref" href="mathcomp.algebra.poly.html#699040ddc0986f520cece215f531d947"><span class="id" title="notation">}</span></a>) <span class="id" title="var">u</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#4509b22bf26e3d6d771897e22bd8bc8f"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.K"><span class="id" title="variable">K</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralRange"><span class="id" title="definition">integralRange</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><a class="idref" href="mathcomp.algebra.poly.html#9956cd3926e9966aa6979e465e39d037"><span class="id" title="notation">.[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a><a class="idref" href="mathcomp.algebra.poly.html#9956cd3926e9966aa6979e465e39d037"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_sub"><span class="id" title="lemma">integral_sub</span></a> <span class="id" title="var">u</span> <span class="id" title="var">v</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#d70623330b2787db6b196e37db7d8f45"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_add"><span class="id" title="lemma">integral_add</span></a> <span class="id" title="var">u</span> <span class="id" title="var">v</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#ae4d81913e6239182a9ac7467ffde8cd"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_mul"><span class="id" title="lemma">integral_mul</span></a> <span class="id" title="var">u</span> <span class="id" title="var">v</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing.RtoK"><span class="id" title="variable">RtoK</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#22058a36a53dac65c94ca403bc62650a"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a>).<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverComRing"><span class="id" title="section">IntegralOverComRing</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="IntegralOverField"><span class="id" title="section">IntegralOverField</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="IntegralOverField.F"><span class="id" title="variable">F</span></a> <a name="IntegralOverField.E"><span class="id" title="variable">E</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Field.Exports.fieldType"><span class="id" title="abbreviation">fieldType</span></a>) (<a name="IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">{</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">rmorphism</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#F"><span class="id" title="variable">F</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#E"><span class="id" title="variable">E</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#0c709ebe43ddbd7719f75250a7b916d9"><span class="id" title="notation">}</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="algebraicOver"><span class="id" title="definition">algebraicOver</span></a> (<span class="id" title="var">fFtoE</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.F"><span class="id" title="variable">F</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.E"><span class="id" title="variable">E</span></a>) <span class="id" title="var">u</span> :=<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">p</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.algebra.poly.html#root"><span class="id" title="definition">root</span></a> (<a class="idref" href="mathcomp.algebra.poly.html#map_poly"><span class="id" title="definition">map_poly</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#fFtoE"><span class="id" title="variable">fFtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a>) <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="mk_mon"><span class="id" title="abbreviation">mk_mon</span></a> <span class="id" title="var">p</span> := (<a class="idref" href="mathcomp.algebra.ssralg.html#f3016d4e55aa553d3e912592ec65e342"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.poly.html#lead_coef"><span class="id" title="definition">lead_coef</span></a> <span class="id" title="var">p</span><a class="idref" href="mathcomp.algebra.ssralg.html#f3016d4e55aa553d3e912592ec65e342"><span class="id" title="notation">)^-1</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#81f8078534dcbb7e13a32d292f766525"><span class="id" title="notation">*:</span></a> <span class="id" title="var">p</span>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_algebraic"><span class="id" title="lemma">integral_algebraic</span></a> <span class="id" title="var">u</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#df1ced36fc33ce188051218bca314374"><span class="id" title="notation">↔</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="algebraic_id"><span class="id" title="lemma">algebraic_id</span></a> <span class="id" title="var">a</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#a"><span class="id" title="variable">a</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="algebraic0"><span class="id" title="lemma">algebraic0</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> 0.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="algebraic1"><span class="id" title="lemma">algebraic1</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> 1.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="algebraic_opp"><span class="id" title="lemma">algebraic_opp</span></a> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> (<a class="idref" href="mathcomp.algebra.ssralg.html#941c6d086004545bd62614d0213e75e5"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="algebraic_add"><span class="id" title="lemma">algebraic_add</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#ae4d81913e6239182a9ac7467ffde8cd"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="algebraic_sub"><span class="id" title="lemma">algebraic_sub</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#d70623330b2787db6b196e37db7d8f45"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="algebraic_mul"><span class="id" title="lemma">algebraic_mul</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#22058a36a53dac65c94ca403bc62650a"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="algebraic_inv"><span class="id" title="lemma">algebraic_inv</span></a> <span class="id" title="var">u</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#f3016d4e55aa553d3e912592ec65e342"><span class="id" title="notation">^-1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="algebraic_div"><span class="id" title="lemma">algebraic_div</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#algebraicOver"><span class="id" title="definition">algebraicOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#4fa85b0aa898c2a7e18c3b076438c2e7"><span class="id" title="notation">/</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_inv"><span class="id" title="lemma">integral_inv</span></a> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#f3016d4e55aa553d3e912592ec65e342"><span class="id" title="notation">^-1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_div"><span class="id" title="lemma">integral_div</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#4fa85b0aa898c2a7e18c3b076438c2e7"><span class="id" title="notation">/</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#y"><span class="id" title="variable">y</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="integral_root"><span class="id" title="lemma">integral_root</span></a> <span class="id" title="var">p</span> <span class="id" title="var">u</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.poly.html#root"><span class="id" title="definition">root</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#4509b22bf26e3d6d771897e22bd8bc8f"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.E"><span class="id" title="variable">E</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#integralRange"><span class="id" title="definition">integralRange</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#integralOver"><span class="id" title="definition">integralOver</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField.FtoE"><span class="id" title="variable">FtoE</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#IntegralOverField"><span class="id" title="section">IntegralOverField</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + Lifting term, formula, envs and eval to matrices. Wlog, and for the sake + of simplicity, we only lift (tensor) envs to row vectors; we can always + use mxvec/vec_mx to store and retrieve matrices. + We don't provide definitions for addition, subtraction, scaling, etc, + because they have simple matrix expressions. +</div> +<div class="code"> +<span class="id" title="keyword">Module</span> <a name="MatrixFormula"><span class="id" title="module">MatrixFormula</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="MatrixFormula.MatrixFormula"><span class="id" title="section">MatrixFormula</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="MatrixFormula.MatrixFormula.F"><span class="id" title="variable">F</span></a> : <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Field.Exports.fieldType"><span class="id" title="abbreviation">fieldType</span></a>.<br/> + +<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> (<span class="id" title="var">e</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.F"><span class="id" title="variable">F</span></a>) := <a class="idref" href="mathcomp.algebra.matrix.html#map_mx"><span class="id" title="definition">map_mx</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval"><span class="id" title="abbreviation">eval</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="MatrixFormula.mx_term"><span class="id" title="definition">mx_term</span></a> := <a class="idref" href="mathcomp.algebra.matrix.html#map_mx"><span class="id" title="definition">map_mx</span></a> (@<a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Const"><span class="id" title="constructor">GRing.Const</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.F"><span class="id" title="variable">F</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.eval_mx_term"><span class="id" title="lemma">eval_mx_term</span></a> <span class="id" title="var">e</span> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">M_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">)</span></a>) : <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.mx_term"><span class="id" title="definition">mx_term</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="MatrixFormula.mulmx_term"><span class="id" title="definition">mulmx_term</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> <span class="id" title="var">p</span> (<span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.term"><span class="id" title="abbreviation">term</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">)</span></a>) (<span class="id" title="var">B</span> : <a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">M_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">)</span></a>) :=<br/> + <a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">matrix_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">(</span></a><span class="id" title="var">i</span><a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">,</span></a> <span class="id" title="var">k</span><a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">)</span></a> (<a class="idref" href="mathcomp.ssreflect.bigop.html#a0ddbff8fbef0617dd5dab072904e591"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#a0ddbff8fbef0617dd5dab072904e591"><span class="id" title="notation">big</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#a0ddbff8fbef0617dd5dab072904e591"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.Add"><span class="id" title="abbreviation">Add</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#a0ddbff8fbef0617dd5dab072904e591"><span class="id" title="notation">/</span></a>0<a class="idref" href="mathcomp.ssreflect.bigop.html#a0ddbff8fbef0617dd5dab072904e591"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#a0ddbff8fbef0617dd5dab072904e591"><span class="id" title="notation">_j</span></a> <a class="idref" href="mathcomp.ssreflect.bigop.html#a0ddbff8fbef0617dd5dab072904e591"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#9be2d223eee11d745162c85997d077aa"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#a0ddbff8fbef0617dd5dab072904e591"><span class="id" title="notation">)</span></a>)%<span class="id" title="var">T</span>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.eval_mulmx"><span class="id" title="lemma">eval_mulmx</span></a> <span class="id" title="var">e</span> <span class="id" title="var">m</span> <span class="id" title="var">n</span> <span class="id" title="var">p</span> (<span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.term"><span class="id" title="abbreviation">term</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">)</span></a>) (<span class="id" title="var">B</span> : <a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">M_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#p"><span class="id" title="variable">p</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">)</span></a>) :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.mulmx_term"><span class="id" title="definition">mulmx_term</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#9c6b777e699b0b93592b907e7450465e"><span class="id" title="notation">×</span></a><a class="idref" href="mathcomp.algebra.matrix.html#9c6b777e699b0b93592b907e7450465e"><span class="id" title="notation">m</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#B"><span class="id" title="variable">B</span></a>.<br/> + +<br/> + +<br/> +<span class="id" title="keyword">Let</span> <a name="MatrixFormula.MatrixFormula.Schur"><span class="id" title="variable">Schur</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.term"><span class="id" title="abbreviation">term</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">(</span></a>1 <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">,</span></a> 1 <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">)</span></a>) (<span class="id" title="var">a</span> := <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> 0 0) :=<br/> + <a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">matrix_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">(</span></a><span class="id" title="var">i</span><a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">,</span></a> <span class="id" title="var">j</span><a class="idref" href="mathcomp.algebra.matrix.html#2c5155dd82e4555ad208e1f95e711672"><span class="id" title="notation">)</span></a> (<a class="idref" href="mathcomp.algebra.matrix.html#drsubmx"><span class="id" title="definition">drsubmx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#4a62fcd6d8b92bd91e210969e6044405"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#a"><span class="id" title="variable">a</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#945cbc254830540ee68b2936209ea6c1"><span class="id" title="notation">^-1</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#9be2d223eee11d745162c85997d077aa"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#dlsubmx"><span class="id" title="definition">dlsubmx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> 0%<span class="id" title="var">R</span> <a class="idref" href="mathcomp.algebra.ssralg.html#9be2d223eee11d745162c85997d077aa"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#ursubmx"><span class="id" title="definition">ursubmx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> 0%<span class="id" title="var">R</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#j"><span class="id" title="variable">j</span></a>)%<span class="id" title="var">T</span>.<br/> + +<br/> +<span class="id" title="keyword">Fixpoint</span> <a name="MatrixFormula.mxrank_form"><span class="id" title="definition">mxrank_form</span></a> (<span class="id" title="var">r</span> <span class="id" title="var">m</span> <span class="id" title="var">n</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>) : <a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">M_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.form"><span class="id" title="abbreviation">form</span></a> :=<br/> + <span class="id" title="keyword">match</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a>, <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a> <span class="id" title="keyword">return</span> <a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">M_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.form"><span class="id" title="abbreviation">form</span></a> <span class="id" title="keyword">with</span><br/> + | <span class="id" title="var">m'</span><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a>, <span class="id" title="var">n'</span><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a> ⇒ <span class="id" title="keyword">fun</span> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">M_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">(</span></a>1 <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <span class="id" title="var">m'</span><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">,</span></a> 1 <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <span class="id" title="var">n'</span><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">)</span></a> ⇒<br/> + <span class="id" title="keyword">let</span> <span class="id" title="var">nzA</span> <span class="id" title="var">k</span> := <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#c4877bbfe60d8f22b47ac99ace86216a"><span class="id" title="notation">.1</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#f4827404159513e7fd691b60b7877737"><span class="id" title="notation">.2</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#e55bf22d80797140224ba2d3a71d012f"><span class="id" title="notation">!=</span></a> 0 <span class="id" title="tactic">in</span><br/> + <span class="id" title="keyword">let</span> <span class="id" title="var">xSchur</span> <span class="id" title="var">k</span> := <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Schur"><span class="id" title="variable">Schur</span></a> (<a class="idref" href="mathcomp.algebra.matrix.html#xrow"><span class="id" title="definition">xrow</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#c4877bbfe60d8f22b47ac99ace86216a"><span class="id" title="notation">.1</span></a> 0%<span class="id" title="var">R</span> (<a class="idref" href="mathcomp.algebra.matrix.html#xcol"><span class="id" title="definition">xcol</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#f4827404159513e7fd691b60b7877737"><span class="id" title="notation">.2</span></a> 0%<span class="id" title="var">R</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>)) <span class="id" title="tactic">in</span><br/> + <span class="id" title="keyword">let</span> <span class="id" title="var">recf</span> <span class="id" title="var">k</span> := <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.Bool"><span class="id" title="abbreviation">Bool</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#19ab5cfd7e4f60fa14f22b576013bd96"><span class="id" title="notation">></span></a> 0) <a class="idref" href="mathcomp.algebra.ssralg.html#34bfd1085795ea0dabf4707f6dcc9f24"><span class="id" title="notation">∧</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#mxrank_form"><span class="id" title="definition">mxrank_form</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">.-1</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#xSchur"><span class="id" title="variable">xSchur</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a>) <span class="id" title="tactic">in</span><br/> + <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Pick"><span class="id" title="definition">GRing.Pick</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#nzA"><span class="id" title="variable">nzA</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#recf"><span class="id" title="variable">recf</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.Bool"><span class="id" title="abbreviation">Bool</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> 0%<span class="id" title="var">N</span>))<br/> + | <span class="id" title="var">_</span>, <span class="id" title="var">_</span> ⇒ <span class="id" title="keyword">fun</span> <span class="id" title="var">_</span> ⇒ <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.Bool"><span class="id" title="abbreviation">Bool</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> 0%<span class="id" title="var">N</span>)<br/> + <span class="id" title="keyword">end</span>%<span class="id" title="var">T</span>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.mxrank_form_qf"><span class="id" title="lemma">mxrank_form_qf</span></a> <span class="id" title="var">r</span> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">M_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">)</span></a>) : <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.qf_form"><span class="id" title="abbreviation">qf_form</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.mxrank_form"><span class="id" title="definition">mxrank_form</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.eval_mxrank"><span class="id" title="lemma">eval_mxrank</span></a> <span class="id" title="var">e</span> <span class="id" title="var">r</span> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">M_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">)</span></a>) :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.qf_eval"><span class="id" title="abbreviation">qf_eval</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.mxrank_form"><span class="id" title="definition">mxrank_form</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#2841ad707bf668c5fe86250d8f31a3f6"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#2841ad707bf668c5fe86250d8f31a3f6"><span class="id" title="notation">rank</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#2841ad707bf668c5fe86250d8f31a3f6"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.algebra.mxalgebra.html#2841ad707bf668c5fe86250d8f31a3f6"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.eval_vec_mx"><span class="id" title="lemma">eval_vec_mx</span></a> <span class="id" title="var">e</span> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">u</span> : <a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">rV_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#697e4695610f677ae98a52af81f779d2"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">)</span></a>) :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> (<a class="idref" href="mathcomp.algebra.matrix.html#vec_mx"><span class="id" title="definition">vec_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#vec_mx"><span class="id" title="definition">vec_mx</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#u"><span class="id" title="variable">u</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.eval_mxvec"><span class="id" title="lemma">eval_mxvec</span></a> <span class="id" title="var">e</span> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">A</span> : <a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">M_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cb37620352ad6b90a047a361359e2f04"><span class="id" title="notation">)</span></a>) :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> (<a class="idref" href="mathcomp.algebra.matrix.html#mxvec"><span class="id" title="definition">mxvec</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#mxvec"><span class="id" title="definition">mxvec</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#A"><span class="id" title="variable">A</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="MatrixFormula.MatrixFormula.Subsetmx"><span class="id" title="section">Subsetmx</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="MatrixFormula.MatrixFormula.Subsetmx.m1"><span class="id" title="variable">m1</span></a> <a name="MatrixFormula.MatrixFormula.Subsetmx.m2"><span class="id" title="variable">m2</span></a> <a name="MatrixFormula.MatrixFormula.Subsetmx.n"><span class="id" title="variable">n</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>) (<a name="MatrixFormula.MatrixFormula.Subsetmx.A"><span class="id" title="variable">A</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.term"><span class="id" title="abbreviation">term</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m1"><span class="id" title="variable">m1</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">)</span></a>) (<a name="MatrixFormula.MatrixFormula.Subsetmx.B"><span class="id" title="variable">B</span></a> : <a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">M</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.term"><span class="id" title="abbreviation">term</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">_</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#m2"><span class="id" title="variable">m2</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.algebra.matrix.html#e36c289fb249221b43b9c978a67340fb"><span class="id" title="notation">)</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="MatrixFormula.submx_form"><span class="id" title="definition">submx_form</span></a> :=<br/> + <a class="idref" href="mathcomp.ssreflect.bigop.html#567079cee6eb2eba482323c7e8d08df5"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#567079cee6eb2eba482323c7e8d08df5"><span class="id" title="notation">big</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#567079cee6eb2eba482323c7e8d08df5"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.And"><span class="id" title="abbreviation">And</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#567079cee6eb2eba482323c7e8d08df5"><span class="id" title="notation">/</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.True"><span class="id" title="abbreviation">True</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#567079cee6eb2eba482323c7e8d08df5"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#567079cee6eb2eba482323c7e8d08df5"><span class="id" title="notation">_</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#567079cee6eb2eba482323c7e8d08df5"><span class="id" title="notation">(</span></a><span class="id" title="var">r</span> <a class="idref" href="mathcomp.ssreflect.bigop.html#567079cee6eb2eba482323c7e8d08df5"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a><a class="idref" href="mathcomp.ssreflect.bigop.html#567079cee6eb2eba482323c7e8d08df5"><span class="id" title="notation">)</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.mxrank_form"><span class="id" title="definition">mxrank_form</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a> (<a class="idref" href="mathcomp.algebra.matrix.html#col_mx"><span class="id" title="definition">col_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.B"><span class="id" title="variable">B</span></a>) <a class="idref" href="mathcomp.algebra.ssralg.html#75d27ccd6bafab0712ff32ca70588f75"><span class="id" title="notation">==></span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.mxrank_form"><span class="id" title="definition">mxrank_form</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#r"><span class="id" title="variable">r</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.B"><span class="id" title="variable">B</span></a>)%<span class="id" title="var">T</span>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.eval_col_mx"><span class="id" title="lemma">eval_col_mx</span></a> <span class="id" title="var">e</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> (<a class="idref" href="mathcomp.algebra.matrix.html#col_mx"><span class="id" title="definition">col_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.B"><span class="id" title="variable">B</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#col_mx"><span class="id" title="definition">col_mx</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.A"><span class="id" title="variable">A</span></a>) (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.B"><span class="id" title="variable">B</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.submx_form_qf"><span class="id" title="lemma">submx_form_qf</span></a> : <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.qf_form"><span class="id" title="abbreviation">qf_form</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.submx_form"><span class="id" title="definition">submx_form</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.eval_submx"><span class="id" title="lemma">eval_submx</span></a> <span class="id" title="var">e</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.qf_eval"><span class="id" title="abbreviation">qf_eval</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.submx_form"><span class="id" title="definition">submx_form</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.algebra.mxalgebra.html#a83de2bef5d483337931b658f4451b59"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx.B"><span class="id" title="variable">B</span></a>)%<span class="id" title="var">MS</span>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Subsetmx"><span class="id" title="section">Subsetmx</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="MatrixFormula.MatrixFormula.Env"><span class="id" title="section">Env</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="MatrixFormula.MatrixFormula.Env.d"><span class="id" title="variable">d</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="MatrixFormula.seq_of_rV"><span class="id" title="definition">seq_of_rV</span></a> (<span class="id" title="var">v</span> : <a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">rV_d</span></a>) : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.F"><span class="id" title="variable">F</span></a> := <a class="idref" href="mathcomp.ssreflect.finfun.html#fgraph"><span class="id" title="definition">fgraph</span></a> <a class="idref" href="mathcomp.ssreflect.finfun.html#71fbd02a8ba525d8dcd88d59800c905e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.finfun.html#71fbd02a8ba525d8dcd88d59800c905e"><span class="id" title="notation">ffun</span></a> <span class="id" title="var">i</span> <a class="idref" href="mathcomp.ssreflect.finfun.html#71fbd02a8ba525d8dcd88d59800c905e"><span class="id" title="notation">⇒</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a> 0 <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.finfun.html#71fbd02a8ba525d8dcd88d59800c905e"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.size_seq_of_rV"><span class="id" title="lemma">size_seq_of_rV</span></a> <span class="id" title="var">v</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.seq_of_rV"><span class="id" title="definition">seq_of_rV</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Env.d"><span class="id" title="variable">d</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.nth_seq_of_rV"><span class="id" title="lemma">nth_seq_of_rV</span></a> <span class="id" title="var">x0</span> <span class="id" title="var">v</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_d</span></a>) : <a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#x0"><span class="id" title="variable">x0</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.seq_of_rV"><span class="id" title="definition">seq_of_rV</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a>) <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a> 0 <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="MatrixFormula.row_var"><span class="id" title="definition">row_var</span></a> <span class="id" title="var">k</span> : <a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">rV</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.term"><span class="id" title="abbreviation">term</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">_d</span></a> := <a class="idref" href="mathcomp.algebra.matrix.html#cf6654c80d96ae2da5730746e8dfeac4"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.algebra.matrix.html#cf6654c80d96ae2da5730746e8dfeac4"><span class="id" title="notation">row_i</span></a> (<a class="idref" href="mathcomp.algebra.ssralg.html#17323b79d87a46c8afbe9d49f25575c2"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#17323b79d87a46c8afbe9d49f25575c2"><span class="id" title="notation">X_</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#17323b79d87a46c8afbe9d49f25575c2"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#697e4695610f677ae98a52af81f779d2"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Env.d"><span class="id" title="variable">d</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#17323b79d87a46c8afbe9d49f25575c2"><span class="id" title="notation">)</span></a>)%<span class="id" title="var">T</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="MatrixFormula.row_env"><span class="id" title="definition">row_env</span></a> (<span class="id" title="var">e</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">rV_d</span></a>) := <a class="idref" href="mathcomp.ssreflect.seq.html#flatten"><span class="id" title="definition">flatten</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.seq_of_rV"><span class="id" title="definition">seq_of_rV</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.nth_row_env"><span class="id" title="lemma">nth_row_env</span></a> <span class="id" title="var">e</span> <span class="id" title="var">k</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_d</span></a>) : <a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.row_env"><span class="id" title="definition">row_env</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">)`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#697e4695610f677ae98a52af81f779d2"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Env.d"><span class="id" title="variable">d</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_k</span></a> 0 <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.eval_row_var"><span class="id" title="lemma">eval_row_var</span></a> <span class="id" title="var">e</span> <span class="id" title="var">k</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.eval_mx"><span class="id" title="definition">eval_mx</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.row_env"><span class="id" title="definition">row_env</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a>) (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.row_var"><span class="id" title="definition">row_var</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">`</span></a><a class="idref" href="mathcomp.algebra.ssralg.html#9625b440a0052f6dbfd015f5bb8b5125"><span class="id" title="notation">_k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:></span></a> <a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#2bf09b7202225c789149165667752fab"><span class="id" title="notation">rV_d</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="MatrixFormula.Exists_row_form"><span class="id" title="definition">Exists_row_form</span></a> <span class="id" title="var">k</span> (<span class="id" title="var">f</span> : <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.form"><span class="id" title="abbreviation">form</span></a>) :=<br/> + <a class="idref" href="mathcomp.ssreflect.seq.html#foldr"><span class="id" title="definition">foldr</span></a> <a class="idref" href="mathcomp.algebra.ssralg.html#GRing.Exists"><span class="id" title="constructor">GRing.Exists</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_d</span></a> ⇒ <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#697e4695610f677ae98a52af81f779d2"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Env.d"><span class="id" title="variable">d</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#i"><span class="id" title="variable">i</span></a>)%<span class="id" title="var">N</span>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="MatrixFormula.Exists_rowP"><span class="id" title="lemma">Exists_rowP</span></a> <span class="id" title="var">e</span> <span class="id" title="var">k</span> <span class="id" title="var">f</span> :<br/> + <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Env.d"><span class="id" title="variable">d</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#19ab5cfd7e4f60fa14f22b576013bd96"><span class="id" title="notation">></span></a> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#df1ced36fc33ce188051218bca314374"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">v</span> : <a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">rV</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.F"><span class="id" title="variable">F</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.algebra.matrix.html#d5eb23b08bc98c3329b2748a3ba944ae"><span class="id" title="notation">_d</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.holds"><span class="id" title="abbreviation">holds</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.row_env"><span class="id" title="definition">row_env</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#set_nth"><span class="id" title="definition">set_nth</span></a> 0 <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#v"><span class="id" title="variable">v</span></a>)) <a class="idref" href="mathcomp.algebra.mxpoly.html#f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#df1ced36fc33ce188051218bca314374"><span class="id" title="notation">)</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#df1ced36fc33ce188051218bca314374"><span class="id" title="notation">↔</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.holds"><span class="id" title="abbreviation">holds</span></a> (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.row_env"><span class="id" title="definition">row_env</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#e"><span class="id" title="variable">e</span></a>) (<a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.Exists_row_form"><span class="id" title="definition">Exists_row_form</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.algebra.mxpoly.html#f"><span class="id" title="variable">f</span></a>)<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula.Env"><span class="id" title="section">Env</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula.MatrixFormula"><span class="id" title="section">MatrixFormula</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.algebra.mxpoly.html#MatrixFormula"><span class="id" title="module">MatrixFormula</span></a>.<br/> +</div> +</div> + +<div id="footer"> +<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> +</div> + +</div> + +</body> +</html>
\ No newline at end of file |
