Library S_poly_nuevo2_tes
Require
Export
normal_tes.
Definition
S_pol :=
[p,q:pol] Cases p q of
vpol x => vpol
| x vpol => vpol
| p q =>
(suma_app
(mult_m p
((divQ unQ (hcoef p)),
(div_term (lcm (hterm p) (hterm q)) (hterm p))))
(pol_opp (mult_m q
((divQ unQ (hcoef q)),
(div_term (lcm (hterm p) (hterm q))
(hterm q))))))
end.
Lemma
full_term_S_pol: (f,g:pol)(full_term_pol f)->(full_term_pol g)->
(full_term_pol (S_pol f g)).
Induction f.
Intros.
Unfold S_pol.
Trivial.
Induction m.
Induction g.
Intros.
Unfold S_pol; Trivial.
Induction m0.
Intros.
Unfold S_pol.
Apply full_term_suma_app; Auto.
Apply full_term_opp; Auto.
Save
.
Lemma
S_pol_n_vpol: (p,q:pol)(~(equpol p vpol))->(~(equpol q vpol))->
(S_pol p q) = (suma_app
(mult_m p
((divQ unQ (hcoef p)),
(div_term (lcm (hterm p) (hterm q)) (hterm p))))
(pol_opp (mult_m q
((divQ unQ (hcoef q)),
(div_term (lcm (hterm p) (hterm q))
(hterm q)))))).
Induction p; Intros.
Elim H; Auto.
Induction q; Intros.
Elim H1; Auto.
Auto.
Save
.
Hints Resolve S_pol_n_vpol.
Lemma
S_pol_ext: (f,x,g,y:pol)(full_term_pol f)->
(full_term_pol x)->(full_term_pol g)->(full_term_pol y)->
~(equpol f vpol)->~(equpol g vpol)->(equpol f x)->(equpol g y)->
(equpol (S_pol f g) (S_pol x y)).
Intros.
Cut ~(equpol x vpol); Intros.
Cut ~(equpol y vpol); Intros.
Cut (S_pol f g)
=(suma_app
(mult_m f
((divQ unQ (hcoef f)),
(div_term (lcm (hterm f) (hterm g)) (hterm f))))
(pol_opp
(mult_m g
((divQ unQ (hcoef g)),
(div_term (lcm (hterm f) (hterm g)) (hterm g)))))); Intros.
Cut (S_pol x y)
=(suma_app
(mult_m x
((divQ unQ (hcoef x)),
(div_term (lcm (hterm x) (hterm y)) (hterm x))))
(pol_opp
(mult_m y
((divQ unQ (hcoef y)),
(div_term (lcm (hterm x) (hterm y)) (hterm y)))))); Intros.
Rewrite H9.
Rewrite H10.
Clear H9.
Clear H10.
Apply equpol_ss.
Apply mult_pm_comp_ss; Trivial; Simpl.
Right.
Split.
Cut (hterm f)=(hterm x); Intros.
Cut (hterm g)=(hterm y); Intros.
Rewrite H9.
Rewrite H10; Trivial.
Apply eq_hterm; Trivial.
Apply eq_hterm; Trivial.
Apply eg_numeraQ; Auto.
Apply opp_comp.
Apply mult_pm_comp_ss; Trivial; Simpl.
Right.
Split.
Cut (hterm f)=(hterm x); Intros.
Cut (hterm g)=(hterm y); Intros.
Rewrite H9.
Rewrite H10; Trivial.
Apply eq_hterm; Trivial.
Apply eq_hterm; Trivial.
Apply eg_numeraQ; Auto.
Apply S_pol_n_vpol; Auto.
Apply S_pol_n_vpol; Auto.
EAuto.
EAuto.
Save
.
Lemma
S_pol_ff: (f:pol)(equpol (S_pol f f) vpol).
Induction f.
Auto.
Intros.
(Unfold S_pol; Auto).
Save
.
Hints Resolve S_pol_ff.
Lemma
S_pol_sym: (f,g:pol)(equpol (S_pol f g) (pol_opp (S_pol g f))).
Induction f.
(Induction g; Auto).
Induction g.
Auto.
Intros.
Unfold S_pol.
Apply equpol_tran
with (suma_app
(pol_opp
(mult_m (cpol m0 p0)
((divQ unQ (hcoef (cpol m0 p0))),
(div_term (lcm (hterm (cpol m p)) (hterm (cpol m0 p0)))
(hterm (cpol m0 p0))))))
(mult_m (cpol m p)
((divQ unQ (hcoef (cpol m p))),
(div_term (lcm (hterm (cpol m p)) (hterm (cpol m0 p0)))
(hterm (cpol m p)))))).
Auto.
Apply equpol_tran
with (suma_app
(pol_opp
(mult_m (cpol m0 p0)
((divQ unQ (hcoef (cpol m0 p0))),
(div_term (lcm (hterm (cpol m0 p0)) (hterm (cpol m p)))
(hterm (cpol m0 p0))))))
(mult_m (cpol m p)
((divQ unQ (hcoef (cpol m p))),
(div_term (lcm (hterm (cpol m0 p0)) (hterm (cpol m p)))
(hterm (cpol m p)))))).
Apply equpol_ss.
Apply opp_comp.
Apply mult_pm_comp_2.
Simpl.
Right.
(Split; Auto).
Apply mult_pm_comp_2.
Simpl.
Right.
(Split; Auto).
Apply equpol_tran
with (suma_app
(mult_m (cpol m p)
((divQ unQ (hcoef (cpol m p))),
(div_term (lcm (hterm (cpol m0 p0)) (hterm (cpol m p)))
(hterm (cpol m p)))))
(pol_opp
(mult_m (cpol m0 p0)
((divQ unQ (hcoef (cpol m0 p0))),
(div_term (lcm (hterm (cpol m0 p0)) (hterm (cpol m p)))
(hterm (cpol m0 p0))))))); Auto.
Save
.
Hints Resolve S_pol_sym.
Definition
Groebner1_full:=
[F:(list pol_full)]
((full_fam (inc_list F))/\
(f:pol_full)(Ideal (inc f) (inc_list F))->(Red3 (inc_list F) (inc f) vpol)).
Hints Unfold Groebner1_full.
Definition
Groebner2_full:=
[F:(list pol_full)]
((full_fam (inc_list F))/\
(f,g:pol_full)
(pol_In_ensemb (inc f) (inc_list F))->(pol_In_ensemb (inc g) (inc_list F))->
(Red3 (inc_list F) (S_pol (inc f) (inc g)) vpol)).
Hints Unfold Groebner2_full.
Lemma
G1_impl_G2_full: (G:(list pol_full))(Groebner1_full G)->
(Groebner2_full G).
Intros G.
Unfold Groebner1_full; Intros.
Unfold Groebner2_full; Elim H; Intros.
Split; Trivial.
Clear H.
Induction f; Simpl.
Induction g; Simpl; Intros.
Cut (Ideal (S_pol x x0) (inc_list G)); Intros.
Elim (can_fun (S_pol x x0)); Intros.
Elim p1; Intros.
Clear p1.
Apply Red3_ext2 with x1; Intros; Auto.
Elim ex_fpol_eq with x1; Intros; Auto.
Apply Red3_ext2 with (inc x2); Auto.
Apply H1; Auto.
Apply pol_eq_id_eg with (S_pol x x0); Auto.
Apply equpol_tran with x1; Auto.
Apply full_term_S_pol; Auto.
Apply full_term_S_pol; Auto.
Replace (S_pol x x0) with (suma_app (mult_m x
((divQ unQ (hcoef x)),(div_term (lcm (hterm x) (hterm x0)) (hterm x))))
(pol_opp (mult_m x0 ((divQ unQ (hcoef x0)),
(div_term (lcm (hterm x) (hterm x0)) (hterm x0)))))).
Apply suma_p_id.
Apply pol_F_idmult; Auto.
Simpl.
Apply term_div_full; Auto.
Apply opp_p_id.
Apply pol_F_idmult; Trivial.
Apply elem_full with (inc_list G); Auto.
Simpl.
Apply term_div_full; Auto.
Cut ~(equpol x vpol); Intros.
Cut ~(equpol x0 vpol); Intros.
Symmetry; Auto.
Apply elem_n_vpol with (inc_list G); Trivial.
Apply elem_n_vpol with (inc_list G); Trivial.
Save
.
Hints Resolve G1_impl_G2_full.
Definition
Groebner3_full:= [F:(list pol_full)]
((full_fam (inc_list F))/\
(h,h1,h2:pol_full)
(normal (inc_list F) (inc h1))->(normal (inc_list F) (inc h2))->
(Red3 (inc_list F) (inc h) (inc h1))->
(Red3 (inc_list F) (inc h) (inc h2))->(equpol (inc h1) (inc h2))).
Hints Unfold Groebner3_full.
Definition
confluente :=
[F:(list pol)][f:pol](g:pol)(h:pol)(Red3 F f g)->(Red3 F f h)->(common_succ F g h).
Hints Unfold confluente.
Inductive
common_succ_full [F:(list pol_full);g,h:pol_full]: Prop:=
common_succ_red_full: (p:pol_full)(Red3 (inc_list F) (inc g) (inc p))->(Red3 (inc_list F) (inc h) (inc p))->(common_succ_full F g h).
Hints Resolve common_succ_red_full.
Lemma
comp_common_succ_full: (p,q,r,s:pol_full)(F:(list pol_full))
(equpol (inc p) (inc q))->(equpol (inc r) (inc s))->
(common_succ_full F p r)->(common_succ_full F q s).
Intros p q r s F e1 e2.
Induction 1; Intros.
Split with p0.
Apply Red3_ext2 with f:=(inc p); Auto.
Apply Red3_ext2 with f:=(inc r); Auto.
Save
.
Lemma
trans_common_red_full:(f,g,h:pol_full)(F:(list pol_full))
(Red1 (inc_list F) (inc h) (inc f))->(common_succ_full F g f)->
(common_succ_full F g h).
Intros.
Inversion H0.
Apply common_succ_red_full with p; Trivial.
Apply Red3_tran with (inc f); Trivial.
Apply Red3_ste; Trivial.
Save
.
Hints Resolve trans_common_red_full.
Lemma
conmt_common_succ_full: (p,q:pol_full)(F:(list pol_full))
(common_succ_full F p q)->(common_succ_full F q p).
Induction 1.
Intros.
Exists p0; Assumption.
Save
.
Hints Resolve conmt_common_succ_full.
Definition
confluente_full :=
[F:(list pol_full)][f:pol_full](g:pol_full)(h:pol_full)
(Red3 (inc_list F) (inc f) (inc g))->
(Red3 (inc_list F) (inc f) (inc h))->
(common_succ_full F g h).
Hints Unfold confluente_full.
Definition
Groebner3_CR_full:= [F:(list pol_full)]
((full_fam (inc_list F))/\(h:pol_full)(confluente_full F h)).
Hints Unfold Groebner3_CR_full.
Lemma
G3_CR_impl_G3_full: (G:(list pol_full))(Groebner3_CR_full G)->
(Groebner3_full G).
Unfold Groebner3_CR_full Groebner3_full.
Intros G; Destruct 1; Intros fG cr; Split.
Assumption.
Intros h h1 h2 nh1 nh2 r01 r02.
Elim (cr h h1 h2); Trivial.
Intros x r1 r2.
Apply equpol_tran with (inc x).
Apply normal_eq with (inc_list G); Auto.
Apply equpol_sym; Apply normal_eq with (inc_list G); Auto.
Save
.
Lemma
cr_full: (G:(list pol_full))(h1,h2:pol_full)
(Groebner3_CR_full G)->(Red_equiv (inc_list G) (inc h1) (inc h2))->
(Ex2 [g:pol_full](Red3 (inc_list G) (inc h1) (inc g))
[g:pol_full](Red3 (inc_list G) (inc h2) (inc g))).
Intros G h1 h2.
Destruct 1.
Intros fG G3G Reh1h2.
Elim Reh1h2.
Intros.
Elim (can_fun g); Intros; Trivial.
Elim p; Intros; Clear p.
Split with (exist pol [p:pol](full_pol p) x H4); Simpl; Auto.
Apply Red3_trans with g; Auto.
Intros.
Elim (can_fun h); Intros; Trivial.
Elim p; Intros; Clear p.
Split with (exist pol [p:pol](full_pol p) x H4); Simpl; Auto.
Apply Red3_ext1 with h; Auto.
Intros g h.
Intros f1G fg fh Regh.
Destruct 1.
Intros g0 Hg0.
Intros.
Split with g0; Auto.
Intros g f h fGG fg ff fh Regf.
Destruct 1.
Intros g0 Hg0 H1g0 Regff.
Destruct 1.
Intros g1 h1g1 h2g1.
Elim (can_fun f); Intros; Trivial.
Elim p; Intros; Clear p.
Elim (G3G (exist pol [p:pol](full_pol p) x H2) g0 g1); Auto.
Intros g2 h1g2 h2g2.
Split with g2; Auto.
Apply Red3_tran with (inc g0); Auto.
Apply Red3_tran with (inc g1); Auto.
Simpl.
Apply Red3_ext2 with f; Auto.
Simpl.
Apply Red3_ext2 with f; Auto.
Save
.
Lemma
G3_CR_impl_G1_full: (G:(list pol_full))(Groebner3_CR_full G)->
(Groebner1_full G).
Intros G G3CR.
Split; Intros.
Unfold Groebner3_CR_full in G3CR.
Elim G3CR; Auto.
Cut (equiv_Id (inc_list G) (inc f) vpol); Intros.
Elim ex_fpol_eq with vpol; Auto; Intros.
Cut (Red_equiv (inc_list G) (inc f) vpol); Intros.
Elim cr_full with G f x; Intros; Auto.
Apply Red3_ext1 with (inc x0); Auto.
Apply equpol_tran with (inc x); Auto.
Apply equpol_sym.
Apply normal_eq with (inc_list G); Auto.
Apply normal_ext with vpol; Auto.
Inversion H1.
Apply Red_equiv_eq; Auto.
Apply equpol_tran with vpol; Auto.
Apply Red_equiv_step; Auto.
Apply Red1_ext1 with vpol; Auto.
Apply Red_equiv_sym; Auto.
Apply Red_equiv_ext with vpol; Auto.
Apply Red_equiv_sym; Auto.
Apply Red_equiv_ext with vpol; Auto.
Apply congr_conv.
Apply equiv_Id_equiv_Id2; Trivial.
Inversion G3CR; Auto.
Save
.
Index
This page has been generated by coqdoc