Theorem: Subgroup.smul_diff'
File: Mathlib/GroupTheory/SchurZassenhaus.lean

Proof steps:
state_before: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
⊢ diff (MonoidHom.id ↥H) α (op ↑h • β) = diff (MonoidHom.id ↥H) α β * h ^ H.index
state_after: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
⊢ diff (MonoidHom.id ↥H) α (op ↑h • β) = diff (MonoidHom.id ↥H) α β * h ^ H.index
tactic: letI := H.fintypeQuotientOfFiniteIndex
state_before: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
⊢ diff (MonoidHom.id ↥H) α (op ↑h • β) = diff (MonoidHom.id ↥H) α β * h ^ H.index
state_after: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
⊢ (let α_1 := toEquiv ⋯;
    let β_1 := toEquiv ⋯;
    ∏ q : G ⧸ H, (MonoidHom.id ↥H) ⟨(↑(α_1 q))⁻¹ * ↑(β_1 q), ⋯⟩) =
    ∏ x : G ⧸ H, (MonoidHom.id ↥H) ⟨(↑((toEquiv ⋯) x))⁻¹ * ↑((toEquiv ⋯) x), ⋯⟩ * h
tactic: rw [diff, diff, index_eq_card, Nat.card_eq_fintype_card,
      ← Finset.card_univ, ← Finset.prod_const, ← Finset.prod_mul_distrib]
state_before: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
⊢ (let α_1 := toEquiv ⋯;
    let β_1 := toEquiv ⋯;
    ∏ q : G ⧸ H, (MonoidHom.id ↥H) ⟨(↑(α_1 q))⁻¹ * ↑(β_1 q), ⋯⟩) =
    ∏ x : G ⧸ H, (MonoidHom.id ↥H) ⟨(↑((toEquiv ⋯) x))⁻¹ * ↑((toEquiv ⋯) x), ⋯⟩ * h
state_after: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
q : G ⧸ H
x✝ : q ∈ Finset.univ
⊢ (MonoidHom.id ↥H) ⟨(↑((toEquiv ⋯) q))⁻¹ * ↑((toEquiv ⋯) q), ⋯⟩ =
    (MonoidHom.id ↥H) ⟨(↑((toEquiv ⋯) q))⁻¹ * ↑((toEquiv ⋯) q), ⋯⟩ * h
tactic: refine Finset.prod_congr rfl fun q _ => ?_
state_before: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
q : G ⧸ H
x✝ : q ∈ Finset.univ
⊢ (MonoidHom.id ↥H) ⟨(↑((toEquiv ⋯) q))⁻¹ * ↑((toEquiv ⋯) q), ⋯⟩ =
    (MonoidHom.id ↥H) ⟨(↑((toEquiv ⋯) q))⁻¹ * ↑((toEquiv ⋯) q), ⋯⟩ * h
state_after: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
q : G ⧸ H
x✝ : q ∈ Finset.univ
⊢ ↑((toEquiv ⋯) q) = ↑((toEquiv ⋯) q) * ↑h
tactic: simp_rw [Subtype.ext_iff, MonoidHom.id_apply, coe_mul, mul_assoc, mul_right_inj]
state_before: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
q : G ⧸ H
x✝ : q ∈ Finset.univ
⊢ ↑((toEquiv ⋯) q) = ↑((toEquiv ⋯) q) * ↑h
state_after: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
q : G ⧸ H
x✝ : q ∈ Finset.univ
⊢ q = op ↑h • q
tactic: rw [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, MulOpposite.unop_op, mul_left_inj,
    ← Subtype.ext_iff, Equiv.apply_eq_iff_eq, inv_smul_eq_iff]
state_before: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.IsCommutative
inst✝¹ : H.FiniteIndex
α β : ↑(leftTransversals ↑H)
inst✝ : H.Normal
h : ↥H
this : Fintype (G ⧸ H) := H.fintypeQuotientOfFiniteIndex
q : G ⧸ H
x✝ : q ∈ Finset.univ
⊢ q = op ↑h • q
state_after: no goals
tactic: exact self_eq_mul_right.mpr ((QuotientGroup.eq_one_iff _).mpr h.2)