open Lean.Grind section IntModule variable (M : Type) [IntModule M] example (x y : M) : 2 * x + 3 * y + x = 3 * (x + y) := by grind variable [LinearOrder M] [OrderedAdd M] example {x y : M} (h : x ≤ y) : 2 * x + y ≤ 3 * y := by grind end IntModule -- We could solve these problems by embedding the NatModule in its Grothendieck completion. section NatModule variable (M : Type) [NatModule M] example (x y : M) : 2 * x + 3 * y + x = 3 * (x + y) := by grind variable [LinearOrder M] [OrderedAdd M] example {x y : M} (h : x ≤ y) : 2 * x + y ≤ 3 * y := by grind end NatModule