Theorem: IsBaseChange.comp
File: Mathlib/RingTheory/IsTensorProduct.lean

Proof steps:
state_before: R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²³ : AddCommMonoid M
inst✝²² : AddCommMonoid N
inst✝²¹ : CommSemiring R
inst✝²⁰ : CommSemiring S
inst✝¹⁹ : Algebra R S
inst✝¹⁸ : Module R M
inst✝¹⁷ : Module R N
inst✝¹⁶ : Module S N
inst✝¹⁵ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q : Type u_3
inst✝¹⁴ : AddCommMonoid P
inst✝¹³ : Module R P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : Module S Q
T : Type u_4
O : Type u_5
inst✝¹⁰ : CommSemiring T
inst✝⁹ : Algebra R T
inst✝⁸ : Algebra S T
inst✝⁷ : IsScalarTower R S T
inst✝⁶ : AddCommMonoid O
inst✝⁵ : Module R O
inst✝⁴ : Module S O
inst✝³ : Module T O
inst✝² : IsScalarTower S T O
inst✝¹ : IsScalarTower R S O
inst✝ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
⊢ IsBaseChange T (↑R g ∘ₗ f)
state_after: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²³ : AddCommMonoid M
inst✝²² : AddCommMonoid N
inst✝²¹ : CommSemiring R
inst✝²⁰ : CommSemiring S
inst✝¹⁹ : Algebra R S
inst✝¹⁸ : Module R M
inst✝¹⁷ : Module R N
inst✝¹⁶ : Module S N
inst✝¹⁵ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q : Type u_3
inst✝¹⁴ : AddCommMonoid P
inst✝¹³ : Module R P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : Module S Q
T : Type u_4
O : Type u_5
inst✝¹⁰ : CommSemiring T
inst✝⁹ : Algebra R T
inst✝⁸ : Algebra S T
inst✝⁷ : IsScalarTower R S T
inst✝⁶ : AddCommMonoid O
inst✝⁵ : Module R O
inst✝⁴ : Module S O
inst✝³ : Module T O
inst✝² : IsScalarTower S T O
inst✝¹ : IsScalarTower R S O
inst✝ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
⊢ ∀ (Q : Type (max v₁ u_5 u_4)) [inst : AddCommMonoid Q] [inst_1 : Module R Q] [inst_2 : Module T Q]
    [inst_3 : IsScalarTower R T Q] (g_1 : M →ₗ[R] Q), ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = g_1
tactic: apply IsBaseChange.of_lift_unique
state_before: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²³ : AddCommMonoid M
inst✝²² : AddCommMonoid N
inst✝²¹ : CommSemiring R
inst✝²⁰ : CommSemiring S
inst✝¹⁹ : Algebra R S
inst✝¹⁸ : Module R M
inst✝¹⁷ : Module R N
inst✝¹⁶ : Module S N
inst✝¹⁵ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q : Type u_3
inst✝¹⁴ : AddCommMonoid P
inst✝¹³ : Module R P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : Module S Q
T : Type u_4
O : Type u_5
inst✝¹⁰ : CommSemiring T
inst✝⁹ : Algebra R T
inst✝⁸ : Algebra S T
inst✝⁷ : IsScalarTower R S T
inst✝⁶ : AddCommMonoid O
inst✝⁵ : Module R O
inst✝⁴ : Module S O
inst✝³ : Module T O
inst✝² : IsScalarTower S T O
inst✝¹ : IsScalarTower R S O
inst✝ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
⊢ ∀ (Q : Type (max v₁ u_5 u_4)) [inst : AddCommMonoid Q] [inst_1 : Module R Q] [inst_2 : Module T Q]
    [inst_3 : IsScalarTower R T Q] (g_1 : M →ₗ[R] Q), ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = g_1
state_after: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
⊢ ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = i
tactic: intro Q _ _ _ _ i
state_before: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
⊢ ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = i
state_after: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this : Module S Q := Module.compHom Q (algebraMap S T)
⊢ ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = i
tactic: letI := Module.compHom Q (algebraMap S T)
state_before: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this : Module S Q := Module.compHom Q (algebraMap S T)
⊢ ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = i
state_after: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝ : Module S Q := Module.compHom Q (algebraMap S T)
this : IsScalarTower S T Q
⊢ ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = i
tactic: haveI : IsScalarTower S T Q :=
    ⟨fun x y z => by
      rw [Algebra.smul_def, mul_smul]
      rfl⟩
state_before: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝ : Module S Q := Module.compHom Q (algebraMap S T)
this : IsScalarTower S T Q
⊢ ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = i
state_after: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
⊢ ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = i
tactic: have : IsScalarTower R S Q := by
    refine ⟨fun x y z => ?_⟩
    change (IsScalarTower.toAlgHom R S T) (x • y) • z = x • algebraMap S T y • z
    rw [map_smul, smul_assoc]
    rfl
