Theorem: QuaternionAlgebra.lift_apply
File: Mathlib/Algebra/QuaternionBasis.lean

Proof steps:
state_before: R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
q : Basis A c₁ c₂
⊢ (Basis.self R).compHom q.liftHom = q
state_after: no goals
tactic: ext <;> simp [Basis.lift]
state_before: R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
F : ℍ[R,c₁,c₂] →ₐ[R] A
⊢ ((Basis.self R).compHom F).liftHom = F
state_after: case H
R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
F : ℍ[R,c₁,c₂] →ₐ[R] A
x✝ : ℍ[R,c₁,c₂]
⊢ ((Basis.self R).compHom F).liftHom x✝ = F x✝
tactic: ext
state_before: case H
R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
F : ℍ[R,c₁,c₂] →ₐ[R] A
x✝ : ℍ[R,c₁,c₂]
⊢ ((Basis.self R).compHom F).liftHom x✝ = F x✝
state_after: case H
R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
F : ℍ[R,c₁,c₂] →ₐ[R] A
x✝ : ℍ[R,c₁,c₂]
⊢ (algebraMap R A) x✝.re + x✝.imI • F { re := 0, imI := 1, imJ := 0, imK := 0 } +
        x✝.imJ • F { re := 0, imI := 0, imJ := 1, imK := 0 } +
      x✝.imK • F { re := 0, imI := 0, imJ := 0, imK := 1 } =
    F x✝
tactic: dsimp [Basis.lift]
state_before: case H
R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
F : ℍ[R,c₁,c₂] →ₐ[R] A
x✝ : ℍ[R,c₁,c₂]
⊢ (algebraMap R A) x✝.re + x✝.imI • F { re := 0, imI := 1, imJ := 0, imK := 0 } +
        x✝.imJ • F { re := 0, imI := 0, imJ := 1, imK := 0 } +
      x✝.imK • F { re := 0, imI := 0, imJ := 0, imK := 1 } =
    F x✝
state_after: case H
R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
F : ℍ[R,c₁,c₂] →ₐ[R] A
x✝ : ℍ[R,c₁,c₂]
⊢ F ((algebraMap R ℍ[R,c₁,c₂]) x✝.re) + x✝.imI • F { re := 0, imI := 1, imJ := 0, imK := 0 } +
        x✝.imJ • F { re := 0, imI := 0, imJ := 1, imK := 0 } +
      x✝.imK • F { re := 0, imI := 0, imJ := 0, imK := 1 } =
    F x✝
tactic: rw [← F.commutes]
state_before: case H
R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
F : ℍ[R,c₁,c₂] →ₐ[R] A
x✝ : ℍ[R,c₁,c₂]
⊢ F ((algebraMap R ℍ[R,c₁,c₂]) x✝.re) + x✝.imI • F { re := 0, imI := 1, imJ := 0, imK := 0 } +
        x✝.imJ • F { re := 0, imI := 0, imJ := 1, imK := 0 } +
      x✝.imK • F { re := 0, imI := 0, imJ := 0, imK := 1 } =
    F x✝
state_after: case H
R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
F : ℍ[R,c₁,c₂] →ₐ[R] A
x✝ : ℍ[R,c₁,c₂]
⊢ F
      { re := x✝.re + 0 + 0 + 0, imI := 0 + x✝.imI • 1 + 0 + 0, imJ := 0 + 0 + x✝.imJ • 1 + 0,
        imK := 0 + 0 + 0 + x✝.imK • 1 } =
    F x✝
tactic: simp only [← F.commutes, ← map_smul, ← map_add, mk_add_mk, smul_mk, smul_zero,
      algebraMap_eq]
state_before: case H
R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
F : ℍ[R,c₁,c₂] →ₐ[R] A
x✝ : ℍ[R,c₁,c₂]
⊢ F
      { re := x✝.re + 0 + 0 + 0, imI := 0 + x✝.imI • 1 + 0 + 0, imJ := 0 + 0 + x✝.imJ • 1 + 0,
        imK := 0 + 0 + 0 + x✝.imK • 1 } =
    F x✝
state_after: no goals
tactic: congr <;> simp