Theorem: Ordinal.lt_nmul_iff₃'
File: Mathlib/SetTheory/Ordinal/NaturalOps.lean

Proof steps:
state_before: a b c d : Ordinal.{u}
⊢ d < a ⨳ (b ⨳ c) ↔
    ∃ a' < a,
      ∃ b' < b,
        ∃ c' < c,
          d ♯ a' ⨳ (b' ⨳ c) ♯ a' ⨳ (b ⨳ c') ♯ a ⨳ (b' ⨳ c') ≤
            a' ⨳ (b ⨳ c) ♯ a ⨳ (b' ⨳ c) ♯ a ⨳ (b ⨳ c') ♯ a' ⨳ (b' ⨳ c')
state_after: a b c d : Ordinal.{u}
⊢ (∃ a' < b,
      ∃ b' < c,
        ∃ c' < a,
          toOrdinal
              (toNatOrdinal d + toNatOrdinal (a' ⨳ b' ⨳ a) + toNatOrdinal (a' ⨳ c ⨳ c') + toNatOrdinal (b ⨳ b' ⨳ c')) ≤
            toOrdinal
              (toNatOrdinal (a' ⨳ c ⨳ a) + toNatOrdinal (b ⨳ b' ⨳ a) + toNatOrdinal (b ⨳ c ⨳ c') +
                toNatOrdinal (a' ⨳ b' ⨳ c'))) ↔
    ∃ a' < a,
      ∃ b' < b,
        ∃ c' < c,
          toOrdinal
              (toNatOrdinal d + toNatOrdinal (b' ⨳ c ⨳ a') + toNatOrdinal (b ⨳ c' ⨳ a') + toNatOrdinal (b' ⨳ c' ⨳ a)) ≤
            toOrdinal
              (toNatOrdinal (b ⨳ c ⨳ a') + toNatOrdinal (b' ⨳ c ⨳ a) + toNatOrdinal (b ⨳ c' ⨳ a) +
                toNatOrdinal (b' ⨳ c' ⨳ a'))
tactic: simp only [nmul_comm _ (_ ⨳ _), lt_nmul_iff₃, nadd_eq_add, NatOrdinal.toOrdinal_toNatOrdinal]
state_before: a b c d : Ordinal.{u}
⊢ (∃ a' < b,
      ∃ b' < c,
        ∃ c' < a,
          toOrdinal
              (toNatOrdinal d + toNatOrdinal (a' ⨳ b' ⨳ a) + toNatOrdinal (a' ⨳ c ⨳ c') + toNatOrdinal (b ⨳ b' ⨳ c')) ≤
            toOrdinal
              (toNatOrdinal (a' ⨳ c ⨳ a) + toNatOrdinal (b ⨳ b' ⨳ a) + toNatOrdinal (b ⨳ c ⨳ c') +
                toNatOrdinal (a' ⨳ b' ⨳ c'))) ↔
    ∃ a' < a,
      ∃ b' < b,
        ∃ c' < c,
          toOrdinal
              (toNatOrdinal d + toNatOrdinal (b' ⨳ c ⨳ a') + toNatOrdinal (b ⨳ c' ⨳ a') + toNatOrdinal (b' ⨳ c' ⨳ a)) ≤
            toOrdinal
              (toNatOrdinal (b ⨳ c ⨳ a') + toNatOrdinal (b' ⨳ c ⨳ a) + toNatOrdinal (b ⨳ c' ⨳ a) +
                toNatOrdinal (b' ⨳ c' ⨳ a'))
state_after: case mp.intro.intro.intro.intro.intro.intro
a b c d b' : Ordinal.{u}
hb : b' < b
c' : Ordinal.{u}
hc : c' < c
a' : Ordinal.{u}
ha : a' < a
h :
  toOrdinal (toNatOrdinal d + toNatOrdinal (b' ⨳ c' ⨳ a) + toNatOrdinal (b' ⨳ c ⨳ a') + toNatOrdinal (b ⨳ c' ⨳ a')) ≤
    toOrdinal
      (toNatOrdinal (b' ⨳ c ⨳ a) + toNatOrdinal (b ⨳ c' ⨳ a) + toNatOrdinal (b ⨳ c ⨳ a') + toNatOrdinal (b' ⨳ c' ⨳ a'))
⊢ ∃ a' < a,
    ∃ b' < b,
      ∃ c' < c,
        toOrdinal
            (toNatOrdinal d + toNatOrdinal (b' ⨳ c ⨳ a') + toNatOrdinal (b ⨳ c' ⨳ a') + toNatOrdinal (b' ⨳ c' ⨳ a)) ≤
          toOrdinal
            (toNatOrdinal (b ⨳ c ⨳ a') + toNatOrdinal (b' ⨳ c ⨳ a) + toNatOrdinal (b ⨳ c' ⨳ a) +
              toNatOrdinal (b' ⨳ c' ⨳ a'))

case mpr.intro.intro.intro.intro.intro.intro
a b c d b' : Ordinal.{u}
hb : b' < a
c' : Ordinal.{u}
hc : c' < b
a' : Ordinal.{u}
ha : a' < c
h :
  toOrdinal (toNatOrdinal d + toNatOrdinal (c' ⨳ c ⨳ b') + toNatOrdinal (b ⨳ a' ⨳ b') + toNatOrdinal (c' ⨳ a' ⨳ a)) ≤
    toOrdinal
      (toNatOrdinal (b ⨳ c ⨳ b') + toNatOrdinal (c' ⨳ c ⨳ a) + toNatOrdinal (b ⨳ a' ⨳ a) + toNatOrdinal (c' ⨳ a' ⨳ b'))
⊢ ∃ a' < b,
    ∃ b' < c,
      ∃ c' < a,
        toOrdinal
            (toNatOrdinal d + toNatOrdinal (a' ⨳ b' ⨳ a) + toNatOrdinal (a' ⨳ c ⨳ c') + toNatOrdinal (b ⨳ b' ⨳ c')) ≤
          toOrdinal
            (toNatOrdinal (a' ⨳ c ⨳ a) + toNatOrdinal (b ⨳ b' ⨳ a) + toNatOrdinal (b ⨳ c ⨳ c') +
              toNatOrdinal (a' ⨳ b' ⨳ c'))
tactic: constructor <;> rintro ⟨b', hb, c', hc, a', ha, h⟩