Theorem: Algebra.TensorProduct.map_ker
File: Mathlib/LinearAlgebra/TensorProduct/RightExactness.lean

Proof steps:
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
⊢ RingHom.ker (map f g) = Ideal.map includeLeft (RingHom.ker f) ⊔ Ideal.map includeRight (RingHom.ker g)
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ RingHom.ker (map f g) = Ideal.map includeLeft (RingHom.ker f) ⊔ Ideal.map includeRight (RingHom.ker g)
tactic: have : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g) := ext rfl rfl
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ RingHom.ker (map f g) = Ideal.map includeLeft (RingHom.ker f) ⊔ Ideal.map includeRight (RingHom.ker g)
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ RingHom.ker ((map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)) =
    Ideal.map includeLeft (RingHom.ker f) ⊔ Ideal.map includeRight (RingHom.ker g)
tactic: rw [this]
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ RingHom.ker ((map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)) =
    Ideal.map includeLeft (RingHom.ker f) ⊔ Ideal.map includeRight (RingHom.ker g)
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ RingHom.ker ((↑(map f (AlgHom.id R D))).comp ↑(map (AlgHom.id R A) g)) =
    Ideal.map includeLeft (RingHom.ker ↑f) ⊔ Ideal.map includeRight (RingHom.ker ↑g)
tactic: simp only [AlgHom.coe_ker, AlgHom.comp_toRingHom]
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ RingHom.ker ((↑(map f (AlgHom.id R D))).comp ↑(map (AlgHom.id R A) g)) =
    Ideal.map includeLeft (RingHom.ker ↑f) ⊔ Ideal.map includeRight (RingHom.ker ↑g)
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (RingHom.ker ↑(map f (AlgHom.id R D))) =
    Ideal.map includeLeft (RingHom.ker ↑f) ⊔ Ideal.map includeRight (RingHom.ker ↑g)
tactic: rw [← RingHom.comap_ker]
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (RingHom.ker ↑(map f (AlgHom.id R D))) =
    Ideal.map includeLeft (RingHom.ker ↑f) ⊔ Ideal.map includeRight (RingHom.ker ↑g)
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (RingHom.ker (map f (AlgHom.id R D))) =
    Ideal.map includeLeft (RingHom.ker f) ⊔ Ideal.map includeRight (RingHom.ker g)
tactic: simp only [← AlgHom.coe_ker]
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (RingHom.ker (map f (AlgHom.id R D))) =
    Ideal.map includeLeft (RingHom.ker f) ⊔ Ideal.map includeRight (RingHom.ker g)
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (RingHom.ker (map f (AlgHom.id R D))) =
    Ideal.map includeLeft (RingHom.ker f) ⊔ Ideal.comap (map (AlgHom.id R A) g) ⊥
tactic: rw [← Algebra.TensorProduct.lTensor_ker _ hg, RingHom.ker_eq_comap_bot (map (AlgHom.id R A) g)]
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (RingHom.ker (map f (AlgHom.id R D))) =
    Ideal.map includeLeft (RingHom.ker f) ⊔ Ideal.comap (map (AlgHom.id R A) g) ⊥
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (RingHom.ker (map f (AlgHom.id R D))) =
    Ideal.comap (map (AlgHom.id R A) g) (Ideal.map (map (AlgHom.id R A) g) (Ideal.map includeLeft (RingHom.ker f)))
tactic: rw [← Ideal.comap_map_of_surjective (map (AlgHom.id R A) g) (LinearMap.lTensor_surjective A hg)]
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (RingHom.ker (map f (AlgHom.id R D))) =
    Ideal.comap (map (AlgHom.id R A) g) (Ideal.map (map (AlgHom.id R A) g) (Ideal.map includeLeft (RingHom.ker f)))
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (Ideal.map includeLeft (RingHom.ker f)) =
    Ideal.comap (map (AlgHom.id R A) g) (Ideal.map (map (AlgHom.id R A) g) (Ideal.map includeLeft (RingHom.ker f)))
tactic: rw [Algebra.TensorProduct.rTensor_ker _ hf]
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.comap (↑(map (AlgHom.id R A) g)) (Ideal.map includeLeft (RingHom.ker f)) =
    Ideal.comap (map (AlgHom.id R A) g) (Ideal.map (map (AlgHom.id R A) g) (Ideal.map includeLeft (RingHom.ker f)))
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.map includeLeft (RingHom.ker f) = Ideal.map (map (AlgHom.id R A) g) (Ideal.map includeLeft (RingHom.ker f))
tactic: apply congr_arg₂ _ rfl
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.map includeLeft (RingHom.ker f) = Ideal.map (map (AlgHom.id R A) g) (Ideal.map includeLeft (RingHom.ker f))
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.map (↑includeLeft) (RingHom.ker f) = Ideal.map ((↑(map (AlgHom.id R A) g)).comp ↑includeLeft) (RingHom.ker f)
tactic: simp only [AlgHom.coe_ideal_map, Ideal.map_map]
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.map (↑includeLeft) (RingHom.ker f) = Ideal.map ((↑(map (AlgHom.id R A) g)).comp ↑includeLeft) (RingHom.ker f)
state_after: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.map (↑includeLeft) (RingHom.ker f) = Ideal.map (↑(includeLeft.comp (AlgHom.id R A))) (RingHom.ker f)
tactic: rw [← AlgHom.comp_toRingHom, Algebra.TensorProduct.map_comp_includeLeft]
state_before: R✝ : Type u_1
inst✝¹³ : CommSemiring R✝
A✝ : Type u_2
B✝ : Type u_3
inst✝¹² : Semiring A✝
inst✝¹¹ : Semiring B✝
inst✝¹⁰ : Algebra R✝ A✝
inst✝⁹ : Algebra R✝ B✝
R : Type u_4
inst✝⁸ : CommRing R
A : Type u_5
B : Type u_6
C : Type u_7
D : Type u_8
inst✝⁷ : Ring A
inst✝⁶ : Ring B
inst✝⁵ : Ring C
inst✝⁴ : Ring D
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : Algebra R C
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
hf : Function.Surjective ⇑f
hg : Function.Surjective ⇑g
this : map f g = (map f (AlgHom.id R D)).comp (map (AlgHom.id R A) g)
⊢ Ideal.map (↑includeLeft) (RingHom.ker f) = Ideal.map (↑(includeLeft.comp (AlgHom.id R A))) (RingHom.ker f)
state_after: no goals
tactic: rfl