Theorem: Submodule.map_mul
File: Mathlib/Algebra/Algebra/Operations.lean

tactic: apply congr_arg sSup
state_before: ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
⊢ (⨆ (i : { x // x ∈ M }), map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) =
    map (AlgHom.toLinearMap f) M * map (AlgHom.toLinearMap f) N

tactic: ext S
state_before: ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
⊢ (range fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) =
    range fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)

tactic: constructor <;> rintro ⟨y, hy⟩
state_before: case h
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
⊢ (S ∈ range fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) ↔
    S ∈ range fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)

tactic: use ⟨f y, mem_map.mpr ⟨y.1, y.2, rfl⟩⟩
state_before: case h.mp.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ M }
hy : (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) y = S
⊢ S ∈ range fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)

tactic: refine' Eq.trans _ hy
state_before: case h.mp.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ M }
hy : (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) y = S
⊢ (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N))
      { val := ↑f ↑y, property := (_ : ↑f ↑y ∈ map (AlgHom.toLinearMap f) M) } =
    S

tactic: ext
state_before: case h.mp.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ M }
hy : (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) y = S
⊢ (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N))
      { val := ↑f ↑y, property := (_ : ↑f ↑y ∈ map (AlgHom.toLinearMap f) M) } =
    (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) y

tactic: simp
state_before: case h.mp.intro.h
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ M }
hy : (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) y = S
x✝ : A'
⊢ x✝ ∈
      (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N))
        { val := ↑f ↑y, property := (_ : ↑f ↑y ∈ map (AlgHom.toLinearMap f) M) } ↔
    x✝ ∈ (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) y

tactic: obtain ⟨y', hy', fy_eq⟩ := mem_map.mp y.2
state_before: case h.mpr.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ map (AlgHom.toLinearMap f) M }
hy : (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)) y = S
⊢ S ∈ range fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)

tactic: use ⟨y', hy'⟩
state_before: case h.mpr.intro.intro.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ map (AlgHom.toLinearMap f) M }
hy : (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)) y = S
y' : A
hy' : y' ∈ M
fy_eq : ↑(AlgHom.toLinearMap f) y' = ↑y
⊢ S ∈ range fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)

tactic: refine' Eq.trans _ hy
state_before: case h.mpr.intro.intro.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ map (AlgHom.toLinearMap f) M }
hy : (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)) y = S
y' : A
hy' : y' ∈ M
fy_eq : ↑(AlgHom.toLinearMap f) y' = ↑y
⊢ (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) { val := y', property := hy' } = S

tactic: rw [f.toLinearMap_apply] at fy_eq
state_before: case h.mpr.intro.intro.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ map (AlgHom.toLinearMap f) M }
hy : (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)) y = S
y' : A
hy' : y' ∈ M
fy_eq : ↑(AlgHom.toLinearMap f) y' = ↑y
⊢ (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) { val := y', property := hy' } =
    (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)) y

tactic: ext
state_before: case h.mpr.intro.intro.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ map (AlgHom.toLinearMap f) M }
hy : (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)) y = S
y' : A
hy' : y' ∈ M
fy_eq : ↑f y' = ↑y
⊢ (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) { val := y', property := hy' } =
    (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)) y

tactic: simp [fy_eq]
state_before: case h.mpr.intro.intro.intro.h
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
A' : Type u_1
inst✝¹ : Semiring A'
inst✝ : Algebra R A'
f : A →ₐ[R] A'
S : Submodule R A'
y : { x // x ∈ map (AlgHom.toLinearMap f) M }
hy : (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)) y = S
y' : A
hy' : y' ∈ M
fy_eq : ↑f y' = ↑y
x✝ : A'
⊢ x✝ ∈ (fun i => map (AlgHom.toLinearMap f) (map (↑(LinearMap.mul R A) ↑i) N)) { val := y', property := hy' } ↔
    x✝ ∈ (fun s => map (↑(LinearMap.mul R A') ↑s) (map (AlgHom.toLinearMap f) N)) y