Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.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 VariablesF f.Sectionfield_properties.Context `{IsField F}.Definitionrecip' (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
exact (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: (funy : 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: (funy : 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: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y E: x = y
transport (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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: (funy : 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
applysymmetry;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
applysymmetry;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 * 1 ≶ 1 * 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
applysymmetry;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
applysymmetry;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
forallz : 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
forallz : 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
forallz : 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
forallz : 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
exact (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
forallz : 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
forallz : 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
forallz : 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
forallz : 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
exact (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
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.#[export] Instanceisintegraldomain_field : 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
forallx : ApartZero F, PropHolds (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
forallx : ApartZero F, PropHolds (x.1 ≶ 0)
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
1 ≶ 0
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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : F => y ≶ 0) (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 Px: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : F => y ≶ 0) (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 Px: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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: (funy : F => y ≶ 0) x Py: (funy : F => y ≶ 0) y Pxy: (funy : 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
1 ≶ 0
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
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.Endfield_properties.(* Due to bug #2528 *)#[export]
Hint Extern8 (PropHolds (// _ ≶ 0)) =>
eapply @recip_apart_zero : typeclass_instances.#[export]
Hint Extern8 (PropHolds (_ * _ ≶ 0)) =>
eapply @mult_apart_zero : typeclass_instances.Sectionmorphisms.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)
(forallx : 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)
(forallx : 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: forallx : 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: forallx : F1, x ≶ 0 -> f x ≶ 0
forallxy : 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: forallx : 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: forallx : 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: forallx : 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: forallx : 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: forallx : 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: forallx : 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)
forallx : 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 1 ≶ 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
1 ≶ 0
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: (funy : F1 => y ≶ 0) x Pfx: (funy : 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: (funy : F1 => y ≶ 0) x Pfx: (funy : 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: (funy : F1 => y ≶ 0) x Pfx: (funy : 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: (funy : F1 => y ≶ 0) x Pfx: (funy : 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: (funy : F1 => y ≶ 0) x Pfx: (funy : 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: (funy : F1 => y ≶ 0) x Pfx: (funy : 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: (funy : F1 => y ≶ 0) x Pfx: (funy : 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: (funy : F1 => y ≶ 0) x Pfx: (funy : F2 => y ≶ 0) (f x)