Theorems / mh_numb_7e8d93
Mathlib held-out
Number theory · hard
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
- 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