state_before: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
⊢ ∃! g', ↑R g' ∘ₗ ↑R g ∘ₗ f = i
state_after: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
⊢ ∀ (y : O →ₗ[T] Q), (fun g' => ↑R g' ∘ₗ ↑R g ∘ₗ f = i) y → y = hg.lift (hf.lift i)
tactic: refine
    ⟨hg.lift (hf.lift i), by
      ext
      simp [IsBaseChange.lift_eq], ?_⟩
state_before: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
⊢ ∀ (y : O →ₗ[T] Q), (fun g' => ↑R g' ∘ₗ ↑R g ∘ₗ f = i) y → y = hg.lift (hf.lift i)
state_after: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
g' : O →ₗ[T] Q
e : ↑R g' ∘ₗ ↑R g ∘ₗ f = i
⊢ g' = hg.lift (hf.lift i)
tactic: rintro g' (e : _ = _)
state_before: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
g' : O →ₗ[T] Q
e : ↑R g' ∘ₗ ↑R g ∘ₗ f = i
⊢ g' = hg.lift (hf.lift i)
state_after: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
g' : O →ₗ[T] Q
e : ↑R g' ∘ₗ ↑R g ∘ₗ f = i
⊢ ↑R (↑S g' ∘ₗ g) ∘ₗ f = ↑R (↑S (hg.lift (hf.lift i)) ∘ₗ g) ∘ₗ f
tactic: refine hg.algHom_ext' _ _ (hf.algHom_ext' _ _ ?_)
state_before: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
g' : O →ₗ[T] Q
e : ↑R g' ∘ₗ ↑R g ∘ₗ f = i
⊢ ↑R (↑S g' ∘ₗ g) ∘ₗ f = ↑R (↑S (hg.lift (hf.lift i)) ∘ₗ g) ∘ₗ f
state_after: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
g' : O →ₗ[T] Q
e : ↑R g' ∘ₗ ↑R g ∘ₗ f = i
⊢ ↑R (↑S g' ∘ₗ g) ∘ₗ f = ↑R g' ∘ₗ ↑R g ∘ₗ f
tactic: rw [IsBaseChange.lift_comp, IsBaseChange.lift_comp, ← e]
state_before: case h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
g' : O →ₗ[T] Q
e : ↑R g' ∘ₗ ↑R g ∘ₗ f = i
⊢ ↑R (↑S g' ∘ₗ g) ∘ₗ f = ↑R g' ∘ₗ ↑R g ∘ₗ f
state_after: case h.h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
g' : O →ₗ[T] Q
e : ↑R g' ∘ₗ ↑R g ∘ₗ f = i
x✝ : M
⊢ (↑R (↑S g' ∘ₗ g) ∘ₗ f) x✝ = (↑R g' ∘ₗ ↑R g ∘ₗ f) x✝
tactic: ext
state_before: case h.h
R : Type u_1
M : Type v₁
N : Type v₂
S : Type v₃
inst✝²⁷ : AddCommMonoid M
inst✝²⁶ : AddCommMonoid N
inst✝²⁵ : CommSemiring R
inst✝²⁴ : CommSemiring S
inst✝²³ : Algebra R S
inst✝²² : Module R M
inst✝²¹ : Module R N
inst✝²⁰ : Module S N
inst✝¹⁹ : IsScalarTower R S N
f✝ : M →ₗ[R] N
h : IsBaseChange S f✝
P : Type u_2
Q✝ : Type u_3
inst✝¹⁸ : AddCommMonoid P
inst✝¹⁷ : Module R P
inst✝¹⁶ : AddCommMonoid Q✝
inst✝¹⁵ : Module S Q✝
T : Type u_4
O : Type u_5
inst✝¹⁴ : CommSemiring T
inst✝¹³ : Algebra R T
inst✝¹² : Algebra S T
inst✝¹¹ : IsScalarTower R S T
inst✝¹⁰ : AddCommMonoid O
inst✝⁹ : Module R O
inst✝⁸ : Module S O
inst✝⁷ : Module T O
inst✝⁶ : IsScalarTower S T O
inst✝⁵ : IsScalarTower R S O
inst✝⁴ : IsScalarTower R T O
f : M →ₗ[R] N
hf : IsBaseChange S f
g : N →ₗ[S] O
hg : IsBaseChange T g
Q : Type (max v₁ u_5 u_4)
inst✝³ : AddCommMonoid Q
inst✝² : Module R Q
inst✝¹ : Module T Q
inst✝ : IsScalarTower R T Q
i : M →ₗ[R] Q
this✝¹ : Module S Q := Module.compHom Q (algebraMap S T)
this✝ : IsScalarTower S T Q
this : IsScalarTower R S Q
g' : O →ₗ[T] Q
e : ↑R g' ∘ₗ ↑R g ∘ₗ f = i
x✝ : M
⊢ (↑R (↑S g' ∘ₗ g) ∘ₗ f) x✝ = (↑R g' ∘ₗ ↑R g ∘ₗ f) x✝
state_after: no goals
tactic: rfl