1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 (* This file was automatically generated: do not edit *********************)
19 (* $Id: CPolynomials.v,v 1.9 2004/04/23 10:00:53 lcf Exp $ *)
21 (*#* printing _X_ %\ensuremath{x}% *)
23 (*#* printing _C_ %\ensuremath\diamond% *)
25 (*#* printing [+X*] %\ensuremath{+x\times}% #+x×# *)
27 (*#* printing RX %\ensuremath{R[x]}% #R[x]# *)
29 (*#* printing FX %\ensuremath{F[x]}% #F[x]# *)
31 include "tactics/RingReflection.ma".
34 The first section only proves the polynomials form a ring, and nothing more
36 Section%~\ref{section:poly-equality}% gives some basic properties of
37 equality and induction of polynomials.
38 ** Definition of polynomials; they form a ring
39 %\label{section:poly-ring}%
47 %\begin{convention}% Let [CR] be a ring.
52 cic:/CoRN/algebra/CPolynomials/CPoly_CRing/CR.var
56 The intuition behind the type [cpoly] is the following
57 - [(cpoly CR)] is $CR[X]$ #CR[X]#;
58 - [cpoly_zero] is the `empty' polynomial with no coefficients;
59 - [(cpoly_linear c p)] is [c[+]X[*]p]
63 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly.ind".
65 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_constant.con" as definition.
67 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_one.con" as definition.
70 Some useful induction lemmas for doubly quantified propositions.
73 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_double_ind0.con" as lemma.
75 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_double_sym_ind0.con" as lemma.
77 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_double_ind0'.con" as lemma.
79 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_double_ind0.con" as lemma.
81 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_double_sym_ind0.con" as lemma.
83 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_double_ind0'.con" as lemma.
85 (*#* *** The polynomials form a setoid
88 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_eq_zero.con" as definition.
90 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_eq.con" as definition.
92 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_eq_p_zero.con" as lemma.
94 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_ap_zero.con" as definition.
96 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_ap.con" as definition.
98 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_ap_p_zero.con" as lemma.
100 inline procedural "cic:/CoRN/algebra/CPolynomials/irreflexive_cpoly_ap.con" as lemma.
102 inline procedural "cic:/CoRN/algebra/CPolynomials/symmetric_cpoly_ap.con" as lemma.
104 inline procedural "cic:/CoRN/algebra/CPolynomials/cotransitive_cpoly_ap.con" as lemma.
106 inline procedural "cic:/CoRN/algebra/CPolynomials/tight_apart_cpoly_ap.con" as lemma.
108 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_is_CSetoid.con" as lemma.
110 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_csetoid.con" as definition.
113 Now that we know that the polynomials form a setoid, we can use the
114 notation with [ [#] ] and [ [=] ]. In order to use this notation,
115 we introduce [cpoly_zero_cs] and [cpoly_linear_cs], so that Coq
116 recognizes we are talking about a setoid.
117 We formulate the induction properties and
118 the most basic properties of equality and apartness
119 in terms of these generators.
122 inline procedural "cic:/CoRN/algebra/CPolynomials/CPoly_CRing/cpoly_zero_cs.con" "CPoly_CRing__" as definition.
124 inline procedural "cic:/CoRN/algebra/CPolynomials/CPoly_CRing/cpoly_linear_cs.con" "CPoly_CRing__" as definition.
126 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_ind_cs.con" as lemma.
128 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_double_ind0_cs.con" as lemma.
130 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_double_sym_ind0_cs.con" as lemma.
132 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_ind_cs.con" as lemma.
134 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_double_ind0_cs.con" as lemma.
136 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_double_sym_ind0_cs.con" as lemma.
138 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin_eq_zero_.con" as lemma.
140 inline procedural "cic:/CoRN/algebra/CPolynomials/_cpoly_lin_eq_zero.con" as lemma.
142 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_zero_eq_lin_.con" as lemma.
144 inline procedural "cic:/CoRN/algebra/CPolynomials/_cpoly_zero_eq_lin.con" as lemma.
146 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin_eq_lin_.con" as lemma.
148 inline procedural "cic:/CoRN/algebra/CPolynomials/_cpoly_lin_eq_lin.con" as lemma.
150 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin_ap_zero_.con" as lemma.
152 inline procedural "cic:/CoRN/algebra/CPolynomials/_cpoly_lin_ap_zero.con" as lemma.
154 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin_ap_zero.con" as lemma.
156 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_zero_ap_lin_.con" as lemma.
158 inline procedural "cic:/CoRN/algebra/CPolynomials/_cpoly_zero_ap_lin.con" as lemma.
160 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_zero_ap_lin.con" as lemma.
162 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin_ap_lin_.con" as lemma.
164 inline procedural "cic:/CoRN/algebra/CPolynomials/_cpoly_lin_ap_lin.con" as lemma.
166 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin_ap_lin.con" as lemma.
168 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_linear_strext.con" as lemma.
170 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_linear_wd.con" as lemma.
172 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_linear_fun.con" as definition.
174 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_double_comp_ind.con" as lemma.
176 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_triple_comp_ind.con" as lemma.
178 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_double_comp_ind.con" as lemma.
180 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_triple_comp_ind.con" as lemma.
183 *** The polynomials form a semi-group and a monoid
186 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_plus.con" as definition.
188 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_plus_cs.con" as definition.
190 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_zero_plus.con" as lemma.
192 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_plus_zero.con" as lemma.
194 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin_plus_lin.con" as lemma.
196 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_plus_commutative.con" as lemma.
198 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_plus_q_ap_q.con" as lemma.
200 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_p_plus_ap_p.con" as lemma.
202 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_ap_zero_plus.con" as lemma.
204 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_plus_op_strext.con" as lemma.
206 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_plus_op_wd.con" as lemma.
208 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_plus_op.con" as definition.
210 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_plus_associative.con" as lemma.
212 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_csemi_grp.con" as definition.
214 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_cm_proof.con" as lemma.
216 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_cmonoid.con" as definition.
218 (*#* *** The polynomials form a group
221 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_inv.con" as definition.
223 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_inv_cs.con" as definition.
225 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_inv_zero.con" as lemma.
227 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_inv_lin.con" as lemma.
229 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_inv_op_strext.con" as lemma.
231 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_inv_op_wd.con" as lemma.
233 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_inv_op.con" as definition.
235 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_cg_proof.con" as lemma.
237 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_cgroup.con" as definition.
239 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_cag_proof.con" as lemma.
241 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_cabgroup.con" as definition.
243 (*#* *** The polynomials form a ring
246 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cr.con" as definition.
248 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult.con" as definition.
250 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cr_cs.con" as definition.
252 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_zero_mult_cr.con" as lemma.
254 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin_mult_cr.con" as lemma.
256 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cr_zero.con" as lemma.
258 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cr_strext.con" as lemma.
260 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cr_wd.con" as lemma.
262 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cs.con" as definition.
264 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_zero_mult.con" as lemma.
266 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin_mult.con" as lemma.
268 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_op_strext.con" as lemma.
270 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_op_wd.con" as lemma.
272 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_op.con" as definition.
274 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cr_dist.con" as lemma.
276 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_cr_dist.con" as lemma.
278 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cr_assoc_mult_cr.con" as lemma.
280 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cr_assoc_mult.con" as lemma.
282 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_zero.con" as lemma.
284 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_lin.con" as lemma.
286 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_commutative.con" as lemma.
288 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_dist_rht.con" as lemma.
290 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_assoc.con" as lemma.
292 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_cr_one.con" as lemma.
294 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_one_mult.con" as lemma.
296 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_one.con" as lemma.
298 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_mult_monoid.con" as lemma.
300 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_cr_non_triv.con" as lemma.
302 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_is_CRing.con" as lemma.
304 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_cring.con" as definition.
306 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_constant_strext.con" as lemma.
308 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_constant_wd.con" as lemma.
310 inline procedural "cic:/CoRN/algebra/CPolynomials/_C_.con" as definition.
312 inline procedural "cic:/CoRN/algebra/CPolynomials/_X_.con" as definition.
314 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_x_minus_c.con" as definition.
316 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_x_minus_c_strext.con" as lemma.
318 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_x_minus_c_wd.con" as lemma.
325 Implicit Arguments _C_ [CR].
329 Implicit Arguments _X_ [CR].
332 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_linear_fun'.con" as definition.
335 Implicit Arguments cpoly_linear_fun' [CR].
339 Infix "[+X*]" := cpoly_linear_fun' (at level 50, left associativity).
342 (*#* ** Apartness, equality, and induction
343 %\label{section:poly-equality}%
347 Section CPoly_CRing_ctd
352 Let [CR] be a ring, [p] and [q] polynomials over that ring, and [c] and [d]
353 elements of the ring.
358 cic:/CoRN/algebra/CPolynomials/CPoly_CRing_ctd/CR.var
362 Notation RX := (cpoly_cring CR).
366 Section helpful_section
370 cic:/CoRN/algebra/CPolynomials/CPoly_CRing_ctd/helpful_section/p.var
374 cic:/CoRN/algebra/CPolynomials/CPoly_CRing_ctd/helpful_section/q.var
378 cic:/CoRN/algebra/CPolynomials/CPoly_CRing_ctd/helpful_section/c.var
382 cic:/CoRN/algebra/CPolynomials/CPoly_CRing_ctd/helpful_section/d.var
385 inline procedural "cic:/CoRN/algebra/CPolynomials/linear_eq_zero_.con" as lemma.
387 inline procedural "cic:/CoRN/algebra/CPolynomials/_linear_eq_zero.con" as lemma.
389 inline procedural "cic:/CoRN/algebra/CPolynomials/zero_eq_linear_.con" as lemma.
391 inline procedural "cic:/CoRN/algebra/CPolynomials/_zero_eq_linear.con" as lemma.
393 inline procedural "cic:/CoRN/algebra/CPolynomials/linear_eq_linear_.con" as lemma.
395 inline procedural "cic:/CoRN/algebra/CPolynomials/_linear_eq_linear.con" as lemma.
397 inline procedural "cic:/CoRN/algebra/CPolynomials/linear_ap_zero_.con" as lemma.
399 inline procedural "cic:/CoRN/algebra/CPolynomials/_linear_ap_zero.con" as lemma.
401 inline procedural "cic:/CoRN/algebra/CPolynomials/linear_ap_zero.con" as lemma.
403 inline procedural "cic:/CoRN/algebra/CPolynomials/zero_ap_linear_.con" as lemma.
405 inline procedural "cic:/CoRN/algebra/CPolynomials/_zero_ap_linear.con" as lemma.
407 inline procedural "cic:/CoRN/algebra/CPolynomials/zero_ap_linear.con" as lemma.
409 inline procedural "cic:/CoRN/algebra/CPolynomials/linear_ap_linear_.con" as lemma.
411 inline procedural "cic:/CoRN/algebra/CPolynomials/_linear_ap_linear.con" as lemma.
413 inline procedural "cic:/CoRN/algebra/CPolynomials/linear_ap_linear.con" as lemma.
419 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_induc.con" as lemma.
421 inline procedural "cic:/CoRN/algebra/CPolynomials/Ccpoly_double_sym_ind.con" as lemma.
423 inline procedural "cic:/CoRN/algebra/CPolynomials/Cpoly_double_comp_ind.con" as lemma.
425 inline procedural "cic:/CoRN/algebra/CPolynomials/Cpoly_triple_comp_ind.con" as lemma.
427 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_induc.con" as lemma.
429 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_double_sym_ind.con" as lemma.
431 inline procedural "cic:/CoRN/algebra/CPolynomials/poly_double_comp_ind.con" as lemma.
433 inline procedural "cic:/CoRN/algebra/CPolynomials/poly_triple_comp_ind.con" as lemma.
436 Transparent cpoly_cring.
440 Transparent cpoly_cgroup.
444 Transparent cpoly_csetoid.
447 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_apply.con" as definition.
449 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_apply_strext.con" as lemma.
451 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_apply_wd.con" as lemma.
453 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_apply_fun.con" as definition.
461 [cpoly_apply_fun] is denoted infix by [!]
462 The first argument is left implicit, so the application of
463 polynomial [f] (seen as a function) to argument [x] can be written as [f!x].
464 In the names of lemmas, we write [apply].
469 Implicit Arguments cpoly_apply_fun [CR].
473 Infix "!" := cpoly_apply_fun (at level 1, no associativity).
477 ** Basic properties of polynomials
479 Let [R] be a ring and write [RX] for the ring of polynomials over [R].
484 Section Poly_properties
488 cic:/CoRN/algebra/CPolynomials/Poly_properties/R.var
492 Notation RX := (cpoly_cring R).
496 *** Constant and identity
499 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_X_.con" as lemma.
501 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_C_.con" as lemma.
504 Hint Resolve cpoly_X_ cpoly_C_: algebra.
507 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_const_eq.con" as lemma.
509 inline procedural "cic:/CoRN/algebra/CPolynomials/_c_zero.con" as lemma.
511 inline procedural "cic:/CoRN/algebra/CPolynomials/_c_one.con" as lemma.
513 inline procedural "cic:/CoRN/algebra/CPolynomials/_c_mult.con" as lemma.
515 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_lin.con" as lemma.
518 Hint Resolve cpoly_lin: algebra.
523 inline procedural "cic:/CoRN/algebra/CPolynomials/poly_linear.con" as lemma.
526 Hint Resolve _c_zero: algebra.
529 inline procedural "cic:/CoRN/algebra/CPolynomials/poly_c_apzero.con" as lemma.
531 inline procedural "cic:/CoRN/algebra/CPolynomials/_c_mult_lin.con" as lemma.
535 inline procedural "cic:/CoRN/algebra/CPolynomials/lin_mult.con" as lemma.
538 Hint Resolve lin_mult: algebra.
541 (*#* *** Application of polynomials
544 inline procedural "cic:/CoRN/algebra/CPolynomials/poly_eq_zero.con" as lemma.
546 inline procedural "cic:/CoRN/algebra/CPolynomials/apply_wd.con" as lemma.
548 inline procedural "cic:/CoRN/algebra/CPolynomials/cpolyap_pres_eq.con" as lemma.
550 inline procedural "cic:/CoRN/algebra/CPolynomials/cpolyap_strext.con" as lemma.
552 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_csetoid_op.con" as definition.
554 inline procedural "cic:/CoRN/algebra/CPolynomials/_c_apply.con" as lemma.
556 inline procedural "cic:/CoRN/algebra/CPolynomials/_x_apply.con" as lemma.
558 inline procedural "cic:/CoRN/algebra/CPolynomials/plus_apply.con" as lemma.
560 inline procedural "cic:/CoRN/algebra/CPolynomials/inv_apply.con" as lemma.
563 Hint Resolve plus_apply inv_apply: algebra.
566 inline procedural "cic:/CoRN/algebra/CPolynomials/minus_apply.con" as lemma.
568 inline procedural "cic:/CoRN/algebra/CPolynomials/_c_mult_apply.con" as lemma.
571 Hint Resolve _c_mult_apply: algebra.
574 inline procedural "cic:/CoRN/algebra/CPolynomials/mult_apply.con" as lemma.
577 Hint Resolve mult_apply: algebra.
580 inline procedural "cic:/CoRN/algebra/CPolynomials/one_apply.con" as lemma.
583 Hint Resolve one_apply: algebra.
586 inline procedural "cic:/CoRN/algebra/CPolynomials/nexp_apply.con" as lemma.
590 inline procedural "cic:/CoRN/algebra/CPolynomials/poly_inv_apply.con" as lemma.
592 inline procedural "cic:/CoRN/algebra/CPolynomials/Sum0_cpoly_ap.con" as lemma.
594 inline procedural "cic:/CoRN/algebra/CPolynomials/Sum_cpoly_ap.con" as lemma.
600 (*#* ** Induction properties of polynomials for [Prop]
604 Section Poly_Prop_Induction
608 cic:/CoRN/algebra/CPolynomials/Poly_Prop_Induction/CR.var
612 Notation Cpoly := (cpoly CR).
616 Notation Cpoly_zero := (cpoly_zero CR).
620 Notation Cpoly_linear := (cpoly_linear CR).
624 Notation Cpoly_cring := (cpoly_cring CR).
627 inline procedural "cic:/CoRN/algebra/CPolynomials/cpoly_double_ind.con" as lemma.
630 End Poly_Prop_Induction
634 Hint Resolve poly_linear cpoly_lin: algebra.
638 Hint Resolve apply_wd cpoly_const_eq: algebra_c.
642 Hint Resolve _c_apply _x_apply inv_apply plus_apply minus_apply mult_apply
647 Hint Resolve one_apply _c_zero _c_one _c_mult: algebra.
651 Hint Resolve poly_inv_apply: algebra.
655 Hint Resolve _c_mult_lin: algebra.