Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Export HoTT.Classes.theory.rings. Generalizable Variables F f. Section field_properties. Context `{IsField F}. Definition recip' (x : F) (apx : x ≶ 0) : F := //(x;apx). (* Add Ring F : (stdlib_ring_theory F). *)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

x // (x; Px) = 1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

x // (x; Px) = 1
apply (recip_inverse (x;Px)). Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: (fun y : F => y ≶ 0) x

x // (x; Px) = 1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: (fun y : F => y ≶ 0) x

x // (x; Px) = 1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: (fun y : F => y ≶ 0) x

x // (x; Px) = (x; Px).1 // (x; Px)
trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y

x = y -> // (x; Px) = // (y; Py)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y

x = y -> // (x; Px) = // (y; Py)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
E: x = y

// (x; Px) = // (y; Py)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
E: x = y

(x; Px) = (y; Py)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
E: x = y

transport (fun y : F => y ≶ 0) E (x; Px).2 = (y; Py).2
apply path_ishprop. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y

x // (y; Py) = 1 -> x = y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y

x // (y; Py) = 1 -> x = y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y
eqxy: x // (y; Py) = 1

x = y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y
eqxy: x // (y; Py) = 1

x = y * 1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y
eqxy: x // (y; Py) = 1

x = y * (x // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y
eqxy: x // (y; Py) = 1

x = y * x // (y; Py)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y
eqxy: x // (y; Py) = 1

x = x * y // (y; Py)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y
eqxy: x // (y; Py) = 1

x = x * (y // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y
eqxy: x // (y; Py) = 1

x = x * 1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Py: (fun y : F => y ≶ 0) y
eqxy: x // (y; Py) = 1

x = x
reflexivity. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px1, Px2: (fun y : F => y ≶ 0) x

// (x; Px1) = // (x; Px2)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px1, Px2: (fun y : F => y ≶ 0) x

// (x; Px1) = // (x; Px2)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px1, Px2: (fun y : F => y ≶ 0) x

x = x
reflexivity. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F

x ≶ 0 -> x = y -> y ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F

x ≶ 0 -> x = y -> y ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
X: x ≶ 0
E: x = y

y ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
X: x ≶ 0
E: x = y

x ≶ 0
trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

IsStrongInjective negate
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

IsStrongInjective negate
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: x ≶ y

- x ≶ - y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: - x ≶ - y
x ≶ y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: x ≶ y

- x ≶ - y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: x ≶ y

- x + (x + y) ≶ - y + (x + y)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: x ≶ y

y ≶ - y + (x + y)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: x ≶ y

y ≶ x
apply symmetry;trivial.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: - x ≶ - y

x ≶ y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: - x ≶ - y

x + (- x - y) ≶ y + (- x - y)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: - x ≶ - y

- y ≶ y + (- x - y)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
E: - x ≶ - y

- y ≶ - x
apply symmetry;trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

IsStrongInjective recip
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

IsStrongInjective recip
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: x ≶ y

// x ≶ // y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: // x ≶ // y
x ≶ y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: x ≶ y

// x ≶ // y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: x ≶ y

x.1 // x ≶ x.1 // y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: x ≶ y

1 ≶ // y * x.1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: x ≶ y

y.1 * 1 ≶ y.1 * (// y * x.1)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: x ≶ y

y.1 * 11 * x.1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: x ≶ y

y.1 ≶ x.1
apply symmetry;trivial.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: // x ≶ // y

x ≶ y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: // x ≶ // y

x.1 // x ≶ y.1 // x
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: // x ≶ // y

1 ≶ // x * y.1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: // x ≶ // y

1 // y ≶ // x * y.1 // y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: // x ≶ // y

1 // y ≶ // x * 1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: ApartZero F
E: // x ≶ // y

// y ≶ // x
apply symmetry;trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall z : F, StrongLeftCancellation plus z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall z : F, StrongLeftCancellation plus z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z, x, y: F
E: x ≶ y

z + x ≶ z + y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z, x, y: F
E: x ≶ y

z + x - z ≶ z + y - z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z, x, y: F
E: x ≶ y

x ≶ y
trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall z : F, StrongRightCancellation plus z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall z : F, StrongRightCancellation plus z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z: F

StrongRightCancellation plus z
apply (strong_right_cancel_from_left (+)). Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall z : F, PropHolds (z ≶ 0) -> StrongLeftCancellation mult z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall z : F, PropHolds (z ≶ 0) -> StrongLeftCancellation mult z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z: F
Ez: PropHolds (z ≶ 0)
x, y: F
E: x ≶ y

z * x ≶ z * y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z: F
Ez: z ≶ 0
x, y: F
E: x ≶ y

z * x ≶ z * y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z: F
Ez: z ≶ 0
x, y: F
E: x ≶ y

x * z ≶ y * z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z: F
Ez: z ≶ 0
x, y: F
E: x ≶ y

x * z // (z; Ez) ≶ y * z // (z; Ez)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z: F
Ez: z ≶ 0
x, y: F
E: x ≶ y

x * 1 ≶ y * 1
rewrite !mult_1_r;trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall z : F, PropHolds (z ≶ 0) -> StrongRightCancellation mult z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall z : F, PropHolds (z ≶ 0) -> StrongRightCancellation mult z
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
z: F
X: PropHolds (z ≶ 0)

StrongRightCancellation mult z
apply (strong_right_cancel_from_left (.*.)). Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F

x * y ≶ 0 -> x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F

x * y ≶ 0 -> x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
X: x * y ≶ 0

x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
X: x * y ≶ 0

x * y ≶ 0 * y
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
X: x * y ≶ 0

x * y ≶ 0
trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F

x * y ≶ 0 -> y ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F

x * y ≶ 0 -> y ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
X: x * y ≶ 0

y ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
X: x * y ≶ 0

x * y ≶ x * 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
X: x * y ≶ 0

x * y ≶ 0
trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F

PropHolds (x ≶ 0) -> PropHolds (y ≶ 0) -> PropHolds (x * y ≶ 0)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F

PropHolds (x ≶ 0) -> PropHolds (y ≶ 0) -> PropHolds (x * y ≶ 0)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Ex: PropHolds (x ≶ 0)
Ey: PropHolds (y ≶ 0)

PropHolds (x * y ≶ 0)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Ex: PropHolds (x ≶ 0)
Ey: PropHolds (y ≶ 0)

x * y // (y; Ey) ≶ 0 // (y; Ey)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Ex: PropHolds (x ≶ 0)
Ey: PropHolds (y ≶ 0)

x ≶ 0
trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

NoZeroDivisors F
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

NoZeroDivisors F
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0

Empty
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0

~~ (y ≶ 0)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0
Ey: ~~ (y ≶ 0)
Empty
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0

~~ (y ≶ 0)
intros E';apply y_nonzero,tight_apart,E'.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0
Ey: ~~ (y ≶ 0)

Empty
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0
Ey: ~~ (y ≶ 0)

~ (y ≶ 0)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0
Ey: ~~ (y ≶ 0)
y_apartzero: y ≶ 0

Empty
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0
Ey: ~~ (y ≶ 0)
y_apartzero: y ≶ 0

x = 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0
Ey: ~~ (y ≶ 0)
y_apartzero: y ≶ 0

x * 1 = 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0
Ey: ~~ (y ≶ 0)
y_apartzero: y ≶ 0

x * (y // (y; y_apartzero)) = 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
x_nonzero: x <> 0
y: F
y_nonzero: y <> 0
E: x * y = 0
Ey: ~~ (y ≶ 0)
y_apartzero: y ≶ 0

0 // (y; y_apartzero) = 0
apply mult_0_l. Qed. Global Instance : IsIntegralDomain F := {}.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall x : ApartZero F, PropHolds (x.10)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

forall x : ApartZero F, PropHolds (x.10)
intros [??];trivial. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: ApartZero F

PropHolds (// x ≶ 0)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: ApartZero F

PropHolds (// x ≶ 0)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: ApartZero F

// x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: ApartZero F

x.1 // x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: ApartZero F

10
solve_propholds. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
y: ApartZero F

x = 0 -> x // y = 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
y: ApartZero F

x = 0 -> x // y = 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
y: ApartZero F
E: x = 0

x // y = 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
y: ApartZero F
E: x = 0

0 // y = 0
apply left_absorb. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
y: {y : F & y ≶ 0}

x = y.1 -> x // y = 1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
y: {y : F & y ≶ 0}

x = y.1 -> x // y = 1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
y: {y : F & y ≶ 0}
E: x = y.1

x // y = 1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
y: {y : F & y ≶ 0}
E: x = y.1

y.1 // y = 1
apply recip_inverse. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
a, c: F
b, d: {y : F & y ≶ 0}

a * d.1 = c * b.1 <-> a // b = c // d
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
a, c: F
b, d: {y : F & y ≶ 0}

a * d.1 = c * b.1 <-> a // b = c // d
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
a, c: F
b, d: {y : F & y ≶ 0}
E: a * d.1 = c * b.1

a // b = c // d
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
a, c: F
b, d: {y : F & y ≶ 0}
E: a // b = c // d
a * d.1 = c * b.1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
a, c: F
b, d: {y : F & y ≶ 0}
E: a * d.1 = c * b.1

a // b = c // d
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
a, c: F
b, d: {y : F & y ≶ 0}
E: a * d.1 = c * b.1

// d * c = c // d
apply commutativity.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
a, c: F
b, d: {y : F & y ≶ 0}
E: a // b = c // d

a * d.1 = c * b.1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
a, c: F
b, d: {y : F & y ≶ 0}
E: a // b = c // d

c * b.1 = c * b.1
reflexivity. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

// (x * y; Pxy) = // (x; Px) // (y; Py)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

// (x * y; Pxy) = // (x; Px) // (y; Py)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

x * y <> 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)
x * y // (x * y; Pxy) = x * y * (// (x; Px) // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

x * y <> 0
apply apart_ne;trivial.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

x * y // (x * y; Pxy) = x * y * (// (x; Px) // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

x * y // (x * y; Pxy) = x // (x; Px) * (y // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)
x // (x; Px) * (y // (y; Py)) = x * y * (// (x; Px) // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

x * y // (x * y; Pxy) = x // (x; Px) * (y // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

1 = 1
reflexivity.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

x // (x; Px) * (y // (y; Py)) = x * y * (// (x; Px) // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

x * (// (x; Px) * (y // (y; Py))) = x * (y * (// (x; Px) // (y; Py)))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

// (x; Px) * (y // (y; Py)) = y * (// (x; Px) // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

// (x; Px) * y // (y; Py) = y * (// (x; Px) // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

y // (x; Px) // (y; Py) = y * (// (x; Px) // (y; Py))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x, y: F
Px: (fun y : F => y ≶ 0) x
Py: (fun y : F => y ≶ 0) y
Pxy: (fun y : F => y ≶ 0) (x * y)

y * (// (x; Px) // (y; Py)) = y * (// (x; Px) // (y; Py))
reflexivity. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

- x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

- x ≶ 0
(* Have: x <> 0 *) (* Want to show: -x <> 0 *) (* Since x=x+0 <> 0=x-x, have x<>x or 0<>-x *)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

x + 0 ≶ x - x
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0
ap: x + 0 ≶ x - x
- x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

x + 0 ≶ x - x
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

x ≶ x - x
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

x ≶ 0
assumption.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0
ap: x + 0 ≶ x - x

- x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0
ap: x + 0 ≶ x - x

(x ≶ x) + (0 ≶ - x) -> - x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0
ap: x + 0 ≶ x - x
apxx: x ≶ x

- x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0
ap: x + 0 ≶ x - x
ap0x: 0 ≶ - x
- x ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0
ap: x + 0 ≶ x - x
apxx: x ≶ x

- x ≶ 0
destruct (apart_ne x x apxx); reflexivity.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0
ap: x + 0 ≶ x - x
ap0x: 0 ≶ - x

- x ≶ 0
symmetry; assumption. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

ApartZero F -> ApartZero F
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

ApartZero F -> ApartZero F
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

ApartZero F
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

- x ≶ 0
exact ((apart_negate x Px)). Defined.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

- (// (x; Px)) = // negate_apart (x; Px)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

- (// (x; Px)) = // negate_apart (x; Px)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

x * - (// (x; Px)) = x // negate_apart (x; Px)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

- (x // (x; Px)) = x // negate_apart (x; Px)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

-1 = x // negate_apart (x; Px)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

1 = - (x // negate_apart (x; Px))
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

1 = - x // negate_apart (x; Px)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

- x // negate_apart (x; Px) = 1
apply reciperse_alt. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

// (x; Px) ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

// (x; Px) ≶ 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

x // (x; Px) ≶ x * 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

1 ≶ x * 0
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
Px: x ≶ 0

10
solve_propholds. Qed.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: ApartZero F

ApartZero F
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: ApartZero F

ApartZero F
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: ApartZero F

// x ≶ 0
apply recip_apart. Defined.
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

Involutive recip_on_apart
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F

Involutive recip_on_apart
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
apx0: x ≶ 0

recip_on_apart (recip_on_apart (x; apx0)) = (x; apx0)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
apx0: x ≶ 0

(recip_on_apart (recip_on_apart (x; apx0))).1 = (x; apx0).1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
apx0: x ≶ 0

(// (// (x; apx0); recip_apart (x; apx0).1 (x; apx0).2); recip_apart (// (x; apx0); recip_apart (x; apx0).1 (x; apx0).2).1 (// (x; apx0); recip_apart (x; apx0).1 (x; apx0).2).2).1 = (x; apx0).1
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
apx0: x ≶ 0

// (// (x; apx0); recip_apart x apx0) = x
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
apx0: x ≶ 0

// (x; apx0) // (// (x; apx0); recip_apart x apx0) = // (x; apx0) * x
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
apx0: x ≶ 0

1 = // (x; apx0) * x
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
apx0: x ≶ 0

1 = x // (x; apx0)
F: Type
Aplus: Plus F
Amult: Mult F
Azero: Zero F
Aone: One F
Anegate: Negate F
Aap: Apart F
Arecip: Recip F
H: IsField F
x: F
apx0: x ≶ 0

1 = 1
reflexivity. Qed. End field_properties. (* Due to bug #2528 *) #[export] Hint Extern 8 (PropHolds (// _ ≶ 0)) => eapply @recip_apart_zero : typeclass_instances. #[export] Hint Extern 8 (PropHolds (_ * _ ≶ 0)) => eapply @mult_apart_zero : typeclass_instances. Section morphisms. Context `{IsField F1} `{IsField F2} `{!IsSemiRingStrongPreserving (f : F1 -> F2)}. (* Add Ring F1 : (stdlib_ring_theory F1). *)
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)

