-- Lean 4 proof step from Mathlib.Topology.Category.Profinite.Nobeling.Successor (goal)
Goal:
I : Type u
C : Set (I → Bool)
inst : LinearOrder I
inst_1 : WellFoundedLT I
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun (x1 x2 : I) ↦ x1 < x2
l : (↑(MaxProducts C ho) : Type u)
h₁ :
  LE.le (α := Submodule ℤ (LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ)) ⊤
    (Submodule.span ℤ
      (Set.range (ι := { l : Products I // Products.isGood (π C fun (x : I) ↦ ord I x < o) l })
        (eval (π C fun (x : I) ↦ ord I x < o))))
this : Inhabited I
m : Products I →₀ ℤ
hmmem :
  Membership.mem (γ := Submodule ℤ (Products I →₀ ℤ))
    (Finsupp.supported ℤ ℤ {m : Products I | m < (↑l : Products I).Tail}) m
hmsum :
  Eq (α := LocallyConstant (↑(C' C ho) : Type u) ℤ)
    (m.sum fun (i : Products I) (a : ℤ) ↦ a • Products.eval (C' C ho) i : LocallyConstant (↑(C' C ho) : Type u) ℤ)
    ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
        (Products.eval C (↑l : Products I)) :
      LocallyConstant (↑(C' C ho) : Type u) ℤ)
hse :
  LinearMap.range (M := LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) (πs C o) =
    (Linear_CC' C hsC ho).ker
n : LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ
w : { l : Products I // Products.isGood (π C fun (x : I) ↦ ord I x < o) l } →₀ ℤ
hn :
  HAdd.hAdd (α := LocallyConstant (↑C : Type u) ℤ)
      (w.sum fun (a : { l : Products I // Products.isGood (π C fun (x : I) ↦ ord I x < o) l }) (b : ℤ) ↦
        (πs C o : (a : LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) → LocallyConstant (↑C : Type u) ℤ)
          (b • eval (π C fun (x : I) ↦ ord I x < o) a))
      (m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod) =
    Products.eval C (↑l : Products I)
hc :
  (w.sum fun (i : { l : Products I // Products.isGood (π C fun (x : I) ↦ ord I x < o) l }) (a : ℤ) ↦
      a • eval (π C fun (x : I) ↦ ord I x < o) i) =
    n
h₂ :
  Membership.mem (γ := Submodule ℤ (LocallyConstant (↑C : Type u) ℤ))
    (Submodule.span ℤ (Set.image (α := Products I) (Products.eval C) {m : Products I | m < (↑l : Products I)}))
    (w.sum fun (a : { l : Products I // Products.isGood (π C fun (x : I) ↦ ord I x < o) l }) (b : ℤ) ↦
      (πs C o : (a : LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) → LocallyConstant (↑C : Type u) ℤ)
        (b • eval (π C fun (x : I) ↦ ord I x < o) a))
⊢ Membership.mem (γ := Submodule ℤ (LocallyConstant (↑C : Type u) ℤ))
    (Submodule.span ℤ (Set.image (α := Products I) (Products.eval C) {m : Products I | m < (↑l : Products I)}))
    (HAdd.hAdd (α := LocallyConstant (↑C : Type u) ℤ)
      (w.sum fun (a : { l : Products I // Products.isGood (π C fun (x : I) ↦ ord I x < o) l }) (b : ℤ) ↦
        (πs C o : (a : LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) → LocallyConstant (↑C : Type u) ℤ)
          (b • eval (π C fun (x : I) ↦ ord I x < o) a))
      (m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod))
have h₃ : Membership.mem (γ := Submodule ℤ (LocallyConstant (↑C : Type u) ℤ))
  (Submodule.span ℤ (Set.image (α := Products I) (Products.eval C) {m : Products I | m < (↑l : Products I)}))
  (m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod)
Tactic: apply Submodule.add_mem