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).

(* Specifications: *)
Lemma FIELD_inverse_r : forall x : K, ~ Equal x (monoid_unit K) -> Equal (ring_mult x (field_inverse x)) (ring_unit K).
Lemma FIELD_inverse_l : forall x : K, ~ Equal x (monoid_unit K) -> Equal (ring_mult (field_inverse x) x) (ring_unit K).
Lemma FIELD_unit_non_zero : ~ Equal (ring_unit K) (monoid_unit K).
Lemma FIELD_comp : forall x x' : K, Equal x x' -> Equal (field_inverse x) (field_inverse x').
Lemma FIELD_unit_inverse : Equal (field_inverse (ring_unit K)) (ring_unit K).
Lemma FIELD_reg_left : forall x y z : K, ~ Equal x (monoid_unit K) -> Equal (ring_mult x y) (ring_mult x z) -> Equal y z.
Lemma FIELD_reg_right : forall x y z : K, ~ Equal x (monoid_unit K) -> Equal (ring_mult y x) (ring_mult z x) -> Equal y z.
Lemma FIELD_inverse_non_zero : forall x : K, ~ Equal x (monoid_unit K) -> ~ Equal (field_inverse x) (monoid_unit K).
Lemma FIELD_inverse_inverse : forall x : K, ~ Equal x (monoid_unit K) -> Equal (field_inverse (field_inverse x)) x.
Lemma FIELD_integral_domain_l : forall x y : K, ~ Equal (ring_mult x y) (monoid_unit K) -> ~ Equal x (monoid_unit K).
Lemma FIELD_integral_domain_r : forall x y : K, ~ Equal (ring_mult x y) (monoid_unit K) -> ~ Equal y (monoid_unit K).
Lemma FIELD_law_inverse : forall x y : K, Equal (ring_mult x y) (ring_unit K) -> Equal (field_inverse x) y.
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)).
Lemma FIELD_x_div_x : forall x : K, ~ Equal x (monoid_unit K) -> Equal (field_div x x) (ring_unit K).
Lemma FIELD_simpl_r : forall x y : K, ~ Equal y (monoid_unit K) -> Equal (ring_mult (field_div x y) y) x.
Lemma FIELD_one_div_x : forall x : K, ~ Equal x (monoid_unit K) -> Equal (field_div (ring_unit K) x) (field_inverse x).
Lemma FIELD_one_div_xy : forall x y : K, ~ Equal x (monoid_unit K) -> ~ Equal y (monoid_unit K) -> Equal (field_div (ring_unit K) (ring_mult x y)) (ring_mult (field_div (ring_unit K) y) (field_div (ring_unit K) x)).
Lemma FIELD_one_div_div : forall x y : K, ~ Equal x (monoid_unit K) -> ~ Equal y (monoid_unit K) -> Equal (field_div (ring_unit K) (field_div x y)) (field_div y x).
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).
Lemma FIELD_mult_div_l : forall x y z : K, Equal (ring_mult x (field_div y z)) (field_div (ring_mult x y) z).
Lemma FIELD_div_div2 : forall x y z : K, ~ Equal y (monoid_unit K) -> ~ Equal z (monoid_unit K) -> Equal (field_div (field_div x y) z) (field_div x (ring_mult z y)).
Lemma FIELD_inv_div : forall x y : K, ~ Equal x (monoid_unit K) -> ~ Equal y (monoid_unit K) -> Equal (field_inverse (field_div x y)) (field_div y x).