Library normal_tes
Require
Export
noetred_tes.
Definition
normal: (list pol)->pol->Prop := [F:(list pol)][f:pol]
(g:pol)(~(Red1 F f g)).
Hints Unfold normal.
Lemma
normal_ext: (p,q:pol)(F:(list pol))(normal F p)->
(full_term_pol p)->(equpol p q)->(normal F q).
Unfold normal.
Intros.
Unfold not in H.
Unfold not.
Intros.
Apply H with g.
Apply Red1_ext2 with q; Trivial.
(Apply equpol_sym; Trivial).
Save
.
Hints Resolve normal_ext.
Lemma
normal_eq_aux : (F:(list pol))
(f:pol)
(g:pol)(Red3 F f g)->(normal F f)->
((equpol f g)/\(normal F g)).
Induction 1.
(Split; Auto).
Apply normal_ext with p:=g0; Auto.
Intros.
Red in H4.
(Elim H4 with h; Auto).
Intros.
Split.
Apply equpol_tran with f0.
(Elim H5; Auto).
(Elim H7; Auto).
(Elim H5; Auto).
(Elim H7; Auto).
(Elim H5; Auto).
Save
.
Lemma
normal_eq : (F:(list pol))
(f:pol)
(g:pol)(Red3 F f g)->(normal F f)->
(equpol f g).
(Intros x1 x2 x3 x4 x5;
Elim (normal_eq_aux x1 x2 x3 x4 x5); Auto).
Save
.
Hints Resolve normal_eq.
Lemma
normal_Red_normal : (F:(list pol))
(f:pol)
(g:pol)(Red3 F f g)->(normal F f)->
(normal F g).
(Intros x1 x2 x3 x4 x5;
Elim (normal_eq_aux x1 x2 x3 x4 x5); Auto).
Save
.
Lemma
vpol_normal: (G:(list pol))(normal G vpol).
Unfold normal; Unfold not; Intros.
Inversion H.
Inversion H2.
Apply H3; Auto.
Save
.
Hints Resolve vpol_normal.
Lemma
Red3_vpol_normal: (F:(list pol))(f:pol)
(Red3 F vpol f)->(equpol vpol f).
Intros.
(Apply normal_eq with F; Trivial).
Save
.
Hints Resolve Red3_vpol_normal.
Lemma
prev_calcula_fn2: (g,f:pol)
(full_pol g)
->(full_term_pol f)->~(equpol f vpol)->
{h:pol | (red f g h)}+{(normal (cons f (nil pol)) g)}.
Induction g.
Intros; Right; Auto.
Induction m.
Clear m.
Intros.
Cut (full n b); Intros.
Cut (full_term_pol (cpol (a,b) p)); Intros.
Elim H with f; Intros; Trivial.
Elim a0; Intros.
Left.
Split with (cpol (a,b) x).
Inversion p0.
Apply red1_simpl with t; Auto.
Inversion H0.
Red.
Red; Intros.
Red in H5.
Elim H5.
Apply eqQ_trans with (coef (cpol (a,b) p) t); Auto.
Apply eqQ_sym.
Apply coef_n_term.
Red; Intros.
Rewrite <- H20 in H18.
Cut (no_term_in_pol p t); Auto.
Red.
Apply coef_low_pol; Auto.
Rewrite <- H20 in H16; Trivial.
Apply equpol_tran
with (cpol (a,b)
(suma_app p
(pol_opp
(mult_m f
((divQ (coef p t) (hcoef f)),(div_term t (hterm f)))))));
Auto.
Replace (cpol (a,b)
(suma_app p
(pol_opp
(mult_m f
((divQ (coef p t) (hcoef f)),(div_term t (hterm f)))))))
with (suma_app (cpol (a,b) p)
(pol_opp
(mult_m f
((divQ (coef p t) (hcoef f)),(div_term t (hterm f)))))).
Apply equpol_ss; Trivial.
Apply opp_comp.
Apply mult_pm_comp_2.
Red.
Right.
Split; Trivial.
Apply eg_denomQ.
Auto.
Apply eqQ_sym.
Apply coef_n_term.
Red; Intros.
Inversion H0.
Rewrite <- H12 in H19.
Cut (no_term_in_pol p t); Auto.
Red.
Apply coef_low_pol; Auto.
Rewrite <- H12 in H17; Trivial.
Auto.
Elim (dec_term_div (hterm f) b n); Intros; Auto.
Left.
Split
with (suma_app (cpol (a,b) p)
(pol_opp
(mult_m f ((divQ a (hcoef f)),(div_term b (hterm f)))))).
Apply red1_simpl with b; Trivial.
Red.
Red; Intros.
Cut (eqQ (coef (cpol (a,b) p) b) a); Intros.
Inversion H0.
Cut (eqQ a OQ); Intros.
Elim H10; Auto.
Apply eqQ_trans with (coef (cpol (a,b) p) b); Auto.
Apply coef_first; Trivial.
Apply full_term_suma_app; Auto.
Apply equpol_ss; Trivial.
Apply opp_comp.
Apply mult_pm_comp_2.
Red.
Right.
Split; Trivial.
Apply eg_denomQ.
Auto.
Apply eqQ_sym.
Apply coef_first; Trivial.
Right.
Red; Intros.
Red in b0.
Red; Intros.
Inversion H5.
Inversion H8.
Elim b0
with (suma_app p
(pol_opp
(mult_m f0
((divQ (coef p t) (hcoef f0)),(div_term t (hterm f0)))))).
Apply Red1_simp with f0; Auto.
Apply red1_simpl with t; Auto.
Cut (equpol f0 f); Intros.
Elim (eq_tm_dec t b); Intros.
Rewrite a0 in H14.
Elim b1; Auto.
Cut (hterm f0)=(hterm f); Intros.
Rewrite H17 in H14; Auto.
Auto.
Red.
Red; Intros.
Red in H9.
Elim H9.
Apply eqQ_trans with (coef p t); Auto.
Apply pol_In_ensemb_unic; Trivial.
Inversion H0; Auto.
Apply full_term_suma_app.
Inversion H0; Auto.
Apply full_term_opp.
Apply full_mult_m; Trivial.
Apply term_div_full.
Apply full_coef with f:=(cpol (a,b) p); Auto.
Auto.
Inversion H0; Auto.
Inversion H0; Auto.
Inversion H0; Auto.
Save
.
Lemma
prev_calcula_fn3bis: (F:(list pol_full))(f:pol_full)(full_fam (inc_list F))->
{g:pol_full|(Red1 (inc_list F) (inc f) (inc g))} + {(normal (inc_list F) (inc f))}.
Induction F.
Induction f; Intros.
Right.
Simpl.
Red; Intros.
Red; Intros.
Inversion H0; Auto.
Inversion H2.
Intros.
Elim H with f; Intros.
Left.
Elim a0; Intros.
Split with x.
Inversion p.
Apply Red1_simp with f0; Auto.
Unfold inc_list; Simpl.
Apply pol_In_tl; Auto.
Elim (prev_calcula_fn2 (inc f) (inc a)); Intros; Auto.
Elim a0; Intros.
Left.
Elim (can_fun x); Trivial; Intros.
Elim p0; Intros.
Clear p0.
Split with (exist pol [x:pol](full_pol x) x0 H1).
Apply Red1_simp with (inc a); Auto.
Unfold inc_list; Simpl.
Apply pol_In_hd; Auto.
Simpl.
Apply red_ext1 with x; Auto.
Inversion p; Auto.
Right.
Red; Intros.
Red; Intros.
Inversion H1.
Inversion H3.
Cut (red (inc a) (inc f) g); Intros.
Red in b0.
Elim b0 with g.
Apply Red1_simp with (inc a); Auto.
Inversion H10; Auto.
Apply red_ext3 with f0; Auto.
Red in b.
Elim b with g.
Apply Red1_simp with f0; Auto.
Inversion H0; Auto.
Inversion H0; Auto.
Elim H3; Auto.
Inversion H0; Auto.
Save
.
Lemma
calcula_fnbis: (F:(list pol_full))(f:pol_full)(full_fam (inc_list F))->
{g:pol_full|(normal (inc_list F) (inc g))/\(Red3 (inc_list F) (inc f) (inc g))}.
Intros.
Cut (noetheriano ? (inc_Red1 F)); Intros.
Red in H0.
Elim H0 with f; Intros.
Elim (prev_calcula_fn3bis F x); Intros; Trivial.
Elim a; Intros.
Elim (H2 x0); Intros.
Split with x1.
Elim p0.
Split; Trivial.
Apply Red3_trans with (inc x0); Auto.
Inversion p.
Inversion H4; Auto.
Split with x.
Split; Auto.
Apply buen_ord_red1; Auto.
Save
.
Definition
for_norm: (list pol_full)->pol_full->pol_full.
Intros F g.
Elim (full_fam_dec (inc_list F)); Intros fF.
Elim (calcula_fnbis F g); Intros.
Exact x.
Trivial.
Cut (full_pol vpol); Intros.
Exact (exist pol [x:pol](full_pol x) vpol H).
Trivial.
Defined
.
Transparent for_norm.
Lemma
norm_corr: (F:(list pol_full))(f:pol_full)(full_fam (inc_list F))->
(normal (inc_list F) (inc (for_norm F f))).
Intros F f fF.
Unfold for_norm.
Elim (full_fam_dec (inc_list F)); Simpl.
Clear fF.
Intros fF.
Elim (calcula_fnbis F f fF); Simpl.
Tauto.
Intros.
Elim b; Auto.
Save
.
Lemma
Red3_norm: (F:(list pol_full))(f:pol_full)(full_fam (inc_list F))->
(Red3 (inc_list F) (inc f) (inc (for_norm F f))).
Intros F f fF.
Unfold for_norm.
Elim (full_fam_dec (inc_list F)); Simpl.
Clear fF.
Intros fF.
Elim (calcula_fnbis F f fF); Simpl.
Tauto.
Intros.
Elim b; Auto.
Save
.
Lemma
full_term_norm: (F:(list pol_full))(f:pol_full)(full_fam (inc_list F))->
(full_term_pol (inc (for_norm F f))).
Intros.
Cut (Red3 (inc_list F) (inc f) (inc (for_norm F f))); Intros.
Inversion H0; Auto.
Apply Red3_norm; Auto.
Save
.
Lemma
fn_equpol_vpol: (F:(list pol_full))(f:pol_full)(full_fam (inc_list F))->
(equpol (inc f) vpol)->(equpol (inc (for_norm F f)) vpol).
Intros.
Cut (Red3 (inc_list F) (inc f) (inc (for_norm F f))); Intros.
Cut (Red3 (inc_list F) vpol (inc (for_norm F f))); Intros.
Apply equpol_sym; Trivial.
Apply Red3_vpol_normal with (inc_list F); Auto.
Apply Red3_ext2 with (inc f); Auto.
Apply Red3_norm; Auto.
Save
.
Lemma
equpol_fn: (F:(list pol_full))(f:pol_full)(full_fam (inc_list F))->
(normal (inc_list F) (inc f))->(equpol (inc (for_norm F f)) (inc f)).
Intros.
Cut (normal (inc_list F) (inc (for_norm F f))); Intros.
Cut (Red3 (inc_list F) (inc f) (inc (for_norm F f))); Intros.
Elim normal_eq_aux with (inc_list F) (inc f) (inc (for_norm F f)); Intros; Auto.
Apply Red3_norm; Auto.
Apply norm_corr; Auto.
Save
.
Lemma
pol_fn_id2: (F:(list pol_full))(g:pol_full)(full_fam (inc_list F))->
(equpol (inc (for_norm F g)) vpol)->(Ideal (inc g) (inc_list F)).
Intros.
Cut (Red3 (inc_list F) (inc g) (inc (for_norm F g))); Intros.
Cut (Red3 (inc_list F) (inc g) vpol); Intros.
Apply Red_vpol; Intros; Trivial.
Apply Red3_ext1 with (inc (for_norm F g)); Auto.
Apply Red3_norm; Auto.
Save
.
Lemma
fn_p_id: (F:(list pol_full))(g:pol_full)(full_fam (inc_list F))->
(Ideal (inc (for_norm F g)) (cons (inc g) (inc_list F))).
Intros.
Cut (Red3 (inc_list F) (inc g) (inc (for_norm F g))); Intros.
Apply Red3_en_cons; Trivial.
Apply Red3_norm; Auto.
Save
.
Lemma
pol_fn_id: (F:(list pol_full))(g:pol_full)(full_fam (inc_list F))->
(Ideal (inc g) (cons (inc (for_norm F g)) (inc_list F))).
Intros.
Cut (Red3 (inc_list F) (inc g) (inc (for_norm F g))); Intros.
Apply Red3_en_cons_inv; Auto.
Apply Red3_norm; Auto.
Save
.
Lemma
no_div_term_fn: (F:(list pol_full))(g,f:pol_full)(full_fam (inc_list F))->
(pol_In_ensemb (inc f) (inc_list F))->
(t:term)(term_in_pol (inc (for_norm F g)) t) -> ~(term_div (hterm (inc f)) t).
Intros.
Cut (normal (inc_list F) (inc (for_norm F g))); Intros.
Cut (Red3 (inc_list F) (inc g) (inc (for_norm F g))); Intros.
Cut (full_term_pol (inc (for_norm F g))); Intros.
Cut (full_term_pol (inc f)); Intros.
Cut ~(equpol (inc f) vpol); Intros.
Cut (full n t); Intros.
Red; Intros.
Cut (red (inc f) (inc (for_norm F g)) (suma_app (inc (for_norm F g))
(pol_opp (mult_m (inc f)
((divQ (coef (inc (for_norm F g)) t) (hcoef (inc f))),
(div_term t (hterm (inc f)))))))); Intros.
Red in H2.
Elim H2 with (suma_app (inc (for_norm F g)) (pol_opp (mult_m (inc f)
((divQ (coef (inc (for_norm F g)) t) (hcoef (inc f))),
(div_term t (hterm (inc f))))))).
Apply Red1_simp with (inc f); Auto.
Apply red1_simpl with t; Auto.
Apply full_term_suma_app; Auto.
Apply full_coef with (inc (for_norm F g)); Auto.
Apply elem_n_vpol with (inc_list F); Auto.
Apply elem_full with (inc_list F); Auto.
Inversion H3; Auto.
Apply Red3_norm; Auto.
Apply norm_corr; Auto.
Save
.
Lemma
for_norm_dec_vpol: (F:(list pol_full))(g:pol_full)(full_fam (inc_list F))->
{(equpol (inc (for_norm F g)) vpol)}+{~(equpol (inc (for_norm F g)) vpol)}.
Intros.
Elim (equpol_dec_full_term (inc (for_norm F g)) vpol); Auto.
Save
.
Index
This page has been generated by coqdoc