Section Lemmas1.
Variable K : FIELD.
Definition field_inverse (x : K) : K := Ap (field_inverse_map K) x.
Definition field_div (x y : K) : K := ring_mult x (field_inverse y).
exact (field_inverse_r_prf K).
Qed.
exact (field_inverse_l_prf K).
Qed.
exact (field_unit_non_zero K).
Qed.
unfold field_inverse in |- *.
auto with algebra.
Qed.
Hint Resolve FIELD_comp FIELD_inverse_r FIELD_inverse_l FIELD_unit_non_zero:
algebra.
apply Trans with (ring_mult (field_inverse (ring_unit K)) (ring_unit K));
auto with algebra.
Qed.
Hint Resolve FIELD_unit_inverse: algebra.
intros x y z H' H'0; try assumption.
apply Trans with (ring_mult (ring_unit K) y).
auto with algebra.
apply Trans with (ring_mult (ring_mult (field_inverse x) x) y).
apply Sym; auto with algebra.
apply Trans with (ring_mult (field_inverse x) (ring_mult x y)).
auto with algebra.
apply Trans with (ring_mult (field_inverse x) (ring_mult x z)).
auto with algebra.
apply Trans with (ring_mult (ring_mult (field_inverse x) x) z).
auto with algebra.
apply Trans with (ring_mult (ring_unit K) z); auto with algebra.
Qed.
intros x y z H' H'0; try assumption.
apply Trans with (ring_mult y (ring_unit K)).
auto with algebra.
apply Trans with (ring_mult y (ring_mult x (field_inverse x))).
apply Sym; auto with algebra.
apply Trans with (ring_mult (ring_mult y x) (field_inverse x)).
auto with algebra.
apply Trans with (ring_mult (ring_mult z x) (field_inverse x)).
auto with algebra.
apply Trans with (ring_mult z (ring_mult x (field_inverse x))).
auto with algebra.
apply Trans with (ring_mult z (ring_unit K)).
auto with algebra.
auto with algebra.
Qed.
intuition.
apply FIELD_unit_non_zero.
apply Trans with (ring_mult (field_inverse x) x:K); auto with algebra.
apply Sym; auto with algebra.
apply Trans with (ring_mult (monoid_unit K) x:K); auto with algebra.
Qed.
Hint Resolve FIELD_inverse_non_zero: algebra.
intros x H'; try assumption.
apply FIELD_reg_right with (field_inverse x); auto with algebra.
apply Trans with (ring_unit K:K); auto with algebra.
apply Sym; auto with algebra.
Qed.
Hint Resolve FIELD_inverse_inverse: algebra.
unfold not in |- *.
intros x y H' H'0; try assumption.
absurd (Equal (ring_mult x y) (monoid_unit K)); auto with algebra.
apply Trans with (ring_mult (monoid_unit K) y:K); auto with algebra.
Qed.
unfold not in |- *.
intros x y H' H'0; try assumption.
absurd (Equal (ring_mult x y) (monoid_unit K)); auto with algebra.
apply Trans with (ring_mult x (monoid_unit K):K); auto with algebra.
Qed.
intros x y H'; try assumption.
apply FIELD_reg_left with x.
apply FIELD_integral_domain_l with y; auto with algebra.
intuition.
absurd (Equal (ring_unit K) (monoid_unit K)); auto with algebra.
apply Trans with (ring_mult x y:K); auto with algebra.
apply Trans with (ring_unit K:K); auto with algebra.
apply FIELD_inverse_r.
intuition.
absurd (Equal (ring_unit K) (monoid_unit K)); auto with algebra.
apply Trans with (ring_mult x y:K); auto with algebra.
apply Trans with (ring_mult (monoid_unit K) y:K); auto with algebra.
Qed.
intros x y H' H'0; try assumption.
apply FIELD_law_inverse.
apply
Trans
with
(ring_mult x
(ring_mult y (ring_mult (field_inverse y) (field_inverse x)))
:K); auto with algebra.
apply
Trans
with
(ring_mult x
(ring_mult (ring_mult y (field_inverse y)) (field_inverse x))
:K); auto with algebra.
apply Trans with (ring_mult x (ring_mult (ring_unit K) (field_inverse x)):K);
auto with algebra.
apply Trans with (ring_mult x (field_inverse x):K); auto with algebra.
Qed.
Hint Resolve FIELD_inverse_law: algebra.
unfold field_div in |- *; auto with algebra.
Qed.
Hint Resolve FIELD_x_div_x: algebra.
unfold field_div in |- *.
intros x y H'; try assumption.
apply Trans with (ring_mult x (ring_mult (field_inverse y) y):K);
auto with algebra.
apply Trans with (ring_mult x (ring_unit K):K); auto with algebra.
Qed.
Hint Resolve FIELD_simpl_r: algebra.
unfold field_div in |- *; auto with algebra.
Qed.
Hint Resolve FIELD_one_div_x: algebra.
unfold field_div in |- *.
intros x y H' H'0; try assumption.
apply Trans with (field_inverse (ring_mult x y):K); auto with algebra.
apply Trans with (ring_mult (field_inverse y) (field_inverse x):K);
auto with algebra.
Qed.
Hint Resolve FIELD_one_div_xy: algebra.
unfold field_div in |- *.
intros x y H' H'0; try assumption.
apply Trans with (field_inverse (ring_mult x (field_inverse y)):K);
auto with algebra.
apply
Trans with (ring_mult (field_inverse (field_inverse y)) (field_inverse x):K);
auto with algebra.
Qed.
Hint Resolve FIELD_one_div_div: algebra.

Lemma FIELD_div_div :
forall x y z : K,
~ Equal y (monoid_unit K) ->
~ Equal z (monoid_unit K) ->
Equal (field_div x (field_div y z)) (field_div (ring_mult x z) y).