Library Corps_tes
Require
Relation_Definitions.
Parameter
Q:Set.
Parameter
OQ:Q.
Parameter
multQ_neg: Q -> Q.
Parameter
plusQ: Q->Q->Q.
Parameter
multQ: Q->Q->Q.
Parameter
invQ: Q -> Q.
Parameter
unQ: Q.
Parameter
eqQ: Q->Q->Prop.
Axiom
no_trivial: ~(eqQ unQ OQ).
Hints Resolve no_trivial.
Parameter
eqQ_refl: (reflexive Q eqQ).
Hints Resolve eqQ_refl.
Parameter
eqQ_sym: (symmetric Q eqQ).
Hints Resolve eqQ_sym.
Parameter
eqQ_trans: (transitive Q eqQ).
Hints Resolve eqQ_trans.
Parameter
plusQ_conm: (k,k':Q)(eqQ (plusQ k k') (plusQ k' k)).
Hints Resolve plusQ_conm.
Parameter
plusQ_assoc: (k1,k2,k3:Q)(eqQ (plusQ k1 (plusQ k2 k3))
(plusQ (plusQ k1 k2) k3)).
Hints Resolve plusQ_assoc.
Parameter
neut_plusQ: (k:Q)(eqQ (plusQ k OQ) k).
Hints Resolve neut_plusQ.
Parameter
ex_op: (k:Q) (eqQ (plusQ k (multQ_neg k)) OQ).
Hints Resolve ex_op.
Parameter
multQ_conm: (k,k':Q)(eqQ (multQ k k') (multQ k' k)).
Hints Resolve multQ_conm.
Parameter
multQ_assoc: (k1,k2,k3:Q)(eqQ (multQ k1 (multQ k2 k3))
(multQ (multQ k1 k2) k3)).
Hints Resolve multQ_assoc.
Parameter
neut_multQ: (k:Q)(eqQ (multQ k unQ) k).
Hints Resolve neut_multQ.
Parameter
inv_divQ:(k:Q)(~(eqQ k OQ))->
(eqQ (multQ k (invQ k)) unQ).
Hints Resolve inv_divQ.
Parameter
distrQ: (k1,k2,k3:Q) (eqQ (multQ k1 (plusQ k2 k3))
(plusQ (multQ k1 k2) (multQ k1 k3))).
Hints Resolve distrQ.
Parameter
decQ: (k:Q){eqQ k OQ}+{~(eqQ k OQ)}.
Hints Resolve decQ.
Axiom
plusQ_comp_r: (k,k':Q)(eqQ k k')->(y:Q)(eqQ (plusQ k y) (plusQ k' y)).
Hints Resolve plusQ_comp_r.
Axiom
multQ_comp_r: (k,k':Q)(eqQ k k')->(y:Q)(eqQ (multQ k y) (multQ k' y)).
Hints Resolve multQ_comp_r.
Definition
divQ:= [k1,k2:Q] (multQ k1 (invQ k2)).
Hints Unfold divQ.
Lemma
division:(k1,k2:Q) (~(eqQ k2 OQ)) ->(eqQ (divQ k1 k2) (multQ k1 (divQ unQ k2))).
Intros.
Unfold divQ.
(Apply eqQ_trans with (multQ (multQ k1 unQ) (invQ k2)); Auto).
Save
.
Hints Resolve division.
Lemma
comp_nOQ: (c,c':Q)(eqQ c c')->(~(eqQ c OQ))->
(~(eqQ c' OQ)).
Intros.
Red in H0.
Red; Intros.
Apply H0.
Apply eqQ_trans with c'; Trivial.
Save
.
Hints Resolve comp_nOQ.
Lemma
plusQ_comp_l: (k,k':Q)(eqQ k k')->(y:Q)(eqQ (plusQ y k) (plusQ y k')).
Intros.
Apply eqQ_trans with (plusQ k y); Auto.
Apply eqQ_trans with (plusQ k' y); Auto.
Save
.
Hints Resolve plusQ_comp_l.
Lemma
suma_igual:(k,k',y:Q)(eqQ (plusQ k y) (plusQ k' y)) ->(eqQ k k').
Intros.
Cut (eqQ (plusQ k (plusQ y (multQ_neg y)))
(plusQ k' (plusQ y (multQ_neg y)))); Intros.
Apply eqQ_trans with (plusQ k' (plusQ y (multQ_neg y))).
Apply eqQ_trans with (plusQ k (plusQ y (multQ_neg y))); Auto.
Apply eqQ_trans with (plusQ k OQ); Auto.
Apply eqQ_trans with (plusQ k' OQ); Auto.
Apply eqQ_trans with (plusQ (plusQ k y) (multQ_neg y)); Auto.
Apply eqQ_trans with (plusQ (plusQ k' y) (multQ_neg y)); Auto.
Save
.
Hints Resolve suma_igual.
Lemma
multQ_comp_l: (k,k':Q)(eqQ k k')->
(y:Q)(eqQ (multQ y k) (multQ y k')).
Intros.
Apply eqQ_trans with (multQ k y); Auto.
Apply eqQ_trans with (multQ k' y); Auto.
Save
.
Hints Resolve multQ_comp_l.
Lemma
plusQ_comp: (k,k',c,c':Q)(eqQ k k')->(eqQ c c')->
(eqQ (plusQ k c) (plusQ k' c')).
Intros.
Apply eqQ_trans with (plusQ k' c); Auto.
Save
.
Hints Resolve plusQ_comp.
Lemma
multQ_comp: (k,k',c,c':Q)(eqQ k k')->(eqQ c c')->
(eqQ (multQ k c) (multQ k' c')).
Intros.
(Apply eqQ_trans with (multQ k' c); Auto).
Save
.
Hints Resolve multQ_comp.
Lemma
suma_op: (c,c':Q)(eqQ c (multQ_neg c'))->
(eqQ (plusQ c c') OQ).
Intros.
Apply eqQ_trans with (plusQ (multQ_neg c') c'); Auto.
Apply eqQ_trans with (plusQ c' (multQ_neg c')); Auto.
Save
.
Hints Resolve suma_op.
Lemma
suma_op_inv: (c,c':Q)(eqQ (plusQ c c') OQ)->
(eqQ c (multQ_neg c')).
Intros.
Apply eqQ_trans with (plusQ c (plusQ c' (multQ_neg c'))).
Apply eqQ_trans with (plusQ c OQ); Auto.
Apply eqQ_trans with (plusQ (plusQ c c') (multQ_neg c')); Auto.
Apply eqQ_trans with (plusQ OQ (multQ_neg c')); Auto.
Apply eqQ_trans with (plusQ (multQ_neg c') OQ); Auto.
Save
.
Hints Resolve suma_op_inv.
Lemma
neg_OQ: (eqQ (multQ_neg OQ) OQ).
Auto.
Save
.
Hints Resolve neg_OQ.
Lemma
plusQ_zero: (c,c':Q)(eqQ c OQ)->(eqQ c' OQ)->
(eqQ (plusQ c c') OQ).
Intros.
Apply eqQ_trans with (plusQ c OQ); Auto.
Apply eqQ_trans with c; Auto.
Save
.
Hints Resolve plusQ_zero.
Lemma
plusQ_zero_nzero: (c,c':Q)(eqQ c OQ)->(~(eqQ c' OQ))->
(~(eqQ (plusQ c c') OQ)).
Intros.
(Apply comp_nOQ with c'; Auto).
(Apply eqQ_trans with (plusQ OQ c'); Auto).
(Apply eqQ_trans with (plusQ c' OQ); Auto).
Save
.
Hints Resolve plusQ_zero_nzero.
Lemma
multQ_n_OQ: (c:Q)(~(eqQ c OQ))->(~(eqQ (multQ_neg c) OQ)).
Intros.
Red in H.
Red; Intros.
Apply H.
Apply eqQ_trans with (plusQ c (multQ_neg c)); Auto.
Apply eqQ_trans with (plusQ c OQ); Auto.
Save
.
Hints Resolve multQ_n_OQ.
Lemma
neg_neg_Q: (c:Q)(eqQ c (multQ_neg (multQ_neg c))).
Auto.
Save
.
Hints Resolve neg_neg_Q.
Lemma
multQ_zero:(c:Q)(eqQ (multQ c OQ) OQ).
Intros.
(Cut (eqQ (multQ_neg (multQ c OQ)) (multQ_neg (multQ c OQ))); Intros;
Auto).
(Cut (eqQ (multQ c OQ) (plusQ (multQ c OQ) (multQ c OQ))); Intros).
(Cut (eqQ (plusQ (multQ_neg (multQ c OQ)) (multQ c OQ))
(plusQ (multQ_neg (multQ c OQ))
(plusQ (multQ c OQ) (multQ c OQ)))); Intros; Auto).
(Cut (eqQ (plusQ (multQ_neg (multQ c OQ)) (multQ c OQ))
(plusQ (plusQ (multQ_neg (multQ c OQ)) (multQ c OQ))
(multQ c OQ))); Intros).
(Apply eqQ_trans with (plusQ (multQ c OQ) OQ); Auto).
(Apply eqQ_trans with (plusQ (multQ_neg (multQ c OQ)) (multQ c OQ));
Auto).
(Apply eqQ_trans
with (plusQ (plusQ (multQ_neg (multQ c OQ)) (multQ c OQ))
(multQ c OQ)); Auto).
(Apply eqQ_trans with (plusQ OQ (multQ c OQ)); Auto).
(Apply eqQ_trans
with (plusQ (multQ_neg (multQ c OQ))
(plusQ (multQ c OQ) (multQ c OQ))); Auto).
(Apply eqQ_trans with (multQ c (plusQ OQ OQ)); Auto).
Save
.
Hints Resolve multQ_zero.
Lemma
multQ_neg_unQ: (k:Q)(eqQ (multQ k (multQ_neg unQ))
(multQ_neg k)).
Intros.
Apply suma_op_inv.
(Apply eqQ_trans with (plusQ (multQ k (multQ_neg unQ)) (multQ k unQ));
Auto).
(Apply eqQ_trans with (multQ k (plusQ (multQ_neg unQ) unQ)); Auto).
(Apply eqQ_trans with (multQ k OQ); Auto).
Save
.
Hints Resolve multQ_neg_unQ.
Lemma
multQ_neg_plusQ: (c,c':Q)(eqQ (multQ_neg (plusQ c c'))
(plusQ (multQ_neg c) (multQ_neg c'))).
Intros.
Apply eqQ_trans with (multQ (plusQ c c') (multQ_neg unQ)); Auto.
Apply eqQ_trans with (multQ (multQ_neg unQ) (plusQ c c')); Auto.
Apply eqQ_trans
with (plusQ (multQ (multQ_neg unQ) c) (multQ (multQ_neg unQ) c'));
Auto.
Apply plusQ_comp.
Apply eqQ_trans with (multQ c (multQ_neg unQ)); Auto.
Apply eqQ_trans with (multQ c' (multQ_neg unQ)); Auto.
Save
.
Hints Resolve multQ_neg_plusQ.
Lemma
multQ_neg1: (c,c':Q)(eqQ (multQ_neg (multQ c c'))
(multQ (multQ_neg c) c')).
Intros.
Apply eqQ_trans with (multQ (multQ c c') (multQ_neg unQ)); Auto.
Apply eqQ_trans with (multQ (multQ c (multQ_neg unQ)) c'); Auto.
Apply eqQ_trans with (multQ c (multQ (multQ_neg unQ) c')); Auto.
Apply eqQ_trans with (multQ c (multQ c' (multQ_neg unQ))); Auto.
Save
.
Hints Resolve multQ_neg1.
Lemma
multQ_neg2: (c,c':Q)(eqQ (multQ_neg (multQ c c'))
(multQ c (multQ_neg c'))).
Intros.
(Apply eqQ_trans with (multQ (multQ c c') (multQ_neg unQ)); Auto).
(Apply eqQ_trans with (multQ c (multQ c' (multQ_neg unQ))); Auto).
Save
.
Hints Resolve multQ_neg2.
Lemma
eq_mulQ_neg: (c,c':Q)(eqQ c c')->(eqQ (multQ_neg c') (multQ_neg c)).
Intros.
Apply eqQ_trans with (multQ (multQ_neg unQ) c).
Apply eqQ_trans with (multQ (multQ_neg unQ) c'); Auto.
Apply eqQ_trans with (multQ c' (multQ_neg unQ)); Auto.
Apply eqQ_trans with (multQ c (multQ_neg unQ)); Auto.
Save
.
Hints Resolve eq_mulQ_neg.
Lemma
nuevo1: (c1:Q)~(eqQ c1 OQ)->(eqQ unQ (multQ c1 (divQ unQ c1))).
Intros.
(Apply eqQ_trans with (multQ c1 (invQ c1)); Auto).
Apply multQ_comp_l.
Unfold divQ.
(Apply eqQ_trans with (multQ (invQ c1) unQ); Auto).
Save
.
Hints Resolve eq_mulQ_neg.
Lemma
igual:(c1,c2,x,y:Q)(eqQ c1 c2) ->(~(eqQ c1 OQ))->
(eqQ (multQ c1 x) (multQ c2 y))->(eqQ x y).
Intros.
Apply eqQ_trans with (multQ (divQ unQ c1) (multQ c2 y)).
(Apply eqQ_trans with (multQ (divQ unQ c1) (multQ c1 x)); Auto).
(Apply eqQ_trans with (multQ (multQ (divQ unQ c1) c1) x); Auto).
(Apply eqQ_trans with (multQ x unQ); Auto).
(Apply eqQ_trans with (multQ unQ x); Auto).
Apply multQ_comp_r.
(Apply eqQ_trans with (multQ c1 (divQ unQ c1)); Auto).
(Apply eqQ_trans with (multQ c1 (invQ c1)); Auto).
Apply multQ_comp_l.
Unfold divQ.
(Apply eqQ_trans with (multQ (invQ c1) unQ); Auto).
(Apply eqQ_trans with (multQ (multQ (divQ unQ c1) c2) y); Auto).
Apply eqQ_trans with (multQ unQ y).
Apply multQ_comp_r.
(Apply eqQ_trans with (multQ (divQ unQ c1) c1); Auto).
(Apply eqQ_trans with (multQ c1 (divQ unQ c1)); Auto).
(Apply eqQ_trans with (multQ c1 (invQ c1)); Auto).
Apply multQ_comp_l.
Unfold divQ.
(Apply eqQ_trans with (multQ (invQ c1) unQ); Auto).
(Apply eqQ_trans with (multQ y unQ); Auto).
Save
.
Hints Resolve igual.
Lemma
zero_multQ: (c,c':Q)((eqQ c OQ)\/(eqQ c' OQ))->(eqQ (multQ c c') OQ).
Intros.
Elim H; Intros.
Apply eqQ_trans with (multQ OQ c'); Auto.
Apply eqQ_trans with (multQ c' OQ); Auto.
Apply eqQ_trans with (multQ c OQ); Auto.
Save
.
Hints Resolve zero_multQ.
Lemma
resul_multQ_zero:(c1,c2:Q)(~(eqQ (multQ c1 c2) OQ))->
(~(eqQ c1 OQ))/\(~(eqQ c2 OQ)).
Intros.
Split.
Red in H.
Red; Intros.
Apply H; Auto.
Red in H.
Red; Intros.
Apply H; Auto.
Save
.
Hints Resolve resul_multQ_zero.
Lemma
no_zero_invQ: (c:Q)(~(eqQ c OQ))->~(eqQ (invQ c) OQ).
Intros.
(Cut ~(eqQ (multQ c (invQ c)) OQ); Auto).
(Apply comp_nOQ with unQ; Auto).
Save
.
Hints Resolve no_zero_invQ.
Lemma
multQ_n_z: (c,c':Q)(~(eqQ c OQ))->(~(eqQ c' OQ))->
(~(eqQ (multQ c c') OQ)).
Intros.
(Cut (eqQ (multQ c (invQ c)) unQ); Intros; Auto).
(Red; Intros).
(Cut (eqQ c' (multQ (multQ (invQ c) c) c')); Intros).
(Cut (eqQ c' OQ); Intros; Auto).
(Apply eqQ_trans with (multQ (multQ (invQ c) c) c'); Auto).
(Apply eqQ_trans with (multQ (invQ c) (multQ c c')); Auto).
(Apply eqQ_trans with (multQ c' unQ); Auto).
(Apply eqQ_trans with (multQ c' (multQ (invQ c) c)); Auto).
(Apply multQ_comp_l; Auto).
(Apply eqQ_trans with (multQ c (invQ c)); Auto).
Save
.
Hints Resolve multQ_n_z.
Lemma
div_Q_eq: (c:Q)(~(eqQ c OQ))->(eqQ unQ (divQ c c)).
Intros.
(Apply eqQ_trans with (multQ c (invQ c)); Auto).
Save
.
Hints Resolve div_Q_eq.
Lemma
multQ_divQ1: (c,c1,c2:Q)(~(eqQ c OQ))->
(eqQ (multQ (divQ c1 c) c2) (divQ (multQ c1 c2) c)).
Intros.
Apply eqQ_trans with (multQ (divQ unQ c) (multQ c1 c2)).
Apply eqQ_trans with (multQ (multQ (divQ unQ c) c1) c2); Auto.
Apply multQ_comp_r.
Apply eqQ_trans with (multQ c1 (divQ unQ c)); Auto.
Apply eqQ_trans with (multQ (multQ c1 c2) (divQ unQ c)); Auto.
Save
.
Hints Resolve multQ_divQ1.
Lemma
ec_invQ: (c1,c2:Q)(eqQ (multQ c1 c2) unQ)->(eqQ c2 (invQ c1)).
Intros.
(Cut (eqQ (multQ (multQ (invQ c1) c1) c2) (invQ c1)); Intros).
(Apply eqQ_trans with (multQ (multQ (invQ c1) c1) c2); Trivial).
Apply eqQ_trans with (multQ unQ c2).
(Apply eqQ_trans with (multQ c2 unQ); Auto).
(Apply multQ_comp; Auto).
(Apply eqQ_trans with (multQ c1 (invQ c1)); Auto).
Apply eqQ_sym.
Apply inv_divQ.
(Cut ~(eqQ c1 OQ)/\~(eqQ c2 OQ); Intros).
(Elim H1; Trivial).
Apply resul_multQ_zero.
(Apply comp_nOQ with unQ; Auto).
(Apply eqQ_trans with (multQ (invQ c1) (multQ c1 c2)); Auto).
(Apply eqQ_trans with (multQ (invQ c1) unQ); Auto).
Save
.
Hints Resolve ec_invQ.
Lemma
eg_denomQ: (c,c1,c2:Q)(~(eqQ c OQ))->(eqQ c1 c2)->
(eqQ (divQ c1 c) (divQ c2 c)).
Intros.
Apply eqQ_trans with (multQ c1 (divQ unQ c)); Auto.
Apply eqQ_trans with (multQ c2 (divQ unQ c)); Auto.
Save
.
Hints Resolve eg_denomQ.
Lemma
nuevo2: (c1,c2:Q)(~(eqQ c1 OQ))->(eqQ c1 c2)->
(eqQ (invQ c1) (invQ c2)).
Intros.
(Cut (eqQ (multQ c1 (divQ c1 c1)) (multQ c2 (divQ c1 c1))); Intros;
Auto).
(Cut (eqQ (multQ c1 (divQ c2 c2)) (multQ c2 (divQ c2 c2))); Intros;
Auto).
(Cut (eqQ (multQ (multQ c1 c1) (invQ c1))
(multQ (multQ c2 c2) (invQ c2))); Intros).
(Apply igual with (multQ c1 c1) (multQ c2 c2); Auto).
(Apply eqQ_trans with (multQ c1 (multQ c1 (invQ c1))); Auto).
(Apply eqQ_trans with (multQ c2 (multQ c2 (invQ c2))); Auto).
(Apply eqQ_trans with (multQ c1 unQ); Auto).
(Apply eqQ_trans with (multQ c2 unQ); Auto).
Apply multQ_comp_l.
Apply eqQ_sym.
Apply inv_divQ.
(Apply comp_nOQ with c1; Auto).
Save
.
Hints Resolve nuevo2.
Lemma
eg_numeraQ: (c,c1,c2:Q)(~(eqQ c1 OQ))->(eqQ c1 c2)->
(eqQ (divQ c c1) (divQ c c2)).
Intros.
(Apply eqQ_trans with (multQ c (invQ c1)); Auto).
(Apply eqQ_trans with (multQ c (invQ c2)); Auto).
Save
.
Hints Resolve eg_numeraQ.
Lemma
divQ_0_n: (q:Q)~(eqQ q OQ)->(eqQ (divQ OQ q) OQ).
Intros.
Apply eqQ_trans with (multQ OQ (invQ q)); Auto.
Save
.
Hints Resolve divQ_0_n.
Lemma
divQ_0: (q,q0:Q)~(eqQ q OQ)->(eqQ q0 OQ)->(eqQ (divQ q0 q) OQ).
Intros.
Apply eqQ_trans with (multQ q0 (divQ unQ q)); Auto.
Save
.
Hints Resolve divQ_0.
Lemma
neg_divQ: (k,k':Q)(~(eqQ k' OQ))->(eqQ
(multQ_neg (divQ k k')) (divQ (multQ_neg k) k')).
Intros.
Apply eqQ_trans with (multQ (divQ k k') (multQ_neg unQ)); Auto.
Apply eqQ_trans with (multQ (multQ k (divQ unQ k')) (multQ_neg unQ));
Auto.
Apply eqQ_trans with (multQ (multQ_neg k) (divQ unQ k')); Auto.
Apply eqQ_trans with (multQ (multQ_neg unQ) (multQ k (divQ unQ k')));
Auto.
Apply eqQ_trans with (multQ (multQ (multQ_neg unQ) k) (divQ unQ k'));
Auto.
Apply multQ_comp_r.
Apply eqQ_trans with (multQ k (multQ_neg unQ)); Auto.
Save
.
Hints Resolve neg_divQ.
Lemma
simpl_divQ: (c,c':Q)(~(eqQ c OQ))->(eqQ
(divQ (multQ c c') c) c').
Intros.
Apply eqQ_trans with (multQ (divQ c c) c'); Auto.
Apply eqQ_trans with (multQ unQ c'); Auto.
Apply eqQ_trans with (multQ c' unQ); Auto.
Save
.
Hints Resolve simpl_divQ.
Lemma
distr_divQ: (k,k',q:Q)(~(eqQ q OQ))->
(eqQ (plusQ (divQ k q) (divQ k' q)) (divQ (plusQ k k') q)).
Intros.
Apply eqQ_trans with (multQ (plusQ k k') (divQ unQ q)); Auto.
Apply eqQ_trans with (multQ (divQ unQ q) (plusQ k k')); Auto.
Apply eqQ_trans
with (plusQ (multQ (divQ unQ q) k) (multQ (divQ unQ q) k'));
Auto.
Apply plusQ_comp.
Apply eqQ_trans with (multQ k (divQ unQ q)); Auto.
Apply eqQ_trans with (multQ k' (divQ unQ q)); Auto.
Save
.
Hints Resolve distr_divQ.
Lemma
plusQ_frac: (k,k1,k2:Q)(~(eqQ k2 OQ))->(eqQ
(plusQ k (divQ k1 k2)) (divQ (plusQ (multQ k k2) k1) k2)).
Intros.
Apply eqQ_trans with (multQ (plusQ (multQ k k2) k1) (divQ unQ k2));
Auto.
Apply eqQ_trans with (multQ (divQ unQ k2) (plusQ (multQ k k2) k1));
Auto.
Apply eqQ_trans
with (plusQ (multQ (divQ unQ k2) (multQ k k2))
(multQ (divQ unQ k2) k1)); Auto.
Apply plusQ_comp.
Apply eqQ_trans with (multQ (multQ k k2) (divQ unQ k2)); Auto.
Apply eqQ_trans with (divQ (multQ k k2) k2); Auto.
Apply eqQ_trans with (divQ (multQ k2 k) k2); Auto.
Apply eqQ_trans with (multQ k1 (divQ unQ k2)); Auto.
Save
.
Hints Resolve plusQ_frac.
Lemma
no_divQ_zero: (c,c':Q)(~(eqQ c OQ))->
(~(eqQ c' OQ))->~(eqQ (divQ c c') OQ).
Intros.
Apply comp_nOQ with (multQ c (invQ c')); Auto.
Save
.
Lemma
decQ_t: (k,k':Q) {eqQ k k'}+{~(eqQ k k')}.
Intros.
(Elim (decQ (plusQ k (multQ_neg k'))); Intros).
Left.
(Apply eqQ_trans with (multQ_neg (multQ_neg k')); Auto).
Right.
(Red; Intros).
Elim b.
Apply suma_op.
(Apply eqQ_trans with k'; Auto).
Save
.
Hints Resolve decQ_t.
Index
This page has been generated by coqdoc