(forall x : F1, x ≶ 0 -> f x ≶ 0) -> IsStrongInjective f
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)

(forall x : F1, x ≶ 0 -> f x ≶ 0) -> IsStrongInjective f
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
E1: forall x : F1, x ≶ 0 -> f x ≶ 0

IsStrongInjective f
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
E1: forall x : F1, x ≶ 0 -> f x ≶ 0

forall x y : F1, x ≶ y -> f x ≶ f y
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
E1: forall x : F1, x ≶ 0 -> f x ≶ 0
x, y: F1
E2: x ≶ y

f x ≶ f y
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
E1: forall x : F1, x ≶ 0 -> f x ≶ 0
x, y: F1
E2: x ≶ y

f x - f y ≶ f y - f y
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
E1: forall x : F1, x ≶ 0 -> f x ≶ 0
x, y: F1
E2: x ≶ y

f (x - y) ≶ 0
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
E1: forall x : F1, x ≶ 0 -> f x ≶ 0
x, y: F1
E2: x ≶ y

x - y ≶ 0
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
E1: forall x : F1, x ≶ 0 -> f x ≶ 0
x, y: F1
E2: x ≶ y

x - y + y ≶ 0 + y
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
E1: forall x : F1, x ≶ 0 -> f x ≶ 0
x, y: F1
E2: x ≶ y

