/- Copyright 2025 The Formal Conjectures Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -/ import FormalConjecturesUtil

Mathoverflow 75792

Various questions about integer complexity, which is the minimum number of 1s needed to express a natural number using addition, multiplication, and parentheses.

Let ‖n‖ denote the integer complexity of n > 0.

    It is known that ‖3^n‖ = 3n for n > 0.

    Is it true that ‖2^n‖ = 2n for n > 0?

    The corresponding conjecture for 5 is false, because 5^6 = 15625 = 1 + 2^3 * 3^2 * (1 + 2^3 * 3^3)!

We have chosen to formalise this using an inductive type.

References:

    mathoverflow/75792 by user Harry Altman

    http://arxiv.org/abs/1203.6462 by Jānis Iraids, Kaspars Balodis, Juris Čerņenoks, Mārtiņš Opmanis, Rihards Opmanis, Kārlis Podnieks

    http://arxiv.org/abs/1207.4841 by Harry Altman, Joshua Zelinsky

    https://oeis.org/A5245 : Mahler-Popken complexity.

namespace Mathoverflow75792

The inductively defined predicate that m is reachable in n steps.

inductive Reachable : Prop | one : Reachable 1 1 | add {m n a b} : Reachable m a Reachable n b Reachable (m + n) (a + b) | mul {m n a b} : Reachable m a Reachable n b Reachable (m * n) (a + b) @[category test, AMS 11] theorem Reachable.self (n : ) (hn : 0 < n) : Reachable n n := Nat.le_induction .one (fun _ _ ih .add ih .one) n hn @[category test, AMS 11] theorem not_reachable_zero_fst (n : ) : ¬ Reachable 0 n := n:¬Reachable 0 n n:h:Reachable 0 nFalse; n:m:hm:0 = mh:Reachable m nFalse; induction h with n:m:hm:0 = 1False exact absurd hm (n:m:hm:0 = 1¬0 = 1 All goals completed! 🐙) n:m:m✝:n✝:a✝:b✝:h₁:Reachable m✝ a✝h₂:Reachable n✝ b✝a_ih✝¹:0 = m✝ Falsea_ih✝:0 = n✝ Falsehm:0 = m✝ + n✝False n:m:m✝:n✝:a✝:b✝:h₁:Reachable m✝ a✝h₂:Reachable n✝ b✝a_ih✝¹:0 = m✝ Falsea_ih✝:0 = n✝ Falsehm:m✝ = 0 n✝ = 0False; All goals completed! 🐙 n:m:m✝:n✝:a✝:b✝:h₁:Reachable m✝ a✝h₂:Reachable n✝ b✝a_ih✝¹:0 = m✝ Falsea_ih✝:0 = n✝ Falsehm:0 = m✝ * n✝False n:m:m✝:n✝:a✝:b✝:h₁:Reachable m✝ a✝h₂:Reachable n✝ b✝a_ih✝¹:0 = m✝ Falsea_ih✝:0 = n✝ Falsehm:m✝ = 0 n✝ = 0False; All goals completed! 🐙 @[category test, AMS 11] theorem not_reachable_zero_snd (m : ) : ¬ Reachable m 0 := m:¬Reachable m 0 m:h:Reachable m 0False; m:n:hn:0 = nh:Reachable m nFalse; induction h with m:n:hn:0 = 1False exact absurd hn (m:n:hn:0 = 1¬0 = 1 All goals completed! 🐙) m:n:m✝:n✝:a✝:b✝:h₁:Reachable m✝ a✝h₂:Reachable n✝ b✝a_ih✝¹:0 = a✝ Falsea_ih✝:0 = b✝ Falsehn:0 = a✝ + b✝False m:n:m✝:n✝:a✝:b✝:h₁:Reachable m✝ a✝h₂:Reachable n✝ b✝a_ih✝¹:0 = a✝ Falsea_ih✝:0 = b✝ Falsehn:a✝ = 0 b✝ = 0False; All goals completed! 🐙 m:n:m✝:n✝:a✝:b✝:h₁:Reachable m✝ a✝h₂:Reachable n✝ b✝a_ih✝¹:0 = a✝ Falsea_ih✝:0 = b✝ Falsehn:0 = a✝ + b✝False m:n:m✝:n✝:a✝:b✝:h₁:Reachable m✝ a✝h₂:Reachable n✝ b✝a_ih✝¹:0 = a✝ Falsea_ih✝:0 = b✝ Falsehn:a✝ = 0 b✝ = 0False; All goals completed! 🐙 @[category test, AMS 11] theorem Reachable.dec {m n : } (h : Reachable m n) : m' n', m' + 1 = m n' + 1 = n := m:n:h:Reachable m n m' n', m' + 1 = m n' + 1 = n n:h:Reachable 0 n m' n', m' + 1 = 0 n' + 1 = nn:m:h:Reachable (m + 1) n m' n', m' + 1 = m + 1 n' + 1 = n n:h:Reachable 0 n m' n', m' + 1 = 0 n' + 1 = n All goals completed! 🐙 m:h:Reachable (m + 1) 0 m' n', m' + 1 = m + 1 n' + 1 = 0m:n:h:Reachable (m + 1) (n + 1) m' n', m' + 1 = m + 1 n' + 1 = n + 1 m:h:Reachable (m + 1) 0 m' n', m' + 1 = m + 1 n' + 1 = 0 All goals completed! 🐙 All goals completed! 🐙 @[category test, AMS 11] theorem Reachable.le {m n₁ n₂ : } (hn : n₁ n₂) (hm : Reachable m n₁) : Reachable m n₂ := m:n₁:n₂:hn:n₁ n₂hm:Reachable m n₁Reachable m n₂ induction hn with m:n₁:n₂:hm:Reachable m n₁Reachable m n₁ All goals completed! 🐙 m:n₁:n₂:hm:Reachable m n₁m✝:h:n₁.le m✝ih:Reachable m m✝Reachable m m✝.succ m:n₁:n₂:hm:Reachable m n₁m✝:h:n₁.le m✝ih:Reachable m m✝m = m * 1; All goals completed! 🐙 @[category test, AMS 11] theorem reachable_iff_of_two_le (m n : ) (hm : 2 m) : Reachable m n m₁, _ : m₁ < m, m₂, _ : m₂ < m, n₁, _ : n₁ < n, n₂, _ : n₂ < n, n₁ + n₂ = n Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m m₁ * m₂ = m) := m:n:hm:2 mReachable m n m₁, (_ : m₁ < m), m₂, (_ : m₂ < m), n₁, (_ : n₁ < n), n₂, (_ : n₂ < n), n₁ + n₂ = n Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m m₁ * m₂ = m) m:n:hm:2 mhmn:Reachable m n m₁, (_ : m₁ < m), m₂, (_ : m₂ < m), n₁, (_ : n₁ < n), n₂, (_ : n₂ < n), n₁ + n₂ = n Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m m₁ * m₂ = m) induction hmn with m:n:hm:2 1 m₁, (_ : m₁ < 1), m₂, (_ : m₂ < 1), n₁, (_ : n₁ < 1), n₂, (_ : n₂ < 1), n₁ + n₂ = 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 1 m₁ * m₂ = 1) exact absurd hm (m:n:hm:2 1¬2 1 All goals completed! 🐙) m:n:m₃:m₄:n₃:n₄:h₁:Reachable m₃ n₃h₂:Reachable m₄ n₄ih₁:2 m₃ m₁, (_ : m₁ < m₃), m₂, (_ : m₂ < m₃), n₁, (_ : n₁ < n₃), n₂, (_ : n₂ < n₃), n₁ + n₂ = n₃ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ m₁ * m₂ = m₃)ih₂:2 m₄ m₁, (_ : m₁ < m₄), m₂, (_ : m₂ < m₄), n₁, (_ : n₁ < n₄), n₂, (_ : n₂ < n₄), n₁ + n₂ = n₄ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ m₁ * m₂ = m₄)hm:2 m₃ + m₄ m₁, (_ : m₁ < m₃ + m₄), m₂, (_ : m₂ < m₃ + m₄), n₁, (_ : n₁ < n₃ + n₄), n₂, (_ : n₂ < n₃ + n₄), n₁ + n₂ = n₃ + n₄ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + m₄ m₁ * m₂ = m₃ + m₄) m:n:m₄:n₄:h₂:Reachable m₄ n₄ih₂:2 m₄ m₁, (_ : m₁ < m₄), m₂, (_ : m₂ < m₄), n₁, (_ : n₁ < n₄), n₂, (_ : n₂ < n₄), n₁ + n₂ = n₄ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ m₁ * m₂ = m₄)m₃:n₃:hm:2 m₃ + 1 + m₄h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1) m₁, (_ : m₁ < m₃ + 1 + m₄), m₂, (_ : m₂ < m₃ + 1 + m₄), n₁, (_ : n₁ < n₃ + 1 + n₄), n₂, (_ : n₂ < n₃ + 1 + n₄), n₁ + n₂ = n₃ + 1 + n₄ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + m₄ m₁ * m₂ = m₃ + 1 + m₄) m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 m₃ + 1 + (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1) m₁, (_ : m₁ < m₃ + 1 + (m₄ + 1)), m₂, (_ : m₂ < m₃ + 1 + (m₄ + 1)), n₁, (_ : n₁ < n₃ + 1 + (n₄ + 1)), n₂, (_ : n₂ < n₃ + 1 + (n₄ + 1)), n₁ + n₂ = n₃ + 1 + (n₄ + 1) Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + (m₄ + 1) m₁ * m₂ = m₃ + 1 + (m₄ + 1)) m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 m₃ + 1 + (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)m₃ + 1 < m₃ + 1 + (m₄ + 1)m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 m₃ + 1 + (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)m₄ + 1 < m₃ + 1 + (m₄ + 1)m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 m₃ + 1 + (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)n₃ + 1 < n₃ + 1 + (n₄ + 1)m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 m₃ + 1 + (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)n₄ + 1 < n₃ + 1 + (n₄ + 1) m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 m₃ + 1 + (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)m₃ + 1 < m₃ + 1 + (m₄ + 1)m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 m₃ + 1 + (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)m₄ + 1 < m₃ + 1 + (m₄ + 1)m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 m₃ + 1 + (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)n₃ + 1 < n₃ + 1 + (n₄ + 1)m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 m₃ + 1 + (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)n₄ + 1 < n₃ + 1 + (n₄ + 1) All goals completed! 🐙 m:n:m₃:m₄:n₃:n₄:h₁:Reachable m₃ n₃h₂:Reachable m₄ n₄ih₁:2 m₃ m₁, (_ : m₁ < m₃), m₂, (_ : m₂ < m₃), n₁, (_ : n₁ < n₃), n₂, (_ : n₂ < n₃), n₁ + n₂ = n₃ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ m₁ * m₂ = m₃)ih₂:2 m₄ m₁, (_ : m₁ < m₄), m₂, (_ : m₂ < m₄), n₁, (_ : n₁ < n₄), n₂, (_ : n₂ < n₄), n₁ + n₂ = n₄ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ m₁ * m₂ = m₄)hm:2 m₃ * m₄ m₁, (_ : m₁ < m₃ * m₄), m₂, (_ : m₂ < m₃ * m₄), n₁, (_ : n₁ < n₃ + n₄), n₂, (_ : n₂ < n₃ + n₄), n₁ + n₂ = n₃ + n₄ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ * m₄ m₁ * m₂ = m₃ * m₄) m:n:m₄:n₄:h₂:Reachable m₄ n₄ih₂:2 m₄ m₁, (_ : m₁ < m₄), m₂, (_ : m₂ < m₄), n₁, (_ : n₁ < n₄), n₂, (_ : n₂ < n₄), n₁ + n₂ = n₄ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ m₁ * m₂ = m₄)m₃:n₃:hm:2 (m₃ + 1) * m₄h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1) m₁, (_ : m₁ < (m₃ + 1) * m₄), m₂, (_ : m₂ < (m₃ + 1) * m₄), n₁, (_ : n₁ < n₃ + 1 + n₄), n₂, (_ : n₂ < n₃ + 1 + n₄), n₁ + n₂ = n₃ + 1 + n₄ Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = (m₃ + 1) * m₄ m₁ * m₂ = (m₃ + 1) * m₄) m:n:m₃:n₃:h₁:Reachable (m₃ + 1) (n₃ + 1)ih₁:2 m₃ + 1 m₁, (_ : m₁ < m₃ + 1), m₂, (_ : m₂ < m₃ + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 m₁ * m₂ = m₃ + 1)m₄:n₄:hm:2 (m₃ + 1) * (m₄ + 1)h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1) m₁, (_ : m₁ < (m₃ + 1) * (m₄ + 1)), m₂, (_ : m₂ < (m₃ + 1) * (m₄ + 1)), n₁, (_ : n₁ < n₃ + 1 + (n₄ + 1)), n₂, (_ : n₂ < n₃ + 1 + (n₄ + 1)), n₁ + n₂ = n₃ + 1 + (n₄ + 1) Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = (m₃ + 1) * (m₄ + 1) m₁ * m₂ = (m₃ + 1) * (m₄ + 1)) m:n:n₃:m₄:n₄:h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)h₁:Reachable (0 + 1) (n₃ + 1)ih₁:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (0 + 1) * (m₄ + 1) m₁, (_ : m₁ < (0 + 1) * (m₄ + 1)), m₂, (_ : m₂ < (0 + 1) * (m₄ + 1)), n₁, (_ : n₁ < n₃ + 1 + (n₄ + 1)), n₂, (_ : n₂ < n₃ + 1 + (n₄ + 1)), n₁ + n₂ = n₃ + 1 + (n₄ + 1) Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = (0 + 1) * (m₄ + 1) m₁ * m₂ = (0 + 1) * (m₄ + 1))m:n:n₃:m₄:n₄:h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1) m₁, (_ : m₁ < (m₃ + 1 + 1) * (m₄ + 1)), m₂, (_ : m₂ < (m₃ + 1 + 1) * (m₄ + 1)), n₁, (_ : n₁ < n₃ + 1 + (n₄ + 1)), n₂, (_ : n₂ < n₃ + 1 + (n₄ + 1)), n₁ + n₂ = n₃ + 1 + (n₄ + 1) Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = (m₃ + 1 + 1) * (m₄ + 1) m₁ * m₂ = (m₃ + 1 + 1) * (m₄ + 1)) m:n:n₃:m₄:n₄:h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)h₁:Reachable (0 + 1) (n₃ + 1)ih₁:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (0 + 1) * (m₄ + 1) m₁, (_ : m₁ < (0 + 1) * (m₄ + 1)), m₂, (_ : m₂ < (0 + 1) * (m₄ + 1)), n₁, (_ : n₁ < n₃ + 1 + (n₄ + 1)), n₂, (_ : n₂ < n₃ + 1 + (n₄ + 1)), n₁ + n₂ = n₃ + 1 + (n₄ + 1) Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = (0 + 1) * (m₄ + 1) m₁ * m₂ = (0 + 1) * (m₄ + 1)) obtain m₅, hm₅, m₆, hm₆, n₅, hn₅, n₆, hn₆, h₃, h₄, h₅, h₆ := ih₂ (m:n:n₃:m₄:n₄:h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)h₁:Reachable (0 + 1) (n₃ + 1)ih₁:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (0 + 1) * (m₄ + 1)2 m₄ + 1 All goals completed! 🐙) refine m₅, ?_, m₆, ?_, n₅+n₃+1, ?_, n₆, ?_, m:n:n₃:m₄:n₄:h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)h₁:Reachable (0 + 1) (n₃ + 1)ih₁:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (0 + 1) * (m₄ + 1)m₅:hm₅:m₅ < m₄ + 1m₆:hm₆:m₆ < m₄ + 1n₅:hn₅:n₅ < n₄ + 1n₆:hn₆:n₆ < n₄ + 1h₃:n₅ + n₆ = n₄ + 1h₄:Reachable m₅ n₅h₅:Reachable m₆ n₆h₆:m₅ + m₆ = m₄ + 1 m₅ * m₆ = m₄ + 1n₅ + n₃ + 1 + n₆ = n₃ + 1 + (n₄ + 1) m:n:n₃:m₄:n₄:h₂:Reachable (m₄ + 1) (n₄ + 1)ih₂:2 m₄ + 1 m₁, (_ : m₁ < m₄ + 1), m₂, (_ : m₂ < m₄ + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 m₁ * m₂ = m₄ + 1)h₁:Reachable (0 + 1) (n₃ + 1)ih₁:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (0 + 1) * (m₄ + 1)m₅:hm₅:m₅ < m₄ + 1m₆:hm₆:m₆ < m₄ + 1n₅:hn₅:n₅ < n₄ + 1n₆:hn₆:n₆ < n₄ + 1h₃:n₅ + n₆ = n₄ + 1h₄:Reachable m₅ n₅h₅:Reachable m₆ n₆h₆:m₅ + m₆ = m₄ + 1 m₅ * m₆ = m₄ + 1n₅ + n₃ + 1 + n₆ = n₃ + 1 + (n₅ + n₆); All goals completed! 🐙, h₄.le ?_, h₅, ?_ all_goals All goals completed! 🐙 m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)h₂:Reachable (0 + 1) (n₄ + 1)ih₂:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (m₃ + 1 + 1) * (0 + 1) m₁, (_ : m₁ < (m₃ + 1 + 1) * (0 + 1)), m₂, (_ : m₂ < (m₃ + 1 + 1) * (0 + 1)), n₁, (_ : n₁ < n₃ + 1 + (n₄ + 1)), n₂, (_ : n₂ < n₃ + 1 + (n₄ + 1)), n₁ + n₂ = n₃ + 1 + (n₄ + 1) Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = (m₃ + 1 + 1) * (0 + 1) m₁ * m₂ = (m₃ + 1 + 1) * (0 + 1))m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1) m₁, (_ : m₁ < (m₃ + 1 + 1) * (m₄ + 1 + 1)), m₂, (_ : m₂ < (m₃ + 1 + 1) * (m₄ + 1 + 1)), n₁, (_ : n₁ < n₃ + 1 + (n₄ + 1)), n₂, (_ : n₂ < n₃ + 1 + (n₄ + 1)), n₁ + n₂ = n₃ + 1 + (n₄ + 1) Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = (m₃ + 1 + 1) * (m₄ + 1 + 1) m₁ * m₂ = (m₃ + 1 + 1) * (m₄ + 1 + 1)) m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)h₂:Reachable (0 + 1) (n₄ + 1)ih₂:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (m₃ + 1 + 1) * (0 + 1) m₁, (_ : m₁ < (m₃ + 1 + 1) * (0 + 1)), m₂, (_ : m₂ < (m₃ + 1 + 1) * (0 + 1)), n₁, (_ : n₁ < n₃ + 1 + (n₄ + 1)), n₂, (_ : n₂ < n₃ + 1 + (n₄ + 1)), n₁ + n₂ = n₃ + 1 + (n₄ + 1) Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = (m₃ + 1 + 1) * (0 + 1) m₁ * m₂ = (m₃ + 1 + 1) * (0 + 1)) obtain m₅, hm₅, m₆, hm₆, n₅, hn₅, n₆, hn₆, h₃, h₄, h₅, h₆ := ih₁ (m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)h₂:Reachable (0 + 1) (n₄ + 1)ih₂:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (m₃ + 1 + 1) * (0 + 1)2 m₃ + 1 + 1 All goals completed! 🐙) refine m₅, ?_, m₆, ?_, n₅, ?_, n₆+n₄+1, ?_, m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)h₂:Reachable (0 + 1) (n₄ + 1)ih₂:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (m₃ + 1 + 1) * (0 + 1)m₅:hm₅:m₅ < m₃ + 1 + 1m₆:hm₆:m₆ < m₃ + 1 + 1n₅:hn₅:n₅ < n₃ + 1n₆:hn₆:n₆ < n₃ + 1h₃:n₅ + n₆ = n₃ + 1h₄:Reachable m₅ n₅h₅:Reachable m₆ n₆h₆:m₅ + m₆ = m₃ + 1 + 1 m₅ * m₆ = m₃ + 1 + 1n₅ + (n₆ + n₄ + 1) = n₃ + 1 + (n₄ + 1) m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)h₂:Reachable (0 + 1) (n₄ + 1)ih₂:2 0 + 1 m₁, (_ : m₁ < 0 + 1), m₂, (_ : m₂ < 0 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 0 + 1 m₁ * m₂ = 0 + 1)hm:2 (m₃ + 1 + 1) * (0 + 1)m₅:hm₅:m₅ < m₃ + 1 + 1m₆:hm₆:m₆ < m₃ + 1 + 1n₅:hn₅:n₅ < n₃ + 1n₆:hn₆:n₆ < n₃ + 1h₃:n₅ + n₆ = n₃ + 1h₄:Reachable m₅ n₅h₅:Reachable m₆ n₆h₆:m₅ + m₆ = m₃ + 1 + 1 m₅ * m₆ = m₃ + 1 + 1n₅ + (n₆ + n₄ + 1) = n₅ + n₆ + (n₄ + 1); All goals completed! 🐙, h₄, h₅.le ?_, ?_ all_goals All goals completed! 🐙 m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)m₃ + 2 < (m₃ + 1 + 1) * (m₄ + 1 + 1)m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)m₄ + 2 < (m₃ + 1 + 1) * (m₄ + 1 + 1)m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)n₃ + 1 < n₃ + 1 + (n₄ + 1)m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)n₄ + 1 < n₃ + 1 + (n₄ + 1) m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)m₃ + 2 < (m₃ + 1 + 1) * (m₄ + 1 + 1) m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)0 < m₃ + 2m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)1 < m₄ + 1 + 1 m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)0 < m₃ + 2m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)1 < m₄ + 1 + 1 All goals completed! 🐙 m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)m₄ + 2 < (m₃ + 1 + 1) * (m₄ + 1 + 1) m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)0 < m₄ + 2m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)1 < m₃ + 1 + 1 m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)0 < m₄ + 2m:n:n₃:n₄:m₃:h₁:Reachable (m₃ + 1 + 1) (n₃ + 1)ih₁:2 m₃ + 1 + 1 m₁, (_ : m₁ < m₃ + 1 + 1), m₂, (_ : m₂ < m₃ + 1 + 1), n₁, (_ : n₁ < n₃ + 1), n₂, (_ : n₂ < n₃ + 1), n₁ + n₂ = n₃ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₃ + 1 + 1 m₁ * m₂ = m₃ + 1 + 1)m₄:h₂:Reachable (m₄ + 1 + 1) (n₄ + 1)ih₂:2 m₄ + 1 + 1 m₁, (_ : m₁ < m₄ + 1 + 1), m₂, (_ : m₂ < m₄ + 1 + 1), n₁, (_ : n₁ < n₄ + 1), n₂, (_ : n₂ < n₄ + 1), n₁ + n₂ = n₄ + 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m₄ + 1 + 1 m₁ * m₂ = m₄ + 1 + 1)hm:2 (m₃ + 1 + 1) * (m₄ + 1 + 1)1 < m₃ + 1 + 1 All goals completed! 🐙 all_goals All goals completed! 🐙 instance Reachable.decide : m n, Decidable (Reachable m n) | 0, n => isFalse (not_reachable_zero_fst n) | 1, 0 => isFalse (not_reachable_zero_snd 1) | 1, n+1 => isTrue (Reachable.one.le (n:1 n + 1 All goals completed! 🐙)) m:n:Decidable (Reachable (m + 2) n) m:n:Decidable (Reachable (m + 2) n) m:n:d:{m₁ : } m₁ < m + 2 {n : } Decidable (Reachable m₁ n) := fun {m₁} h {n} => decide m₁ nDecidable (Reachable (m + 2) n) refine @decidable_of_iff' _ _ (reachable_iff_of_two_le (m+2) n (m:n:d:{m₁ : } m₁ < m + 2 {n : } Decidable (Reachable m₁ n) := fun {m₁} h {n} => decide m₁ n2 m + 2 All goals completed! 🐙)) ?_ m:n:d:{m₁ : } m₁ < m + 2 {n : } Decidable (Reachable m₁ n) := fun {m₁} h {n} => decide m₁ nm₁:hm₁:m₁ < m + 2Decidable (∃ m₂, (_ : m₂ < m + 2), n₁, (_ : n₁ < n), n₂, (_ : n₂ < n), n₁ + n₂ = n Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m + 2 m₁ * m₂ = m + 2)) m:n:d:{m₁ : } m₁ < m + 2 {n : } Decidable (Reachable m₁ n) := fun {m₁} h {n} => decide m₁ nm₁:hm₁:m₁ < m + 2m₂:hm₂:m₂ < m + 2Decidable (∃ n₁, (_ : n₁ < n), n₂, (_ : n₂ < n), n₁ + n₂ = n Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m + 2 m₁ * m₂ = m + 2)) m:n:d:{m₁ : } m₁ < m + 2 {n : } Decidable (Reachable m₁ n) := fun {m₁} h {n} => decide m₁ nm₁:hm₁:m₁ < m + 2m₂:hm₂:m₂ < m + 2n₁:hn₁:n₁ < nDecidable (∃ n₂, (_ : n₂ < n), n₁ + n₂ = n Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m + 2 m₁ * m₂ = m + 2)) m:n:d:{m₁ : } m₁ < m + 2 {n : } Decidable (Reachable m₁ n) := fun {m₁} h {n} => decide m₁ nm₁:hm₁:m₁ < m + 2m₂:hm₂:m₂ < m + 2n₁:hn₁:n₁ < nn₂:hn₂:n₂ < nDecidable (n₁ + n₂ = n Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m + 2 m₁ * m₂ = m + 2)) m:n:d:{m₁ : } m₁ < m + 2 {n : } Decidable (Reachable m₁ n) := fun {m₁} h {n} => decide m₁ nm₁:hm₁:m₁ < m + 2m₂:hm₂:m₂ < m + 2n₁:hn₁:n₁ < nn₂:hn₂:n₂ < nDecidable (Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = m + 2 m₁ * m₂ = m + 2)) m:n:d:{m₁ : } m₁ < m + 2 {n : } Decidable (Reachable m₁ n) := fun {m₁} h {n} => decide m₁ nm₁:hm₁:m₁ < m + 2m₂:hm₂:m₂ < m + 2n₁:hn₁:n₁ < nn₂:hn₂:n₂ < nDecidable (Reachable m₂ n₂ (m₁ + m₂ = m + 2 m₁ * m₂ = m + 2)) All goals completed! 🐙

