awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst : CommRing R
inst_1 : AddCommGroup M
inst_2 : AddCommGroup N
inst_3 : AddCommGroup P
inst_4 : Module R M
inst_5 : Module R N
inst_6 : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hfg : Exact.{u_2, u_3, u_4} (M := M) (N := N) (P := P) (⇑f : (a : M) → N) (⇑g : (a : N) → P)
hg : Surjective.{u_3 + 1, u_4 + 1} (α := N) (β := P) (⇑g : (a : N) → P)
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst_7 : AddCommGroup M'
inst_8 : AddCommGroup N'
inst_9 : AddCommGroup P'
inst_10 : Module R M'
inst_11 : Module R N'
inst_12 : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact.{u_6, u_7, u_8} (M := M') (N := N') (P := P') (⇑f' : (a : M') → N') (⇑g' : (a : N') → P')
hg' : Surjective.{u_7 + 1, u_8 + 1} (α := N') (β := P') (⇑g' : (a : N') → P')
⊢ Submodule.comap (rTensor N' g) (ker (lTensor P g')) = range (lTensor N f') ⊔ range (rTensor N' f)
have rw : Submodule.comap (rTensor N' g) (ker (lTensor P g')) = range (lTensor N f') ⊔ ker (rTensor N' g)
Tactic: rw [← Exact.linearMap_ker_eq (rTensor_exact N' hfg hg)]
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst : CommRing R
inst_1 : AddCommGroup M
inst_2 : AddCommGroup N
inst_3 : AddCommGroup P
inst_4 : Module R M
inst_5 : Module R N
inst_6 : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hfg : Exact.{u_2, u_3, u_4} (M := M) (N := N) (P := P) (⇑f : (a : M) → N) (⇑g : (a : N) → P)
hg : Surjective.{u_3 + 1, u_4 + 1} (α := N) (β := P) (⇑g : (a : N) → P)
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst_7 : AddCommGroup M'
inst_8 : AddCommGroup N'
inst_9 : AddCommGroup P'
inst_10 : Module R M'
inst_11 : Module R N'
inst_12 : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact.{u_6, u_7, u_8} (M := M') (N := N') (P := P') (⇑f' : (a : M') → N') (⇑g' : (a : N') → P')
hg' : Surjective.{u_7 + 1, u_8 + 1} (α := N') (β := P') (⇑g' : (a : N') → P')
⊢ Submodule.comap (rTensor N' g) (ker (lTensor P g')) = range (lTensor N f') ⊔ ker (rTensor N' g)
have rw : Submodule.comap (rTensor N' g) (ker (lTensor P g')) =
  Submodule.comap (rTensor N' g) (Submodule.map (rTensor N' g) (range (lTensor N f')))
Tactic: rw [← Submodule.comap_map_eq]
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst : CommRing R
inst_1 : AddCommGroup M
inst_2 : AddCommGroup N
inst_3 : AddCommGroup P
inst_4 : Module R M
inst_5 : Module R N
inst_6 : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hfg : Exact.{u_2, u_3, u_4} (M := M) (N := N) (P := P) (⇑f : (a : M) → N) (⇑g : (a : N) → P)
hg : Surjective.{u_3 + 1, u_4 + 1} (α := N) (β := P) (⇑g : (a : N) → P)
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst_7 : AddCommGroup M'
inst_8 : AddCommGroup N'
inst_9 : AddCommGroup P'
inst_10 : Module R M'
inst_11 : Module R N'
inst_12 : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact.{u_6, u_7, u_8} (M := M') (N := N') (P := P') (⇑f' : (a : M') → N') (⇑g' : (a : N') → P')
hg' : Surjective.{u_7 + 1, u_8 + 1} (α := N') (β := P') (⇑g' : (a : N') → P')
⊢ Submodule.comap (rTensor N' g) (ker (lTensor P g')) =
    Submodule.comap (rTensor N' g) (Submodule.map (rTensor N' g) (range (lTensor N f')))
have apply : ker (lTensor P g') = Submodule.map (rTensor N' g) (range (lTensor N f'))
Tactic: apply congr_arg₂ _ rfl
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst : CommRing R
inst_1 : AddCommGroup M
inst_2 : AddCommGroup N
inst_3 : AddCommGroup P
inst_4 : Module R M
inst_5 : Module R N
inst_6 : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hfg : Exact.{u_2, u_3, u_4} (M := M) (N := N) (P := P) (⇑f : (a : M) → N) (⇑g : (a : N) → P)
hg : Surjective.{u_3 + 1, u_4 + 1} (α := N) (β := P) (⇑g : (a : N) → P)
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst_7 : AddCommGroup M'
inst_8 : AddCommGroup N'
inst_9 : AddCommGroup P'
inst_10 : Module R M'
inst_11 : Module R N'
inst_12 : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact.{u_6, u_7, u_8} (M := M') (N := N') (P := P') (⇑f' : (a : M') → N') (⇑g' : (a : N') → P')
hg' : Surjective.{u_7 + 1, u_8 + 1} (α := N') (β := P') (⇑g' : (a : N') → P')
⊢ ker (lTensor P g') = Submodule.map (rTensor N' g) (range (lTensor N f'))
have rw : ker (lTensor P g') = (map g f').range
Tactic: rw [range_eq_map, ← Submodule.map_comp, rTensor_comp_lTensor,
    Submodule.map_top]
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst : CommRing R
inst_1 : AddCommGroup M
inst_2 : AddCommGroup N
inst_3 : AddCommGroup P
inst_4 : Module R M
inst_5 : Module R N
inst_6 : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hfg : Exact.{u_2, u_3, u_4} (M := M) (N := N) (P := P) (⇑f : (a : M) → N) (⇑g : (a : N) → P)
hg : Surjective.{u_3 + 1, u_4 + 1} (α := N) (β := P) (⇑g : (a : N) → P)
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst_7 : AddCommGroup M'
inst_8 : AddCommGroup N'
inst_9 : AddCommGroup P'
inst_10 : Module R M'
inst_11 : Module R N'
inst_12 : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact.{u_6, u_7, u_8} (M := M') (N := N') (P := P') (⇑f' : (a : M') → N') (⇑g' : (a : N') → P')
hg' : Surjective.{u_7 + 1, u_8 + 1} (α := N') (β := P') (⇑g' : (a : N') → P')
⊢ ker (lTensor P g') = (map g f').range
have rw : ker (lTensor P g') = Submodule.map (lTensor P f') (range (rTensor M' g))
Tactic: rw [← lTensor_comp_rTensor, range_eq_map, Submodule.map_comp,
    Submodule.map_top]
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst : CommRing R
inst_1 : AddCommGroup M
inst_2 : AddCommGroup N
inst_3 : AddCommGroup P
inst_4 : Module R M
inst_5 : Module R N
inst_6 : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hfg : Exact.{u_2, u_3, u_4} (M := M) (N := N) (P := P) (⇑f : (a : M) → N) (⇑g : (a : N) → P)
hg : Surjective.{u_3 + 1, u_4 + 1} (α := N) (β := P) (⇑g : (a : N) → P)
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst_7 : AddCommGroup M'
inst_8 : AddCommGroup N'
inst_9 : AddCommGroup P'
inst_10 : Module R M'
inst_11 : Module R N'
inst_12 : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact.{u_6, u_7, u_8} (M := M') (N := N') (P := P') (⇑f' : (a : M') → N') (⇑g' : (a : N') → P')
hg' : Surjective.{u_7 + 1, u_8 + 1} (α := N') (β := P') (⇑g' : (a : N') → P')
⊢ ker (lTensor P g') = Submodule.map (lTensor P f') (range (rTensor M' g))
have rw : Eq (α := Submodule R (P ⊗[R] N')) (ker (lTensor P g')) (range (lTensor P f'))
Tactic: rw [range_eq_top.mpr (rTensor_surjective M' hg), Submodule.map_top]
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst : CommRing R
inst_1 : AddCommGroup M
inst_2 : AddCommGroup N
inst_3 : AddCommGroup P
inst_4 : Module R M
inst_5 : Module R N
inst_6 : Module R P
f : M →ₗ[R] N
g : N →ₗ[R] P
hfg : Exact.{u_2, u_3, u_4} (M := M) (N := N) (P := P) (⇑f : (a : M) → N) (⇑g : (a : N) → P)
hg : Surjective.{u_3 + 1, u_4 + 1} (α := N) (β := P) (⇑g : (a : N) → P)
M' : Type u_6
N' : Type u_7
P' : Type u_8
inst_7 : AddCommGroup M'
inst_8 : AddCommGroup N'
inst_9 : AddCommGroup P'
inst_10 : Module R M'
inst_11 : Module R N'
inst_12 : Module R P'
f' : M' →ₗ[R] N'
g' : N' →ₗ[R] P'
hfg' : Exact.{u_6, u_7, u_8} (M := M') (N := N') (P := P') (⇑f' : (a : M') → N') (⇑g' : (a : N') → P')
hg' : Surjective.{u_7 + 1, u_8 + 1} (α := N') (β := P') (⇑g' : (a : N') → P')
⊢ Eq (α := Submodule R (P ⊗[R] N')) (ker (lTensor P g')) (range (lTensor P f'))
have rw : Eq (α := Submodule R (P ⊗[R] N')) (range (lTensor P f')) (range (lTensor P f'))
Tactic: rw [Exact.linearMap_ker_eq (lTensor_exact P hfg' hg')]
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
⊢ Eq (α := Submodule R (A ⊗[R] B)) (Submodule.restrictScalars R (map (F := A →ₐ[R] A ⊗[R] B) includeLeft I))
    (LinearMap.range (M := TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B)
      (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I))))
have rw : (↑(Submodule.restrictScalars R (map (F := A →ₐ[R] A ⊗[R] B) includeLeft I)) : Set (A ⊗[R] B)) =
  (↑(LinearMap.range (M := TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B)
        (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)))) :
    Set (A ⊗[R] B))
Tactic: rw [← SetLike.coe_set_eq]
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
⊢ (↑(Submodule.restrictScalars R (map (F := A →ₐ[R] A ⊗[R] B) includeLeft I)) : Set (A ⊗[R] B)) =
    (↑(LinearMap.range (M := TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B)
          (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)))) :
      Set (A ⊗[R] B))
have a : (↑(Submodule.restrictScalars R (map (F := A →ₐ[R] A ⊗[R] B) includeLeft I)) : Set (A ⊗[R] B)) ≤
  (↑(LinearMap.range (M := TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B)
        (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)))) :
    Set (A ⊗[R] B))
Tactic: apply le_antisymm
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
a :
  (↑(Submodule.restrictScalars R (map (F := A →ₐ[R] A ⊗[R] B) includeLeft I)) : Set (A ⊗[R] B)) ≤
    (↑(LinearMap.range (M := TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B)
          (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)))) :
      Set (A ⊗[R] B))
⊢ (↑(Submodule.restrictScalars R (map (F := A →ₐ[R] A ⊗[R] B) includeLeft I)) : Set (A ⊗[R] B)) =
    (↑(LinearMap.range (M := TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B)
          (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)))) :
      Set (A ⊗[R] B))
have a₁ : (↑(LinearMap.range (M := TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B)
        (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)))) :
    Set (A ⊗[R] B)) ≤
  (↑(Submodule.restrictScalars R (map (F := A →ₐ[R] A ⊗[R] B) includeLeft I)) : Set (A ⊗[R] B))
Tactic: apply le_antisymm
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (hypothesis)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
x : A ⊗[R] B
hx : x ∈ (↑(Submodule.restrictScalars R (map (F := A →ₐ[R] A ⊗[R] B) includeLeft I)) : Set (A ⊗[R] B))
⊢ ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y =
      x
have hx₁ : x ∈
  (↑(Submodule.restrictScalars R (R := A ⊗[R] B)
        (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)))) :
    Set (A ⊗[R] B))
Tactic: rw [Ideal.map, ← submodule_span_eq] at hx
Cleared hypotheses: hx
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
x : A ⊗[R] B
hx :
  x ∈
    (↑(Submodule.restrictScalars R (R := A ⊗[R] B)
          (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)))) :
      Set (A ⊗[R] B))
⊢ ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y =
      x
have a : ∀ (x : A ⊗[R] B) (h : Membership.mem (γ := Set (A ⊗[R] B)) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)) x),
  ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y =
      x
Tactic: refine Submodule.span_induction ?_ ?_ ?_ ?_ hx
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
x : A ⊗[R] B
hx :
  x ∈
    (↑(Submodule.restrictScalars R (R := A ⊗[R] B)
          (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)))) :
      Set (A ⊗[R] B))
a :
  ∀ (x : A ⊗[R] B) (h : Membership.mem (γ := Set (A ⊗[R] B)) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)) x),
    ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
      (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
            (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
          y =
        x
⊢ ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y =
      x
have a₁ : ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
  Eq (α := A ⊗[R] B)
    ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y :
      A ⊗[R] B)
    (0 : A ⊗[R] B)
Tactic: refine Submodule.span_induction ?_ ?_ ?_ ?_ hx
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
x : A ⊗[R] B
hx :
  x ∈
    (↑(Submodule.restrictScalars R (R := A ⊗[R] B)
          (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)))) :
      Set (A ⊗[R] B))
