Theorem: FreeAbelianGroup.lift.add'
File: Mathlib/GroupTheory/FreeAbelianGroup.lean

tactic: refine FreeAbelianGroup.induction_on a ?_ ?_ ?_ ?_
state_before: α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
⊢ (lift (f + g)) a = (lift f) a + (lift g) a
state_after: case refine_1
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
⊢ (lift (f + g)) 0 = (lift f) 0 + (lift g) 0

case refine_2
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
⊢ ∀ (x : α), (lift (f + g)) (of x) = (lift f) (of x) + (lift g) (of x)

case refine_3
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
⊢ ∀ (x : α),
    (lift (f + g)) (of x) = (lift f) (of x) + (lift g) (of x) →
      (lift (f + g)) (-of x) = (lift f) (-of x) + (lift g) (-of x)

case refine_4
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
⊢ ∀ (x y : FreeAbelianGroup α),
    (lift (f + g)) x = (lift f) x + (lift g) x →
      (lift (f + g)) y = (lift f) y + (lift g) y → (lift (f + g)) (x + y) = (lift f) (x + y) + (lift g) (x + y)

tactic: simp only [(lift _).map_zero, zero_add]
state_before: case refine_1
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
⊢ (lift (f + g)) 0 = (lift f) 0 + (lift g) 0
state_after: no goals

tactic: intro x
state_before: case refine_2
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
⊢ ∀ (x : α), (lift (f + g)) (of x) = (lift f) (of x) + (lift g) (of x)
state_after: case refine_2
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
x : α
⊢ (lift (f + g)) (of x) = (lift f) (of x) + (lift g) (of x)

tactic: simp only [lift.of, Pi.add_apply]
state_before: case refine_2
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
x : α
⊢ (lift (f + g)) (of x) = (lift f) (of x) + (lift g) (of x)
state_after: no goals

tactic: intro x _
state_before: case refine_3
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
⊢ ∀ (x : α),
    (lift (f + g)) (of x) = (lift f) (of x) + (lift g) (of x) →
      (lift (f + g)) (-of x) = (lift f) (-of x) + (lift g) (-of x)
state_after: case refine_3
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
x : α
a✝ : (lift (f + g)) (of x) = (lift f) (of x) + (lift g) (of x)
⊢ (lift (f + g)) (-of x) = (lift f) (-of x) + (lift g) (-of x)

tactic: simp only [map_neg, lift.of, Pi.add_apply, neg_add]
state_before: case refine_3
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
x : α
a✝ : (lift (f + g)) (of x) = (lift f) (of x) + (lift g) (of x)
⊢ (lift (f + g)) (-of x) = (lift f) (-of x) + (lift g) (-of x)
state_after: no goals

tactic: intro x y hx hy
state_before: case refine_4
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
⊢ ∀ (x y : FreeAbelianGroup α),
    (lift (f + g)) x = (lift f) x + (lift g) x →
      (lift (f + g)) y = (lift f) y + (lift g) y → (lift (f + g)) (x + y) = (lift f) (x + y) + (lift g) (x + y)
state_after: case refine_4
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
x y : FreeAbelianGroup α
hx : (lift (f + g)) x = (lift f) x + (lift g) x
hy : (lift (f + g)) y = (lift f) y + (lift g) y
⊢ (lift (f + g)) (x + y) = (lift f) (x + y) + (lift g) (x + y)

tactic: simp only [(lift _).map_add, hx, hy, add_add_add_comm]
state_before: case refine_4
α✝ : Type u
α : Type u_1
β : Type u_2
inst✝ : AddCommGroup β
a : FreeAbelianGroup α
f g : α → β
x y : FreeAbelianGroup α
hx : (lift (f + g)) x = (lift f) x + (lift g) x
hy : (lift (f + g)) y = (lift f) y + (lift g) y
⊢ (lift (f + g)) (x + y) = (lift f) (x + y) + (lift g) (x + y)
state_after: no goals