The (Mahler-Popken) complexity of n: the minimum number of 1s needed to express a given number using only addition and multiplication. E.g. 2 = 1 + 1, so complexity 2 = 2.

def complexity (n : ) : := if h : n = 0 then 0 else Nat.find n, Reachable.self n <| n.pos_of_ne_zero h @[category test, AMS 11] theorem Reachable.complexity_le {m n : } (h : Reachable m n) : complexity m n := m:n:h:Reachable m ncomplexity m n m:n:h:Reachable m n(if h : m = 0 then 0 else Nat.find ) n m:n:h:Reachable m nh':m = 00 nm:n:h:Reachable m nh':¬m = 0Nat.find n m:n:h:Reachable m nh':m = 00 n n:h:Reachable 0 n0 n; All goals completed! 🐙 All goals completed! 🐙 @[category test, AMS 11] theorem Reachable.complexity_eq {m n : } (h : Reachable m n) (min : n' < n, ¬ Reachable m n') : complexity m = n := m:n:h:Reachable m nmin: n' < n, ¬Reachable m n'complexity m = n m:n:h:Reachable m nmin: n' < n, ¬Reachable m n'n complexity m m:n:h:Reachable m nmin: n' < n, ¬Reachable m n'n if h : m = 0 then 0 else Nat.find m:n:h:Reachable m nmin: n' < n, ¬Reachable m n'h':m = 0n 0m:n:h:Reachable m nmin: n' < n, ¬Reachable m n'h':¬m = 0n Nat.find m:n:h:Reachable m nmin: n' < n, ¬Reachable m n'h':m = 0n 0 n:h:Reachable 0 nmin: n' < n, ¬Reachable 0 n'n 0; All goals completed! 🐙 All goals completed! 🐙 @[category test, AMS 11] theorem Reachable.complexity {n : } (hn : 0 < n) : Reachable n (complexity n) := n:hn:0 < nReachable n (Mathoverflow75792.complexity n) n:hn:0 < nReachable n (if h : n = 0 then 0 else Nat.find ) n:hn:0 < nReachable n (Nat.find ) All goals completed! 🐙 @[category test, AMS 11] theorem complexity_zero : complexity 0 = 0 := rfl @[category test, AMS 11] theorem complexity_one : complexity 1 = 1 := Reachable.one.complexity_eq fun n' hn' n':hn':n' < 1¬Reachable 1 n' have : n' = 0 := n':hn':n' < 1¬Reachable 1 n' All goals completed! 🐙 hn':0 < 1¬Reachable 1 0; All goals completed! 🐙 @[category test, AMS 11] theorem complexity_two : complexity 2 = 2 := (Reachable.add .one .one).complexity_eq fun n' hn' n':hn':n' < 1 + 1¬Reachable (1 + 1) n' n':hn':0 < 1 + 1¬Reachable (1 + 1) 0n':hn':1 < 1 + 1¬Reachable (1 + 1) 1 n':hn':0 < 1 + 1¬Reachable (1 + 1) 0 All goals completed! 🐙 n':hn':1 < 1 + 1¬Reachable (1 + 1) 1 n':hn':1 < 1 + 1¬ m₁, (_ : m₁ < 2), m₂, (_ : m₂ < 2), n₁, (_ : n₁ < 1), n₂, (_ : n₂ < 1), n₁ + n₂ = 1 Reachable m₁ n₁ Reachable m₂ n₂ (m₁ + m₂ = 2 m₁ * m₂ = 2) n':hn':1 < 1 + 1m₁:hm₁:m₁ < 2m₂:hm₂:m₂ < 2n₁:hn₁:n₁ < 1n₂:hn₂:n₂ < 1h₁:n₁ + n₂ = 1False All goals completed! 🐙 @[category test, AMS 11] theorem Reachable.pow (m n : ) (hm : 0 < m) (hn : 0 < n) : Reachable (m ^ n) (m * n) := m:n:hm:0 < mhn:0 < nReachable (m ^ n) (m * n) induction hn with m:n:hm:0 < mReachable (m ^ Nat.succ 0) (m * Nat.succ 0) m:n:hm:0 < mm ^ Nat.succ 0 = mm:n:hm:0 < mm * Nat.succ 0 = m m:n:hm:0 < mm ^ Nat.succ 0 = mm:n:hm:0 < mm * Nat.succ 0 = m All goals completed! 🐙 m:n:hm:0 < mm✝:hn:(Nat.succ 0).le m✝ih:Reachable (m ^ m✝) (m * m✝)Reachable (m ^ m✝.succ) (m * m✝.succ) All goals completed! 🐙 @[category test, AMS 11] theorem Reachable.pow' (m n : ℕ+) : Reachable (m ^ (n : ) : ) (m * n) := .pow _ _ m.pos n.pos

