Section mCoef.
Load "hCoefStructure".
Load "mCoefStructure".
Let eqA_trans := eqA_trans _ _ _ _ _ _ _ _ _ cs.
Let eqA_sym := eqA_sym _ _ _ _ _ _ _ _ _ cs.
intros a b H H1; apply eqA_trans with (y := a); auto.
Qed.
intros a b c H'; auto.
Qed.
intros a b c H'; auto.
Qed.
intros a b H'; apply eqA_trans with (y := plusA A0 b); auto.
apply eqA_trans with (y := plusA b A0); auto.
Qed.
intros a b H'; apply eqA_trans with (y := plusA a A0); auto.
Qed.
apply eqA_trans with (y := plusA A0 (invA A0)); auto.
apply eqA_trans with (y := plusA (invA A0) A0); auto.
Qed.
intros a H'; apply eqA_sym; apply eqA_trans with (y := A0); auto.
apply eqA_trans with (y := invA A0); auto.
apply eqA_sym; apply invA0; auto.
Qed.
intros a.
apply eqA_trans with (y := plusA a A0); auto.
apply eqA_trans with (y := plusA A0 a); auto.
apply eqA_trans with (y := plusA (plusA (invA a) (invA (invA a))) a); auto.
apply eqA_trans with (y := plusA (plusA (invA (invA a)) (invA a)) a); auto.
apply eqA_trans with (y := plusA (invA (invA a)) (plusA (invA a) a)); auto.
apply eqA_trans with (y := plusA (invA (invA a)) (plusA a (invA a))); auto.
apply eqA_trans with (y := plusA (invA (invA a)) A0); auto.
Qed.
intros a b c H'; auto.
Qed.
intros a b c H'; auto.
Qed.
intros a b c; apply eqA_trans with (y := plusA (multA c a) (multA c b)); auto.
apply eqA_trans with (y := multA c (plusA a b)); auto.
Qed.
intros a; apply eqA_trans with (y := multA A0 a); auto.
Qed.
intros a; apply eqA_trans with (y := multA A1 a); auto.
Qed.
Hint Resolve multA_A1_r.
intros a b; apply eqA_trans with (y := plusA (invA (multA a b)) A0); auto.
apply eqA_trans with (y := plusA A0 (invA (multA a b))); auto.
apply eqA_trans with (y := plusA (multA A0 b) (invA (multA a b))); auto.
apply
eqA_trans with (y := plusA (multA (plusA a (invA a)) b) (invA (multA a b)));
auto.
apply
eqA_trans
with (y := plusA (plusA (multA a b) (multA (invA a) b)) (invA (multA a b)));
auto.
apply
eqA_trans
with (y := plusA (plusA (multA (invA a) b) (multA a b)) (invA (multA a b)));
auto.
apply
eqA_trans
with (y := plusA (multA (invA a) b) (plusA (multA a b) (invA (multA a b))));
auto.
apply eqA_trans with (y := plusA (multA (invA a) b) A0); auto.
apply plusA_eqA_comp with (1 := cs); auto.
apply multA_dist_r.
Qed.
Hint Resolve multA_invA_com_l.
intros a b; apply eqA_trans with (y := multA (invA b) a); auto.
apply eqA_trans with (y := invA (multA b a)); auto.
Qed.
Hint Resolve multA_invA_com_r.
intros a b c nZc; apply eqA_trans with (y := divA (multA b a) c nZc); auto.
apply eqA_trans with (y := multA (divA b c nZc) a); auto.
apply divA_multA_comp_r with (1 := cs); auto.
Qed.
Hint Resolve divA_multA_comp_l.
intros a; apply eqA_trans with (y := plusA (invA a) A0); auto.
apply eqA_trans with (y := plusA (invA a) (multA A0 a)); auto.
apply eqA_trans with (y := plusA (invA a) (multA (plusA A1 (invA A1)) a));
auto.
apply
eqA_trans
with (y := plusA (invA a) (plusA (multA A1 a) (multA (invA A1) a)));
auto.
apply plusA_eqA_comp with (1 := cs); auto.
apply eqA_sym; auto.
apply multA_dist_r.
apply eqA_trans with (y := plusA (invA a) (plusA a (multA (invA A1) a)));
auto.
apply eqA_trans with (y := plusA (plusA (invA a) a) (multA (invA A1) a));
auto.
apply eqA_trans with (y := plusA (plusA a (invA a)) (multA (invA A1) a));
auto.
apply eqA_trans with (y := plusA A0 (multA (invA A1) a)); auto.
apply eqA_trans with (y := plusA (multA (invA A1) a) A0); auto.
Qed.
intros a nZa; apply eqA_trans with (y := divA (multA A0 a) a nZa).
apply divA_eqA_comp with (1 := cs); auto.
apply eqA_trans with (y := multA A0 (divA a a nZa)); auto.
Qed.
Hint Resolve divA_A0_l.
intros a b H'; case (eqA_dec a A0); auto; case (eqA_dec b A0); auto.
intros nZb nZa; case nZa.
apply eqA_trans with (y := multA (divA a b nZb) b); auto.
apply divA_is_multA with (1 := cs); auto.
apply eqA_trans with (y := divA (multA a b) b nZb); auto.
apply eqA_sym; apply divA_multA_comp_r with (1 := cs); auto.
apply eqA_trans with (y := divA A0 b nZb); auto.
Qed.
Hint Resolve A_sep.

Theorem divA_A1 : forall (a : A) (nZa : ~ eqA a A0), eqA (divA a a nZa) A1.