Theorem: Monoid.PushoutI.base_injective
File: Mathlib/GroupTheory/PushoutI.lean

tactic: rcases transversal_nonempty φ hφ with ⟨d⟩
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
⊢ Injective ⇑(base φ)
state_after: case intro
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
d : Transversal φ
⊢ Injective ⇑(base φ)

tactic: let _ := Classical.decEq ι
state_before: case intro
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
d : Transversal φ
⊢ Injective ⇑(base φ)
state_after: case intro
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
d : Transversal φ
x✝ : DecidableEq ι := Classical.decEq ι
⊢ Injective ⇑(base φ)

tactic: let _ := fun i => Classical.decEq (G i)
state_before: case intro
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
d : Transversal φ
x✝ : DecidableEq ι := Classical.decEq ι
⊢ Injective ⇑(base φ)
state_after: case intro
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
d : Transversal φ
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : (i : ι) → DecidableEq (G i) := fun i => Classical.decEq (G i)
⊢ Injective ⇑(base φ)

tactic: intros _ _ h
state_before: case intro
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
d : Transversal φ
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : (i : ι) → DecidableEq (G i) := fun i => Classical.decEq (G i)
⊢ Injective ((fun x x_1 => x • x_1) ∘ ⇑(base φ))
state_after: case intro
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
d : Transversal φ
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : (i : ι) → DecidableEq (G i) := fun i => Classical.decEq (G i)
a₁✝ a₂✝ : H
h : ((fun x x_1 => x • x_1) ∘ ⇑(base φ)) a₁✝ = ((fun x x_1 => x • x_1) ∘ ⇑(base φ)) a₂✝
⊢ a₁✝ = a₂✝

tactic: exact eq_of_smul_eq_smul (fun w : NormalWord d =>
  by simp_all [Function.funext_iff, base_smul_eq_smul])
state_before: case intro
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
d : Transversal φ
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : (i : ι) → DecidableEq (G i) := fun i => Classical.decEq (G i)
a₁✝ a₂✝ : H
h : ((fun x x_1 => x • x_1) ∘ ⇑(base φ)) a₁✝ = ((fun x x_1 => x • x_1) ∘ ⇑(base φ)) a₂✝
⊢ a₁✝ = a₂✝
state_after: no goals

tactic: simp_all [Function.funext_iff, base_smul_eq_smul]
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Group (G i)
inst✝ : Group H
φ : (i : ι) → H →* G i
hφ : ∀ (i : ι), Injective ⇑(φ i)
d : Transversal φ
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : (i : ι) → DecidableEq (G i) := fun i => Classical.decEq (G i)
a₁✝ a₂✝ : H
h : ((fun x x_1 => x • x_1) ∘ ⇑(base φ)) a₁✝ = ((fun x x_1 => x • x_1) ∘ ⇑(base φ)) a₂✝
w : NormalWord d
⊢ a₁✝ • w = a₂✝ • w
state_after: no goals