5^6 = 15625 = 1 + 2^3 * 3^2 * (1 + 2^3 * 3^3)!

@[category test, AMS 11] theorem Reachable.five_pow_six : Reachable (5^6) 29 := have h8 : Reachable 8 6 := .pow' 2 3 have h9 : Reachable 9 6 := .pow' 3 2 have h27 : Reachable 27 9 := .pow' 3 3 .add .one <| .mul h8 <| .mul h9 <| .add .one <| .mul h8 h27

Is 5n the complexity of 5^n for 0 < n? Answer: No.

@[category research solved, AMS 11] theorem complexity_five_pow : answer(False) n : , 0 < n complexity (5 ^ n) = 5 * n := False (n : ), 0 < n complexity (5 ^ n) = 5 * n False (n : ), 0 < n complexity (5 ^ n) = 5 * n x, 0 < x ¬complexity (5 ^ x) = 5 * x exact 6, 0 < 6 All goals completed! 🐙, fun h absurd (h Reachable.five_pow_six.complexity_le) (h:complexity (5 ^ 6) = 5 * 6¬5 * 6 29 All goals completed! 🐙)

Is 3n the complexity of 3^n for 0 < n? Answer: Yes, by John Selfridge.

Reference: https://arxiv.org/abs/1207.4841

@[category research solved, AMS 11] theorem declaration uses 'sorry'complexity_three_pow : answer(True) n : , 0 < n complexity (3 ^ n) = 3 * n := True (n : ), 0 < n complexity (3 ^ n) = 3 * n All goals completed! 🐙

Is 2n the complexity of 2^n for 0 < n?

@[category research open, AMS 11] theorem declaration uses 'sorry'complexity_two_pow : answer(sorry) n : , 0 < n complexity (2 ^ n) = 2 * n := True (n : ), 0 < n complexity (2 ^ n) = 2 * n All goals completed! 🐙 end Mathoverflow75792