awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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_1 : Inhabited I
m : Products I →₀ ℤ
hmmem : (↑m.support : Set (Products I)) ⊆ {m : Products I | m < (↑l : Products I).Tail}
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) ℤ)
q : Products I
hq : q ∈ m.support
hx'' : q < (↑l : Products I).Tail
this : ∃ (p : Products I), (↑p : List I) ≠ [] ∧ (↑p : List I).head! = term I ho ∧ q = p.Tail
h :
  ∀ (p : Products I) (hp : (↑p : List I) ≠ [] ∧ (↑p : List I).head! = term I ho ∧ q = p.Tail),
    HSMul.hSMul (α := ℤ) ((m : (a : Products I) → ℤ) q : ℤ) (Products.eval (C' C ho) q) =
      HSMul.hSMul (α := ℤ) (β := LocallyConstant (↑(C' C ho) : Type u) ℤ) ((m : (a : Products I) → ℤ) q : ℤ)
        ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
            (List.map (e C) (term I ho :: (↑q : List I))).prod :
          LocallyConstant (↑(C' C ho) : Type u) ℤ)
⊢ HSMul.hSMul (α := ℤ) ((m : (a : Products I) → ℤ) q : ℤ) (Products.eval (C' C ho) q) =
    HSMul.hSMul (α := ℤ) (β := LocallyConstant (↑(C' C ho) : Type u) ℤ) ((m : (a : Products I) → ℤ) q : ℤ)
      ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
          (List.map (e C) (term I ho :: (↑q : List I))).prod :
        LocallyConstant (↑(C' C ho) : Type u) ℤ)

Tactic:
obtain ⟨p, hp⟩ := this
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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 : (↑m.support : Set (Products I)) ⊆ {m : Products I | m < (↑l : Products I).Tail}
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) ℤ)
q : Products I
hq : q ∈ m.support
hx'' : q < (↑l : Products I).Tail
p : Products I
hp : (↑p : List I) ≠ [] ∧ (↑p : List I).head! = term I ho ∧ q = p.Tail
h :
  HSMul.hSMul (α := ℤ) (β := LocallyConstant (↑(C' C ho) : Type u) ℤ) ((m : (a : Products I) → ℤ) p.Tail : ℤ)
      ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
          (Products.eval C p) :
        LocallyConstant (↑(C' C ho) : Type u) ℤ) =
    HSMul.hSMul (α := ℤ) (β := LocallyConstant (↑(C' C ho) : Type u) ℤ) ((m : (a : Products I) → ℤ) p.Tail : ℤ)
      ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
          (List.map (e C) (term I ho :: (↑p.Tail : List I))).prod :
        LocallyConstant (↑(C' C ho) : Type u) ℤ)
⊢ HSMul.hSMul (α := ℤ) ((m : (a : Products I) → ℤ) q : ℤ) (Products.eval (C' C ho) q) =
    HSMul.hSMul (α := ℤ) (β := LocallyConstant (↑(C' C ho) : Type u) ℤ) ((m : (a : Products I) → ℤ) q : ℤ)
      ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
          (List.map (e C) (term I ho :: (↑q : List I))).prod :
        LocallyConstant (↑(C' C ho) : Type u) ℤ)

Tactic:
rw [hp.2.2, ← Products.max_eq_eval C hsC ho p hp.1 hp.2.1]

Premises used: Profinite.NobelingProof.Products.max_eq_eval, And.right, And.left
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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 : (↑m.support : Set (Products I)) ⊆ {m : Products I | m < (↑l : Products I).Tail}
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) ℤ)
q : Products I
hq : q ∈ m.support
hx'' : q < (↑l : Products I).Tail
p : Products I
hp : (↑p : List I) ≠ [] ∧ (↑p : List I).head! = term I ho ∧ q = p.Tail
h :
  HSMul.hSMul (α := ℤ) (β := LocallyConstant (↑(C' C ho) : Type u) ℤ) ((m : (a : Products I) → ℤ) p.Tail : ℤ)
      ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
          (List.map (e C) (↑p : List I)).prod :
        LocallyConstant (↑(C' C ho) : Type u) ℤ) =
    HSMul.hSMul (α := ℤ) (β := LocallyConstant (↑(C' C ho) : Type u) ℤ) ((m : (a : Products I) → ℤ) p.Tail : ℤ)
      ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
          (e C (term I ho) * (List.map (e C) (↑p.Tail : List I)).prod) :
        LocallyConstant (↑(C' C ho) : Type u) ℤ)
⊢ HSMul.hSMul (α := ℤ) (β := LocallyConstant (↑(C' C ho) : Type u) ℤ) ((m : (a : Products I) → ℤ) p.Tail : ℤ)
      ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
          (Products.eval C p) :
        LocallyConstant (↑(C' C ho) : Type u) ℤ) =
    HSMul.hSMul (α := ℤ) (β := LocallyConstant (↑(C' C ho) : Type u) ℤ) ((m : (a : Products I) → ℤ) p.Tail : ℤ)
      ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
          (List.map (e C) (term I ho :: (↑p.Tail : List I))).prod :
        LocallyConstant (↑(C' C ho) : Type u) ℤ)

Tactic:
dsimp [Products.eval]

Premises used: Profinite.NobelingProof.Products.eval
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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) ℤ)
⊢ Eq (α := 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) ℤ)
    ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
        (m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod) :
      LocallyConstant (↑(C' C ho) : Type u) ℤ)

Tactic:
have : (Linear_CC' C hsC ho) (l.val.eval C) = (Linear_CC' C hsC ho)
      (Finsupp.sum m fun i a ↦ a • ((term I ho :: i.1).map (e C)).prod) := by
    rw [← hmsum]
    simp only [map_finsuppSum]
    apply Finsupp.sum_congr
    intro q hq
    rw [map_smul]
    rw [Finsupp.mem_supported] at hmmem
    have hx'' : q < l.val.Tail := hmmem hq
    have : ∃ (p : Products I), p.val ≠ [] ∧ p.val.head! = term I ho ∧ q = p.Tail :=
      ⟨⟨term I ho :: q.val, isChain_cons_of_lt C hsC ho l q hx''⟩,
        ⟨List.cons_ne_nil _ _, by simp only [List.head!_cons],
        by simp only [Products.Tail, List.tail_cons, Subtype.coe_eta]⟩⟩
    obtain ⟨p, hp⟩ := this
    rw [hp.2.2, ← Products.max_eq_eval C hsC ho p hp.1 hp.2.1]
    dsimp [Products.eval]
    rw [Products.max_eq_o_cons_tail ho p hp.1 hp.2.1, List.map_cons, List.prod_cons]
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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_1 : 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) ℤ)
this :
  Eq (α := 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) ℤ)
    ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
        (m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod) :
      LocallyConstant (↑(C' C ho) : Type u) ℤ)
⊢ { X₁ := ModuleCat.of ℤ (LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ),
      X₂ := ModuleCat.of ℤ (LocallyConstant (↑C : Type u) ℤ),
      X₃ := ModuleCat.of ℤ (LocallyConstant (↑(C' C ho) : Type u) ℤ), f := ModuleCat.ofHom (πs C o),
      g := ModuleCat.ofHom (Linear_CC' C hsC ho), zero := ⋯ : ShortComplex (ModuleCat ℤ) }.Exact

Tactic:
have hse := succ_exact C hC hsC ho
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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_1 : 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) ℤ)
this :
  Eq (α := 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) ℤ)
    ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
        (m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod) :
      LocallyConstant (↑(C' C ho) : Type u) ℤ)
hse :
  { X₁ := ModuleCat.of ℤ (LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ),
      X₂ := ModuleCat.of ℤ (LocallyConstant (↑C : Type u) ℤ),
      X₃ := ModuleCat.of ℤ (LocallyConstant (↑(C' C ho) : Type u) ℤ), f := ModuleCat.ofHom (πs C o),
      g := ModuleCat.ofHom (Linear_CC' C hsC ho), zero := ⋯ : ShortComplex (ModuleCat ℤ) }.Exact
⊢ (ModuleCat.Hom.hom
        { X₁ := ModuleCat.of ℤ (LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ),
            X₂ := ModuleCat.of ℤ (LocallyConstant (↑C : Type u) ℤ),
            X₃ := ModuleCat.of ℤ (LocallyConstant (↑(C' C ho) : Type u) ℤ), f := ModuleCat.ofHom (πs C o),
            g := ModuleCat.ofHom (Linear_CC' C hsC ho), zero := ⋯ : ShortComplex (ModuleCat ℤ) }.f).range =
    (ModuleCat.Hom.hom
        { X₁ := ModuleCat.of ℤ (LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ),
            X₂ := ModuleCat.of ℤ (LocallyConstant (↑C : Type u) ℤ),
            X₃ := ModuleCat.of ℤ (LocallyConstant (↑(C' C ho) : Type u) ℤ), f := ModuleCat.ofHom (πs C o),
            g := ModuleCat.ofHom (Linear_CC' C hsC ho), zero := ⋯ : ShortComplex (ModuleCat ℤ) }.g).ker

Tactic:
rw [ShortComplex.moduleCat_exact_iff_range_eq_ker] at hse

Premises used: CategoryTheory.ShortComplex.moduleCat_exact_iff_range_eq_ker
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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_1 : 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) ℤ)
this :
  Eq (α := 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) ℤ)
    ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
        (m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod) :
      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
⊢ (Products.eval C (↑l : Products I) -
      m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod) ∈
    LinearMap.range (M := LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) (πs C o)

Tactic:
rw [← LinearMap.sub_mem_ker_iff, ← hse] at this

Premises used: LinearMap.sub_mem_ker_iff
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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_1 : 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) ℤ)
this :
  Eq (α := 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) ℤ)
    ((Linear_CC' C hsC ho : (a : LocallyConstant (↑C : Type u) ℤ) → LocallyConstant (↑(C' C ho) : Type u) ℤ)
        (m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod) :
      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
this₁ :
  (Products.eval C (↑l : Products I) -
      m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod) ∈
    LinearMap.range (M := LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) (πs C o)
⊢ LinearMap.range (M := LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) (πs C o) =
    (Linear_CC' C hsC ho).ker

Tactic:
rw [← LinearMap.sub_mem_ker_iff, ← hse] at this

Premises used: LinearMap.sub_mem_ker_iff
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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_1 : 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) ℤ)
this :
  (Products.eval C (↑l : Products I) -
      m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod) ∈
    LinearMap.range (M := LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) (πs C o)
hse :
  LinearMap.range (M := LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) (πs C o) =
    (Linear_CC' C hsC ho).ker
obtain :
  ∀ (n : LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ)
    (hn :
      (πs C o : (a : LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) → LocallyConstant (↑C : Type u) ℤ)
          n =
        Products.eval C (↑l : Products I) -
          m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod),
    False
⊢ False

Tactic:
obtain ⟨(n : LocallyConstant (π C (ord I · < o)) ℤ), hn⟩ := this

Premises used: Profinite.NobelingProof.π, Set.Elem, LocallyConstant, Int, Profinite.NobelingProof.ord, LT.lt
-- Module: Mathlib.Topology.Category.Profinite.Nobeling.Successor
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) ℤ
hn :
  (πs C o : (a : LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) → LocallyConstant (↑C : Type u) ℤ) n =
    Products.eval C (↑l : Products I) -
      m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod
⊢ HAdd.hAdd (α := LocallyConstant (↑C : Type u) ℤ) (β := LocallyConstant (↑C : Type u) ℤ)
      ((πs C o : (a : LocallyConstant (↑(π C fun (x : I) ↦ ord I x < o) : Type u) ℤ) → LocallyConstant (↑C : Type u) ℤ)
          n :
        LocallyConstant (↑C : Type u) ℤ)
      (m.sum fun (i : Products I) (a : ℤ) ↦ a • (List.map (e C) (term I ho :: (↑i : List I))).prod :
        LocallyConstant (↑C : Type u) ℤ) =
    Products.eval C (↑l : Products I)

Tactic:
rw [eq_sub_iff_add_eq] at hn

Premises used: eq_sub_iff_add_eq