a :
  ∀ (x : A ⊗[R] B) (h : Membership.mem (γ := Set (A ⊗[R] B)) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)) x),
    ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
      (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
            (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
          y =
        x
a₁ :
  ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    Eq (α := A ⊗[R] B)
      ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
            (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
          y :
        A ⊗[R] B)
      (0 : A ⊗[R] B)
⊢ ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y =
      x
have a₂ : ∀ (x y : A ⊗[R] B)
  (hx :
    Membership.mem (γ := Submodule (A ⊗[R] B) (A ⊗[R] B))
      (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A))) x)
  (hy :
    Membership.mem (γ := Submodule (A ⊗[R] B) (A ⊗[R] B))
      (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A))) y),
  (∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
      (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
            (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
          y =
        x) →
    (∃ (y_1 : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
        (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
              (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
            y_1 =
          y) →
      ∃ (y_1 : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
        (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
              (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
            y_1 =
          x + y
Tactic: refine Submodule.span_induction ?_ ?_ ?_ ?_ hx
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
x : A ⊗[R] B
hx :
  x ∈
    (↑(Submodule.restrictScalars R (R := A ⊗[R] B)
          (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)))) :
      Set (A ⊗[R] B))
⊢ ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    Eq (α := A ⊗[R] B)
      ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
            (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
          y :
        A ⊗[R] B)
      (0 : A ⊗[R] B)
have h : Eq (α := A ⊗[R] B)
  ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
      (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
    0)
  0
Tactic: use 0
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
x_1 : A ⊗[R] B
hx :
  x_1 ∈
    (↑(Submodule.restrictScalars R (R := A ⊗[R] B)
          (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)))) :
      Set (A ⊗[R] B))
x y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B
⊢ ∃ (y_1 : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y_1 =
      HAdd.hAdd (α := A ⊗[R] B) (β := A ⊗[R] B)
        ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
              (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
            x :
          A ⊗[R] B)
        ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
              (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
            y :
          A ⊗[R] B)
have h : (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
      (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
    (x + y) =
  HAdd.hAdd (α := A ⊗[R] B) (β := A ⊗[R] B)
    ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        x :
      A ⊗[R] B)
    ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y :
      A ⊗[R] B)
Tactic: use x + y
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
x_1 : A ⊗[R] B
hx :
  x_1 ∈
    (↑(Submodule.restrictScalars R (R := A ⊗[R] B)
          (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)))) :
      Set (A ⊗[R] B))
x : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B
⊢ ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y =
      HSMul.hSMul (α := A ⊗[R] B) (β := A ⊗[R] B) 0
        ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
              (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
            x :
          A ⊗[R] B)
have h : (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
      (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
    0 =
  HSMul.hSMul (α := A ⊗[R] B) (β := A ⊗[R] B) 0
    ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        x :
      A ⊗[R] B)
Tactic: use 0
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
x : A ⊗[R] B
hx :
  x ∈
    (↑(Submodule.restrictScalars R (R := A ⊗[R] B)
          (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)))) :
      Set (A ⊗[R] B))
a : A
b : B
⊢ ∃ (y : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y =
      HSMul.hSMul (α := A ⊗[R] B) (β := A ⊗[R] B) (a ⊗ₜ[R] b)
        ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
            (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
          0)
have h : (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
      (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
    0 =
  HSMul.hSMul (α := A ⊗[R] B) (β := A ⊗[R] B) (a ⊗ₜ[R] b)
    ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
        (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
      0)
Tactic: use 0
-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.RightExactness (goal)
Goal:
R : Type u_1
inst : CommSemiring R
A : Type u_2
B : Type u_3
inst_1 : Semiring A
inst_2 : Semiring B
inst_3 : Algebra R A
inst_4 : Algebra R B
I : Ideal A
x_1 : A ⊗[R] B
hx :
  x_1 ∈
    (↑(Submodule.restrictScalars R (R := A ⊗[R] B)
          (Submodule.span (A ⊗[R] B) ((⇑includeLeft : (a : A) → A ⊗[R] B) '' (↑I : Set A)))) :
      Set (A ⊗[R] B))
a : A
b : B
x : ↥(Submodule.restrictScalars R I)
y : B
⊢ ∃ (y_1 : TensorProduct.{u_1, u_2, u_3} R (↥(Submodule.restrictScalars R I)) B),
    (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        y_1 =
      HSMul.hSMul (α := A ⊗[R] B) (β := A ⊗[R] B) (a ⊗ₜ[R] b)
        ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
              (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
            (x ⊗ₜ[R] y) :
          A ⊗[R] B)
have h : (LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
      (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
    ((a • x) ⊗ₜ[R] (b * y)) =
  HSMul.hSMul (α := A ⊗[R] B) (β := A ⊗[R] B) (a ⊗ₜ[R] b)
    ((LinearMap.rTensor B (Submodule.subtype (Submodule.restrictScalars R I)) :
          (a : ↥(Submodule.restrictScalars R I) ⊗[R] B) → A ⊗[R] B)
        (x ⊗ₜ[R] y) :
      A ⊗[R] B)
Tactic: use (a • x) ⊗ₜ[R] (b * y)