This PR adds a `HPow \a Int \a` field to `Lean.Grind.Field`, and sufficient axioms to connect it to the operations, so that in future we can reason about exponents in `grind`. To avoid collisions, we also move the `HPow \a Nat \a` field in `Semiring` from the extends clause to a field. Finally, we add some failing tests about normalizing exponents.
29 lines
841 B
Text
29 lines
841 B
Text
open Lean.Grind
|
|
|
|
section CommRing
|
|
|
|
variable (R : Type) [CommRing R]
|
|
|
|
example (a : R) (n : Nat) : a^(n + 1) = a^n * a := by grind
|
|
example (a : R) (n m : Nat) : a^(n + m) = a^n * a^m := by grind
|
|
example (a : R) (n m : Nat) : a^(n + m) = a^m * a^n := by grind
|
|
example (a : R) (n m : Nat) : a^(n + m + n) = a^m * a^(2*n) := by grind
|
|
|
|
example (n m : Nat) : (n+m)^2 = n^2 + 2*n*m + m^2 := by grind
|
|
example (a : R) (n m : Nat) : a^((n+m)^2) = a^(n^2 + 2*n*m + m^2) := by grind
|
|
example (a : R) (n m : Nat) : a^((n+m)^2) = a^(n^2) * a^(2*n*m) * a^(m^2) := by grind
|
|
|
|
end CommRing
|
|
|
|
|
|
section Field
|
|
|
|
variable (F : Type) [Field F]
|
|
|
|
example (a : F) (n m : Int) : a^(n + m - n) = a^m := by grind
|
|
|
|
example (a : F) (n m : Int) : a^(n - m) = a^n / a^m := by grind
|
|
|
|
example (a : F) (n m : Int) : a^((n - m) * (n + m)) = a^(n^2) / a^(m^2) := by grind
|
|
|
|
end Field
|