Theorems / mh_numb_7e8d93

Mathlib held-out

Number theory · hard

Statement, exactly as the model and Lean see it
theorem lg_target {N : ℕ} [NeZero N] {R : Type u_1} [CommRing R] (e : AddChar (ZMod N) R) (χ : DirichletCharacter R N) {d : ℕ} (hd : d ∣ N) (he : e.mulShift ↑d = 1) {u : (ZMod N)ˣ} (hu : (ZMod.unitsMap hd) u = 1) : χ ↑u * gaussSum χ e = gaussSum χ e := by
Mathlib declaration
gaussSum_aux_of_mulShift
Held-out module
Mathlib.NumberTheory.DirichletCharacter.GaussSum
Banned modules (itself + downstream)
7
Reference proof premises (reachable / held-out)
46 / 0

Traces

Each configuration's full record: what was retrieved, what the model wrote, what Lean said back.

Not verified1 model calls · 1 Lean checks · $0.00006

Attempts

  1. sample 0 · round 0Wrong tactic1.9 s model time
    Proof
    intro u hu
    rw [gaussSum_conj]
    rw [he]
    rw [hu]
    rw [mul_one]
    What Lean printed (this is all the model sees on repair)
    4:8: error: Tactic `introN` failed: There are no additional binders or `let` bindings in the goal to introduce
    
    N : ℕ
    inst✝¹ : NeZero N
    R : Type u_1
    inst✝ : CommRing R
    e : AddChar (ZMod N) R
    χ : DirichletCharacter R N
    d : ℕ
    hd : d ∣ N
    he : e.mulShift ↑d = 1
    u : (ZMod N)ˣ
    hu : (ZMod.unitsMap hd) u = 1
    ⊢ χ ↑u * gaussSum χ e = gaussSum χ e

Reference proof

Mathlib's own source for this declaration, shown for comparison. It may use lemmas the prover is not allowed to use.

lemma gaussSum_aux_of_mulShift (χ : DirichletCharacter R N) {d : ℕ}
    (hd : d ∣ N) (he : e.mulShift d = 1) {u : (ZMod N)ˣ} (hu : ZMod.unitsMap hd u = 1) :
    χ u * gaussSum χ e = gaussSum χ e := by
  suffices e.mulShift u = e by conv_lhs => rw [← this, gaussSum_mulShift]
  rw [(by ring : u.val = (u - 1) + 1), ← mulShift_mul, mulShift_one, mul_eq_right]
  rsuffices ⟨a, ha⟩ : (d : ℤ) ∣ (u.val.val - 1 : ℤ)
  · have : u.val - 1 = ↑(u.val.val - 1 : ℤ) := by simp only [ZMod.natCast_val, Int.cast_sub,
      ZMod.intCast_cast, ZMod.cast_id', id_eq, Int.cast_one]
    rw [this, ha]
    ext1 y
    simpa only [Int.cast_mul, Int.cast_natCast, mulShift_apply, mul_assoc, one_apply]
      using DFunLike.ext_iff.mp he (a * y)
  rw [← Units.val_inj, Units.val_one, ZMod.unitsMap_def, Units.coe_map] at hu
  have : ZMod.castHom hd (ZMod d) u.val = ((u.val.val : ℤ) : ZMod d) := by simp
  rwa [MonoidHom.coe_coe, this, ← Int.cast_one, eq_comm,
    ZMod.intCast_eq_intCast_iff_dvd_sub] at hu