This PR introduces `Lean.Grind.Field`, proves that a `IsCharP 0` field satisfies `NoNatZeroDivisors`, and sets up some basic (currently failing) tests for `grind`.
31 lines
1.3 KiB
Text
31 lines
1.3 KiB
Text
open Lean.Grind
|
||
|
||
variable (R : Type u) [Field R]
|
||
|
||
example (a : R) : (1 / 2) * a = a / 2 := by grind
|
||
example (a : R) : 2⁻¹ * a = a / 2 := by grind
|
||
example (a : R) : a⁻¹⁻¹ = a := by grind
|
||
|
||
example (a : R) : (2 * a)⁻¹ = a⁻¹ / 2 := by grind
|
||
|
||
example [IsCharP R 0] (a : R) : a / 2 + a / 3 = 5 * a / 6 := by grind
|
||
|
||
example (_ : x ≠ 0) (_ : z ≠ 0) : w / x + y / z = (w * z + y * x) / (x * z) := by grind
|
||
example (_ : x * z ≠ 0) : w / x + y / z = (w * z + y * x) / (x * z) := by grind
|
||
|
||
example {x y z w : R} (h : x / y = z / w) (hy : y ≠ 0) (hw : w ≠ 0) : x * w = z * y := by
|
||
grind
|
||
|
||
example (a : R) (_ : 2 * a ≠ 0) : 1 / a + 1 / (2 * a) = 3 / (2 * a) := by grind
|
||
example [IsCharP R 0] (a : R) : 1 / a + 1 / (2 * a) = 3 / (2 * a) := by grind
|
||
example [NoNatZeroDivisors R] (a : R) : 1 / a + 1 / (2 * a) = 3 / (2 * a) := by grind
|
||
example (a : R) (_ : (2 : R) ≠ 0) : 1 / a + 1 / (2 * a) = 3 / (2 * a) := by grind
|
||
|
||
example (a b : R) (_ : a ≠ 0) (_ : b ≠ 0) : a / (a / b) = b := by grind
|
||
example (a b : R) (_ : a ≠ 0) : a / (a / b) = b := by grind
|
||
|
||
-- TODO: create a mock implementation of `ℚ` for testing purposes.
|
||
variable (ℚ : Type) [Field ℚ] [IsCharP ℚ 0]
|
||
|
||
example (x : ℚ) (h₀ : x ≠ 0) :
|
||
(4 / x)⁻¹ * ((3 * x^3) / x)^2 * ((1 / (2 * x))⁻¹)^3 = 18 * x^8 := by grind
|