x ≶ y
trivial. Qed. (* We have the following for morphisms to non-trivial strong rings as well. However, since we do not have an interface for strong rings, we ignore it. *)
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)

IsStrongInjective f
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)

IsStrongInjective f
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)

forall x : F1, x ≶ 0 -> f x ≶ 0
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Ex: x ≶ 0

f x ≶ 0
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Ex: x ≶ 0

f x * f (// (x; Ex)) ≶ 0
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Ex: x ≶ 0

f (x // (x; Ex)) ≶ 0
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Ex: x ≶ 0

f 10
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Ex: x ≶ 0

10
solve_propholds. Qed.
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Px: (fun y : F1 => y ≶ 0) x
Pfx: (fun y : F2 => y ≶ 0) (f x)

f (// (x; Px)) = // (f x; Pfx)
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Px: (fun y : F1 => y ≶ 0) x
Pfx: (fun y : F2 => y ≶ 0) (f x)

f (// (x; Px)) = // (f x; Pfx)
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Px: (fun y : F1 => y ≶ 0) x
Pfx: (fun y : F2 => y ≶ 0) (f x)

f x <> 0
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Px: (fun y : F1 => y ≶ 0) x
Pfx: (fun y : F2 => y ≶ 0) (f x)
f x * f (// (x; Px)) = f x // (f x; Pfx)
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Px: (fun y : F1 => y ≶ 0) x
Pfx: (fun y : F2 => y ≶ 0) (f x)

f x <> 0
apply apart_ne;trivial.
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Px: (fun y : F1 => y ≶ 0) x
Pfx: (fun y : F2 => y ≶ 0) (f x)

f x * f (// (x; Px)) = f x // (f x; Pfx)
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Px: (fun y : F1 => y ≶ 0) x
Pfx: (fun y : F2 => y ≶ 0) (f x)

f (x // (x; Px)) = f x // (f x; Pfx)
F1: Type
Aplus: Plus F1
Amult: Mult F1
Azero: Zero F1
Aone: One F1
Anegate: Negate F1
Aap: Apart F1
Arecip: Recip F1
H: IsField F1
F2: Type
Aplus0: Plus F2
Amult0: Mult F2
Azero0: Zero F2
Aone0: One F2
Anegate0: Negate F2
Aap0: Apart F2
Arecip0: Recip F2
H0: IsField F2
f: F1 -> F2
IsSemiRingStrongPreserving0: IsSemiRingStrongPreserving (f : F1 -> F2)
x: F1
Px: (fun y : F1 => y ≶ 0) x
Pfx: (fun y : F2 => y ≶ 0) (f x)

f 1 = 1
apply preserves_1. Qed. End morphisms.