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.

Lemma FIELD_inverse_law :
forall x y : K,
~ Equal x (monoid_unit K) ->
~ Equal y (monoid_unit K) ->
Equal (field_inverse (ring_mult x y))
(ring_mult (field_inverse y) (field_inverse x)).