/-- Two homomorphisms out of `ℤ` that agree on `1` agree everywhere. Hint: rewrite both sides
with `Lumenary.RepresentableFunctors.int_hom_eq_zpow`. -/
theorem int_hom_determined {G : Type*} [Group G] (φ ψ : Multiplicative ℤ →* G)
(h : φ (Multiplicative.ofAdd 1) = ψ (Multiplicative.ofAdd 1)) (n : ℤ) :
φ (Multiplicative.ofAdd n) = ψ (Multiplicative.ofAdd n) := by
sorryShow the compiled solution
/-- A group homomorphism `φ : ℤ → G` is determined by `g = φ(1)`: it must send `n` to `gⁿ`.
(In Mathlib the integers *as a multiplicative group* are `Multiplicative ℤ`, and `ofAdd n` is
`n` seen there.) Proof by induction over the integers: `φ(n + 1) = φ(n) φ(1)` and
`φ(n − 1) = φ(n) φ(1)⁻¹`. -/
theorem int_hom_eq_zpow (φ : Multiplicative ℤ →* G) (n : ℤ) :
φ (Multiplicative.ofAdd n) = φ (Multiplicative.ofAdd 1) ^ n := by
induction n using Int.induction_on with
| zero => simp
| succ k ih =>
calc φ (Multiplicative.ofAdd ((k : ℤ) + 1))
= φ (Multiplicative.ofAdd (k : ℤ) * Multiplicative.ofAdd 1) := rfl
_ = φ (Multiplicative.ofAdd (k : ℤ)) * φ (Multiplicative.ofAdd 1) := φ.map_mul _ _
_ = φ (Multiplicative.ofAdd 1) ^ (k : ℤ) * φ (Multiplicative.ofAdd 1) := by rw [ih]
_ = φ (Multiplicative.ofAdd 1) ^ ((k : ℤ) + 1) := (zpow_add_one _ _).symm
| pred k ih =>
calc φ (Multiplicative.ofAdd (-(k : ℤ) - 1))
= φ (Multiplicative.ofAdd (-(k : ℤ)) * (Multiplicative.ofAdd 1)⁻¹) := rfl
_ = φ (Multiplicative.ofAdd (-(k : ℤ))) * (φ (Multiplicative.ofAdd 1))⁻¹ := by
rw [φ.map_mul, φ.map_inv]
_ = φ (Multiplicative.ofAdd 1) ^ (-(k : ℤ)) * (φ (Multiplicative.ofAdd 1))⁻¹ := by rw [ih]
_ = φ (Multiplicative.ofAdd 1) ^ (-(k : ℤ) - 1) := (zpow_sub_one _ _).symmAxioms used: propext, Quot.soundformal/Lumenary/RepresentableFunctors.leanTry it in the Lean web editor