Library prueba_tes

Require Export pol_can.

Theorem add_effic: (p,q:pol)
      {r:pol|(full_pol p)->(full_pol q)->
            (full_pol r)
           /\(equpol r (suma_app p q))
           /\((t:term)(full n t)->
               (low_pol t p)->(low_pol t q)->(low_pol t r))}.

Induction p.
Intro q; Split with q; Auto.

Intros m p' HRp; Elim m.
Intros cm tp; Induction q.
Split with (cpol (cm,tp) p'); Auto.

Intros mq q'; Elim mq; Intros cq tq.
Elim (Ttm_total_good tp tq n).
Destruct 1.
Intros i HRq.
Elim HRq; Intros.
Split with (cpol (cq,tq) x); Intros.
Elim p0; Intros; Clear p0; Trivial.
Elim H2; Intros; Clear H2.
Inversion H; Inversion H0; Split.
Auto.

Split; Intros.
Apply equpol_tran with (suma_app (cpol (cq,tq) q') (cpol (cm,tp) p')).
Simpl; Apply equpol_cpol.
Apply equpol_tran with (suma_app (cpol (cm,tp) p') q'); Auto.

Auto.

Apply low_pol_cpol with q'; Auto.

Inversion H0; Auto.

Clear a; Intros i H.
Elim (HRp (cpol (cq,tq) q')); Intros pq hpq.
Split with (cpol (cm,tp) pq); Intros fp fq.
Elim hpq; Intros; Auto.
Elim H1; Intros.
Clear H1.
Inversion fp; Inversion fq; Split.
Apply full_pol_cons; Auto.

Split; Intros.
Simpl; Apply equpol_cpol; Auto.

Apply low_pol_cpol with p'; Auto.

Inversion fp; Auto.

Intros e.
Elim (decQ_t cm (multQ_neg cq)); Intros eQ.
Elim (HRp q'); Intros pq hpq.
Split with pq; Intros fp fq.
Elim hpq; Intros.
Elim H1; Intros.
Clear H1.
Inversion fp; Inversion fq; Split; Trivial.
Split; Intros.
Apply equpol_tran with (suma_app p' q'); Trivial.
Replace tq with tp; Auto.

Apply H3; Auto.
Inversion H18.
Apply low_trans with tp; Auto.

Inversion H19.
Apply low_trans with tq; Auto.

Inversion fp; Auto.

Inversion fq; Auto.

Elim (HRp q'); Intros pq hpq H.
Split with (cpol ((plusQ cm cq),tp) pq).
Split.
Inversion H0.
Inversion H1.
Elim hpq; Intros; Auto.
Apply full_pol_cons; Auto.
Elim H17; Intros.
Apply H19; Auto.
Replace tp with tq; Auto.
Symmetry; Apply e; Auto.

Split; Intros.
Inversion H0.
Inversion H1.
Replace tq with tp.
Elim hpq; Intros; Auto.
Elim H17; Intros.
Clear H17.
Simpl.
Apply equpol_tran with (cpol (cm,tp) (suma_app (cpol (cq,tp) q') p')).
Simpl.
Apply equpol_tran with (cpol ((plusQ cm cq),tp) (suma_app q' p')).
Apply equpol_cpol.
Apply equpol_tran with (suma_app p' q'); Auto.

Apply equpol_sym; Apply equpol_smt.

Apply equpol_cpol; Auto.

Apply e; Auto.

Apply (low_pol_cpol t tp (plusQ cm cq) p' pq).
Inversion H3.
Apply low_cons; Trivial.
Save.
Hints Resolve add_effic.

Definition add_effic_fun : pol -> pol -> pol.
Intros p q.
Elim (add_effic p q).
Intros pq; Intros; Exact pq.
Defined.
Transparent add_effic_fun.

Lemma add_effic_full : (p,q:pol)(full_pol p)->(full_pol q)->
       (full_pol (add_effic_fun p q)).
Intros.
Unfold add_effic_fun;Elim (add_effic p q); Simpl.
Tauto.
Save.

Lemma add_effic_cor_l : (p,q:pol)(full_pol p)->(full_pol q)->
       (equpol (add_effic_fun p q)(suma_app p q)).
Intros.
Unfold add_effic_fun;Elim (add_effic p q); Simpl.
Tauto.
Save.
Hints Resolve add_effic_cor_l.

Lemma comp_sum_effic: (p,q:pol)(full_term_pol p)->(full_term_pol q)->
   (equpol (add_effic_fun (fun_can p) (fun_can q)) (suma_app p q)).

Intros.
Cut (equpol p (fun_can p)); Intros.
Cut (equpol q (fun_can q)); Intros.
Apply equpol_tran with (suma_app (fun_can p) (fun_can q)).
Apply add_effic_cor_l.
Apply can_is_full; Trivial.

Apply can_is_full; Trivial.

Auto.

Apply can_corr; Trivial.

Apply can_corr; Trivial.
Save.

Lemma mult_m_full: (p:pol)(m:monom)
      {r:pol | (full_mon n m)->(full_pol p)->(full_pol r)/\
               (equpol r (mult_m p m))}.

Induction p.
Intros.
Split with vpol; Split; Auto.

Intros m p' hr m0.
Elim (z_monom_dec m0); Intros.
Split with vpol; Auto.

Generalize b; Elim m0; Intros; Clear b.
Elim (hr (a,b0)); Intros p'm0 y.
Elim m; Intros.
Elim (add_effic (cpol (mult_mon (a0,b) (a,b0)) vpol) p'm0); Intros r y5.
Split with r; Intros.
Inversion H0.
Elim y; Trivial; Clear y; Intros.
Elim y5; Trivial; Clear y5; Intros.
Elim H11; Clear H11; Intros.
Split; Trivial.
Apply equpol_tran
 with (suma_app (cpol (mult_mon (a0,b) (a,b0)) vpol) p'm0); Trivial.
Simpl.
Apply equpol_cpol2; Auto.

Simpl.
Apply full_pol_cons; Auto.
Save.
Hints Resolve mult_m_full.

Definition mult_m_effic_fun : pol -> monom -> pol.
Intros p m.
Elim (mult_m_full p m).
Intros pm; Intros; Exact pm.
Defined.
Transparent mult_m_effic_fun.

Lemma mult_m_effic_full : (p:pol)(m:monom)(full_pol p)->(full_mon n m)->
       (full_pol (mult_m_effic_fun p m)).
Intros.
Unfold mult_m_effic_fun; Elim (mult_m_full p m); Simpl.
Tauto.
Save.

Lemma mult_m_effic_cor_l : (p:pol)(m:monom)(full_pol p)->(full_mon n m)->
       (equpol (mult_m_effic_fun p m)(mult_m p m)).
Intros.
Unfold mult_m_effic_fun; Elim (mult_m_full p m); Simpl.
Tauto.
Save.
Hints Resolve mult_m_effic_cor_l.

Lemma comp_mult_m_effic: (p:pol)(m:monom)(full_term_pol p)->(full_mon n m)->
   (equpol (mult_m_effic_fun (fun_can p) m) (mult_m p m)).

Intros.
Cut (equpol p (fun_can p)); Intros.
Apply equpol_tran with (mult_m (fun_can p) m).
Apply mult_m_effic_cor_l; Trivial.
Apply can_is_full; Trivial.

Auto.

Apply can_corr; Trivial.

Save.

Lemma mult_p_can : (p,q:pol)
      {r:pol|(full_pol p)->(full_pol q)->(full_pol r)/\(equpol r (mult_p p q))}.

Induction p.
Intros.
Split with vpol; Split; Auto.

Intros m p' hr q.
Elim (hr q); Intros qp' y.
Elim mult_m_full with p:=q m:=m.
Intros qm y0.
Elim (add_effic qm qp').
Intros r y1.
Split with r; Intros.
Elim y; Trivial; Clear y; Intros.
Elim y0; Trivial; Clear y0; Intros.
Elim y1; Trivial; Clear y1; Intros.
Split; Trivial.
Elim H6; Intros; Clear H6.
Simpl.
Apply equpol_tran with (suma_app qm qp'); Auto.

Inversion H; Trivial.

Inversion H; Trivial.
Save.
Hints Resolve mult_p_can.

Definition mult_p_effic_fun : pol -> pol -> pol.
Intros p q.
Elim (mult_p_can p q).
Intros pq; Intros; Exact pq.
Defined.
Transparent mult_p_effic_fun.

Lemma mult_p_effic_full : (p,q:pol)(full_pol p)->(full_pol q)->
       (full_pol (mult_p_effic_fun p q)).
Intros.
Unfold mult_p_effic_fun; Elim (mult_p_can p q); Simpl.
Tauto.
Save.

Lemma mult_p_effic_cor_l : (p,q:pol)(full_pol p)->(full_pol q)->
       (equpol (mult_p_effic_fun p q)(mult_p p q)).
Intros.
Unfold mult_p_effic_fun; Elim (mult_p_can p q); Simpl.
Tauto.
Save.
Hints Resolve mult_p_effic_cor_l.

Lemma comp_mult_p_effic: (p,q:pol)(full_term_pol p)->(full_term_pol q)->
   (equpol (mult_p_effic_fun (fun_can p) (fun_can q)) (mult_p p q)).

Intros.
Cut (equpol p (fun_can p)); Intros.
Cut (equpol q (fun_can q)); Intros.
Apply equpol_tran with (mult_p (fun_can p) (fun_can q)).
Apply mult_p_effic_cor_l.
Apply can_is_full; Trivial.

Apply can_is_full; Trivial.

Apply equpol_tran with (mult_p (fun_can p) q); Auto.

Apply can_corr; Trivial.

Apply can_corr; Trivial.
Save.


Index
This page has been generated by coqdoc