Theorem: ModularCyclotomicCharacter.id
File: Mathlib/NumberTheory/Cyclotomic/CyclotomicCharacter.lean

tactic: refine (toFun_unique n (RingEquiv.refl L) 1 <| fun t ↦ ?_).symm
state_before: L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
⊢ χ₀ n (RingEquiv.refl L) = 1
state_after: L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)

tactic: have : 1 ≤ Fintype.card { x // x ∈ rootsOfUnity n L } := Fin.size_positive'
state_before: L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)
state_after: L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)

tactic: obtain (h | h) := this.lt_or_eq
state_before: L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)
state_after: case inl
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 < Fintype.card ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)

case inr
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 = Fintype.card ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)

tactic: have := Fact.mk h
state_before: case inl
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 < Fintype.card ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)
state_after: case inl
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this✝ : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 < Fintype.card ↥(rootsOfUnity n L)
this : Fact (1 < Fintype.card ↥(rootsOfUnity n L))
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)

tactic: simp [ZMod.val_one]
state_before: case inl
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this✝ : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 < Fintype.card ↥(rootsOfUnity n L)
this : Fact (1 < Fintype.card ↥(rootsOfUnity n L))
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)
state_after: no goals

tactic: have := Fintype.card_le_one_iff_subsingleton.mp h.ge
state_before: case inr
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 = Fintype.card ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)
state_after: case inr
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this✝ : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 = Fintype.card ↥(rootsOfUnity n L)
this : Subsingleton ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)

tactic: obtain rfl : t = 1 := Subsingleton.elim t 1
state_before: case inr
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
t : ↥(rootsOfUnity n L)
this✝ : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 = Fintype.card ↥(rootsOfUnity n L)
this : Subsingleton ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑t = ↑(↑t ^ ZMod.val 1)
state_after: case inr
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
this✝ : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 = Fintype.card ↥(rootsOfUnity n L)
this : Subsingleton ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑1 = ↑(↑1 ^ ZMod.val 1)

tactic: simp
state_before: case inr
L : Type u
inst✝¹ : CommRing L
inst✝ : IsDomain L
n : ℕ+
this✝ : 1 ≤ Fintype.card ↥(rootsOfUnity n L)
h : 1 = Fintype.card ↥(rootsOfUnity n L)
this : Subsingleton ↥(rootsOfUnity n L)
⊢ (RingEquiv.refl L) ↑↑1 = ↑(↑1 ^ ZMod.val 1)
state_after: no goals