Zulip Chat Archive

Stream: new members

Topic: How to solve m * (m - 1) + m * 2 = m + m ^ 2 for Nat


Heliopolis (Dec 04 2024 at 09:26):

I had trouble with solving m * (m - 1) + m * 2 = m + m ^ 2 where m is a natural number. 'omega' cannot easily do it. Here is my solution and I believe it is unnecessarily long:

import Mathlib

example (m : ) : m * (m - 1) + m * 2 = m + m ^ 2 := by

  -- discuss m = 0 and m ≠ 0

  by_cases h : m = 0

  . -- when m = 0 its trivial

    rw [h]

    norm_num

  . -- when m ≠ 0

    replace h : m  0 := by omega

    -- prove it by calculation

    calc m * (m - 1) + m * 2 = m * (m - 1) + m + m := by omega

      _ = m * (m - 1 + 1) + m := by linarith

      _ = m * m + m := by rw [Nat.sub_one_add_one h] -- m - 1 + 1 = m

      _ = m + m ^ 2 := by ring

Could somebody help me with it? How to solve it simpler? Thanks a lot!

Markus Himmel (Dec 04 2024 at 09:35):

Here is a proof that is similar to yours but slightly shorter:

import Mathlib

example {m : Nat} : m * (m - 1) + m * 2 = m + m ^ 2 :=
  match m with
  | 0 => by simp
  | m + 1 => by
    simp only [add_tsub_cancel_right]
    ring

Riccardo Brasca (Dec 04 2024 at 09:36):

@Heliopolis there are surely various ways of golfing it (ie making it shorter), but my suggestion is in general to avoid natural subtraction, at least if you are a beginner.

Heliopolis (Dec 04 2024 at 09:48):

@Markus Himmel Thanks a lot!


Last updated: May 02 2025 at 03:31 UTC