awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (goal)
Goal:
R : Type u_1
S : Type u_2
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid N
inst_4 : Module R N
A : Subalgebra R S
hA : A.FG
t : TensorProduct.{u_1, u_2, u_4} R (↥A) N
A' : Subalgebra R S
hA' : A'.FG
t' : TensorProduct.{u_1, u_2, u_4} R (↥A') N
hj : (A ⊔ A').val.comp (Subalgebra.inclusion ⋯) = A.val
hj' : (A ⊔ A').val.comp (Subalgebra.inclusion ⋯) = A'.val
h :
  Eq (α := S ⊗[R] N)
    ((rTensor N (A ⊔ A').val.toLinearMap : (a : ↥(A ⊔ A') ⊗[R] N) → S ⊗[R] N)
        ((rTensor N (AlgHom.toLinearMap (Subalgebra.inclusion ⋯)) : (a : ↥A ⊗[R] N) → ↥(A ⊔ A') ⊗[R] N) t) :
      S ⊗[R] N)
    ((rTensor N (A ⊔ A').val.toLinearMap : (a : ↥(A ⊔ A') ⊗[R] N) → S ⊗[R] N)
        ((rTensor N (AlgHom.toLinearMap (Subalgebra.inclusion ⋯)) : (a : ↥A' ⊗[R] N) → ↥(A ⊔ A') ⊗[R] N) t') :
      S ⊗[R] N)
⊢ ∃ (B : Subalgebra R S) (hAB : A ≤ B) (hA'B : A' ≤ B),
    B.FG ∧
      Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
        ((rTensor N (Subalgebra.inclusion hAB).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N) t :
          TensorProduct.{u_1, u_2, u_4} R (↥B) N)
        ((rTensor N (Subalgebra.inclusion hA'B).toLinearMap : (a : ↥A' ⊗[R] N) → ↥B ⊗[R] N) t' :
          TensorProduct.{u_1, u_2, u_4} R (↥B) N)
have let : ∀ (B : Subalgebra R S) (hB_le : A ⊔ A' ≤ B) (hB : B.FG)
  (h :
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
      ((rTensor N (Subalgebra.inclusion hB_le).toLinearMap : (a : ↥(A ⊔ A') ⊗[R] N) → ↥B ⊗[R] N)
          ((rTensor N (AlgHom.toLinearMap (Subalgebra.inclusion sorry)) : (a : ↥A ⊗[R] N) → ↥(A ⊔ A') ⊗[R] N) t) :
        TensorProduct.{u_1, u_2, u_4} R (↥B) N)
      ((rTensor N (Subalgebra.inclusion hB_le).toLinearMap : (a : ↥(A ⊔ A') ⊗[R] N) → ↥B ⊗[R] N)
          ((rTensor N (AlgHom.toLinearMap (Subalgebra.inclusion sorry)) : (a : ↥A' ⊗[R] N) → ↥(A ⊔ A') ⊗[R] N) t') :
        TensorProduct.{u_1, u_2, u_4} R (↥B) N)),
  ∃ (B : Subalgebra R S) (hAB : A ≤ B) (hA'B : A' ≤ B),
    B.FG ∧
      Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
        ((rTensor N (Subalgebra.inclusion hAB).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N) t :
          TensorProduct.{u_1, u_2, u_4} R (↥B) N)
        ((rTensor N (Subalgebra.inclusion hA'B).toLinearMap : (a : ↥A' ⊗[R] N) → ↥B ⊗[R] N) t' :
          TensorProduct.{u_1, u_2, u_4} R (↥B) N)
Tactic: let ⟨B, hB_le, hB, h⟩ := TensorProduct.Algebra.eq_of_fg_of_subtype_eq
    (Subalgebra.FG.sup hA hA') h
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (goal)
Goal:
R : Type u_1
S : Type u_2
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid N
inst_4 : Module R N
A : Subalgebra R S
hA : A.FG
t : TensorProduct.{u_1, u_2, u_4} R (↥A) N
A' : Subalgebra R S
hA' : A'.FG
t' : TensorProduct.{u_1, u_2, u_4} R (↥A') N
hj : (A ⊔ A').val.comp (Subalgebra.inclusion ⋯) = A.val
hj' : (A ⊔ A').val.comp (Subalgebra.inclusion ⋯) = A'.val
h_1 :
  Eq (α := S ⊗[R] N)
    ((rTensor N (A ⊔ A').val.toLinearMap : (a : ↥(A ⊔ A') ⊗[R] N) → S ⊗[R] N)
        ((rTensor N (AlgHom.toLinearMap (Subalgebra.inclusion ⋯)) : (a : ↥A ⊗[R] N) → ↥(A ⊔ A') ⊗[R] N) t) :
      S ⊗[R] N)
    ((rTensor N (A ⊔ A').val.toLinearMap : (a : ↥(A ⊔ A') ⊗[R] N) → S ⊗[R] N)
        ((rTensor N (AlgHom.toLinearMap (Subalgebra.inclusion ⋯)) : (a : ↥A' ⊗[R] N) → ↥(A ⊔ A') ⊗[R] N) t') :
      S ⊗[R] N)
B : Subalgebra R S
hB_le : A ⊔ A' ≤ B
hB : B.FG
h :
  Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
    ((rTensor N (Subalgebra.inclusion hB_le).toLinearMap : (a : ↥(A ⊔ A') ⊗[R] N) → ↥B ⊗[R] N)
        ((rTensor N (AlgHom.toLinearMap (Subalgebra.inclusion ⋯)) : (a : ↥A ⊗[R] N) → ↥(A ⊔ A') ⊗[R] N) t) :
      TensorProduct.{u_1, u_2, u_4} R (↥B) N)
    ((rTensor N (Subalgebra.inclusion hB_le).toLinearMap : (a : ↥(A ⊔ A') ⊗[R] N) → ↥B ⊗[R] N)
        ((rTensor N (AlgHom.toLinearMap (Subalgebra.inclusion ⋯)) : (a : ↥A' ⊗[R] N) → ↥(A ⊔ A') ⊗[R] N) t') :
      TensorProduct.{u_1, u_2, u_4} R (↥B) N)
⊢ ∃ (B : Subalgebra R S) (hAB : A ≤ B) (hA'B : A' ≤ B),
    B.FG ∧
      Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
        ((rTensor N (Subalgebra.inclusion hAB).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N) t :
          TensorProduct.{u_1, u_2, u_4} R (↥B) N)
        ((rTensor N (Subalgebra.inclusion hA'B).toLinearMap : (a : ↥A' ⊗[R] N) → ↥B ⊗[R] N) t' :
          TensorProduct.{u_1, u_2, u_4} R (↥B) N)
have right : Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
  ((rTensor N (Subalgebra.inclusion sorry).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N) t :
    TensorProduct.{u_1, u_2, u_4} R (↥B) N)
  ((rTensor N (Subalgebra.inclusion sorry).toLinearMap : (a : ↥A' ⊗[R] N) → ↥B ⊗[R] N) t' :
    TensorProduct.{u_1, u_2, u_4} R (↥B) N)
Tactic: use B, le_trans le_sup_left hB_le, le_trans le_sup_right hB_le, hB
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (goal)
Goal:
R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : AddCommMonoid N
inst_6 : Module R N
f : M →ₗ[R] N
t : S ⊗[R] M
ht : Eq (α := S ⊗[R] N) ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N) (0 : S ⊗[R] N)
⊢ ∃ (A : Subalgebra R S) (_ : A.FG) (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M),
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u : TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        (0 : TensorProduct.{u_1, u_2, u_4} R (↥A) N) ∧
      (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
have obtain : ∀ (A : Subalgebra R S) (hA : A.FG)
  (ht_memA : Membership.mem (γ := Submodule R (S ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t),
  ∃ (A : Subalgebra R S) (_ : A.FG) (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M),
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u : TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        (0 : TensorProduct.{u_1, u_2, u_4} R (↥A) N) ∧
      (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
Tactic: obtain ⟨A, hA, ht_memA⟩ := TensorProduct.Algebra.exists_of_fg t
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (goal)
Goal:
R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : AddCommMonoid N
inst_6 : Module R N
f : M →ₗ[R] N
t : S ⊗[R] M
ht : Eq (α := S ⊗[R] N) ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N) (0 : S ⊗[R] N)
A : Subalgebra R S
hA : A.FG
ht_memA : Membership.mem (γ := Submodule R (S ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t
⊢ ∃ (A : Subalgebra R S) (_ : A.FG) (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M),
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u : TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        (0 : TensorProduct.{u_1, u_2, u_4} R (↥A) N) ∧
      (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
have obtain : ∀ (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M) (hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t),
  ∃ (A : Subalgebra R S) (_ : A.FG) (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M),
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u : TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        (0 : TensorProduct.{u_1, u_2, u_4} R (↥A) N) ∧
      (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
Tactic: obtain ⟨u, hu⟩ := _root_.id ht_memA
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (hypothesis)
Goal:
R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : AddCommMonoid N
inst_6 : Module R N
f : M →ₗ[R] N
t : S ⊗[R] M
ht : Eq (α := S ⊗[R] N) ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N) (0 : S ⊗[R] N)
A : Subalgebra R S
hA : A.FG
ht_memA : Membership.mem (γ := Submodule R (S ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t
u : TensorProduct.{u_1, u_2, u_3} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
⊢ ∃ (A : Subalgebra R S) (_ : A.FG) (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M),
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u : TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        (0 : TensorProduct.{u_1, u_2, u_4} R (↥A) N) ∧
      (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
have this : ∀
  (h :
    Eq (α := S ⊗[R] N)
      ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
          ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
        S ⊗[R] N)
      ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N) 0 : S ⊗[R] N)),
  ∃ (B : Subalgebra R S) (hAB : A ≤ B),
    B.FG ∧
      Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
        ((rTensor N (Subalgebra.inclusion hAB).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N)
            ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
          TensorProduct.{u_1, u_2, u_4} R (↥B) N)
        ((rTensor N (Subalgebra.inclusion hAB).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N) 0 :
          TensorProduct.{u_1, u_2, u_4} R (↥B) N)
Tactic: have := TensorProduct.Algebra.eq_of_fg_of_subtype_eq hA (t := f.baseChange _ u) (t' := 0)
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (hypothesis)
Goal:
R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : AddCommMonoid N
inst_6 : Module R N
f : M →ₗ[R] N
t : S ⊗[R] M
ht : Eq (α := S ⊗[R] N) ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N) (0 : S ⊗[R] N)
A : Subalgebra R S
hA : A.FG
ht_memA : Membership.mem (γ := Submodule R (S ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t
u : TensorProduct.{u_1, u_2, u_3} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
this :
  ∀
    (h :
      Eq (α := S ⊗[R] N)
        ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
            ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
          S ⊗[R] N)
        ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N) 0 : S ⊗[R] N)),
    ∃ (B : Subalgebra R S) (hAB : A ≤ B),
      B.FG ∧
        Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
          ((rTensor N (Subalgebra.inclusion hAB).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N)
              ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
            TensorProduct.{u_1, u_2, u_4} R (↥B) N)
          ((rTensor N (Subalgebra.inclusion hAB).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N) 0 :
            TensorProduct.{u_1, u_2, u_4} R (↥B) N)
⊢ ∃ (A : Subalgebra R S) (_ : A.FG) (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M),
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u : TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        (0 : TensorProduct.{u_1, u_2, u_4} R (↥A) N) ∧
      (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
have this₁ : ∀
  (h :
    Eq (α := S ⊗[R] N)
      ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
          ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
        S ⊗[R] N)
      (0 : S ⊗[R] N)),
  ∃ (B : Subalgebra R S),
    B.FG ∧
      ∃ (x : A ≤ B),
        Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
          ((rTensor N (Subalgebra.inclusion sorry).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N)
              ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
            TensorProduct.{u_1, u_2, u_4} R (↥B) N)
          (0 : TensorProduct.{u_1, u_2, u_4} R (↥B) N)
Tactic: simp only [map_zero, exists_and_left] at this
Cleared hypotheses: this
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (goal)
Goal:
R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : AddCommMonoid N
inst_6 : Module R N
f : M →ₗ[R] N
t : S ⊗[R] M
ht : Eq (α := S ⊗[R] N) ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N) (0 : S ⊗[R] N)
A : Subalgebra R S
hA : A.FG
ht_memA : Membership.mem (γ := Submodule R (S ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t
u : TensorProduct.{u_1, u_2, u_3} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
this :
  ∀
    (h :
      Eq (α := S ⊗[R] N)
        ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
            ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
          S ⊗[R] N)
        (0 : S ⊗[R] N)),
    ∃ (B : Subalgebra R S),
      B.FG ∧
        ∃ (x : A ≤ B),
          Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            ((rTensor N (Subalgebra.inclusion ⋯).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N)
                ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
              TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            (0 : TensorProduct.{u_1, u_2, u_4} R (↥B) N)
⊢ Eq (α := S ⊗[R] N)
    ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
      S ⊗[R] N)
    (0 : S ⊗[R] N)
have rw : Eq (α := S ⊗[R] N)
  ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
      ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
    S ⊗[R] N)
  ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N)
Tactic: rw [← ht, ← hu, rTensor_baseChange]
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (goal)
Goal:
R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : AddCommMonoid N
inst_6 : Module R N
f : M →ₗ[R] N
t : S ⊗[R] M
ht : Eq (α := S ⊗[R] N) ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N) (0 : S ⊗[R] N)
A : Subalgebra R S
hA : A.FG
ht_memA : Membership.mem (γ := Submodule R (S ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t
u : TensorProduct.{u_1, u_2, u_3} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
this :
  ∀
    (h :
      Eq (α := S ⊗[R] N)
        ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
            ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
          S ⊗[R] N)
        (0 : S ⊗[R] N)),
    ∃ (B : Subalgebra R S),
      B.FG ∧
        ∃ (x : A ≤ B),
          Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            ((rTensor N (Subalgebra.inclusion ⋯).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N)
                ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
              TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            (0 : TensorProduct.{u_1, u_2, u_4} R (↥B) N)
rw :
  Eq (α := S ⊗[R] N)
    ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
      S ⊗[R] N)
    ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N)
⊢ Eq (α := S ⊗[R] N)
    ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
      S ⊗[R] N)
    (0 : S ⊗[R] N)
have rw₁ : Eq (α := S ⊗[R] N)
  ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
      ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
    S ⊗[R] N)
  ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N)
      ((rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u) :
    S ⊗[R] N)
Tactic: rw [← ht, ← hu, rTensor_baseChange]
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (goal)
Goal:
R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : AddCommMonoid N
inst_6 : Module R N
f : M →ₗ[R] N
t : S ⊗[R] M
ht : Eq (α := S ⊗[R] N) ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N) (0 : S ⊗[R] N)
A : Subalgebra R S
hA : A.FG
ht_memA : Membership.mem (γ := Submodule R (S ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t
u : TensorProduct.{u_1, u_2, u_3} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
this :
  ∀
    (h :
      Eq (α := S ⊗[R] N)
        ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
            ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
          S ⊗[R] N)
        (0 : S ⊗[R] N)),
    ∃ (B : Subalgebra R S),
      B.FG ∧
        ∃ (x : A ≤ B),
          Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            ((rTensor N (Subalgebra.inclusion ⋯).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N)
                ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
              TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            (0 : TensorProduct.{u_1, u_2, u_4} R (↥B) N)
rw :
  Eq (α := S ⊗[R] N)
    ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
      S ⊗[R] N)
    ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N)
rw₁ :
  Eq (α := S ⊗[R] N)
    ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
      S ⊗[R] N)
    ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N)
        ((rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u) :
      S ⊗[R] N)
⊢ Eq (α := S ⊗[R] N)
    ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
      S ⊗[R] N)
    (0 : S ⊗[R] N)
have rw₂ : Eq (α := S ⊗[R] N)
  ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N)
      ((rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u) :
    S ⊗[R] N)
  ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N)
      ((rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u) :
    S ⊗[R] N)
Tactic: rw [← ht, ← hu, rTensor_baseChange]
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (hypothesis)
Goal:
R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : AddCommMonoid N
inst_6 : Module R N
f : M →ₗ[R] N
t : S ⊗[R] M
ht : Eq (α := S ⊗[R] N) ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N) (0 : S ⊗[R] N)
A : Subalgebra R S
hA : A.FG
ht_memA : Membership.mem (γ := Submodule R (S ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t
u : TensorProduct.{u_1, u_2, u_3} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
this :
  ∀
    (h :
      Eq (α := S ⊗[R] N)
        ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
            ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
          S ⊗[R] N)
        (0 : S ⊗[R] N)),
    ∃ (B : Subalgebra R S),
      B.FG ∧
        ∃ (x : A ≤ B),
          Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            ((rTensor N (Subalgebra.inclusion ⋯).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N)
                ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
              TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            (0 : TensorProduct.{u_1, u_2, u_4} R (↥B) N)
⊢ ∃ (A : Subalgebra R S) (_ : A.FG) (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M),
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u : TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        (0 : TensorProduct.{u_1, u_2, u_4} R (↥A) N) ∧
      (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
have hu' : Eq (α := S ⊗[R] N)
  ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
      ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
    S ⊗[R] N)
  (0 : S ⊗[R] N)
Tactic: have hu' : (A.val.toLinearMap.rTensor N) (f.baseChange (↥A) u) = 0 := by
    rw [← ht, ← hu, rTensor_baseChange]
-- Lean 4 proof step from Mathlib.RingTheory.TensorProduct.DirectLimitFG (goal)
Goal:
R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
inst : CommSemiring R
inst_1 : Semiring S
inst_2 : Algebra R S
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : AddCommMonoid N
inst_6 : Module R N
f : M →ₗ[R] N
t : S ⊗[R] M
ht : Eq (α := S ⊗[R] N) ((LinearMap.baseChange S f : (a : S ⊗[R] M) → S ⊗[R] N) t : S ⊗[R] N) (0 : S ⊗[R] N)
A : Subalgebra R S
hA : A.FG
ht_memA : Membership.mem (γ := Submodule R (S ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t
u : TensorProduct.{u_1, u_2, u_3} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
this :
  ∀
    (h :
      Eq (α := S ⊗[R] N)
        ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
            ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
          S ⊗[R] N)
        (0 : S ⊗[R] N)),
    ∃ (B : Subalgebra R S),
      B.FG ∧
        ∃ (x : A ≤ B),
          Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            ((rTensor N (Subalgebra.inclusion ⋯).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N)
                ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
              TensorProduct.{u_1, u_2, u_4} R (↥B) N)
            (0 : TensorProduct.{u_1, u_2, u_4} R (↥B) N)
hu' :
  Eq (α := S ⊗[R] N)
    ((rTensor N A.val.toLinearMap : (a : ↥A ⊗[R] N) → S ⊗[R] N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
      S ⊗[R] N)
    (0 : S ⊗[R] N)
⊢ ∃ (A : Subalgebra R S) (_ : A.FG) (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M),
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u : TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        (0 : TensorProduct.{u_1, u_2, u_4} R (↥A) N) ∧
      (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
have obtain : ∀ (B : Subalgebra R S) (hB : B.FG) (hAB : A ≤ B)
  (hu' :
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥B) N)
      ((rTensor N (Subalgebra.inclusion sorry).toLinearMap : (a : ↥A ⊗[R] N) → ↥B ⊗[R] N)
          ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u) :
        TensorProduct.{u_1, u_2, u_4} R (↥B) N)
      (0 : TensorProduct.{u_1, u_2, u_4} R (↥B) N)),
  ∃ (A : Subalgebra R S) (_ : A.FG) (u : TensorProduct.{u_1, u_2, u_3} R (↥A) M),
    Eq (α := TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        ((LinearMap.baseChange (↥A) f : (a : ↥A ⊗[R] M) → ↥A ⊗[R] N) u : TensorProduct.{u_1, u_2, u_4} R (↥A) N)
        (0 : TensorProduct.{u_1, u_2, u_4} R (↥A) N) ∧
      (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → S ⊗[R] M) u = t
Tactic: obtain ⟨B, hB, hAB, hu'⟩ := this hu'