[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
α : Type u_20
R : Type u_21
M : Type u_22
M₂ : Type u_23
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
v : α →₀ M
c : R
h : α → M →ₗ[R] M₂
⊢ (sum (c • v) fun a => ↑(h a)) = c • sum v fun a => ↑(h a)
[PROOFSTEP]
rw [Finsupp.sum_smul_index', Finsupp.smul_sum]
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
α : Type u_20
R : Type u_21
M : Type u_22
M₂ : Type u_23
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
v : α →₀ M
c : R
h : α → M →ₗ[R] M₂
⊢ (sum v fun i c_1 => ↑(h i) (c • c_1)) = sum v fun a b => c • ↑(h a) b
[PROOFSTEP]
simp only [map_smul]
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
α : Type u_20
R : Type u_21
M : Type u_22
M₂ : Type u_23
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
v : α →₀ M
c : R
h : α → M →ₗ[R] M₂
⊢ ∀ (i : α), ↑(h i) 0 = 0
[PROOFSTEP]
intro i
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
α : Type u_20
R : Type u_21
M : Type u_22
M₂ : Type u_23
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
v : α →₀ M
c : R
h : α → M →ₗ[R] M₂
i : α
⊢ ↑(h i) 0 = 0
[PROOFSTEP]
exact (h i).map_zero
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
α✝ : Type u_20
inst✝⁴ : Finite α✝
inst✝³ : AddCommMonoid M
inst✝² : Semiring R
inst✝¹ : Module R M
α : Type u_21
inst✝ : Unique α
m : M
⊢ ↑(LinearEquiv.symm (finsuppUnique R M α)) m = single default m
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
α✝ : Type u_20
inst✝⁴ : Finite α✝
inst✝³ : AddCommMonoid M
inst✝² : Semiring R
inst✝¹ : Module R M
α : Type u_21
inst✝ : Unique α
m : M
⊢ ↑(↑(LinearEquiv.symm (finsuppUnique R M α)) m) default = ↑(single default m) default
[PROOFSTEP]
simp [LinearEquiv.finsuppUnique, Equiv.funUnique, single, Pi.single, equivFunOnFinite, Function.update]
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι✝ : Type u_17
V : Type u_18
V₂ : Type u_19
ι : Type u_20
inst✝² : Fintype ι
inst✝¹ : DecidableEq ι
R : Type u_21
inst✝ : Semiring R
x : ι → R
⊢ x = ∑ i : ι, x i • fun j => if i = j then 1 else 0
[PROOFSTEP]
ext
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι✝ : Type u_17
V : Type u_18
V₂ : Type u_19
ι : Type u_20
inst✝² : Fintype ι
inst✝¹ : DecidableEq ι
R : Type u_21
inst✝ : Semiring R
x : ι → R
x✝ : ι
⊢ x x✝ = Finset.sum Finset.univ (fun i => x i • fun j => if i = j then 1 else 0) x✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
p : Submodule R₂ M₂
f : M →ₛₗ[σ₁₂] M₂
h : ∀ (c : M), ↑f c ∈ p
⊢ M →ₛₗ[σ₁₂] { x // x ∈ p }
[PROOFSTEP]
refine' { toFun := fun c => ⟨f c, h c⟩ .. }
[GOAL]
case refine'_1
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
p : Submodule R₂ M₂
f : M →ₛₗ[σ₁₂] M₂
h : ∀ (c : M), ↑f c ∈ p
⊢ ∀ (x y : M),
    (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) (x + y) =
      (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) x +
        (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) y
[PROOFSTEP]
intros
[GOAL]
case refine'_2
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
p : Submodule R₂ M₂
f : M →ₛₗ[σ₁₂] M₂
h : ∀ (c : M), ↑f c ∈ p
⊢ ∀ (r : R) (x : M),
    AddHom.toFun
        { toFun := fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) },
          map_add' :=
            (_ :
              ∀ (x y : M),
                (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) (x + y) =
                  (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) x +
                    (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) y) }
        (r • x) =
      ↑σ₁₂ r •
        AddHom.toFun
          { toFun := fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) },
            map_add' :=
              (_ :
                ∀ (x y : M),
                  (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) (x + y) =
                    (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) x +
                      (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) y) }
          x
[PROOFSTEP]
intros
[GOAL]
case refine'_1
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
p : Submodule R₂ M₂
f : M →ₛₗ[σ₁₂] M₂
h : ∀ (c : M), ↑f c ∈ p
x✝ y✝ : M
⊢ (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) (x✝ + y✝) =
    (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) x✝ +
      (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) y✝
[PROOFSTEP]
apply SetCoe.ext
[GOAL]
case refine'_2
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
p : Submodule R₂ M₂
f : M →ₛₗ[σ₁₂] M₂
h : ∀ (c : M), ↑f c ∈ p
r✝ : R
x✝ : M
⊢ AddHom.toFun
      { toFun := fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) },
        map_add' :=
          (_ :
            ∀ (x y : M),
              (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) (x + y) =
                (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) x +
                  (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) y) }
      (r✝ • x✝) =
    ↑σ₁₂ r✝ •
      AddHom.toFun
        { toFun := fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) },
          map_add' :=
            (_ :
              ∀ (x y : M),
                (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) (x + y) =
                  (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) x +
                    (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) y) }
        x✝
[PROOFSTEP]
apply SetCoe.ext
[GOAL]
case refine'_1.a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
p : Submodule R₂ M₂
f : M →ₛₗ[σ₁₂] M₂
h : ∀ (c : M), ↑f c ∈ p
x✝ y✝ : M
⊢ ↑((fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) (x✝ + y✝)) =
    ↑((fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) x✝ +
        (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) y✝)
[PROOFSTEP]
simp
[GOAL]
case refine'_2.a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
p : Submodule R₂ M₂
f : M →ₛₗ[σ₁₂] M₂
h : ∀ (c : M), ↑f c ∈ p
r✝ : R
x✝ : M
⊢ ↑(AddHom.toFun
        { toFun := fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) },
          map_add' :=
            (_ :
              ∀ (x y : M),
                (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) (x + y) =
                  (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) x +
                    (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) y) }
        (r✝ • x✝)) =
    ↑(↑σ₁₂ r✝ •
        AddHom.toFun
          { toFun := fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) },
            map_add' :=
              (_ :
                ∀ (x y : M),
                  (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) (x + y) =
                    (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) x +
                      (fun c => { val := ↑f c, property := (_ : ↑f c ∈ p) }) y) }
          x✝)
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁸ : Semiring R
inst✝¹⁷ : Semiring R₂
inst✝¹⁶ : Semiring R₃
inst✝¹⁵ : Semiring R₄
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₁
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : AddCommMonoid M₃
inst✝¹⁰ : AddCommMonoid M₄
inst✝⁹ : Module R M
inst✝⁸ : Module R M₁
inst✝⁷ : Module R₂ M₂
inst✝⁶ : Module R₃ M₃
inst✝⁵ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝² : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝ : Subsingleton M
src✝ : Inhabited (M →ₛₗ[σ₁₂] M₂) := inferInstanceAs (Inhabited (M →ₛₗ[σ₁₂] M₂))
f : M →ₛₗ[σ₁₂] M₂
x : M
⊢ ↑f x = ↑default x
[PROOFSTEP]
rw [Subsingleton.elim x 0, map_zero, map_zero]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
⊢ toAddMonoidHom 0 = 0
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
x✝ : M
⊢ ↑(toAddMonoidHom 0) x✝ = ↑0 x✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
⊢ ∀ (x y : M →ₛₗ[σ₁₂] M₂),
    ZeroHom.toFun { toFun := toAddMonoidHom, map_zero' := (_ : toAddMonoidHom 0 = 0) } (x + y) =
      ZeroHom.toFun { toFun := toAddMonoidHom, map_zero' := (_ : toAddMonoidHom 0 = 0) } x +
        ZeroHom.toFun { toFun := toAddMonoidHom, map_zero' := (_ : toAddMonoidHom 0 = 0) } y
[PROOFSTEP]
intros
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
x✝ y✝ : M →ₛₗ[σ₁₂] M₂
⊢ ZeroHom.toFun { toFun := toAddMonoidHom, map_zero' := (_ : toAddMonoidHom 0 = 0) } (x✝ + y✝) =
    ZeroHom.toFun { toFun := toAddMonoidHom, map_zero' := (_ : toAddMonoidHom 0 = 0) } x✝ +
      ZeroHom.toFun { toFun := toAddMonoidHom, map_zero' := (_ : toAddMonoidHom 0 = 0) } y✝
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
x✝¹ y✝ : M →ₛₗ[σ₁₂] M₂
x✝ : M
⊢ ↑(ZeroHom.toFun { toFun := toAddMonoidHom, map_zero' := (_ : toAddMonoidHom 0 = 0) } (x✝¹ + y✝)) x✝ =
    ↑(ZeroHom.toFun { toFun := toAddMonoidHom, map_zero' := (_ : toAddMonoidHom 0 = 0) } x✝¹ +
          ZeroHom.toFun { toFun := toAddMonoidHom, map_zero' := (_ : toAddMonoidHom 0 = 0) } y✝)
      x✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝²¹ : Semiring R
inst✝²⁰ : Semiring R₂
inst✝¹⁹ : Semiring R₃
inst✝¹⁸ : Semiring R₄
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : AddCommMonoid M₁
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : AddCommMonoid M₃
inst✝¹³ : AddCommMonoid M₄
inst✝¹² : Module R M
inst✝¹¹ : Module R M₁
inst✝¹⁰ : Module R₂ M₂
inst✝⁹ : Module R₃ M₃
inst✝⁸ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁷ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁶ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝⁵ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝³ : Semiring S
inst✝² : Module R S
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x✝ : M
x y : M₁
⊢ (fun b => ↑f b • x✝) (x + y) = (fun b => ↑f b • x✝) x + (fun b => ↑f b • x✝) y
[PROOFSTEP]
dsimp only
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝²¹ : Semiring R
inst✝²⁰ : Semiring R₂
inst✝¹⁹ : Semiring R₃
inst✝¹⁸ : Semiring R₄
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : AddCommMonoid M₁
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : AddCommMonoid M₃
inst✝¹³ : AddCommMonoid M₄
inst✝¹² : Module R M
inst✝¹¹ : Module R M₁
inst✝¹⁰ : Module R₂ M₂
inst✝⁹ : Module R₃ M₃
inst✝⁸ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁷ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁶ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝⁵ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝³ : Semiring S
inst✝² : Module R S
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x✝ : M
x y : M₁
⊢ ↑f (x + y) • x✝ = ↑f x • x✝ + ↑f y • x✝
[PROOFSTEP]
rw [f.map_add, add_smul]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝²¹ : Semiring R
inst✝²⁰ : Semiring R₂
inst✝¹⁹ : Semiring R₃
inst✝¹⁸ : Semiring R₄
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : AddCommMonoid M₁
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : AddCommMonoid M₃
inst✝¹³ : AddCommMonoid M₄
inst✝¹² : Module R M
inst✝¹¹ : Module R M₁
inst✝¹⁰ : Module R₂ M₂
inst✝⁹ : Module R₃ M₃
inst✝⁸ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁷ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁶ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝⁵ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝³ : Semiring S
inst✝² : Module R S
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
b : R
y : M₁
⊢ AddHom.toFun
      { toFun := fun b => ↑f b • x,
        map_add' :=
          (_ : ∀ (x_1 y : M₁), (fun b => ↑f b • x) (x_1 + y) = (fun b => ↑f b • x) x_1 + (fun b => ↑f b • x) y) }
      (b • y) =
    ↑(RingHom.id R) b •
      AddHom.toFun
        { toFun := fun b => ↑f b • x,
          map_add' :=
            (_ : ∀ (x_1 y : M₁), (fun b => ↑f b • x) (x_1 + y) = (fun b => ↑f b • x) x_1 + (fun b => ↑f b • x) y) }
        y
[PROOFSTEP]
dsimp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝²¹ : Semiring R
inst✝²⁰ : Semiring R₂
inst✝¹⁹ : Semiring R₃
inst✝¹⁸ : Semiring R₄
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : AddCommMonoid M₁
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : AddCommMonoid M₃
inst✝¹³ : AddCommMonoid M₄
inst✝¹² : Module R M
inst✝¹¹ : Module R M₁
inst✝¹⁰ : Module R₂ M₂
inst✝⁹ : Module R₃ M₃
inst✝⁸ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁷ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁶ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝⁵ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝³ : Semiring S
inst✝² : Module R S
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
b : R
y : M₁
⊢ ↑f (b • y) • x = b • ↑f y • x
[PROOFSTEP]
rw [map_smul, smul_assoc]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁸ : Semiring R
inst✝¹⁷ : Semiring R₂
inst✝¹⁶ : Semiring R₃
inst✝¹⁵ : Semiring R₄
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₁
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : AddCommMonoid M₃
inst✝¹⁰ : AddCommMonoid M₄
inst✝⁹ : Module R M
inst✝⁸ : Module R M₁
inst✝⁷ : Module R₂ M₂
inst✝⁶ : Module R₃ M₃
inst✝⁵ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝² : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝ : Nontrivial M
⊢ Nontrivial (Module.End R M)
[PROOFSTEP]
obtain ⟨m, ne⟩ := (nontrivial_iff_exists_ne (0 : M)).mp inferInstance
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁸ : Semiring R
inst✝¹⁷ : Semiring R₂
inst✝¹⁶ : Semiring R₃
inst✝¹⁵ : Semiring R₄
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₁
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : AddCommMonoid M₃
inst✝¹⁰ : AddCommMonoid M₄
inst✝⁹ : Module R M
inst✝⁸ : Module R M₁
inst✝⁷ : Module R₂ M₂
inst✝⁶ : Module R₃ M₃
inst✝⁵ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝² : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝ : Nontrivial M
m : M
ne : m ≠ 0
⊢ Nontrivial (Module.End R M)
[PROOFSTEP]
exact nontrivial_of_ne 1 0 fun p => ne (LinearMap.congr_fun p m)
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f : Module.End R M
m : M
k l : ℕ
hk : k ≤ l
hm : ↑(f ^ k) m = 0
⊢ ↑(f ^ l) m = 0
[PROOFSTEP]
rw [← tsub_add_cancel_of_le hk, pow_add, mul_apply, hm, map_zero]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
f : M →ₛₗ[σ₁₂] M₂
g : Module.End R M
g₂ : Module.End R₂ M₂
h : comp g₂ f = comp f g
k : ℕ
⊢ comp (g₂ ^ k) f = comp f (g ^ k)
[PROOFSTEP]
induction' k with k ih
[GOAL]
case zero
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
f : M →ₛₗ[σ₁₂] M₂
g : Module.End R M
g₂ : Module.End R₂ M₂
h : comp g₂ f = comp f g
⊢ comp (g₂ ^ Nat.zero) f = comp f (g ^ Nat.zero)
[PROOFSTEP]
simp only [pow_zero, Nat.zero_eq]
[GOAL]
case zero
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
f : M →ₛₗ[σ₁₂] M₂
g : Module.End R M
g₂ : Module.End R₂ M₂
h : comp g₂ f = comp f g
⊢ comp 1 f = comp f 1
[PROOFSTEP]
rfl
[GOAL]
case succ
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
f : M →ₛₗ[σ₁₂] M₂
g : Module.End R M
g₂ : Module.End R₂ M₂
h : comp g₂ f = comp f g
k : ℕ
ih : comp (g₂ ^ k) f = comp f (g ^ k)
⊢ comp (g₂ ^ Nat.succ k) f = comp f (g ^ Nat.succ k)
[PROOFSTEP]
rw [pow_succ, pow_succ, LinearMap.mul_eq_comp, LinearMap.comp_assoc, ih, ← LinearMap.comp_assoc, h,
  LinearMap.comp_assoc, LinearMap.mul_eq_comp]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
N : Submodule R M
g : Module.End R { x // x ∈ N }
G : Module.End R M
h : comp G (Submodule.subtype N) = comp (Submodule.subtype N) g
k : ℕ
hG : G ^ k = 0
⊢ g ^ k = 0
[PROOFSTEP]
ext m
[GOAL]
case h.a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
N : Submodule R M
g : Module.End R { x // x ∈ N }
G : Module.End R M
h : comp G (Submodule.subtype N) = comp (Submodule.subtype N) g
k : ℕ
hG : G ^ k = 0
m : { x // x ∈ N }
⊢ ↑(↑(g ^ k) m) = ↑(↑0 m)
[PROOFSTEP]
have hg : N.subtype.comp (g ^ k) m = 0 := by rw [← commute_pow_left_of_commute h, hG, zero_comp, zero_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
N : Submodule R M
g : Module.End R { x // x ∈ N }
G : Module.End R M
h : comp G (Submodule.subtype N) = comp (Submodule.subtype N) g
k : ℕ
hG : G ^ k = 0
m : { x // x ∈ N }
⊢ ↑(comp (Submodule.subtype N) (g ^ k)) m = 0
[PROOFSTEP]
rw [← commute_pow_left_of_commute h, hG, zero_comp, zero_apply]
[GOAL]
case h.a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
N : Submodule R M
g : Module.End R { x // x ∈ N }
G : Module.End R M
h : comp G (Submodule.subtype N) = comp (Submodule.subtype N) g
k : ℕ
hG : G ^ k = 0
m : { x // x ∈ N }
hg : ↑(comp (Submodule.subtype N) (g ^ k)) m = 0
⊢ ↑(↑(g ^ k) m) = ↑(↑0 m)
[PROOFSTEP]
simpa using hg
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
n : ℕ
⊢ f' ^ (n + 1) = comp (f' ^ n) f'
[PROOFSTEP]
rw [pow_succ', mul_eq_comp]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
h : Surjective ↑f'
n : ℕ
⊢ Surjective ↑(f' ^ (n + 1))
[PROOFSTEP]
rw [iterate_succ]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
h : Surjective ↑f'
n : ℕ
⊢ Surjective ↑(comp (f' ^ n) f')
[PROOFSTEP]
exact (iterate_surjective h n).comp h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
h : Injective ↑f'
n : ℕ
⊢ Injective ↑(f' ^ (n + 1))
[PROOFSTEP]
rw [iterate_succ]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
h : Injective ↑f'
n : ℕ
⊢ Injective ↑(comp (f' ^ n) f')
[PROOFSTEP]
exact (iterate_injective h n).comp h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
h : Bijective ↑f'
n : ℕ
⊢ Bijective ↑(f' ^ (n + 1))
[PROOFSTEP]
rw [iterate_succ]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
h : Bijective ↑f'
n : ℕ
⊢ Bijective ↑(comp (f' ^ n) f')
[PROOFSTEP]
exact (iterate_bijective h n).comp h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
n : ℕ
hn : n ≠ 0
h : Injective ↑(f' ^ n)
⊢ Injective ↑f'
[PROOFSTEP]
rw [← Nat.succ_pred_eq_of_pos (pos_iff_ne_zero.mpr hn), iterate_succ, coe_comp] at h 
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
n : ℕ
hn : n ≠ 0
h : Injective (↑(f' ^ Nat.pred n) ∘ ↑f')
⊢ Injective ↑f'
[PROOFSTEP]
exact h.of_comp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
n : ℕ
hn : n ≠ 0
h : Surjective ↑(f' ^ n)
⊢ Surjective ↑f'
[PROOFSTEP]
rw [← Nat.succ_pred_eq_of_pos (pos_iff_ne_zero.mpr hn), Nat.succ_eq_add_one, add_comm, pow_add] at h 
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
n : ℕ
hn : n ≠ 0
h : Surjective ↑(f' ^ 1 * f' ^ Nat.pred n)
⊢ Surjective ↑f'
[PROOFSTEP]
exact Surjective.of_comp h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
p : Submodule R M
n : ℕ
h : ∀ (x : M), x ∈ p → ↑f' x ∈ p
x : M
hx : x ∈ p
⊢ ↑(f' ^ n) x ∈ p
[PROOFSTEP]
induction' n with n ih generalizing x
[GOAL]
case zero
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
p : Submodule R M
h : ∀ (x : M), x ∈ p → ↑f' x ∈ p
x✝ : M
hx✝ : x✝ ∈ p
x : M
hx : x ∈ p
⊢ ↑(f' ^ Nat.zero) x ∈ p
[PROOFSTEP]
simpa
[GOAL]
case succ
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
p : Submodule R M
h : ∀ (x : M), x ∈ p → ↑f' x ∈ p
x✝ : M
hx✝ : x✝ ∈ p
n : ℕ
ih : ∀ (x : M), x ∈ p → ↑(f' ^ n) x ∈ p
x : M
hx : x ∈ p
⊢ ↑(f' ^ Nat.succ n) x ∈ p
[PROOFSTEP]
simpa only [iterate_succ, coe_comp, Function.comp_apply, restrict_apply] using ih _ (h _ hx)
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
p : Submodule R M
n : ℕ
h : ∀ (x : M), x ∈ p → ↑f' x ∈ p
h' : optParam (∀ (x : M), x ∈ p → ↑(f' ^ n) x ∈ p) (_ : ∀ (x : M), x ∈ p → ↑(f' ^ n) x ∈ p)
⊢ restrict f' h ^ n = restrict (f' ^ n) h'
[PROOFSTEP]
ext x
[GOAL]
case h.a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
p : Submodule R M
n : ℕ
h : ∀ (x : M), x ∈ p → ↑f' x ∈ p
h' : optParam (∀ (x : M), x ∈ p → ↑(f' ^ n) x ∈ p) (_ : ∀ (x : M), x ∈ p → ↑(f' ^ n) x ∈ p)
x : { x // x ∈ p }
⊢ ↑(↑(restrict f' h ^ n) x) = ↑(↑(restrict (f' ^ n) h') x)
[PROOFSTEP]
have : Semiconj (↑) (f'.restrict h) f' := fun _ ↦ rfl
[GOAL]
case h.a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : Semiring R₄
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₁
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : AddCommMonoid M₄
inst✝⁸ : Module R M
inst✝⁷ : Module R M₁
inst✝⁶ : Module R₂ M₂
inst✝⁵ : Module R₃ M₃
inst✝⁴ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝¹ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝ : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
f' : M →ₗ[R] M
p : Submodule R M
n : ℕ
h : ∀ (x : M), x ∈ p → ↑f' x ∈ p
h' : optParam (∀ (x : M), x ∈ p → ↑(f' ^ n) x ∈ p) (_ : ∀ (x : M), x ∈ p → ↑(f' ^ n) x ∈ p)
x : { x // x ∈ p }
this : Semiconj Subtype.val ↑(restrict f' h) ↑f'
⊢ ↑(↑(restrict f' h ^ n) x) = ↑(↑(restrict (f' ^ n) h') x)
[PROOFSTEP]
simp [coe_pow, this.iterate_right _ _]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁹ : Semiring R
inst✝¹⁸ : Semiring R₂
inst✝¹⁷ : Semiring R₃
inst✝¹⁶ : Semiring R₄
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : AddCommMonoid M₄
inst✝¹⁰ : Module R M
inst✝⁹ : Module R M₁
inst✝⁸ : Module R₂ M₂
inst✝⁷ : Module R₃ M₃
inst✝⁶ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝³ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝² : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : (ι → R) →ₗ[R] M
x : ι → R
⊢ ↑f x = ∑ i : ι, x i • ↑f fun j => if i = j then 1 else 0
[PROOFSTEP]
conv_lhs => rw [pi_eq_sum_univ x, f.map_sum]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁹ : Semiring R
inst✝¹⁸ : Semiring R₂
inst✝¹⁷ : Semiring R₃
inst✝¹⁶ : Semiring R₄
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : AddCommMonoid M₄
inst✝¹⁰ : Module R M
inst✝⁹ : Module R M₁
inst✝⁸ : Module R₂ M₂
inst✝⁷ : Module R₃ M₃
inst✝⁶ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝³ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝² : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : (ι → R) →ₗ[R] M
x : ι → R
| ↑f x
[PROOFSTEP]
rw [pi_eq_sum_univ x, f.map_sum]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁹ : Semiring R
inst✝¹⁸ : Semiring R₂
inst✝¹⁷ : Semiring R₃
inst✝¹⁶ : Semiring R₄
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : AddCommMonoid M₄
inst✝¹⁰ : Module R M
inst✝⁹ : Module R M₁
inst✝⁸ : Module R₂ M₂
inst✝⁷ : Module R₃ M₃
inst✝⁶ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝³ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝² : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : (ι → R) →ₗ[R] M
x : ι → R
| ↑f x
[PROOFSTEP]
rw [pi_eq_sum_univ x, f.map_sum]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁹ : Semiring R
inst✝¹⁸ : Semiring R₂
inst✝¹⁷ : Semiring R₃
inst✝¹⁶ : Semiring R₄
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : AddCommMonoid M₄
inst✝¹⁰ : Module R M
inst✝⁹ : Module R M₁
inst✝⁸ : Module R₂ M₂
inst✝⁷ : Module R₃ M₃
inst✝⁶ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝³ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝² : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : (ι → R) →ₗ[R] M
x : ι → R
| ↑f x
[PROOFSTEP]
rw [pi_eq_sum_univ x, f.map_sum]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁹ : Semiring R
inst✝¹⁸ : Semiring R₂
inst✝¹⁷ : Semiring R₃
inst✝¹⁶ : Semiring R₄
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : AddCommMonoid M₄
inst✝¹⁰ : Module R M
inst✝⁹ : Module R M₁
inst✝⁸ : Module R₂ M₂
inst✝⁷ : Module R₃ M₃
inst✝⁶ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝³ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝² : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : (ι → R) →ₗ[R] M
x : ι → R
⊢ ∑ i : ι, ↑f (x i • fun j => if i = j then 1 else 0) = ∑ i : ι, x i • ↑f fun j => if i = j then 1 else 0
[PROOFSTEP]
refine Finset.sum_congr rfl (fun _ _ => ?_)
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁹ : Semiring R
inst✝¹⁸ : Semiring R₂
inst✝¹⁷ : Semiring R₃
inst✝¹⁶ : Semiring R₄
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : AddCommMonoid M₄
inst✝¹⁰ : Module R M
inst✝⁹ : Module R M₁
inst✝⁸ : Module R₂ M₂
inst✝⁷ : Module R₃ M₃
inst✝⁶ : Module R₄ M₄
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₃₄ : R₃ →+* R₄
σ₁₃ : R →+* R₃
σ₂₄ : R₂ →+* R₄
σ₁₄ : R →+* R₄
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₂₃ σ₃₄ σ₂₄
inst✝³ : RingHomCompTriple σ₁₃ σ₃₄ σ₁₄
inst✝² : RingHomCompTriple σ₁₂ σ₂₄ σ₁₄
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : (ι → R) →ₗ[R] M
x : ι → R
x✝¹ : ι
x✝ : x✝¹ ∈ Finset.univ
⊢ ↑f (x x✝¹ • fun j => if x✝¹ = j then 1 else 0) = x x✝¹ • ↑f fun j => if x✝¹ = j then 1 else 0
[PROOFSTEP]
rw [map_smul]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring S
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : Module R M
inst✝⁷ : Module R M₂
inst✝⁶ : Module R M₃
inst✝⁵ : Module S M₂
inst✝⁴ : Module S M₃
inst✝³ : SMulCommClass R S M₂
inst✝² : SMulCommClass R S M₃
f✝ : M →ₗ[R] M₂
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
src✝ : (fun x => (R →ₗ[R] M) →ₗ[S] M) 1 := ↑(applyₗ' S) 1
f : R →ₗ[R] M
⊢ smulRight 1
      (AddHom.toFun
        {
            toAddHom :=
              { toFun := fun f => ↑f 1,
                map_add' :=
                  (_ :
                    ∀ (x y : R →ₗ[R] M),
                      AddHom.toFun src✝.toAddHom (x + y) =
                        AddHom.toFun src✝.toAddHom x + AddHom.toFun src✝.toAddHom y) },
            map_smul' :=
              (_ :
                ∀ (r : S) (x : R →ₗ[R] M),
                  AddHom.toFun src✝.toAddHom (r • x) = ↑(RingHom.id S) r • AddHom.toFun src✝.toAddHom x) }.toAddHom
        f) =
    f
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring S
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : Module R M
inst✝⁷ : Module R M₂
inst✝⁶ : Module R M₃
inst✝⁵ : Module S M₂
inst✝⁴ : Module S M₃
inst✝³ : SMulCommClass R S M₂
inst✝² : SMulCommClass R S M₃
f✝ : M →ₗ[R] M₂
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
src✝ : (fun x => (R →ₗ[R] M) →ₗ[S] M) 1 := ↑(applyₗ' S) 1
f : R →ₗ[R] M
⊢ ↑(smulRight 1
          (AddHom.toFun
            {
                toAddHom :=
                  { toFun := fun f => ↑f 1,
                    map_add' :=
                      (_ :
                        ∀ (x y : R →ₗ[R] M),
                          AddHom.toFun src✝.toAddHom (x + y) =
                            AddHom.toFun src✝.toAddHom x + AddHom.toFun src✝.toAddHom y) },
                map_smul' :=
                  (_ :
                    ∀ (r : S) (x : R →ₗ[R] M),
                      AddHom.toFun src✝.toAddHom (r • x) = ↑(RingHom.id S) r • AddHom.toFun src✝.toAddHom x) }.toAddHom
            f))
      1 =
    ↑f 1
[PROOFSTEP]
simp only [coe_smulRight, one_apply, smul_eq_mul, ← map_smul f, mul_one]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring S
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : Module R M
inst✝⁷ : Module R M₂
inst✝⁶ : Module R M₃
inst✝⁵ : Module S M₂
inst✝⁴ : Module S M₃
inst✝³ : SMulCommClass R S M₂
inst✝² : SMulCommClass R S M₃
f : M →ₗ[R] M₂
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
src✝ : (fun x => (R →ₗ[R] M) →ₗ[S] M) 1 := ↑(applyₗ' S) 1
x : M
⊢ AddHom.toFun
      {
          toAddHom :=
            { toFun := fun f => ↑f 1,
              map_add' :=
                (_ :
                  ∀ (x y : R →ₗ[R] M),
                    AddHom.toFun src✝.toAddHom (x + y) = AddHom.toFun src✝.toAddHom x + AddHom.toFun src✝.toAddHom y) },
          map_smul' :=
            (_ :
              ∀ (r : S) (x : R →ₗ[R] M),
                AddHom.toFun src✝.toAddHom (r • x) = ↑(RingHom.id S) r • AddHom.toFun src✝.toAddHom x) }.toAddHom
      (smulRight 1 x) =
    x
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f g : M →ₗ[R] M₂
p : Submodule R M
⊢ ∀ (x y : M →ₗ[R] M₂), (fun φ => domRestrict φ p) (x + y) = (fun φ => domRestrict φ p) x + (fun φ => domRestrict φ p) y
[PROOFSTEP]
simp [LinearMap.ext_iff]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f g : M →ₗ[R] M₂
p : Submodule R M
⊢ ∀ (r : R) (x : M →ₗ[R] M₂),
    AddHom.toFun
        { toFun := fun φ => domRestrict φ p,
          map_add' := (_ : ∀ (a a_1 : M →ₗ[R] M₂), domRestrict (a + a_1) p = domRestrict a p + domRestrict a_1 p) }
        (r • x) =
      ↑(RingHom.id R) r •
        AddHom.toFun
          { toFun := fun φ => domRestrict φ p,
            map_add' := (_ : ∀ (a a_1 : M →ₗ[R] M₂), domRestrict (a + a_1) p = domRestrict a p + domRestrict a_1 p) }
          x
[PROOFSTEP]
simp [LinearMap.ext_iff]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f✝ g : M →ₗ[R] M₂
f : M₂ →ₗ[R] R
m m' : M
⊢ smulRight f (m + m') = smulRight f m + smulRight f m'
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f✝ g : M →ₗ[R] M₂
f : M₂ →ₗ[R] R
m m' : M
x✝ : M₂
⊢ ↑(smulRight f (m + m')) x✝ = ↑(smulRight f m + smulRight f m') x✝
[PROOFSTEP]
apply smul_add
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f✝ g : M →ₗ[R] M₂
f : M₂ →ₗ[R] R
c : R
m : M
⊢ AddHom.toFun
      { toFun := smulRight f, map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
      (c • m) =
    ↑(RingHom.id R) c •
      AddHom.toFun
        { toFun := smulRight f, map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
        m
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f✝ g : M →ₗ[R] M₂
f : M₂ →ₗ[R] R
c : R
m : M
x✝ : M₂
⊢ ↑(AddHom.toFun
          { toFun := smulRight f,
            map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
          (c • m))
      x✝ =
    ↑(↑(RingHom.id R) c •
          AddHom.toFun
            { toFun := smulRight f,
              map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
            m)
      x✝
[PROOFSTEP]
apply smul_comm
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f✝ g : M →ₗ[R] M₂
f f' : M₂ →ₗ[R] R
⊢ (fun f =>
        {
          toAddHom :=
            { toFun := smulRight f,
              map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
          map_smul' :=
            (_ :
              ∀ (c : R) (m : M),
                AddHom.toFun
                    { toFun := smulRight f,
                      map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                    (c • m) =
                  ↑(RingHom.id R) c •
                    AddHom.toFun
                      { toFun := smulRight f,
                        map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                      m) })
      (f + f') =
    (fun f =>
          {
            toAddHom :=
              { toFun := smulRight f,
                map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
            map_smul' :=
              (_ :
                ∀ (c : R) (m : M),
                  AddHom.toFun
                      { toFun := smulRight f,
                        map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                      (c • m) =
                    ↑(RingHom.id R) c •
                      AddHom.toFun
                        { toFun := smulRight f,
                          map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                        m) })
        f +
      (fun f =>
          {
            toAddHom :=
              { toFun := smulRight f,
                map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
            map_smul' :=
              (_ :
                ∀ (c : R) (m : M),
                  AddHom.toFun
                      { toFun := smulRight f,
                        map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                      (c • m) =
                    ↑(RingHom.id R) c •
                      AddHom.toFun
                        { toFun := smulRight f,
                          map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                        m) })
        f'
[PROOFSTEP]
ext
[GOAL]
case h.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f✝ g : M →ₗ[R] M₂
f f' : M₂ →ₗ[R] R
x✝¹ : M
x✝ : M₂
⊢ ↑(↑((fun f =>
                {
                  toAddHom :=
                    { toFun := smulRight f,
                      map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                  map_smul' :=
                    (_ :
                      ∀ (c : R) (m : M),
                        AddHom.toFun
                            { toFun := smulRight f,
                              map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                            (c • m) =
                          ↑(RingHom.id R) c •
                            AddHom.toFun
                              { toFun := smulRight f,
                                map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                              m) })
              (f + f'))
          x✝¹)
      x✝ =
    ↑(↑((fun f =>
                  {
                    toAddHom :=
                      { toFun := smulRight f,
                        map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                    map_smul' :=
                      (_ :
                        ∀ (c : R) (m : M),
                          AddHom.toFun
                              { toFun := smulRight f,
                                map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                              (c • m) =
                            ↑(RingHom.id R) c •
                              AddHom.toFun
                                { toFun := smulRight f,
                                  map_add' :=
                                    (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                m) })
                f +
              (fun f =>
                  {
                    toAddHom :=
                      { toFun := smulRight f,
                        map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                    map_smul' :=
                      (_ :
                        ∀ (c : R) (m : M),
                          AddHom.toFun
                              { toFun := smulRight f,
                                map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                              (c • m) =
                            ↑(RingHom.id R) c •
                              AddHom.toFun
                                { toFun := smulRight f,
                                  map_add' :=
                                    (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                m) })
                f')
          x✝¹)
      x✝
[PROOFSTEP]
apply add_smul
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f✝ g : M →ₗ[R] M₂
c : R
f : M₂ →ₗ[R] R
⊢ AddHom.toFun
      {
        toFun := fun f =>
          {
            toAddHom :=
              { toFun := smulRight f,
                map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
            map_smul' :=
              (_ :
                ∀ (c : R) (m : M),
                  AddHom.toFun
                      { toFun := smulRight f,
                        map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                      (c • m) =
                    ↑(RingHom.id R) c •
                      AddHom.toFun
                        { toFun := smulRight f,
                          map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                        m) },
        map_add' :=
          (_ :
            ∀ (f f' : M₂ →ₗ[R] R),
              (fun f =>
                    {
                      toAddHom :=
                        { toFun := smulRight f,
                          map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                      map_smul' :=
                        (_ :
                          ∀ (c : R) (m : M),
                            AddHom.toFun
                                { toFun := smulRight f,
                                  map_add' :=
                                    (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                (c • m) =
                              ↑(RingHom.id R) c •
                                AddHom.toFun
                                  { toFun := smulRight f,
                                    map_add' :=
                                      (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                  m) })
                  (f + f') =
                (fun f =>
                      {
                        toAddHom :=
                          { toFun := smulRight f,
                            map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                        map_smul' :=
                          (_ :
                            ∀ (c : R) (m : M),
                              AddHom.toFun
                                  { toFun := smulRight f,
                                    map_add' :=
                                      (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                  (c • m) =
                                ↑(RingHom.id R) c •
                                  AddHom.toFun
                                    { toFun := smulRight f,
                                      map_add' :=
                                        (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                    m) })
                    f +
                  (fun f =>
                      {
                        toAddHom :=
                          { toFun := smulRight f,
                            map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                        map_smul' :=
                          (_ :
                            ∀ (c : R) (m : M),
                              AddHom.toFun
                                  { toFun := smulRight f,
                                    map_add' :=
                                      (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                  (c • m) =
                                ↑(RingHom.id R) c •
                                  AddHom.toFun
                                    { toFun := smulRight f,
                                      map_add' :=
                                        (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                    m) })
                    f') }
      (c • f) =
    ↑(RingHom.id R) c •
      AddHom.toFun
        {
          toFun := fun f =>
            {
              toAddHom :=
                { toFun := smulRight f,
                  map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
              map_smul' :=
                (_ :
                  ∀ (c : R) (m : M),
                    AddHom.toFun
                        { toFun := smulRight f,
                          map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                        (c • m) =
                      ↑(RingHom.id R) c •
                        AddHom.toFun
                          { toFun := smulRight f,
                            map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                          m) },
          map_add' :=
            (_ :
              ∀ (f f' : M₂ →ₗ[R] R),
                (fun f =>
                      {
                        toAddHom :=
                          { toFun := smulRight f,
                            map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                        map_smul' :=
                          (_ :
                            ∀ (c : R) (m : M),
                              AddHom.toFun
                                  { toFun := smulRight f,
                                    map_add' :=
                                      (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                  (c • m) =
                                ↑(RingHom.id R) c •
                                  AddHom.toFun
                                    { toFun := smulRight f,
                                      map_add' :=
                                        (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                    m) })
                    (f + f') =
                  (fun f =>
                        {
                          toAddHom :=
                            { toFun := smulRight f,
                              map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                          map_smul' :=
                            (_ :
                              ∀ (c : R) (m : M),
                                AddHom.toFun
                                    { toFun := smulRight f,
                                      map_add' :=
                                        (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                    (c • m) =
                                  ↑(RingHom.id R) c •
                                    AddHom.toFun
                                      { toFun := smulRight f,
                                        map_add' :=
                                          (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                      m) })
                      f +
                    (fun f =>
                        {
                          toAddHom :=
                            { toFun := smulRight f,
                              map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                          map_smul' :=
                            (_ :
                              ∀ (c : R) (m : M),
                                AddHom.toFun
                                    { toFun := smulRight f,
                                      map_add' :=
                                        (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                    (c • m) =
                                  ↑(RingHom.id R) c •
                                    AddHom.toFun
                                      { toFun := smulRight f,
                                        map_add' :=
                                          (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                      m) })
                      f') }
        f
[PROOFSTEP]
ext
[GOAL]
case h.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f✝ g : M →ₗ[R] M₂
c : R
f : M₂ →ₗ[R] R
x✝¹ : M
x✝ : M₂
⊢ ↑(↑(AddHom.toFun
              {
                toFun := fun f =>
                  {
                    toAddHom :=
                      { toFun := smulRight f,
                        map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                    map_smul' :=
                      (_ :
                        ∀ (c : R) (m : M),
                          AddHom.toFun
                              { toFun := smulRight f,
                                map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                              (c • m) =
                            ↑(RingHom.id R) c •
                              AddHom.toFun
                                { toFun := smulRight f,
                                  map_add' :=
                                    (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                m) },
                map_add' :=
                  (_ :
                    ∀ (f f' : M₂ →ₗ[R] R),
                      (fun f =>
                            {
                              toAddHom :=
                                { toFun := smulRight f,
                                  map_add' :=
                                    (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                              map_smul' :=
                                (_ :
                                  ∀ (c : R) (m : M),
                                    AddHom.toFun
                                        { toFun := smulRight f,
                                          map_add' :=
                                            (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                        (c • m) =
                                      ↑(RingHom.id R) c •
                                        AddHom.toFun
                                          { toFun := smulRight f,
                                            map_add' :=
                                              (_ :
                                                ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                          m) })
                          (f + f') =
                        (fun f =>
                              {
                                toAddHom :=
                                  { toFun := smulRight f,
                                    map_add' :=
                                      (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                                map_smul' :=
                                  (_ :
                                    ∀ (c : R) (m : M),
                                      AddHom.toFun
                                          { toFun := smulRight f,
                                            map_add' :=
                                              (_ :
                                                ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                          (c • m) =
                                        ↑(RingHom.id R) c •
                                          AddHom.toFun
                                            { toFun := smulRight f,
                                              map_add' :=
                                                (_ :
                                                  ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                            m) })
                            f +
                          (fun f =>
                              {
                                toAddHom :=
                                  { toFun := smulRight f,
                                    map_add' :=
                                      (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                                map_smul' :=
                                  (_ :
                                    ∀ (c : R) (m : M),
                                      AddHom.toFun
                                          { toFun := smulRight f,
                                            map_add' :=
                                              (_ :
                                                ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                          (c • m) =
                                        ↑(RingHom.id R) c •
                                          AddHom.toFun
                                            { toFun := smulRight f,
                                              map_add' :=
                                                (_ :
                                                  ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                            m) })
                            f') }
              (c • f))
          x✝¹)
      x✝ =
    ↑(↑(↑(RingHom.id R) c •
              AddHom.toFun
                {
                  toFun := fun f =>
                    {
                      toAddHom :=
                        { toFun := smulRight f,
                          map_add' := (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                      map_smul' :=
                        (_ :
                          ∀ (c : R) (m : M),
                            AddHom.toFun
                                { toFun := smulRight f,
                                  map_add' :=
                                    (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                (c • m) =
                              ↑(RingHom.id R) c •
                                AddHom.toFun
                                  { toFun := smulRight f,
                                    map_add' :=
                                      (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                  m) },
                  map_add' :=
                    (_ :
                      ∀ (f f' : M₂ →ₗ[R] R),
                        (fun f =>
                              {
                                toAddHom :=
                                  { toFun := smulRight f,
                                    map_add' :=
                                      (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                                map_smul' :=
                                  (_ :
                                    ∀ (c : R) (m : M),
                                      AddHom.toFun
                                          { toFun := smulRight f,
                                            map_add' :=
                                              (_ :
                                                ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                          (c • m) =
                                        ↑(RingHom.id R) c •
                                          AddHom.toFun
                                            { toFun := smulRight f,
                                              map_add' :=
                                                (_ :
                                                  ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                            m) })
                            (f + f') =
                          (fun f =>
                                {
                                  toAddHom :=
                                    { toFun := smulRight f,
                                      map_add' :=
                                        (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                                  map_smul' :=
                                    (_ :
                                      ∀ (c : R) (m : M),
                                        AddHom.toFun
                                            { toFun := smulRight f,
                                              map_add' :=
                                                (_ :
                                                  ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                            (c • m) =
                                          ↑(RingHom.id R) c •
                                            AddHom.toFun
                                              { toFun := smulRight f,
                                                map_add' :=
                                                  (_ :
                                                    ∀ (m m' : M),
                                                      smulRight f (m + m') = smulRight f m + smulRight f m') }
                                              m) })
                              f +
                            (fun f =>
                                {
                                  toAddHom :=
                                    { toFun := smulRight f,
                                      map_add' :=
                                        (_ : ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') },
                                  map_smul' :=
                                    (_ :
                                      ∀ (c : R) (m : M),
                                        AddHom.toFun
                                            { toFun := smulRight f,
                                              map_add' :=
                                                (_ :
                                                  ∀ (m m' : M), smulRight f (m + m') = smulRight f m + smulRight f m') }
                                            (c • m) =
                                          ↑(RingHom.id R) c •
                                            AddHom.toFun
                                              { toFun := smulRight f,
                                                map_add' :=
                                                  (_ :
                                                    ∀ (m m' : M),
                                                      smulRight f (m + m') = smulRight f m + smulRight f m') }
                                              m) })
                              f') }
                f)
          x✝¹)
      x✝
[PROOFSTEP]
apply mul_smul
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
⊢ ∀ (x y : A →+ B), AddMonoidHom.toNatLinearMap (x + y) = AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y
[PROOFSTEP]
intros
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
x✝ y✝ : A →+ B
⊢ AddMonoidHom.toNatLinearMap (x✝ + y✝) = AddMonoidHom.toNatLinearMap x✝ + AddMonoidHom.toNatLinearMap y✝
[PROOFSTEP]
ext
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
x✝¹ y✝ : A →+ B
x✝ : A
⊢ ↑(AddMonoidHom.toNatLinearMap (x✝¹ + y✝)) x✝ = ↑(AddMonoidHom.toNatLinearMap x✝¹ + AddMonoidHom.toNatLinearMap y✝) x✝
[PROOFSTEP]
rfl
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
⊢ ∀ (r : R) (x : A →+ B),
    AddHom.toFun
        { toFun := AddMonoidHom.toNatLinearMap,
          map_add' :=
            (_ :
              ∀ (x y : A →+ B),
                AddMonoidHom.toNatLinearMap (x + y) = AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
        (r • x) =
      ↑(RingHom.id R) r •
        AddHom.toFun
          { toFun := AddMonoidHom.toNatLinearMap,
            map_add' :=
              (_ :
                ∀ (x y : A →+ B),
                  AddMonoidHom.toNatLinearMap (x + y) = AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
          x
[PROOFSTEP]
intros
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
r✝ : R
x✝ : A →+ B
⊢ AddHom.toFun
      { toFun := AddMonoidHom.toNatLinearMap,
        map_add' :=
          (_ :
            ∀ (x y : A →+ B),
              AddMonoidHom.toNatLinearMap (x + y) = AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
      (r✝ • x✝) =
    ↑(RingHom.id R) r✝ •
      AddHom.toFun
        { toFun := AddMonoidHom.toNatLinearMap,
          map_add' :=
            (_ :
              ∀ (x y : A →+ B),
                AddMonoidHom.toNatLinearMap (x + y) = AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
        x✝
[PROOFSTEP]
ext
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
r✝ : R
x✝¹ : A →+ B
x✝ : A
⊢ ↑(AddHom.toFun
          { toFun := AddMonoidHom.toNatLinearMap,
            map_add' :=
              (_ :
                ∀ (x y : A →+ B),
                  AddMonoidHom.toNatLinearMap (x + y) = AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
          (r✝ • x✝¹))
      x✝ =
    ↑(↑(RingHom.id R) r✝ •
          AddHom.toFun
            { toFun := AddMonoidHom.toNatLinearMap,
              map_add' :=
                (_ :
                  ∀ (x y : A →+ B),
                    AddMonoidHom.toNatLinearMap (x + y) =
                      AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
            x✝¹)
      x✝
[PROOFSTEP]
rfl
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
⊢ LeftInverse LinearMap.toAddMonoidHom
    {
          toAddHom :=
            { toFun := AddMonoidHom.toNatLinearMap,
              map_add' :=
                (_ :
                  ∀ (x y : A →+ B),
                    AddMonoidHom.toNatLinearMap (x + y) =
                      AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) },
          map_smul' :=
            (_ :
              ∀ (r : R) (x : A →+ B),
                AddHom.toFun
                    { toFun := AddMonoidHom.toNatLinearMap,
                      map_add' :=
                        (_ :
                          ∀ (x y : A →+ B),
                            AddMonoidHom.toNatLinearMap (x + y) =
                              AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                    (r • x) =
                  ↑(RingHom.id R) r •
                    AddHom.toFun
                      { toFun := AddMonoidHom.toNatLinearMap,
                        map_add' :=
                          (_ :
                            ∀ (x y : A →+ B),
                              AddMonoidHom.toNatLinearMap (x + y) =
                                AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                      x) }.toAddHom.toFun
[PROOFSTEP]
intro f
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
f : A →+ B
⊢ LinearMap.toAddMonoidHom
      (AddHom.toFun
        {
            toAddHom :=
              { toFun := AddMonoidHom.toNatLinearMap,
                map_add' :=
                  (_ :
                    ∀ (x y : A →+ B),
                      AddMonoidHom.toNatLinearMap (x + y) =
                        AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) },
            map_smul' :=
              (_ :
                ∀ (r : R) (x : A →+ B),
                  AddHom.toFun
                      { toFun := AddMonoidHom.toNatLinearMap,
                        map_add' :=
                          (_ :
                            ∀ (x y : A →+ B),
                              AddMonoidHom.toNatLinearMap (x + y) =
                                AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                      (r • x) =
                    ↑(RingHom.id R) r •
                      AddHom.toFun
                        { toFun := AddMonoidHom.toNatLinearMap,
                          map_add' :=
                            (_ :
                              ∀ (x y : A →+ B),
                                AddMonoidHom.toNatLinearMap (x + y) =
                                  AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                        x) }.toAddHom
        f) =
    f
[PROOFSTEP]
ext
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
f : A →+ B
x✝ : A
⊢ ↑(LinearMap.toAddMonoidHom
          (AddHom.toFun
            {
                toAddHom :=
                  { toFun := AddMonoidHom.toNatLinearMap,
                    map_add' :=
                      (_ :
                        ∀ (x y : A →+ B),
                          AddMonoidHom.toNatLinearMap (x + y) =
                            AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) },
                map_smul' :=
                  (_ :
                    ∀ (r : R) (x : A →+ B),
                      AddHom.toFun
                          { toFun := AddMonoidHom.toNatLinearMap,
                            map_add' :=
                              (_ :
                                ∀ (x y : A →+ B),
                                  AddMonoidHom.toNatLinearMap (x + y) =
                                    AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                          (r • x) =
                        ↑(RingHom.id R) r •
                          AddHom.toFun
                            { toFun := AddMonoidHom.toNatLinearMap,
                              map_add' :=
                                (_ :
                                  ∀ (x y : A →+ B),
                                    AddMonoidHom.toNatLinearMap (x + y) =
                                      AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                            x) }.toAddHom
            f))
      x✝ =
    ↑f x✝
[PROOFSTEP]
rfl
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
⊢ Function.RightInverse LinearMap.toAddMonoidHom
    {
          toAddHom :=
            { toFun := AddMonoidHom.toNatLinearMap,
              map_add' :=
                (_ :
                  ∀ (x y : A →+ B),
                    AddMonoidHom.toNatLinearMap (x + y) =
                      AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) },
          map_smul' :=
            (_ :
              ∀ (r : R) (x : A →+ B),
                AddHom.toFun
                    { toFun := AddMonoidHom.toNatLinearMap,
                      map_add' :=
                        (_ :
                          ∀ (x y : A →+ B),
                            AddMonoidHom.toNatLinearMap (x + y) =
                              AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                    (r • x) =
                  ↑(RingHom.id R) r •
                    AddHom.toFun
                      { toFun := AddMonoidHom.toNatLinearMap,
                        map_add' :=
                          (_ :
                            ∀ (x y : A →+ B),
                              AddMonoidHom.toNatLinearMap (x + y) =
                                AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                      x) }.toAddHom.toFun
[PROOFSTEP]
intro f
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
f : A →ₗ[ℕ] B
⊢ AddHom.toFun
      {
          toAddHom :=
            { toFun := AddMonoidHom.toNatLinearMap,
              map_add' :=
                (_ :
                  ∀ (x y : A →+ B),
                    AddMonoidHom.toNatLinearMap (x + y) =
                      AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) },
          map_smul' :=
            (_ :
              ∀ (r : R) (x : A →+ B),
                AddHom.toFun
                    { toFun := AddMonoidHom.toNatLinearMap,
                      map_add' :=
                        (_ :
                          ∀ (x y : A →+ B),
                            AddMonoidHom.toNatLinearMap (x + y) =
                              AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                    (r • x) =
                  ↑(RingHom.id R) r •
                    AddHom.toFun
                      { toFun := AddMonoidHom.toNatLinearMap,
                        map_add' :=
                          (_ :
                            ∀ (x y : A →+ B),
                              AddMonoidHom.toNatLinearMap (x + y) =
                                AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                      x) }.toAddHom
      (LinearMap.toAddMonoidHom f) =
    f
[PROOFSTEP]
ext
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommMonoid A
inst✝¹ : AddCommMonoid B
inst✝ : Module R B
f : A →ₗ[ℕ] B
x✝ : A
⊢ ↑(AddHom.toFun
          {
              toAddHom :=
                { toFun := AddMonoidHom.toNatLinearMap,
                  map_add' :=
                    (_ :
                      ∀ (x y : A →+ B),
                        AddMonoidHom.toNatLinearMap (x + y) =
                          AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) },
              map_smul' :=
                (_ :
                  ∀ (r : R) (x : A →+ B),
                    AddHom.toFun
                        { toFun := AddMonoidHom.toNatLinearMap,
                          map_add' :=
                            (_ :
                              ∀ (x y : A →+ B),
                                AddMonoidHom.toNatLinearMap (x + y) =
                                  AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                        (r • x) =
                      ↑(RingHom.id R) r •
                        AddHom.toFun
                          { toFun := AddMonoidHom.toNatLinearMap,
                            map_add' :=
                              (_ :
                                ∀ (x y : A →+ B),
                                  AddMonoidHom.toNatLinearMap (x + y) =
                                    AddMonoidHom.toNatLinearMap x + AddMonoidHom.toNatLinearMap y) }
                          x) }.toAddHom
          (LinearMap.toAddMonoidHom f))
      x✝ =
    ↑f x✝
[PROOFSTEP]
rfl
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
⊢ ∀ (x y : A →+ B), AddMonoidHom.toIntLinearMap (x + y) = AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y
[PROOFSTEP]
intros
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
x✝ y✝ : A →+ B
⊢ AddMonoidHom.toIntLinearMap (x✝ + y✝) = AddMonoidHom.toIntLinearMap x✝ + AddMonoidHom.toIntLinearMap y✝
[PROOFSTEP]
ext
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
x✝¹ y✝ : A →+ B
x✝ : A
⊢ ↑(AddMonoidHom.toIntLinearMap (x✝¹ + y✝)) x✝ = ↑(AddMonoidHom.toIntLinearMap x✝¹ + AddMonoidHom.toIntLinearMap y✝) x✝
[PROOFSTEP]
rfl
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
⊢ ∀ (r : R) (x : A →+ B),
    AddHom.toFun
        { toFun := AddMonoidHom.toIntLinearMap,
          map_add' :=
            (_ :
              ∀ (x y : A →+ B),
                AddMonoidHom.toIntLinearMap (x + y) = AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
        (r • x) =
      ↑(RingHom.id R) r •
        AddHom.toFun
          { toFun := AddMonoidHom.toIntLinearMap,
            map_add' :=
              (_ :
                ∀ (x y : A →+ B),
                  AddMonoidHom.toIntLinearMap (x + y) = AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
          x
[PROOFSTEP]
intros
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
r✝ : R
x✝ : A →+ B
⊢ AddHom.toFun
      { toFun := AddMonoidHom.toIntLinearMap,
        map_add' :=
          (_ :
            ∀ (x y : A →+ B),
              AddMonoidHom.toIntLinearMap (x + y) = AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
      (r✝ • x✝) =
    ↑(RingHom.id R) r✝ •
      AddHom.toFun
        { toFun := AddMonoidHom.toIntLinearMap,
          map_add' :=
            (_ :
              ∀ (x y : A →+ B),
                AddMonoidHom.toIntLinearMap (x + y) = AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
        x✝
[PROOFSTEP]
ext
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
r✝ : R
x✝¹ : A →+ B
x✝ : A
⊢ ↑(AddHom.toFun
          { toFun := AddMonoidHom.toIntLinearMap,
            map_add' :=
              (_ :
                ∀ (x y : A →+ B),
                  AddMonoidHom.toIntLinearMap (x + y) = AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
          (r✝ • x✝¹))
      x✝ =
    ↑(↑(RingHom.id R) r✝ •
          AddHom.toFun
            { toFun := AddMonoidHom.toIntLinearMap,
              map_add' :=
                (_ :
                  ∀ (x y : A →+ B),
                    AddMonoidHom.toIntLinearMap (x + y) =
                      AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
            x✝¹)
      x✝
[PROOFSTEP]
rfl
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
⊢ LeftInverse LinearMap.toAddMonoidHom
    {
          toAddHom :=
            { toFun := AddMonoidHom.toIntLinearMap,
              map_add' :=
                (_ :
                  ∀ (x y : A →+ B),
                    AddMonoidHom.toIntLinearMap (x + y) =
                      AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) },
          map_smul' :=
            (_ :
              ∀ (r : R) (x : A →+ B),
                AddHom.toFun
                    { toFun := AddMonoidHom.toIntLinearMap,
                      map_add' :=
                        (_ :
                          ∀ (x y : A →+ B),
                            AddMonoidHom.toIntLinearMap (x + y) =
                              AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                    (r • x) =
                  ↑(RingHom.id R) r •
                    AddHom.toFun
                      { toFun := AddMonoidHom.toIntLinearMap,
                        map_add' :=
                          (_ :
                            ∀ (x y : A →+ B),
                              AddMonoidHom.toIntLinearMap (x + y) =
                                AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                      x) }.toAddHom.toFun
[PROOFSTEP]
intro f
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
f : A →+ B
⊢ LinearMap.toAddMonoidHom
      (AddHom.toFun
        {
            toAddHom :=
              { toFun := AddMonoidHom.toIntLinearMap,
                map_add' :=
                  (_ :
                    ∀ (x y : A →+ B),
                      AddMonoidHom.toIntLinearMap (x + y) =
                        AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) },
            map_smul' :=
              (_ :
                ∀ (r : R) (x : A →+ B),
                  AddHom.toFun
                      { toFun := AddMonoidHom.toIntLinearMap,
                        map_add' :=
                          (_ :
                            ∀ (x y : A →+ B),
                              AddMonoidHom.toIntLinearMap (x + y) =
                                AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                      (r • x) =
                    ↑(RingHom.id R) r •
                      AddHom.toFun
                        { toFun := AddMonoidHom.toIntLinearMap,
                          map_add' :=
                            (_ :
                              ∀ (x y : A →+ B),
                                AddMonoidHom.toIntLinearMap (x + y) =
                                  AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                        x) }.toAddHom
        f) =
    f
[PROOFSTEP]
ext
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
f : A →+ B
x✝ : A
⊢ ↑(LinearMap.toAddMonoidHom
          (AddHom.toFun
            {
                toAddHom :=
                  { toFun := AddMonoidHom.toIntLinearMap,
                    map_add' :=
                      (_ :
                        ∀ (x y : A →+ B),
                          AddMonoidHom.toIntLinearMap (x + y) =
                            AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) },
                map_smul' :=
                  (_ :
                    ∀ (r : R) (x : A →+ B),
                      AddHom.toFun
                          { toFun := AddMonoidHom.toIntLinearMap,
                            map_add' :=
                              (_ :
                                ∀ (x y : A →+ B),
                                  AddMonoidHom.toIntLinearMap (x + y) =
                                    AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                          (r • x) =
                        ↑(RingHom.id R) r •
                          AddHom.toFun
                            { toFun := AddMonoidHom.toIntLinearMap,
                              map_add' :=
                                (_ :
                                  ∀ (x y : A →+ B),
                                    AddMonoidHom.toIntLinearMap (x + y) =
                                      AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                            x) }.toAddHom
            f))
      x✝ =
    ↑f x✝
[PROOFSTEP]
rfl
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
⊢ Function.RightInverse LinearMap.toAddMonoidHom
    {
          toAddHom :=
            { toFun := AddMonoidHom.toIntLinearMap,
              map_add' :=
                (_ :
                  ∀ (x y : A →+ B),
                    AddMonoidHom.toIntLinearMap (x + y) =
                      AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) },
          map_smul' :=
            (_ :
              ∀ (r : R) (x : A →+ B),
                AddHom.toFun
                    { toFun := AddMonoidHom.toIntLinearMap,
                      map_add' :=
                        (_ :
                          ∀ (x y : A →+ B),
                            AddMonoidHom.toIntLinearMap (x + y) =
                              AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                    (r • x) =
                  ↑(RingHom.id R) r •
                    AddHom.toFun
                      { toFun := AddMonoidHom.toIntLinearMap,
                        map_add' :=
                          (_ :
                            ∀ (x y : A →+ B),
                              AddMonoidHom.toIntLinearMap (x + y) =
                                AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                      x) }.toAddHom.toFun
[PROOFSTEP]
intro f
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
f : A →ₗ[ℤ] B
⊢ AddHom.toFun
      {
          toAddHom :=
            { toFun := AddMonoidHom.toIntLinearMap,
              map_add' :=
                (_ :
                  ∀ (x y : A →+ B),
                    AddMonoidHom.toIntLinearMap (x + y) =
                      AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) },
          map_smul' :=
            (_ :
              ∀ (r : R) (x : A →+ B),
                AddHom.toFun
                    { toFun := AddMonoidHom.toIntLinearMap,
                      map_add' :=
                        (_ :
                          ∀ (x y : A →+ B),
                            AddMonoidHom.toIntLinearMap (x + y) =
                              AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                    (r • x) =
                  ↑(RingHom.id R) r •
                    AddHom.toFun
                      { toFun := AddMonoidHom.toIntLinearMap,
                        map_add' :=
                          (_ :
                            ∀ (x y : A →+ B),
                              AddMonoidHom.toIntLinearMap (x + y) =
                                AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                      x) }.toAddHom
      (LinearMap.toAddMonoidHom f) =
    f
[PROOFSTEP]
ext
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
A : Type u_20
B : Type u_21
R : Type u_22
inst✝³ : Semiring R
inst✝² : AddCommGroup A
inst✝¹ : AddCommGroup B
inst✝ : Module R B
f : A →ₗ[ℤ] B
x✝ : A
⊢ ↑(AddHom.toFun
          {
              toAddHom :=
                { toFun := AddMonoidHom.toIntLinearMap,
                  map_add' :=
                    (_ :
                      ∀ (x y : A →+ B),
                        AddMonoidHom.toIntLinearMap (x + y) =
                          AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) },
              map_smul' :=
                (_ :
                  ∀ (r : R) (x : A →+ B),
                    AddHom.toFun
                        { toFun := AddMonoidHom.toIntLinearMap,
                          map_add' :=
                            (_ :
                              ∀ (x y : A →+ B),
                                AddMonoidHom.toIntLinearMap (x + y) =
                                  AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                        (r • x) =
                      ↑(RingHom.id R) r •
                        AddHom.toFun
                          { toFun := AddMonoidHom.toIntLinearMap,
                            map_add' :=
                              (_ :
                                ∀ (x y : A →+ B),
                                  AddMonoidHom.toIntLinearMap (x + y) =
                                    AddMonoidHom.toIntLinearMap x + AddMonoidHom.toIntLinearMap y) }
                          x) }.toAddHom
          (LinearMap.toAddMonoidHom f))
      x✝ =
    ↑f x✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q✝ q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
p q : Submodule R M
h : p ≤ q
⊢ LinearMap.comp (Submodule.subtype q) (ofLe h) = Submodule.subtype p
[PROOFSTEP]
ext ⟨b, hb⟩
[GOAL]
case h.mk
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q✝ q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
p q : Submodule R M
h : p ≤ q
b : M
hb : b ∈ p
⊢ ↑(LinearMap.comp (Submodule.subtype q) (ofLe h)) { val := b, property := hb } =
    ↑(Submodule.subtype p) { val := b, property := hb }
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
⊢ Subsingleton (Submodule R M) ↔ Subsingleton (AddSubmonoid M)
[PROOFSTEP]
rw [← subsingleton_iff_bot_eq_top, ← subsingleton_iff_bot_eq_top, ← toAddSubmonoid_eq]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
⊢ ⊥.toAddSubmonoid = ⊤.toAddSubmonoid ↔ ⊥ = ⊤
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
inst✝ : Subsingleton R
⊢ Unique (Submodule R M)
[PROOFSTEP]
haveI := Module.subsingleton R M
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
inst✝ : Subsingleton R
this : Subsingleton M
⊢ Unique (Submodule R M)
[PROOFSTEP]
infer_instance
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
inst✝ : RingHomSurjective σ₁₂
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
p : Submodule R M
src✝ : AddSubmonoid M₂ := AddSubmonoid.map f p.toAddSubmonoid
⊢ ∀ (c : R₂) {x : M₂},
    x ∈
        {
              toAddSubsemigroup :=
                { carrier := ↑f '' ↑p,
                  add_mem' := (_ : ∀ {a b : M₂}, a ∈ src✝.carrier → b ∈ src✝.carrier → a + b ∈ src✝.carrier) },
              zero_mem' := (_ : 0 ∈ src✝.carrier) }.toAddSubsemigroup.carrier →
      c • x ∈
        {
              toAddSubsemigroup :=
                { carrier := ↑f '' ↑p,
                  add_mem' := (_ : ∀ {a b : M₂}, a ∈ src✝.carrier → b ∈ src✝.carrier → a + b ∈ src✝.carrier) },
              zero_mem' := (_ : 0 ∈ src✝.carrier) }.toAddSubsemigroup.carrier
[PROOFSTEP]
rintro c x ⟨y, hy, rfl⟩
[GOAL]
case intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y✝ : M
inst✝ : RingHomSurjective σ₁₂
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
p : Submodule R M
src✝ : AddSubmonoid M₂ := AddSubmonoid.map f p.toAddSubmonoid
c : R₂
y : M
hy : y ∈ ↑p
⊢ c • ↑f y ∈
    {
          toAddSubsemigroup :=
            { carrier := ↑f '' ↑p,
              add_mem' := (_ : ∀ {a b : M₂}, a ∈ src✝.carrier → b ∈ src✝.carrier → a + b ∈ src✝.carrier) },
          zero_mem' := (_ : 0 ∈ src✝.carrier) }.toAddSubsemigroup.carrier
[PROOFSTEP]
obtain ⟨a, rfl⟩ := σ₁₂.surjective c
[GOAL]
case intro.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y✝ : M
inst✝ : RingHomSurjective σ₁₂
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
p : Submodule R M
src✝ : AddSubmonoid M₂ := AddSubmonoid.map f p.toAddSubmonoid
y : M
hy : y ∈ ↑p
a : R
⊢ ↑σ₁₂ a • ↑f y ∈
    {
          toAddSubsemigroup :=
            { carrier := ↑f '' ↑p,
              add_mem' := (_ : ∀ {a b : M₂}, a ∈ src✝.carrier → b ∈ src✝.carrier → a + b ∈ src✝.carrier) },
          zero_mem' := (_ : 0 ∈ src✝.carrier) }.toAddSubsemigroup.carrier
[PROOFSTEP]
exact ⟨_, p.smul_mem a hy, map_smulₛₗ f _ _⟩
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
inst✝ : RingHomSurjective σ₁₂
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
a : M
⊢ a ∈ map LinearMap.id p ↔ a ∈ p
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁶ : Semiring R
inst✝¹⁵ : Semiring R₂
inst✝¹⁴ : Semiring R₃
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : AddCommMonoid M₃
inst✝¹⁰ : AddCommMonoid M'
inst✝⁹ : Module R M
inst✝⁸ : Module R M'
inst✝⁷ : Module R₂ M₂
inst✝⁶ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝⁵ : RingHomInvPair σ₁₂ σ₂₁
inst✝⁴ : RingHomInvPair σ₂₁ σ₁₂
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
inst✝² : RingHomSurjective σ₁₂
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
inst✝¹ : RingHomSurjective σ₂₃
inst✝ : RingHomSurjective σ₁₃
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₃] M₃
p : Submodule R M
⊢ ↑(map (LinearMap.comp g f) p) = ↑(map g (map f p))
[PROOFSTEP]
simp only [← image_comp, map_coe, LinearMap.coe_comp, comp_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
inst✝ : RingHomSurjective σ₁₂
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
this : ∃ x, x ∈ p
⊢ ∀ (x : M₂), x ∈ map 0 p ↔ x ∈ ⊥
[PROOFSTEP]
simp [this, eq_comm]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
inst✝ : RingHomSurjective σ₁₂
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f g : M →ₛₗ[σ₁₂] M₂
⊢ map (f + g) p ≤ map f p ⊔ map g p
[PROOFSTEP]
rintro x ⟨m, hm, rfl⟩
[GOAL]
case intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
inst✝ : RingHomSurjective σ₁₂
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f g : M →ₛₗ[σ₁₂] M₂
m : M
hm : m ∈ ↑p
⊢ ↑(f + g) m ∈ map f p ⊔ map g p
[PROOFSTEP]
exact add_mem_sup (mem_map_of_mem hm) (mem_map_of_mem hm)
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
i : Injective ↑f
p : Submodule R M
src✝ : ↑↑p ≃ ↑(↑f '' ↑p) := Equiv.Set.image (↑f) (↑p) i
⊢ ∀ (x y : { x // x ∈ p }), Equiv.toFun src✝ (x + y) = Equiv.toFun src✝ x + Equiv.toFun src✝ y
[PROOFSTEP]
intros
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
i : Injective ↑f
p : Submodule R M
src✝ : ↑↑p ≃ ↑(↑f '' ↑p) := Equiv.Set.image (↑f) (↑p) i
x✝ y✝ : { x // x ∈ p }
⊢ Equiv.toFun src✝ (x✝ + y✝) = Equiv.toFun src✝ x✝ + Equiv.toFun src✝ y✝
[PROOFSTEP]
simp only [coe_add, map_add, Equiv.toFun_as_coe, Equiv.Set.image_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
i : Injective ↑f
p : Submodule R M
src✝ : ↑↑p ≃ ↑(↑f '' ↑p) := Equiv.Set.image (↑f) (↑p) i
x✝ y✝ : { x // x ∈ p }
⊢ { val := ↑f ↑x✝ + ↑f ↑y✝, property := (_ : (fun x => x ∈ ↑f '' ↑p) (↑f ↑x✝ + ↑f ↑y✝)) } =
    { val := ↑f ↑x✝, property := (_ : ↑f ↑x✝ ∈ ↑f '' ↑p) } + { val := ↑f ↑y✝, property := (_ : ↑f ↑y✝ ∈ ↑f '' ↑p) }
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
i : Injective ↑f
p : Submodule R M
src✝ : ↑↑p ≃ ↑(↑f '' ↑p) := Equiv.Set.image (↑f) (↑p) i
⊢ ∀ (r : R) (x : { x // x ∈ p }),
    AddHom.toFun
        { toFun := src✝.toFun,
          map_add' :=
            (_ : ∀ (x y : { x // x ∈ p }), Equiv.toFun src✝ (x + y) = Equiv.toFun src✝ x + Equiv.toFun src✝ y) }
        (r • x) =
      ↑σ₁₂ r •
        AddHom.toFun
          { toFun := src✝.toFun,
            map_add' :=
              (_ : ∀ (x y : { x // x ∈ p }), Equiv.toFun src✝ (x + y) = Equiv.toFun src✝ x + Equiv.toFun src✝ y) }
          x
[PROOFSTEP]
intros
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
i : Injective ↑f
p : Submodule R M
src✝ : ↑↑p ≃ ↑(↑f '' ↑p) := Equiv.Set.image (↑f) (↑p) i
r✝ : R
x✝ : { x // x ∈ p }
⊢ AddHom.toFun
      { toFun := src✝.toFun,
        map_add' := (_ : ∀ (x y : { x // x ∈ p }), Equiv.toFun src✝ (x + y) = Equiv.toFun src✝ x + Equiv.toFun src✝ y) }
      (r✝ • x✝) =
    ↑σ₁₂ r✝ •
      AddHom.toFun
        { toFun := src✝.toFun,
          map_add' :=
            (_ : ∀ (x y : { x // x ∈ p }), Equiv.toFun src✝ (x + y) = Equiv.toFun src✝ x + Equiv.toFun src✝ y) }
        x✝
[PROOFSTEP]
simp only [coe_smul_of_tower, map_smulₛₗ, Equiv.toFun_as_coe, Equiv.Set.image_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
i : Injective ↑f
p : Submodule R M
src✝ : ↑↑p ≃ ↑(↑f '' ↑p) := Equiv.Set.image (↑f) (↑p) i
r✝ : R
x✝ : { x // x ∈ p }
⊢ { val := ↑σ₁₂ r✝ • ↑f ↑x✝, property := (_ : (fun x => x ∈ ↑f '' ↑p) (↑σ₁₂ r✝ • ↑f ↑x✝)) } =
    ↑σ₁₂ r✝ • { val := ↑f ↑x✝, property := (_ : ↑f ↑x✝ ∈ ↑f '' ↑p) }
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x✝ y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
p : Submodule R₂ M₂
src✝ : AddSubmonoid M := AddSubmonoid.comap f p.toAddSubmonoid
a : R
x : M
h :
  x ∈
    {
          toAddSubsemigroup :=
            { carrier := ↑f ⁻¹' ↑p,
              add_mem' := (_ : ∀ {a b : M}, a ∈ src✝.carrier → b ∈ src✝.carrier → a + b ∈ src✝.carrier) },
          zero_mem' := (_ : 0 ∈ src✝.carrier) }.toAddSubsemigroup.carrier
⊢ a • x ∈
    {
          toAddSubsemigroup :=
            { carrier := ↑f ⁻¹' ↑p,
              add_mem' := (_ : ∀ {a b : M}, a ∈ src✝.carrier → b ∈ src✝.carrier → a + b ∈ src✝.carrier) },
          zero_mem' := (_ : 0 ∈ src✝.carrier) }.toAddSubsemigroup.carrier
[PROOFSTEP]
simp [p.smul_mem (σ₁₂ a) h]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
p : Submodule R M
f : M →ₗ[R] M
h : p ≤ comap f p
k : ℕ
⊢ p ≤ comap (f ^ k) p
[PROOFSTEP]
induction' k with k ih
[GOAL]
case zero
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
p : Submodule R M
f : M →ₗ[R] M
h : p ≤ comap f p
⊢ p ≤ comap (f ^ Nat.zero) p
[PROOFSTEP]
simp [LinearMap.one_eq_id]
[GOAL]
case succ
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
p : Submodule R M
f : M →ₗ[R] M
h : p ≤ comap f p
k : ℕ
ih : p ≤ comap (f ^ k) p
⊢ p ≤ comap (f ^ Nat.succ k) p
[PROOFSTEP]
simp [LinearMap.iterate_succ, comap_comp, h.trans (comap_mono ih)]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
⊢ ∀ (x : M), x ∈ comap 0 q ↔ x ∈ ⊤
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S✝ : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x✝ y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
hf : Surjective ↑f
inst✝ : RingHomSurjective σ₁₂
S : Submodule R₂ M₂
x : M₂
hx : x ∈ S
⊢ x ∈ map f (comap f S)
[PROOFSTEP]
rcases hf x with ⟨y, rfl⟩
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S✝ : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y✝ : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
hf : Surjective ↑f
inst✝ : RingHomSurjective σ₁₂
S : Submodule R₂ M₂
y : M
hx : ↑f y ∈ S
⊢ ↑f y ∈ map f (comap f S)
[PROOFSTEP]
simp only [mem_map, mem_comap]
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S✝ : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y✝ : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
f : F
hf : Surjective ↑f
inst✝ : RingHomSurjective σ₁₂
S : Submodule R₂ M₂
y : M
hx : ↑f y ∈ S
⊢ ∃ y_1, ↑f y_1 ∈ S ∧ ↑f y_1 = ↑f y
[PROOFSTEP]
exact ⟨y, hx, rfl⟩
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S✝ : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x✝ y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
inst✝ : RingHomSurjective σ₁₂
f : F
hf : Injective ↑f
S : Submodule R M
x : M
⊢ x ∈ comap f (map f S) → x ∈ S
[PROOFSTEP]
simp [mem_comap, mem_map, forall_exists_index, and_imp]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S✝ : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x✝ y : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
inst✝ : RingHomSurjective σ₁₂
f : F
hf : Injective ↑f
S : Submodule R M
x : M
⊢ ∀ (x_1 : M), x_1 ∈ S → ↑f x_1 = ↑f x → x ∈ S
[PROOFSTEP]
intro y hy hxy
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S✝ : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x✝ y✝ : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
inst✝ : RingHomSurjective σ₁₂
f : F
hf : Injective ↑f
S : Submodule R M
x y : M
hy : y ∈ S
hxy : ↑f y = ↑f x
⊢ x ∈ S
[PROOFSTEP]
rw [hf.eq_iff] at hxy 
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S✝ : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x✝ y✝ : M
F : Type u_20
sc : SemilinearMapClass F σ₁₂ M M₂
inst✝ : RingHomSurjective σ₁₂
f : F
hf : Injective ↑f
S : Submodule R M
x y : M
hy : y ∈ S
hxy : y = x
⊢ x ∈ S
[PROOFSTEP]
rwa [← hxy]
[GOAL]
F : Type u_20
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p'✝ : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
sc : SemilinearMapClass F σ₁₂ M M₂
inst✝ : RingHomSurjective σ₁₂
f : F
p : Submodule R M
p' : Submodule R₂ M₂
⊢ map f p ⊓ p' ≤ map f (p ⊓ comap f p')
[PROOFSTEP]
rintro _ ⟨⟨x, h₁, rfl⟩, h₂⟩
[GOAL]
case intro.intro.intro
F : Type u_20
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p'✝ : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x✝ y : M
sc : SemilinearMapClass F σ₁₂ M M₂
inst✝ : RingHomSurjective σ₁₂
f : F
p : Submodule R M
p' : Submodule R₂ M₂
x : M
h₁ : x ∈ ↑p
h₂ : ↑f x ∈ ↑p'
⊢ ↑f x ∈ map f (p ⊓ comap f p')
[PROOFSTEP]
exact ⟨_, ⟨h₁, h₂⟩, rfl⟩
[GOAL]
F : Type ?u.972060
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x✝ y : M
sc : SemilinearMapClass F σ₁₂ M M₂
x : M
⊢ x ∈ map (Submodule.subtype p) (comap (Submodule.subtype p) p') → x ∈ p ⊓ p'
[PROOFSTEP]
rintro ⟨⟨_, h₁⟩, h₂, rfl⟩
[GOAL]
case intro.mk.intro
F : Type ?u.972060
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹³ : Semiring R
inst✝¹² : Semiring R₂
inst✝¹¹ : Semiring R₃
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : AddCommMonoid M₃
inst✝⁷ : AddCommMonoid M'
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝² : RingHomInvPair σ₁₂ σ₂₁
inst✝¹ : RingHomInvPair σ₂₁ σ₁₂
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
sc : SemilinearMapClass F σ₁₂ M M₂
val✝ : M
h₁ : val✝ ∈ p
h₂ : { val := val✝, property := h₁ } ∈ ↑(comap (Submodule.subtype p) p')
⊢ ↑(Submodule.subtype p) { val := val✝, property := h₁ } ∈ p ⊓ p'
[PROOFSTEP]
exact ⟨h₁, h₂⟩
[GOAL]
F : Type ?u.976655
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι✝ : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
sc : SemilinearMapClass F σ₁₂ M M₂
σ : R →+* R
inst✝ : RingHomSurjective σ
ι : Sort u_20
f : M →ₛₗ[σ] M
p : ι → Submodule R M
hf : ∀ (i : ι) (v : M), v ∈ p i → ↑f v ∈ p i
⊢ ∀ (v : M), v ∈ iInf p → ↑f v ∈ iInf p
[PROOFSTEP]
have : ∀ i, (p i).map f ≤ p i := by
  rintro i - ⟨v, hv, rfl⟩
  exact hf i v hv
[GOAL]
F : Type ?u.976655
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι✝ : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
sc : SemilinearMapClass F σ₁₂ M M₂
σ : R →+* R
inst✝ : RingHomSurjective σ
ι : Sort u_20
f : M →ₛₗ[σ] M
p : ι → Submodule R M
hf : ∀ (i : ι) (v : M), v ∈ p i → ↑f v ∈ p i
⊢ ∀ (i : ι), map f (p i) ≤ p i
[PROOFSTEP]
rintro i - ⟨v, hv, rfl⟩
[GOAL]
case intro.intro
F : Type ?u.976655
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι✝ : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
sc : SemilinearMapClass F σ₁₂ M M₂
σ : R →+* R
inst✝ : RingHomSurjective σ
ι : Sort u_20
f : M →ₛₗ[σ] M
p : ι → Submodule R M
hf : ∀ (i : ι) (v : M), v ∈ p i → ↑f v ∈ p i
i : ι
v : M
hv : v ∈ ↑(p i)
⊢ ↑f v ∈ p i
[PROOFSTEP]
exact hf i v hv
[GOAL]
F : Type ?u.976655
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι✝ : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
sc : SemilinearMapClass F σ₁₂ M M₂
σ : R →+* R
inst✝ : RingHomSurjective σ
ι : Sort u_20
f : M →ₛₗ[σ] M
p : ι → Submodule R M
hf : ∀ (i : ι) (v : M), v ∈ p i → ↑f v ∈ p i
this : ∀ (i : ι), map f (p i) ≤ p i
⊢ ∀ (v : M), v ∈ iInf p → ↑f v ∈ iInf p
[PROOFSTEP]
suffices (iInf p).map f ≤ iInf p by exact fun v hv => this ⟨v, hv, rfl⟩
[GOAL]
F : Type ?u.976655
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι✝ : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
sc : SemilinearMapClass F σ₁₂ M M₂
σ : R →+* R
inst✝ : RingHomSurjective σ
ι : Sort u_20
f : M →ₛₗ[σ] M
p : ι → Submodule R M
hf : ∀ (i : ι) (v : M), v ∈ p i → ↑f v ∈ p i
this✝ : ∀ (i : ι), map f (p i) ≤ p i
this : map f (iInf p) ≤ iInf p
⊢ ∀ (v : M), v ∈ iInf p → ↑f v ∈ iInf p
[PROOFSTEP]
exact fun v hv => this ⟨v, hv, rfl⟩
[GOAL]
F : Type ?u.976655
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι✝ : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁴ : Semiring R
inst✝¹³ : Semiring R₂
inst✝¹² : Semiring R₃
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
p✝ p' : Submodule R M
q q' : Submodule R₂ M₂
q₁ q₁' : Submodule R M'
r : R
x y : M
sc : SemilinearMapClass F σ₁₂ M M₂
σ : R →+* R
inst✝ : RingHomSurjective σ
ι : Sort u_20
f : M →ₛₗ[σ] M
p : ι → Submodule R M
hf : ∀ (i : ι) (v : M), v ∈ p i → ↑f v ∈ p i
this : ∀ (i : ι), map f (p i) ≤ p i
⊢ map f (iInf p) ≤ iInf p
[PROOFSTEP]
exact le_iInf fun i => (Submodule.map_mono (iInf_le p i)).trans (this i)
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V₂
a : K
h : a ≠ 0
⊢ comap (a • f) p = comap f p
[PROOFSTEP]
ext b
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V₂
a : K
h : a ≠ 0
b : V
⊢ b ∈ comap (a • f) p ↔ b ∈ comap f p
[PROOFSTEP]
simp only [Submodule.mem_comap, p.smul_mem_iff h, LinearMap.smul_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V
a : K
h : a ≠ 0
⊢ map (a • f) p ≤ map f p
[PROOFSTEP]
rw [map_le_iff_le_comap, comap_smul f _ a h, ← map_le_iff_le_comap]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V
a : K
h : a ≠ 0
⊢ map f p ≤ map (a • f) p
[PROOFSTEP]
rw [map_le_iff_le_comap, ← comap_smul f _ a h, ← map_le_iff_le_comap]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V₂
a : K
⊢ comap (a • f) p = ⨅ (_ : a ≠ 0), comap f p
[PROOFSTEP]
classical by_cases h : a = 0 <;> simp [h, comap_smul]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V₂
a : K
⊢ comap (a • f) p = ⨅ (_ : a ≠ 0), comap f p
[PROOFSTEP]
by_cases h : a = 0
[GOAL]
case pos
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V₂
a : K
h : a = 0
⊢ comap (a • f) p = ⨅ (_ : a ≠ 0), comap f p
[PROOFSTEP]
simp [h, comap_smul]
[GOAL]
case neg
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V₂
a : K
h : ¬a = 0
⊢ comap (a • f) p = ⨅ (_ : a ≠ 0), comap f p
[PROOFSTEP]
simp [h, comap_smul]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V
a : K
⊢ map (a • f) p = ⨆ (_ : a ≠ 0), map f p
[PROOFSTEP]
classical by_cases h : a = 0 <;> simp [h, Submodule.map_smul]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V
a : K
⊢ map (a • f) p = ⨆ (_ : a ≠ 0), map f p
[PROOFSTEP]
by_cases h : a = 0
[GOAL]
case pos
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V
a : K
h : a = 0
⊢ map (a • f) p = ⨆ (_ : a ≠ 0), map f p
[PROOFSTEP]
simp [h, Submodule.map_smul]
[GOAL]
case neg
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semifield K
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
p : Submodule K V
a : K
h : ¬a = 0
⊢ map (a • f) p = ⨆ (_ : a ≠ 0), map f p
[PROOFSTEP]
simp [h, Submodule.map_smul]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
inst✝ : RingHomSurjective σ₂₁
p : Submodule R M
f : M₂ →ₛₗ[σ₂₁] M
h : ∀ (c : M₂), ↑f c ∈ p
p' : Submodule R₂ M₂
x✝ : { x // x ∈ p }
x : M
hx : x ∈ p
⊢ { val := x, property := hx } ∈ map (codRestrict p f h) p' ↔
    { val := x, property := hx } ∈ comap (Submodule.subtype p) (map f p')
[PROOFSTEP]
simp [Subtype.ext_iff_val]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
p : Submodule R M
f : M₂ →ₛₗ[σ₂₁] M
hf : ∀ (c : M₂), ↑f c ∈ p
p' : Submodule R { x // x ∈ p }
x : M₂
⊢ x ∈ comap f (map (Submodule.subtype p) p') → x ∈ comap (codRestrict p f hf) p'
[PROOFSTEP]
rintro ⟨⟨_, _⟩, h, ⟨⟩⟩
[GOAL]
case intro.mk.intro.refl
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
p : Submodule R M
f : M₂ →ₛₗ[σ₂₁] M
hf : ∀ (c : M₂), ↑f c ∈ p
p' : Submodule R { x // x ∈ p }
x : M₂
property✝ : f.toAddHom.1 x ∈ p
h : { val := f.toAddHom.1 x, property := property✝ } ∈ ↑p'
⊢ x ∈ comap (codRestrict p f hf) p'
[PROOFSTEP]
exact h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
⊢ range f = map f ⊤
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
x✝ : M₂
⊢ x✝ ∈ range f ↔ x✝ ∈ map f ⊤
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
⊢ range f = ⊤ ↔ Surjective ↑f
[PROOFSTEP]
rw [SetLike.ext'_iff, range_coe, top_coe, Set.range_iff_surjective]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
p : Submodule R₂ M₂
⊢ range f ≤ p ↔ comap f p = ⊤
[PROOFSTEP]
rw [range_eq_map, map_le_iff_le_comap, eq_top_iff]
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂✝ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R✝
inst✝¹⁶ : Semiring R₂✝
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : AddCommMonoid M✝
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
σ₁₂ : R✝ →+* R₂✝
σ₂₃ : R₂✝ →+* R₃
σ₁₃ : R✝ →+* R₃
inst✝¹¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝¹⁰ : Module R✝ M✝
inst✝⁹ : Module R₂✝ M₂✝
inst✝⁸ : Module R₃ M₃
σ₂₁ : R₂✝ →+* R✝
τ₁₂✝ : R✝ →+* R₂✝
τ₂₃ : R₂✝ →+* R₃
τ₁₃ : R✝ →+* R₃
inst✝⁷ : RingHomCompTriple τ₁₂✝ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂✝ M✝ M₂✝
R : Type u_21
R₂ : Type u_22
M : Type u_23
M₂ : Type u_24
inst✝⁶ : Semiring R
inst✝⁵ : Ring R₂
inst✝⁴ : AddCommMonoid M
inst✝³ : AddCommGroup M₂
inst✝² : Module R M
inst✝¹ : Module R₂ M₂
τ₁₂ : R →+* R₂
inst✝ : RingHomSurjective τ₁₂
f : M →ₛₗ[τ₁₂] M₂
⊢ range (-f) = range f
[PROOFSTEP]
change range ((-LinearMap.id : M₂ →ₗ[R₂] M₂).comp f) = _
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂✝ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁷ : Semiring R✝
inst✝¹⁶ : Semiring R₂✝
inst✝¹⁵ : Semiring R₃
inst✝¹⁴ : AddCommMonoid M✝
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
σ₁₂ : R✝ →+* R₂✝
σ₂₃ : R₂✝ →+* R₃
σ₁₃ : R✝ →+* R₃
inst✝¹¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝¹⁰ : Module R✝ M✝
inst✝⁹ : Module R₂✝ M₂✝
inst✝⁸ : Module R₃ M₃
σ₂₁ : R₂✝ →+* R✝
τ₁₂✝ : R✝ →+* R₂✝
τ₂₃ : R₂✝ →+* R₃
τ₁₃ : R✝ →+* R₃
inst✝⁷ : RingHomCompTriple τ₁₂✝ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂✝ M✝ M₂✝
R : Type u_21
R₂ : Type u_22
M : Type u_23
M₂ : Type u_24
inst✝⁶ : Semiring R
inst✝⁵ : Ring R₂
inst✝⁴ : AddCommMonoid M
inst✝³ : AddCommGroup M₂
inst✝² : Module R M
inst✝¹ : Module R₂ M₂
τ₁₂ : R →+* R₂
inst✝ : RingHomSurjective τ₁₂
f : M →ₛₗ[τ₁₂] M₂
⊢ range (comp (-id) f) = range f
[PROOFSTEP]
rw [range_comp, Submodule.map_neg, Submodule.map_id]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f g : F
src✝ : AddSubmonoid M := AddMonoidHom.eqLocusM ↑f ↑g
r : R
x : M
hx : ↑f x = ↑g x
⊢ ↑f (r • x) = ↑g (r • x)
[PROOFSTEP]
simpa only [map_smulₛₗ] using congr_arg ((· • ·) (τ₁₂ r)) hx
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f g : F
⊢ eqLocus f g = ⊤ ↔ f = g
[PROOFSTEP]
simp [SetLike.ext_iff, FunLike.ext_iff]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S✝ : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f g : F
S T : Submodule R M
hS : Set.EqOn ↑f ↑g ↑S
hT : Set.EqOn ↑f ↑g ↑T
⊢ Set.EqOn ↑f ↑g ↑(S ⊔ T)
[PROOFSTEP]
rw [← le_eqLocus] at hS hT ⊢
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S✝ : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f g : F
S T : Submodule R M
hS : S ≤ eqLocus f g
hT : T ≤ eqLocus f g
⊢ S ⊔ T ≤ eqLocus f g
[PROOFSTEP]
exact sup_le hS hT
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₗ[R] M
n m : ℕ
w : n ≤ m
x : M
h : x ∈ (fun n => range (f ^ n)) m
⊢ x ∈ (fun n => range (f ^ n)) n
[PROOFSTEP]
obtain ⟨c, rfl⟩ := le_iff_exists_add.mp w
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₗ[R] M
n : ℕ
x : M
c : ℕ
w : n ≤ n + c
h : x ∈ (fun n => range (f ^ n)) (n + c)
⊢ x ∈ (fun n => range (f ^ n)) n
[PROOFSTEP]
rw [LinearMap.mem_range] at h 
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₗ[R] M
n : ℕ
x : M
c : ℕ
w : n ≤ n + c
h : ∃ y, ↑(f ^ (n + c)) y = x
⊢ x ∈ (fun n => range (f ^ n)) n
[PROOFSTEP]
obtain ⟨m, rfl⟩ := h
[GOAL]
case intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₗ[R] M
n c : ℕ
w : n ≤ n + c
m : M
⊢ ↑(f ^ (n + c)) m ∈ (fun n => range (f ^ n)) n
[PROOFSTEP]
rw [LinearMap.mem_range]
[GOAL]
case intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₗ[R] M
n c : ℕ
w : n ≤ n + c
m : M
⊢ ∃ y, ↑(f ^ n) y = ↑(f ^ (n + c)) m
[PROOFSTEP]
use(f ^ c) m
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₗ[R] M
n c : ℕ
w : n ≤ n + c
m : M
⊢ ↑(f ^ n) (↑(f ^ c) m) = ↑(f ^ (n + c)) m
[PROOFSTEP]
rw [pow_add, LinearMap.mul_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : M →ₛₗ[τ₁₂] M₂
g : M₂ →ₛₗ[τ₂₃] M₃
⊢ ker f ≤ ker (comp g f)
[PROOFSTEP]
rw [ker_comp]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : M →ₛₗ[τ₁₂] M₂
g : M₂ →ₛₗ[τ₂₃] M₃
⊢ ker f ≤ comap f (ker g)
[PROOFSTEP]
exact comap_mono bot_le
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
p : Submodule R M
⊢ Disjoint p (ker f) ↔ ∀ (x : M), x ∈ p → ↑f x = 0 → x = 0
[PROOFSTEP]
simp [disjoint_def]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
⊢ ker f = ⊥ ↔ ∀ (m : M), ↑f m = 0 → m = 0
[PROOFSTEP]
simpa [disjoint_iff_inf_le] using @disjoint_ker _ _ _ _ _ _ _ _ _ _ _ _ _ f ⊤
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
τ₂₁ : R₂ →+* R
inst✝ : RingHomInvPair τ₁₂ τ₂₁
f : M →ₛₗ[τ₁₂] M₂
g : M₂ →ₛₗ[τ₂₁] M
h : comp g f = id
m : M
hm : ↑f m = 0
⊢ m = 0
[PROOFSTEP]
rw [← id_apply (R := R) m, ← h, comp_apply, hm, g.map_zero]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
p : Submodule R M
⊢ p ≤ ker f ↔ map f p = ⊥
[PROOFSTEP]
rw [ker, eq_bot_iff, map_le_iff_le_comap]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
τ₂₁ : R₂ →+* R
p : Submodule R M
f : M₂ →ₛₗ[τ₂₁] M
hf : ∀ (c : M₂), ↑f c ∈ p
⊢ ker (codRestrict p f hf) = ker f
[PROOFSTEP]
rw [ker, comap_codRestrict, Submodule.map_bot]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
τ₂₁ : R₂ →+* R
p : Submodule R M
f : M₂ →ₛₗ[τ₂₁] M
hf : ∀ (c : M₂), ↑f c ∈ p
⊢ comap f ⊥ = ker f
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
τ₂₁ : R₂ →+* R
inst✝ : RingHomSurjective τ₂₁
p : Submodule R M
f : M₂ →ₛₗ[τ₂₁] M
hf : ∀ (c : M₂), ↑f c ∈ p
⊢ range (codRestrict p f hf) = comap (Submodule.subtype p) (range f)
[PROOFSTEP]
simpa only [range_eq_map] using map_codRestrict _ _ _ _
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹² : Semiring R
inst✝¹¹ : Semiring R₂
inst✝¹⁰ : Semiring R₃
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁶ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R M₁
p : Submodule R M
q : Submodule R M₁
f : M →ₗ[R] M₁
hf : ∀ (x : M), x ∈ p → ↑f x ∈ q
⊢ ker (restrict f hf) = ker (domRestrict f p)
[PROOFSTEP]
rw [restrict_eq_codRestrict_domRestrict, ker_codRestrict]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
q : Submodule R₂ M₂
⊢ range f ⊓ q ≤ map f (comap f q)
[PROOFSTEP]
rintro _ ⟨⟨x, _, rfl⟩, hx⟩
[GOAL]
case intro.intro.refl
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
q : Submodule R₂ M₂
x : M
hx : ↑f x ∈ ↑q
⊢ ↑f x ∈ map f (comap f q)
[PROOFSTEP]
exact ⟨x, hx, rfl⟩
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
q : Submodule R₂ M₂
h : q ≤ range f
⊢ map f (comap f q) = q
[PROOFSTEP]
rwa [Submodule.map_comap_eq, inf_eq_right]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
x : M
⊢ x ∈ ker 0
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
⊢ range 0 = ⊥
[PROOFSTEP]
simpa only [range_eq_map] using Submodule.map_zero _
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : M →ₛₗ[τ₁₂] M₂
⊢ range f ≤ ⊥ ↔ f = 0
[PROOFSTEP]
rw [range_le_iff_comap]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : M →ₛₗ[τ₁₂] M₂
⊢ comap f ⊥ = ⊤ ↔ f = 0
[PROOFSTEP]
exact ker_eq_top
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : M →ₛₗ[τ₁₂] M₂
⊢ range f = ⊥ ↔ f = 0
[PROOFSTEP]
rw [← range_le_bot_iff, le_bot_iff]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : M →ₛₗ[τ₁₂] M₂
g : M₂ →ₛₗ[τ₂₃] M₃
h : comp g f = 0
x : M₂
hx : x ∈ range f
y : M
hy : ↑f y = x
⊢ ↑g x = 0
[PROOFSTEP]
rw [← hy, ← comp_apply, h, zero_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
hf : range f = ⊤
p p' : Submodule R₂ M₂
H : comap f p ≤ comap f p'
x : M₂
hx : x ∈ p
⊢ x ∈ p'
[PROOFSTEP]
rcases range_eq_top.1 hf x with ⟨y, hy, rfl⟩
[GOAL]
case intro.refl
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
inst✝ : RingHomSurjective τ₁₂
f : F
hf : range f = ⊤
p p' : Submodule R₂ M₂
H : comap f p ≤ comap f p'
y : M
hx : ↑f y ∈ p
⊢ ↑f y ∈ p'
[PROOFSTEP]
exact H hx
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
hf : Injective ↑f
⊢ ker f = ⊥
[PROOFSTEP]
have : Disjoint ⊤ (ker f) := by
  -- Porting note: `← map_zero f` should work here, but it needs to be directly applied to H.
  rw [disjoint_ker]
  intros _ _ H
  rw [← map_zero f] at H 
  exact hf H
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
hf : Injective ↑f
⊢ Disjoint ⊤ (ker f)
[PROOFSTEP]
rw [disjoint_ker]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
hf : Injective ↑f
⊢ ∀ (x : M), x ∈ ⊤ → ↑f x = 0 → x = 0
[PROOFSTEP]
intros _ _ H
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
hf : Injective ↑f
x✝ : M
a✝ : x✝ ∈ ⊤
H : ↑f x✝ = 0
⊢ x✝ = 0
[PROOFSTEP]
rw [← map_zero f] at H 
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
hf : Injective ↑f
x✝ : M
a✝ : x✝ ∈ ⊤
H : ↑f x✝ = ↑f 0
⊢ x✝ = 0
[PROOFSTEP]
exact hf H
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
hf : Injective ↑f
this : Disjoint ⊤ (ker f)
⊢ ker f = ⊥
[PROOFSTEP]
rw [disjoint_iff_inf_le, top_inf_eq, le_bot_iff] at this 
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
hf : Injective ↑f
this : ker f = ⊥
⊢ ker f = ⊥
[PROOFSTEP]
assumption
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : M →ₗ[R] M
n m : ℕ
w : n ≤ m
x : M
h : x ∈ (fun n => ker (f ^ n)) n
⊢ x ∈ (fun n => ker (f ^ n)) m
[PROOFSTEP]
obtain ⟨c, rfl⟩ := le_iff_exists_add.mp w
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : M →ₗ[R] M
n : ℕ
x : M
h : x ∈ (fun n => ker (f ^ n)) n
c : ℕ
w : n ≤ n + c
⊢ x ∈ (fun n => ker (f ^ n)) (n + c)
[PROOFSTEP]
rw [LinearMap.mem_ker] at h 
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
σ₂₁ : R₂ →+* R
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : M →ₗ[R] M
n : ℕ
x : M
h : ↑(f ^ n) x = 0
c : ℕ
w : n ≤ n + c
⊢ x ∈ (fun n => ker (f ^ n)) (n + c)
[PROOFSTEP]
rw [LinearMap.mem_ker, add_comm, pow_add, LinearMap.mul_apply, h, LinearMap.map_zero]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Ring R
inst✝⁸ : Ring R₂
inst✝⁷ : Ring R₃
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M₂
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
x y : M
⊢ x - y ∈ ker f ↔ ↑f x = ↑f y
[PROOFSTEP]
rw [mem_ker, map_sub, sub_eq_zero]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Ring R
inst✝⁸ : Ring R₂
inst✝⁷ : Ring R₃
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M₂
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
p : Submodule R M
H : ∀ (x : M), x ∈ p → ↑f x = 0 → x = 0
x : M
hx : x ∈ p
y : M
hy : y ∈ p
h : ↑f x = ↑f y
⊢ ↑f (x - y) = 0
[PROOFSTEP]
simp [h]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Ring R
inst✝⁸ : Ring R₂
inst✝⁷ : Ring R₃
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M₂
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
p : Submodule R M
H : ∀ (x : M), x ∈ p → ∀ (y : M), y ∈ p → ↑f x = ↑f y → x = y
x : M
h₁ : x ∈ p
h₂ : ↑f x = 0
⊢ ↑f x = ↑f 0
[PROOFSTEP]
simpa using h₂
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Ring R
inst✝⁸ : Ring R₂
inst✝⁷ : Ring R₃
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M₂
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
⊢ ker f = ⊥ ↔ Injective ↑f
[PROOFSTEP]
simpa [disjoint_iff_inf_le] using @disjoint_ker' _ _ _ _ _ _ _ _ _ _ _ _ _ f ⊤
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
⊢ ker f ≤ p ↔ ∃ y, y ∈ range f ∧ ↑f ⁻¹' {y} ⊆ ↑p
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
⊢ ker f ≤ p → ∃ y, y ∈ range f ∧ ↑f ⁻¹' {y} ⊆ ↑p
[PROOFSTEP]
intro h
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
h : ker f ≤ p
⊢ ∃ y, y ∈ range f ∧ ↑f ⁻¹' {y} ⊆ ↑p
[PROOFSTEP]
use 0
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
h : ker f ≤ p
⊢ 0 ∈ range f ∧ ↑f ⁻¹' {0} ⊆ ↑p
[PROOFSTEP]
rw [← SetLike.mem_coe, range_coe]
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
h : ker f ≤ p
⊢ 0 ∈ Set.range ↑f ∧ ↑f ⁻¹' {0} ⊆ ↑p
[PROOFSTEP]
exact ⟨⟨0, map_zero f⟩, h⟩
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
⊢ (∃ y, y ∈ range f ∧ ↑f ⁻¹' {y} ⊆ ↑p) → ker f ≤ p
[PROOFSTEP]
rintro ⟨y, h₁, h₂⟩
[GOAL]
case mpr.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₁ : y ∈ range f
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
⊢ ker f ≤ p
[PROOFSTEP]
rw [SetLike.le_def]
[GOAL]
case mpr.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₁ : y ∈ range f
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
⊢ ∀ ⦃x : M⦄, x ∈ ker f → x ∈ p
[PROOFSTEP]
intro z hz
[GOAL]
case mpr.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₁ : y ∈ range f
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : z ∈ ker f
⊢ z ∈ p
[PROOFSTEP]
simp only [mem_ker, SetLike.mem_coe] at hz 
[GOAL]
case mpr.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₁ : y ∈ range f
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : ↑f z = 0
⊢ z ∈ p
[PROOFSTEP]
rw [← SetLike.mem_coe, range_coe, Set.mem_range] at h₁ 
[GOAL]
case mpr.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₁ : ∃ y_1, ↑f y_1 = y
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : ↑f z = 0
⊢ z ∈ p
[PROOFSTEP]
obtain ⟨x, hx⟩ := h₁
[GOAL]
case mpr.intro.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : ↑f z = 0
x : M
hx : ↑f x = y
⊢ z ∈ p
[PROOFSTEP]
have hx' : x ∈ p := h₂ hx
[GOAL]
case mpr.intro.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : ↑f z = 0
x : M
hx : ↑f x = y
hx' : x ∈ p
⊢ z ∈ p
[PROOFSTEP]
have hxz : z + x ∈ p := by
  apply h₂
  simp [hx, hz]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : ↑f z = 0
x : M
hx : ↑f x = y
hx' : x ∈ p
⊢ z + x ∈ p
[PROOFSTEP]
apply h₂
[GOAL]
case a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : ↑f z = 0
x : M
hx : ↑f x = y
hx' : x ∈ p
⊢ z + x ∈ ↑f ⁻¹' {y}
[PROOFSTEP]
simp [hx, hz]
[GOAL]
case mpr.intro.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : ↑f z = 0
x : M
hx : ↑f x = y
hx' : x ∈ p
hxz : z + x ∈ p
⊢ z ∈ p
[PROOFSTEP]
suffices z + x - x ∈ p by simpa only [this, add_sub_cancel]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : ↑f z = 0
x : M
hx : ↑f x = y
hx' : x ∈ p
hxz : z + x ∈ p
this : z + x - x ∈ p
⊢ z ∈ p
[PROOFSTEP]
simpa only [this, add_sub_cancel]
[GOAL]
case mpr.intro.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R₂
inst✝⁸ : Ring R₃
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R M
inst✝³ : Module R₂ M₂
inst✝² : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
f : F
inst✝ : RingHomSurjective τ₁₂
p : Submodule R M
y : M₂
h₂ : ↑f ⁻¹' {y} ⊆ ↑p
z : M
hz : ↑f z = 0
x : M
hx : ↑f x = y
hx' : x ∈ p
hxz : z + x ∈ p
⊢ z + x - x ∈ p
[PROOFSTEP]
exact p.sub_mem hxz hx'
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semifield K
inst✝⁴ : Semifield K₂
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
a : K
h : a ≠ 0
⊢ range (a • f) = range f
[PROOFSTEP]
simpa only [range_eq_map] using Submodule.map_smul f _ a h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semifield K
inst✝⁴ : Semifield K₂
inst✝³ : AddCommMonoid V
inst✝² : Module K V
inst✝¹ : AddCommMonoid V₂
inst✝ : Module K V₂
f : V →ₗ[K] V₂
a : K
⊢ range (a • f) = ⨆ (_ : a ≠ 0), range f
[PROOFSTEP]
simpa only [range_eq_map] using Submodule.map_smul' f _ a
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
⊢ IsLinearMap R fun x => x.fst + x.snd
[PROOFSTEP]
apply IsLinearMap.mk
[GOAL]
case map_add
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
⊢ ∀ (x y : M × M), (x + y).fst + (x + y).snd = x.fst + x.snd + (y.fst + y.snd)
[PROOFSTEP]
intro x y
[GOAL]
case map_add
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
x y : M × M
⊢ (x + y).fst + (x + y).snd = x.fst + x.snd + (y.fst + y.snd)
[PROOFSTEP]
simp only [Prod.fst_add, Prod.snd_add]
[GOAL]
case map_add
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
x y : M × M
⊢ x.fst + y.fst + (x.snd + y.snd) = x.fst + x.snd + (y.fst + y.snd)
[PROOFSTEP]
abel
  -- Porting Note: was cc
[GOAL]
case map_add
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
x y : M × M
⊢ x.fst + y.fst + (x.snd + y.snd) = x.fst + x.snd + (y.fst + y.snd)
[PROOFSTEP]
abel
  -- Porting Note: was cc
[GOAL]
case map_smul
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
⊢ ∀ (c : R) (x : M × M), (c • x).fst + (c • x).snd = c • (x.fst + x.snd)
[PROOFSTEP]
intro x y
[GOAL]
case map_smul
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
x : R
y : M × M
⊢ (x • y).fst + (x • y).snd = x • (y.fst + y.snd)
[PROOFSTEP]
simp [smul_add]
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
R : Type u_20
M : Type u_21
inst✝² : Semiring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ IsLinearMap R fun x => x.fst - x.snd
[PROOFSTEP]
apply IsLinearMap.mk
[GOAL]
case map_add
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
R : Type u_20
M : Type u_21
inst✝² : Semiring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ ∀ (x y : M × M), (x + y).fst - (x + y).snd = x.fst - x.snd + (y.fst - y.snd)
[PROOFSTEP]
intro x y
[GOAL]
case map_add
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
R : Type u_20
M : Type u_21
inst✝² : Semiring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M × M
⊢ (x + y).fst - (x + y).snd = x.fst - x.snd + (y.fst - y.snd)
[PROOFSTEP]
rw [Prod.fst_add, Prod.snd_add]
[GOAL]
case map_add
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
R : Type u_20
M : Type u_21
inst✝² : Semiring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M × M
⊢ x.fst + y.fst - (x.snd + y.snd) = x.fst - x.snd + (y.fst - y.snd)
[PROOFSTEP]
abel
[GOAL]
case map_add
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
R : Type u_20
M : Type u_21
inst✝² : Semiring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M × M
⊢ x.fst + y.fst - (x.snd + y.snd) = x.fst - x.snd + (y.fst - y.snd)
[PROOFSTEP]
abel
[GOAL]
case map_smul
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
R : Type u_20
M : Type u_21
inst✝² : Semiring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ ∀ (c : R) (x : M × M), (c • x).fst - (c • x).snd = c • (x.fst - x.snd)
[PROOFSTEP]
intro x y
[GOAL]
case map_smul
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M✝ : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
R : Type u_20
M : Type u_21
inst✝² : Semiring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x : R
y : M × M
⊢ (x • y).fst - (x • y).snd = x • (y.fst - y.snd)
[PROOFSTEP]
simp [smul_sub]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p p' : Submodule R M
q : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
⊢ range (Submodule.subtype p) = p
[PROOFSTEP]
simpa using map_comap_subtype p ⊤
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p p'✝ : Submodule R M
q : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
p' : Submodule R { x // x ∈ p }
⊢ map (Submodule.subtype p) p' ≤ p
[PROOFSTEP]
simpa using (map_le_range : map p.subtype p' ≤ range p.subtype)
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p p' : Submodule R M
q : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
⊢ map (Submodule.subtype p) ⊤ = p
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p✝ p'✝ : Submodule R M
q : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
p p' : Submodule R M
⊢ map (Submodule.subtype p) ⊤ ≤ p' ↔ p ≤ p'
[PROOFSTEP]
rw [map_subtype_top]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p✝ p'✝ : Submodule R M
q : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
p p' : Submodule R M
h : p ≤ p'
⊢ ker (ofLe h) = ⊥
[PROOFSTEP]
rw [ofLe, ker_codRestrict, ker_subtype]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p✝ p' : Submodule R M
q✝ : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
p q : Submodule R M
h : p ≤ q
⊢ range (ofLe h) = comap (Submodule.subtype q) p
[PROOFSTEP]
rw [← map_top, ofLe, LinearMap.map_codRestrict, map_top, range_subtype]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p✝ p'✝ : Submodule R M
q : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
p p' : Submodule R M
h : p ≤ p'
⊢ map (Submodule.subtype p') (range (ofLe h)) = p
[PROOFSTEP]
simp [range_ofLe, map_comap_eq, h]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p✝ p' : Submodule R M
q✝ : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
p q : Submodule R M
⊢ Disjoint p q ↔ comap (Submodule.subtype p) q = ⊥
[PROOFSTEP]
rw [← (map_injective_of_injective (show Injective p.subtype from Subtype.coe_injective)).eq_iff, map_comap_subtype,
  map_bot, disjoint_iff]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p p'✝ : Submodule R M
q : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
p' : Submodule R { x // x ∈ p }
⊢ Injective ↑(Submodule.subtype p)
[PROOFSTEP]
exact Subtype.val_injective
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p p' : Submodule R M
q✝ : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
x✝ : { p' // p' ≤ p }
q : Submodule R M
hq : q ≤ p
⊢ ↑((fun p' => { val := map (Submodule.subtype p) p', property := (_ : map (Submodule.subtype p) p' ≤ p) })
        ((fun q => comap (Submodule.subtype p) ↑q) { val := q, property := hq })) =
    ↑{ val := q, property := hq }
[PROOFSTEP]
simp [map_comap_subtype p, inf_of_le_right hq]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p p' : Submodule R M
q : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
p₁ p₂ : Submodule R { x // x ∈ p }
⊢ ↑(↑{ toFun := fun p' => { val := map (Submodule.subtype p) p', property := (_ : map (Submodule.subtype p) p' ≤ p) },
              invFun := fun q => comap (Submodule.subtype p) ↑q,
              left_inv :=
                (_ :
                  ∀ (p' : Submodule R { x // x ∈ p }), comap (Submodule.subtype p) (map (Submodule.subtype p) p') = p'),
              right_inv :=
                (_ :
                  ∀ (x : { p' // p' ≤ p }),
                    (fun p' =>
                          { val := map (Submodule.subtype p) p', property := (_ : map (Submodule.subtype p) p' ≤ p) })
                        ((fun q => comap (Submodule.subtype p) ↑q) x) =
                      x) }
          p₁) ≤
      ↑(↑{
              toFun := fun p' =>
                { val := map (Submodule.subtype p) p', property := (_ : map (Submodule.subtype p) p' ≤ p) },
              invFun := fun q => comap (Submodule.subtype p) ↑q,
              left_inv :=
                (_ :
                  ∀ (p' : Submodule R { x // x ∈ p }), comap (Submodule.subtype p) (map (Submodule.subtype p) p') = p'),
              right_inv :=
                (_ :
                  ∀ (x : { p' // p' ≤ p }),
                    (fun p' =>
                          { val := map (Submodule.subtype p) p', property := (_ : map (Submodule.subtype p) p' ≤ p) })
                        ((fun q => comap (Submodule.subtype p) ↑q) x) =
                      x) }
          p₂) ↔
    p₁ ≤ p₂
[PROOFSTEP]
dsimp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁵ : Semiring R
inst✝⁴ : Semiring R₂
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
p p' : Submodule R M
q : Submodule R₂ M₂
τ₁₂ : R →+* R₂
F : Type u_20
sc : SemilinearMapClass F τ₁₂ M M₂
p₁ p₂ : Submodule R { x // x ∈ p }
⊢ map (Submodule.subtype p) p₁ ≤ map (Submodule.subtype p) p₂ ↔ p₁ ≤ p₂
[PROOFSTEP]
rw [map_le_iff_le_comap, comap_map_eq_of_injective (show Injective p.subtype from Subtype.coe_injective) p₂]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : AddCommMonoid M₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₛₗ[τ₁₂] M₂
h : ∀ (u v : { x // x ∈ ker f } →ₗ[R] M), comp f u = comp f v → u = v
⊢ ker f = ⊥
[PROOFSTEP]
have h₁ : f.comp (0 : ker f →ₗ[R] M) = 0 := comp_zero _
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : AddCommMonoid M₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₛₗ[τ₁₂] M₂
h : ∀ (u v : { x // x ∈ ker f } →ₗ[R] M), comp f u = comp f v → u = v
h₁ : comp f 0 = 0
⊢ ker f = ⊥
[PROOFSTEP]
rw [← Submodule.range_subtype (ker f), ← h 0 f.ker.subtype (Eq.trans h₁ (comp_ker_subtype f).symm)]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : AddCommMonoid M₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₛₗ[τ₁₂] M₂
h : ∀ (u v : { x // x ∈ ker f } →ₗ[R] M), comp f u = comp f v → u = v
h₁ : comp f 0 = 0
⊢ range 0 = ⊥
[PROOFSTEP]
exact range_zero
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹² : Semiring R
inst✝¹¹ : Semiring R₂
inst✝¹⁰ : Semiring R₃
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M
inst✝⁵ : Module R₂ M₂
inst✝⁴ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝³ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
inst✝² : RingHomSurjective τ₁₂
inst✝¹ : RingHomSurjective τ₂₃
inst✝ : RingHomSurjective τ₁₃
f : M →ₛₗ[τ₁₂] M₂
g : M₂ →ₛₗ[τ₂₃] M₃
hf : range f = ⊤
⊢ range (comp g f) = range g
[PROOFSTEP]
rw [range_comp, hf, Submodule.map_top]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : AddCommMonoid M₃
inst✝³ : Module R M
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
f : M →ₛₗ[τ₁₂] M₂
g : M₂ →ₛₗ[τ₂₃] M₃
hg : ker g = ⊥
⊢ ker (comp g f) = ker f
[PROOFSTEP]
rw [ker_comp, hg, Submodule.comap_bot]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
x : M'
⊢ x ∈ submoduleImage ϕ N ↔ ∃ y yO x_1, ↑ϕ { val := y, property := yO } = x
[PROOFSTEP]
refine' Submodule.mem_map.trans ⟨_, _⟩
[GOAL]
case refine'_1
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
x : M'
⊢ (∃ y, y ∈ Submodule.comap (Submodule.subtype O) N ∧ ↑ϕ y = x) → ∃ y yO x_1, ↑ϕ { val := y, property := yO } = x
[PROOFSTEP]
simp_rw [Submodule.mem_comap]
[GOAL]
case refine'_2
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
x : M'
⊢ (∃ y yO x_1, ↑ϕ { val := y, property := yO } = x) → ∃ y, y ∈ Submodule.comap (Submodule.subtype O) N ∧ ↑ϕ y = x
[PROOFSTEP]
simp_rw [Submodule.mem_comap]
[GOAL]
case refine'_1
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
x : M'
⊢ (∃ y, ↑(Submodule.subtype O) y ∈ N ∧ ↑ϕ y = x) → ∃ y h h_1, ↑ϕ { val := y, property := (_ : y ∈ O) } = x
[PROOFSTEP]
rintro ⟨⟨y, yO⟩, yN : y ∈ N, h⟩
[GOAL]
case refine'_1.intro.mk.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
x : M'
y : M
yO : y ∈ O
yN : y ∈ N
h : ↑ϕ { val := y, property := yO } = x
⊢ ∃ y h h_1, ↑ϕ { val := y, property := (_ : y ∈ O) } = x
[PROOFSTEP]
exact ⟨y, yO, yN, h⟩
[GOAL]
case refine'_2
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
x : M'
⊢ (∃ y h h_1, ↑ϕ { val := y, property := (_ : y ∈ O) } = x) → ∃ y, ↑(Submodule.subtype O) y ∈ N ∧ ↑ϕ y = x
[PROOFSTEP]
rintro ⟨y, yO, yN, h⟩
[GOAL]
case refine'_2.intro.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
x : M'
y : M
yO : y ∈ O
yN : y ∈ N
h : ↑ϕ { val := y, property := (_ : y ∈ O) } = x
⊢ ∃ y, ↑(Submodule.subtype O) y ∈ N ∧ ↑ϕ y = x
[PROOFSTEP]
exact ⟨⟨y, yO⟩, yN, h⟩
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
hNO : N ≤ O
x : M'
⊢ x ∈ submoduleImage ϕ N ↔ ∃ y yN, ↑ϕ { val := y, property := (_ : y ∈ O) } = x
[PROOFSTEP]
refine' mem_submoduleImage.trans ⟨_, _⟩
[GOAL]
case refine'_1
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
hNO : N ≤ O
x : M'
⊢ (∃ y yO x_1, ↑ϕ { val := y, property := yO } = x) → ∃ y yN, ↑ϕ { val := y, property := (_ : y ∈ O) } = x
[PROOFSTEP]
rintro ⟨y, yO, yN, h⟩
[GOAL]
case refine'_1.intro.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
hNO : N ≤ O
x : M'
y : M
yO : y ∈ O
yN : y ∈ N
h : ↑ϕ { val := y, property := yO } = x
⊢ ∃ y yN, ↑ϕ { val := y, property := (_ : y ∈ O) } = x
[PROOFSTEP]
exact ⟨y, yN, h⟩
[GOAL]
case refine'_2
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
hNO : N ≤ O
x : M'
⊢ (∃ y yN, ↑ϕ { val := y, property := (_ : y ∈ O) } = x) → ∃ y yO x_1, ↑ϕ { val := y, property := yO } = x
[PROOFSTEP]
rintro ⟨y, yN, h⟩
[GOAL]
case refine'_2.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
hNO : N ≤ O
x : M'
y : M
yN : y ∈ N
h : ↑ϕ { val := y, property := (_ : y ∈ O) } = x
⊢ ∃ y yO x_1, ↑ϕ { val := y, property := yO } = x
[PROOFSTEP]
exact ⟨y, hNO yN, yN, h⟩
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M'✝ : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_20
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
O : Submodule R M
ϕ : { x // x ∈ O } →ₗ[R] M'
N : Submodule R M
hNO : N ≤ O
⊢ submoduleImage ϕ N = range (comp ϕ (Submodule.ofLe hNO))
[PROOFSTEP]
rw [submoduleImage, range_comp, Submodule.range_ofLe]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
f : M →ₗ[R] M₂
⊢ range (rangeRestrict f) = ⊤
[PROOFSTEP]
simp [f.range_codRestrict _]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : Subsingleton R
inst✝ : Subsingleton R₂
⊢ Unique (M ≃ₛₗ[σ₁₂] M₂)
[PROOFSTEP]
haveI := Module.subsingleton R M
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : Subsingleton R
inst✝ : Subsingleton R₂
this : Subsingleton M
⊢ Unique (M ≃ₛₗ[σ₁₂] M₂)
[PROOFSTEP]
haveI := Module.subsingleton R₂ M₂
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
inst✝³ : RingHomInvPair σ₁₂ σ₂₁
inst✝² : RingHomInvPair σ₂₁ σ₁₂
inst✝¹ : Subsingleton R
inst✝ : Subsingleton R₂
this✝ : Subsingleton M
this : Subsingleton M₂
⊢ Unique (M ≃ₛₗ[σ₁₂] M₂)
[PROOFSTEP]
infer_instance
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
⊢ ↑(Submodule.map (↑e) p) = ↑(Submodule.comap (↑(symm e)) p)
[PROOFSTEP]
simp [e.image_eq_preimage]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
x : { x // x ∈ p }
⊢ ↑x ∈ ↑p ∧ ↑↑e ↑x = ↑(LinearMap.domRestrict (↑e) p) x
[PROOFSTEP]
simp only [LinearMap.domRestrict_apply, eq_self_iff_true, and_true_iff, SetLike.coe_mem, SetLike.mem_coe]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
src✝ : { x // x ∈ p } →ₛₗ[σ₁₂] { x // x ∈ Submodule.map (↑e) p } :=
  LinearMap.codRestrict (Submodule.map (↑e) p) (LinearMap.domRestrict (↑e) p)
    (_ : ∀ (x : { x // x ∈ p }), ∃ a, a ∈ ↑p ∧ ↑↑e a = ↑(LinearMap.domRestrict (↑e) p) x)
y : { x // x ∈ Submodule.map (↑e) p }
⊢ ↑↑(symm e) ↑y ∈ p
[PROOFSTEP]
rcases y with ⟨y', hy⟩
[GOAL]
case mk
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
src✝ : { x // x ∈ p } →ₛₗ[σ₁₂] { x // x ∈ Submodule.map (↑e) p } :=
  LinearMap.codRestrict (Submodule.map (↑e) p) (LinearMap.domRestrict (↑e) p)
    (_ : ∀ (x : { x // x ∈ p }), ∃ a, a ∈ ↑p ∧ ↑↑e a = ↑(LinearMap.domRestrict (↑e) p) x)
y' : M₂
hy : y' ∈ Submodule.map (↑e) p
⊢ ↑↑(symm e) ↑{ val := y', property := hy } ∈ p
[PROOFSTEP]
rw [Submodule.mem_map] at hy 
[GOAL]
case mk
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
src✝ : { x // x ∈ p } →ₛₗ[σ₁₂] { x // x ∈ Submodule.map (↑e) p } :=
  LinearMap.codRestrict (Submodule.map (↑e) p) (LinearMap.domRestrict (↑e) p)
    (_ : ∀ (x : { x // x ∈ p }), ∃ a, a ∈ ↑p ∧ ↑↑e a = ↑(LinearMap.domRestrict (↑e) p) x)
y' : M₂
hy✝ : y' ∈ Submodule.map (↑e) p
hy : ∃ y, y ∈ p ∧ ↑↑e y = y'
⊢ ↑↑(symm e) ↑{ val := y', property := hy✝ } ∈ p
[PROOFSTEP]
rcases hy with ⟨x, hx, hxy⟩
[GOAL]
case mk.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
src✝ : { x // x ∈ p } →ₛₗ[σ₁₂] { x // x ∈ Submodule.map (↑e) p } :=
  LinearMap.codRestrict (Submodule.map (↑e) p) (LinearMap.domRestrict (↑e) p)
    (_ : ∀ (x : { x // x ∈ p }), ∃ a, a ∈ ↑p ∧ ↑↑e a = ↑(LinearMap.domRestrict (↑e) p) x)
y' : M₂
hy : y' ∈ Submodule.map (↑e) p
x : M
hx : x ∈ p
hxy : ↑↑e x = y'
⊢ ↑↑(symm e) ↑{ val := y', property := hy } ∈ p
[PROOFSTEP]
subst hxy
[GOAL]
case mk.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
src✝ : { x // x ∈ p } →ₛₗ[σ₁₂] { x // x ∈ Submodule.map (↑e) p } :=
  LinearMap.codRestrict (Submodule.map (↑e) p) (LinearMap.domRestrict (↑e) p)
    (_ : ∀ (x : { x // x ∈ p }), ∃ a, a ∈ ↑p ∧ ↑↑e a = ↑(LinearMap.domRestrict (↑e) p) x)
x : M
hx : x ∈ p
hy : ↑↑e x ∈ Submodule.map (↑e) p
⊢ ↑↑(symm e) ↑{ val := ↑↑e x, property := hy } ∈ p
[PROOFSTEP]
simp only [symm_apply_apply, Submodule.coe_mk, coe_coe, hx]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
src✝ : { x // x ∈ p } →ₛₗ[σ₁₂] { x // x ∈ Submodule.map (↑e) p } :=
  LinearMap.codRestrict (Submodule.map (↑e) p) (LinearMap.domRestrict (↑e) p)
    (_ : ∀ (x : { x // x ∈ p }), ∃ a, a ∈ ↑p ∧ ↑↑e a = ↑(LinearMap.domRestrict (↑e) p) x)
x : { x // x ∈ p }
⊢ (fun y => { val := ↑↑(symm e) ↑y, property := (_ : ↑↑(symm e) ↑y ∈ p) })
      (AddHom.toFun
        { toAddHom := src✝.toAddHom,
            map_smul' :=
              (_ :
                ∀ (r : R) (x : { x // x ∈ p }),
                  AddHom.toFun src✝.toAddHom (r • x) = ↑σ₁₂ r • AddHom.toFun src✝.toAddHom x) }.toAddHom
        x) =
    x
[PROOFSTEP]
simp only [LinearMap.domRestrict_apply, LinearMap.codRestrict_apply, LinearMap.toFun_eq_coe, LinearEquiv.coe_coe,
  LinearEquiv.symm_apply_apply, SetLike.eta]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
src✝ : { x // x ∈ p } →ₛₗ[σ₁₂] { x // x ∈ Submodule.map (↑e) p } :=
  LinearMap.codRestrict (Submodule.map (↑e) p) (LinearMap.domRestrict (↑e) p)
    (_ : ∀ (x : { x // x ∈ p }), ∃ a, a ∈ ↑p ∧ ↑↑e a = ↑(LinearMap.domRestrict (↑e) p) x)
y : { x // x ∈ Submodule.map (↑e) p }
⊢ AddHom.toFun
      { toAddHom := src✝.toAddHom,
          map_smul' :=
            (_ :
              ∀ (r : R) (x : { x // x ∈ p }),
                AddHom.toFun src✝.toAddHom (r • x) = ↑σ₁₂ r • AddHom.toFun src✝.toAddHom x) }.toAddHom
      ((fun y => { val := ↑↑(symm e) ↑y, property := (_ : ↑↑(symm e) ↑y ∈ p) }) y) =
    y
[PROOFSTEP]
apply SetCoe.ext
[GOAL]
case a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
e e' : M ≃ₛₗ[σ₁₂] M₂
p : Submodule R M
src✝ : { x // x ∈ p } →ₛₗ[σ₁₂] { x // x ∈ Submodule.map (↑e) p } :=
  LinearMap.codRestrict (Submodule.map (↑e) p) (LinearMap.domRestrict (↑e) p)
    (_ : ∀ (x : { x // x ∈ p }), ∃ a, a ∈ ↑p ∧ ↑↑e a = ↑(LinearMap.domRestrict (↑e) p) x)
y : { x // x ∈ Submodule.map (↑e) p }
⊢ ↑(AddHom.toFun
        { toAddHom := src✝.toAddHom,
            map_smul' :=
              (_ :
                ∀ (r : R) (x : { x // x ∈ p }),
                  AddHom.toFun src✝.toAddHom (r • x) = ↑σ₁₂ r • AddHom.toFun src✝.toAddHom x) }.toAddHom
        ((fun y => { val := ↑↑(symm e) ↑y, property := (_ : ↑↑(symm e) ↑y ∈ p) }) y)) =
    ↑y
[PROOFSTEP]
simp only [LinearMap.domRestrict_apply, LinearMap.codRestrict_apply, LinearMap.toFun_eq_coe, LinearEquiv.coe_coe,
  LinearEquiv.apply_symm_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
src✝ : (V × V₂ → R) ≃ (V → V₂ → R) := Equiv.curry V V₂ R
x✝¹ x✝ : V × V₂ → R
⊢ Equiv.toFun src✝ (x✝¹ + x✝) = Equiv.toFun src✝ x✝¹ + Equiv.toFun src✝ x✝
[PROOFSTEP]
ext
[GOAL]
case h.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
src✝ : (V × V₂ → R) ≃ (V → V₂ → R) := Equiv.curry V V₂ R
x✝³ x✝² : V × V₂ → R
x✝¹ : V
x✝ : V₂
⊢ Equiv.toFun src✝ (x✝³ + x✝²) x✝¹ x✝ = (Equiv.toFun src✝ x✝³ + Equiv.toFun src✝ x✝²) x✝¹ x✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
src✝ : (V × V₂ → R) ≃ (V → V₂ → R) := Equiv.curry V V₂ R
x✝¹ : R
x✝ : V × V₂ → R
⊢ AddHom.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ : ∀ (x x_1 : V × V₂ → R), Equiv.toFun src✝ (x + x_1) = Equiv.toFun src✝ x + Equiv.toFun src✝ x_1) }
      (x✝¹ • x✝) =
    ↑(RingHom.id R) x✝¹ •
      AddHom.toFun
        { toFun := src✝.toFun,
          map_add' :=
            (_ : ∀ (x x_1 : V × V₂ → R), Equiv.toFun src✝ (x + x_1) = Equiv.toFun src✝ x + Equiv.toFun src✝ x_1) }
        x✝
[PROOFSTEP]
ext
[GOAL]
case h.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁷ : Semiring R
inst✝⁶ : Semiring R₂
inst✝⁵ : Semiring R₃
inst✝⁴ : Semiring R₄
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : AddCommMonoid M₄
src✝ : (V × V₂ → R) ≃ (V → V₂ → R) := Equiv.curry V V₂ R
x✝³ : R
x✝² : V × V₂ → R
x✝¹ : V
x✝ : V₂
⊢ AddHom.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ : ∀ (x x_1 : V × V₂ → R), Equiv.toFun src✝ (x + x_1) = Equiv.toFun src✝ x + Equiv.toFun src✝ x_1) }
      (x✝³ • x✝²) x✝¹ x✝ =
    (↑(RingHom.id R) x✝³ •
        AddHom.toFun
          { toFun := src✝.toFun,
            map_add' :=
              (_ : ∀ (x x_1 : V × V₂ → R), Equiv.toFun src✝ (x + x_1) = Equiv.toFun src✝ x + Equiv.toFun src✝ x_1) }
          x✝²)
      x✝¹ x✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁸ : Semiring R
inst✝⁷ : Semiring R₂
inst✝⁶ : Semiring R₃
inst✝⁵ : Semiring R₄
inst✝⁴ : AddCommMonoid M
inst✝³ : AddCommMonoid M₂
inst✝² : AddCommMonoid M₃
inst✝¹ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
σ₃₂ : R₃ →+* R₂
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₁] M
e : M ≃ₛₗ[σ₁₂] M₂
h : M₂ →ₛₗ[σ₂₃] M₃
e'' : M₂ ≃ₛₗ[σ₂₃] M₃
p q : Submodule R M
⊢ ofEq p p (_ : p = p) = refl R { x // x ∈ p }
[PROOFSTEP]
ext
[GOAL]
case h.a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁸ : Semiring R
inst✝⁷ : Semiring R₂
inst✝⁶ : Semiring R₃
inst✝⁵ : Semiring R₄
inst✝⁴ : AddCommMonoid M
inst✝³ : AddCommMonoid M₂
inst✝² : AddCommMonoid M₃
inst✝¹ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
σ₃₂ : R₃ →+* R₂
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₁] M
e : M ≃ₛₗ[σ₁₂] M₂
h : M₂ →ₛₗ[σ₂₃] M₃
e'' : M₂ ≃ₛₗ[σ₂₃] M₃
p q : Submodule R M
x✝ : { x // x ∈ p }
⊢ ↑(↑(ofEq p p (_ : p = p)) x✝) = ↑(↑(refl R { x // x ∈ p }) x✝)
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : Semiring R₄
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : AddCommMonoid M₃
inst✝³ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
σ₃₂ : R₃ →+* R₂
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₁] M
e : M ≃ₛₗ[σ₁₂] M₂
h : M₂ →ₛₗ[σ₂₃] M₃
e'' : M₂ ≃ₛₗ[σ₂₃] M₃
p q : Submodule R M
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
f : M ≃ₛₗ[σ₁₂] M₂
U : Submodule R₂ M₂
⊢ ↑(ofSubmodule' f U) =
    LinearMap.codRestrict U (LinearMap.domRestrict (↑f) (Submodule.comap (↑f) U))
      (_ : ∀ (x : { x // x ∈ Submodule.comap (↑f) U }), ↑x ∈ Submodule.comap (↑f) U)
[PROOFSTEP]
ext
[GOAL]
case h.a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : Semiring R₄
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : AddCommMonoid M₃
inst✝³ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
σ₃₂ : R₃ →+* R₂
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
f✝ : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₁] M
e : M ≃ₛₗ[σ₁₂] M₂
h : M₂ →ₛₗ[σ₂₃] M₃
e'' : M₂ ≃ₛₗ[σ₂₃] M₃
p q : Submodule R M
inst✝¹ : Module R M
inst✝ : Module R₂ M₂
f : M ≃ₛₗ[σ₁₂] M₂
U : Submodule R₂ M₂
x✝ : { x // x ∈ Submodule.comap (↑f) U }
⊢ ↑(↑↑(ofSubmodule' f U) x✝) =
    ↑(↑(LinearMap.codRestrict U (LinearMap.domRestrict (↑f) (Submodule.comap (↑f) U))
            (_ : ∀ (x : { x // x ∈ Submodule.comap (↑f) U }), ↑x ∈ Submodule.comap (↑f) U))
        x✝)
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : Semiring R₄
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
σ₃₂ : R₃ →+* R₂
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₁] M
e✝ : M ≃ₛₗ[σ₁₂] M₂
h : M₂ →ₛₗ[σ₂₃] M₃
e'' : M₂ ≃ₛₗ[σ₂₃] M₃
p q : Submodule R M
inst✝ : Module R₂ M₂
e : { x // x ∈ p } ≃ₛₗ[σ₁₂] { x // x ∈ ⊥ }
⊢ p = ⊥
[PROOFSTEP]
refine' bot_unique (SetLike.le_def.2 fun b hb => (Submodule.mem_bot R).2 _)
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : Semiring R₄
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
σ₃₂ : R₃ →+* R₂
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₁] M
e✝ : M ≃ₛₗ[σ₁₂] M₂
h : M₂ →ₛₗ[σ₂₃] M₃
e'' : M₂ ≃ₛₗ[σ₂₃] M₃
p q : Submodule R M
inst✝ : Module R₂ M₂
e : { x // x ∈ p } ≃ₛₗ[σ₁₂] { x // x ∈ ⊥ }
b : M
hb : b ∈ p
⊢ b = 0
[PROOFSTEP]
rw [← p.mk_eq_zero hb, ← e.map_eq_zero_iff]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : Semiring R₄
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
σ₃₂ : R₃ →+* R₂
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
f : M →ₛₗ[σ₁₂] M₂
g : M₂ →ₛₗ[σ₂₁] M
e✝ : M ≃ₛₗ[σ₁₂] M₂
h : M₂ →ₛₗ[σ₂₃] M₃
e'' : M₂ ≃ₛₗ[σ₂₃] M₃
p q : Submodule R M
inst✝ : Module R₂ M₂
e : { x // x ∈ p } ≃ₛₗ[σ₁₂] { x // x ∈ ⊥ }
b : M
hb : b ∈ p
⊢ ↑e { val := b, property := hb } = 0
[PROOFSTEP]
apply Submodule.eq_zero_of_bot_submodule
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : Semiring R₃
inst✝⁷ : Semiring R₄
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : AddCommMonoid M₃
inst✝³ : AddCommMonoid M₄
module_M : Module R M
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
σ₁₂ : R →+* R₂
σ₂₁ : R₂ →+* R
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
σ₃₂ : R₃ →+* R₂
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
f : M →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₁] M
e : M ≃ₛₗ[σ₁₂] M₂
h✝ : M₂ →ₛₗ[σ₂₃] M₃
e'' : M₂ ≃ₛₗ[σ₂₃] M₃
p q : Submodule R M
inst✝¹ : RingHomInvPair σ₁₂ σ₂₁
inst✝ : RingHomInvPair σ₂₁ σ₁₂
g : M₂ → M
h : LeftInverse g ↑f
src✝ : M →ₛₗ[σ₁₂] { x // x ∈ LinearMap.range f } := LinearMap.rangeRestrict f
x : { x // x ∈ LinearMap.range f }
x' : M
hx' : ↑f x' = ↑x
⊢ ↑f (g ↑x) = ↑x
[PROOFSTEP]
rw [← hx', h x']
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x : M
⊢ ↑(neg R) x = -x
[PROOFSTEP]
simp
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁✝ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁵ : CommSemiring R✝
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : Module R✝ M
inst✝¹⁰ : Module R✝ M₂✝
inst✝⁹ : Module R✝ M₃
R : Type ?u.2478657
M₁ : Type ?u.2478660
M₂ : Type ?u.2478663
M₂₁ : Type ?u.2478666
M₂₂ : Type ?u.2478669
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₂₁
inst✝⁴ : AddCommMonoid M₂₂
inst✝³ : Module R M₁
inst✝² : Module R M₂
inst✝¹ : Module R M₂₁
inst✝ : Module R M₂₂
e₁ : M₁ ≃ₗ[R] M₂
e₂ : M₂₁ ≃ₗ[R] M₂₂
f g : M₁ →ₗ[R] M₂₁
⊢ (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
      (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g
[PROOFSTEP]
ext x
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁✝ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁵ : CommSemiring R✝
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : Module R✝ M
inst✝¹⁰ : Module R✝ M₂✝
inst✝⁹ : Module R✝ M₃
R : Type ?u.2478657
M₁ : Type ?u.2478660
M₂ : Type ?u.2478663
M₂₁ : Type ?u.2478666
M₂₂ : Type ?u.2478669
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₂₁
inst✝⁴ : AddCommMonoid M₂₂
inst✝³ : Module R M₁
inst✝² : Module R M₂
inst✝¹ : Module R M₂₁
inst✝ : Module R M₂₂
e₁ : M₁ ≃ₗ[R] M₂
e₂ : M₂₁ ≃ₗ[R] M₂₂
f g : M₁ →ₗ[R] M₂₁
x : M₂
⊢ ↑((fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g)) x =
    ↑((fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
          (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g)
      x
[PROOFSTEP]
simp only [map_add, add_apply, Function.comp_apply, coe_comp, coe_coe]
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁✝ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁵ : CommSemiring R✝
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : Module R✝ M
inst✝¹⁰ : Module R✝ M₂✝
inst✝⁹ : Module R✝ M₃
R : Type ?u.2478657
M₁ : Type ?u.2478660
M₂ : Type ?u.2478663
M₂₁ : Type ?u.2478666
M₂₂ : Type ?u.2478669
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₂₁
inst✝⁴ : AddCommMonoid M₂₂
inst✝³ : Module R M₁
inst✝² : Module R M₂
inst✝¹ : Module R M₂₁
inst✝ : Module R M₂₂
e₁ : M₁ ≃ₗ[R] M₂
e₂ : M₂₁ ≃ₗ[R] M₂₂
c : R
f : M₁ →ₗ[R] M₂₁
⊢ AddHom.toFun
      { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
        map_add' :=
          (_ :
            ∀ (f g : M₁ →ₗ[R] M₂₁),
              (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                  (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
      (c • f) =
    ↑(RingHom.id R) c •
      AddHom.toFun
        { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
          map_add' :=
            (_ :
              ∀ (f g : M₁ →ₗ[R] M₂₁),
                (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                  (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
        f
[PROOFSTEP]
ext x
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁✝ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁵ : CommSemiring R✝
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : Module R✝ M
inst✝¹⁰ : Module R✝ M₂✝
inst✝⁹ : Module R✝ M₃
R : Type ?u.2478657
M₁ : Type ?u.2478660
M₂ : Type ?u.2478663
M₂₁ : Type ?u.2478666
M₂₂ : Type ?u.2478669
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₂₁
inst✝⁴ : AddCommMonoid M₂₂
inst✝³ : Module R M₁
inst✝² : Module R M₂
inst✝¹ : Module R M₂₁
inst✝ : Module R M₂₂
e₁ : M₁ ≃ₗ[R] M₂
e₂ : M₂₁ ≃ₗ[R] M₂₂
c : R
f : M₁ →ₗ[R] M₂₁
x : M₂
⊢ ↑(AddHom.toFun
          { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
            map_add' :=
              (_ :
                ∀ (f g : M₁ →ₗ[R] M₂₁),
                  (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                      (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
          (c • f))
      x =
    ↑(↑(RingHom.id R) c •
          AddHom.toFun
            { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
              map_add' :=
                (_ :
                  ∀ (f g : M₁ →ₗ[R] M₂₁),
                    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                      (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                        (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
            f)
      x
[PROOFSTEP]
simp only [smul_apply, Function.comp_apply, coe_comp, map_smulₛₗ e₂, coe_coe]
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁✝ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁵ : CommSemiring R✝
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : Module R✝ M
inst✝¹⁰ : Module R✝ M₂✝
inst✝⁹ : Module R✝ M₃
R : Type ?u.2478657
M₁ : Type ?u.2478660
M₂ : Type ?u.2478663
M₂₁ : Type ?u.2478666
M₂₂ : Type ?u.2478669
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₂₁
inst✝⁴ : AddCommMonoid M₂₂
inst✝³ : Module R M₁
inst✝² : Module R M₂
inst✝¹ : Module R M₂₁
inst✝ : Module R M₂₂
e₁ : M₁ ≃ₗ[R] M₂
e₂ : M₂₁ ≃ₗ[R] M₂₂
f : M₁ →ₗ[R] M₂₁
⊢ (fun f => LinearMap.comp (↑(symm e₂)) (LinearMap.comp f ↑e₁))
      (AddHom.toFun
        {
            toAddHom :=
              { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                map_add' :=
                  (_ :
                    ∀ (f g : M₁ →ₗ[R] M₂₁),
                      (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                        (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                          (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) },
            map_smul' :=
              (_ :
                ∀ (c : R) (f : M₁ →ₗ[R] M₂₁),
                  AddHom.toFun
                      { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                        map_add' :=
                          (_ :
                            ∀ (f g : M₁ →ₗ[R] M₂₁),
                              (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                                (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                                  (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
                      (c • f) =
                    ↑(RingHom.id R) c •
                      AddHom.toFun
                        { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                          map_add' :=
                            (_ :
                              ∀ (f g : M₁ →ₗ[R] M₂₁),
                                (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                                  (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                                    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
                        f) }.toAddHom
        f) =
    f
[PROOFSTEP]
ext x
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁✝ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁵ : CommSemiring R✝
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : Module R✝ M
inst✝¹⁰ : Module R✝ M₂✝
inst✝⁹ : Module R✝ M₃
R : Type ?u.2478657
M₁ : Type ?u.2478660
M₂ : Type ?u.2478663
M₂₁ : Type ?u.2478666
M₂₂ : Type ?u.2478669
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₂₁
inst✝⁴ : AddCommMonoid M₂₂
inst✝³ : Module R M₁
inst✝² : Module R M₂
inst✝¹ : Module R M₂₁
inst✝ : Module R M₂₂
e₁ : M₁ ≃ₗ[R] M₂
e₂ : M₂₁ ≃ₗ[R] M₂₂
f : M₁ →ₗ[R] M₂₁
x : M₁
⊢ ↑((fun f => LinearMap.comp (↑(symm e₂)) (LinearMap.comp f ↑e₁))
          (AddHom.toFun
            {
                toAddHom :=
                  { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                    map_add' :=
                      (_ :
                        ∀ (f g : M₁ →ₗ[R] M₂₁),
                          (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                            (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                              (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) },
                map_smul' :=
                  (_ :
                    ∀ (c : R) (f : M₁ →ₗ[R] M₂₁),
                      AddHom.toFun
                          { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                            map_add' :=
                              (_ :
                                ∀ (f g : M₁ →ₗ[R] M₂₁),
                                  (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                                    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                                      (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
                          (c • f) =
                        ↑(RingHom.id R) c •
                          AddHom.toFun
                            { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                              map_add' :=
                                (_ :
                                  ∀ (f g : M₁ →ₗ[R] M₂₁),
                                    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                                      (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                                        (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
                            f) }.toAddHom
            f))
      x =
    ↑f x
[PROOFSTEP]
simp only [symm_apply_apply, Function.comp_apply, coe_comp, coe_coe]
[GOAL]
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁✝ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁵ : CommSemiring R✝
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : Module R✝ M
inst✝¹⁰ : Module R✝ M₂✝
inst✝⁹ : Module R✝ M₃
R : Type ?u.2478657
M₁ : Type ?u.2478660
M₂ : Type ?u.2478663
M₂₁ : Type ?u.2478666
M₂₂ : Type ?u.2478669
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₂₁
inst✝⁴ : AddCommMonoid M₂₂
inst✝³ : Module R M₁
inst✝² : Module R M₂
inst✝¹ : Module R M₂₁
inst✝ : Module R M₂₂
e₁ : M₁ ≃ₗ[R] M₂
e₂ : M₂₁ ≃ₗ[R] M₂₂
f : M₂ →ₗ[R] M₂₂
⊢ AddHom.toFun
      {
          toAddHom :=
            { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
              map_add' :=
                (_ :
                  ∀ (f g : M₁ →ₗ[R] M₂₁),
                    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                      (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                        (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) },
          map_smul' :=
            (_ :
              ∀ (c : R) (f : M₁ →ₗ[R] M₂₁),
                AddHom.toFun
                    { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                      map_add' :=
                        (_ :
                          ∀ (f g : M₁ →ₗ[R] M₂₁),
                            (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                              (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                                (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
                    (c • f) =
                  ↑(RingHom.id R) c •
                    AddHom.toFun
                      { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                        map_add' :=
                          (_ :
                            ∀ (f g : M₁ →ₗ[R] M₂₁),
                              (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                                (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                                  (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
                      f) }.toAddHom
      ((fun f => LinearMap.comp (↑(symm e₂)) (LinearMap.comp f ↑e₁)) f) =
    f
[PROOFSTEP]
ext x
[GOAL]
case h
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁✝ : Type u_11
M₂✝ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹⁵ : CommSemiring R✝
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid M₂✝
inst✝¹² : AddCommMonoid M₃
inst✝¹¹ : Module R✝ M
inst✝¹⁰ : Module R✝ M₂✝
inst✝⁹ : Module R✝ M₃
R : Type ?u.2478657
M₁ : Type ?u.2478660
M₂ : Type ?u.2478663
M₂₁ : Type ?u.2478666
M₂₂ : Type ?u.2478669
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₂₁
inst✝⁴ : AddCommMonoid M₂₂
inst✝³ : Module R M₁
inst✝² : Module R M₂
inst✝¹ : Module R M₂₁
inst✝ : Module R M₂₂
e₁ : M₁ ≃ₗ[R] M₂
e₂ : M₂₁ ≃ₗ[R] M₂₂
f : M₂ →ₗ[R] M₂₂
x : M₂
⊢ ↑(AddHom.toFun
          {
              toAddHom :=
                { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                  map_add' :=
                    (_ :
                      ∀ (f g : M₁ →ₗ[R] M₂₁),
                        (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                          (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                            (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) },
              map_smul' :=
                (_ :
                  ∀ (c : R) (f : M₁ →ₗ[R] M₂₁),
                    AddHom.toFun
                        { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                          map_add' :=
                            (_ :
                              ∀ (f g : M₁ →ₗ[R] M₂₁),
                                (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                                  (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                                    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
                        (c • f) =
                      ↑(RingHom.id R) c •
                        AddHom.toFun
                          { toFun := fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁)),
                            map_add' :=
                              (_ :
                                ∀ (f g : M₁ →ₗ[R] M₂₁),
                                  (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) (f + g) =
                                    (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) f +
                                      (fun f => LinearMap.comp (↑e₂) (LinearMap.comp f ↑(symm e₁))) g) }
                          f) }.toAddHom
          ((fun f => LinearMap.comp (↑(symm e₂)) (LinearMap.comp f ↑e₁)) f))
      x =
    ↑f x
[PROOFSTEP]
simp only [Function.comp_apply, apply_symm_apply, coe_comp, coe_coe]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂✝ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹² : CommSemiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : Module R M
inst✝⁷ : Module R M₂
inst✝⁶ : Module R M₃
N : Type u_20
N₂ : Type u_21
N₃ : Type u_22
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : AddCommMonoid N₃
inst✝² : Module R N
inst✝¹ : Module R N₂
inst✝ : Module R N₃
e₁ : M ≃ₗ[R] N
e₂ : M₂ ≃ₗ[R] N₂
e₃ : M₃ ≃ₗ[R] N₃
f : M →ₗ[R] M₂
g : M₂ →ₗ[R] M₃
⊢ ↑(arrowCongr e₁ e₃) (LinearMap.comp g f) = LinearMap.comp (↑(arrowCongr e₂ e₃) g) (↑(arrowCongr e₁ e₂) f)
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N✝ : Type u_15
N₂✝ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹² : CommSemiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : Module R M
inst✝⁷ : Module R M₂
inst✝⁶ : Module R M₃
N : Type u_20
N₂ : Type u_21
N₃ : Type u_22
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : AddCommMonoid N₃
inst✝² : Module R N
inst✝¹ : Module R N₂
inst✝ : Module R N₃
e₁ : M ≃ₗ[R] N
e₂ : M₂ ≃ₗ[R] N₂
e₃ : M₃ ≃ₗ[R] N₃
f : M →ₗ[R] M₂
g : M₂ →ₗ[R] M₃
x✝ : N
⊢ ↑(↑(arrowCongr e₁ e₃) (LinearMap.comp g f)) x✝ = ↑(LinearMap.comp (↑(arrowCongr e₂ e₃) g) (↑(arrowCongr e₁ e₂) f)) x✝
[PROOFSTEP]
simp only [symm_apply_apply, arrowCongr_apply, LinearMap.comp_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
e₁ : M ≃ₗ[R] M₂
e₂ : M₂ ≃ₗ[R] M₃
⊢ trans (conj e₁) (conj e₂) = conj (trans e₁ e₂)
[PROOFSTEP]
ext f x
[GOAL]
case h.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
e₁ : M ≃ₗ[R] M₂
e₂ : M₂ ≃ₗ[R] M₃
f : Module.End R M
x : M₃
⊢ ↑(↑(trans (conj e₁) (conj e₂)) f) x = ↑(↑(conj (trans e₁ e₂)) f) x
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
e : M ≃ₗ[R] M₂
⊢ ↑(conj e) LinearMap.id = LinearMap.id
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M
inst✝¹ : Module R M₂
inst✝ : Module R M₃
e : M ≃ₗ[R] M₂
x✝ : M₂
⊢ ↑(↑(conj e) LinearMap.id) x✝ = ↑LinearMap.id x✝
[PROOFSTEP]
simp [conj_apply]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
⊢ ∀ (c : { x // x ∈ q }), ↑(LinearMap.domRestrict (Submodule.subtype p) q) c ∈ map (Submodule.subtype p) q
[PROOFSTEP]
rintro ⟨x, hx⟩
[GOAL]
case mk
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
x : { x // x ∈ p }
hx : x ∈ q
⊢ ↑(LinearMap.domRestrict (Submodule.subtype p) q) { val := x, property := hx } ∈ map (Submodule.subtype p) q
[PROOFSTEP]
exact ⟨x, hx, rfl⟩
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
src✝ : { x // x ∈ q } →ₗ[R] { x // x ∈ map (Submodule.subtype p) q } :=
  LinearMap.codRestrict (map (Submodule.subtype p) q) (LinearMap.domRestrict (Submodule.subtype p) q)
    (_ : ∀ (c : { x // x ∈ q }), ↑(LinearMap.domRestrict (Submodule.subtype p) q) c ∈ map (Submodule.subtype p) q)
⊢ { x // x ∈ map (Submodule.subtype p) q } → { x // x ∈ q }
[PROOFSTEP]
rintro ⟨x, hx⟩
[GOAL]
case mk
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
src✝ : { x // x ∈ q } →ₗ[R] { x // x ∈ map (Submodule.subtype p) q } :=
  LinearMap.codRestrict (map (Submodule.subtype p) q) (LinearMap.domRestrict (Submodule.subtype p) q)
    (_ : ∀ (c : { x // x ∈ q }), ↑(LinearMap.domRestrict (Submodule.subtype p) q) c ∈ map (Submodule.subtype p) q)
x : M
hx : x ∈ map (Submodule.subtype p) q
⊢ { x // x ∈ q }
[PROOFSTEP]
refine' ⟨⟨x, _⟩, _⟩
[GOAL]
case mk.refine'_1
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
src✝ : { x // x ∈ q } →ₗ[R] { x // x ∈ map (Submodule.subtype p) q } :=
  LinearMap.codRestrict (map (Submodule.subtype p) q) (LinearMap.domRestrict (Submodule.subtype p) q)
    (_ : ∀ (c : { x // x ∈ q }), ↑(LinearMap.domRestrict (Submodule.subtype p) q) c ∈ map (Submodule.subtype p) q)
x : M
hx : x ∈ map (Submodule.subtype p) q
⊢ x ∈ p
[PROOFSTEP]
rcases hx with ⟨⟨_, h⟩, _, rfl⟩
[GOAL]
case mk.refine'_2
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
src✝ : { x // x ∈ q } →ₗ[R] { x // x ∈ map (Submodule.subtype p) q } :=
  LinearMap.codRestrict (map (Submodule.subtype p) q) (LinearMap.domRestrict (Submodule.subtype p) q)
    (_ : ∀ (c : { x // x ∈ q }), ↑(LinearMap.domRestrict (Submodule.subtype p) q) c ∈ map (Submodule.subtype p) q)
x : M
hx : x ∈ map (Submodule.subtype p) q
⊢ { val := x, property := (_ : x ∈ p) } ∈ q
[PROOFSTEP]
rcases hx with ⟨⟨_, h⟩, _, rfl⟩
[GOAL]
case mk.refine'_1.intro.mk.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
src✝ : { x // x ∈ q } →ₗ[R] { x // x ∈ map (Submodule.subtype p) q } :=
  LinearMap.codRestrict (map (Submodule.subtype p) q) (LinearMap.domRestrict (Submodule.subtype p) q)
    (_ : ∀ (c : { x // x ∈ q }), ↑(LinearMap.domRestrict (Submodule.subtype p) q) c ∈ map (Submodule.subtype p) q)
val✝ : M
h : val✝ ∈ p
left✝ : { val := val✝, property := h } ∈ ↑q
⊢ ↑(Submodule.subtype p) { val := val✝, property := h } ∈ p
[PROOFSTEP]
assumption
[GOAL]
case mk.refine'_2.intro.mk.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
src✝ : { x // x ∈ q } →ₗ[R] { x // x ∈ map (Submodule.subtype p) q } :=
  LinearMap.codRestrict (map (Submodule.subtype p) q) (LinearMap.domRestrict (Submodule.subtype p) q)
    (_ : ∀ (c : { x // x ∈ q }), ↑(LinearMap.domRestrict (Submodule.subtype p) q) c ∈ map (Submodule.subtype p) q)
val✝ : M
h : val✝ ∈ p
left✝ : { val := val✝, property := h } ∈ ↑q
⊢ { val := ↑(Submodule.subtype p) { val := val✝, property := h },
      property := (_ : ↑(Submodule.subtype p) { val := val✝, property := h } ∈ p) } ∈
    q
[PROOFSTEP]
assumption
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
src✝ : { x // x ∈ q } →ₗ[R] { x // x ∈ map (Submodule.subtype p) q } :=
  LinearMap.codRestrict (map (Submodule.subtype p) q) (LinearMap.domRestrict (Submodule.subtype p) q)
    (_ : ∀ (c : { x // x ∈ q }), ↑(LinearMap.domRestrict (Submodule.subtype p) q) c ∈ map (Submodule.subtype p) q)
x✝ : { x // x ∈ map (Submodule.subtype p) q }
x : M
h : x ∈ p
left✝ : { val := x, property := h } ∈ ↑q
⊢ AddHom.toFun
      { toAddHom := src✝.toAddHom,
          map_smul' :=
            (_ :
              ∀ (r : R) (x : { x // x ∈ q }),
                AddHom.toFun src✝.toAddHom (r • x) = ↑(RingHom.id R) r • AddHom.toFun src✝.toAddHom x) }.toAddHom
      (Subtype.casesOn { val := x, property := (_ : ∃ a, a ∈ ↑q ∧ ↑(Submodule.subtype p) a = x) } fun x hx =>
        { val := { val := x, property := (_ : x ∈ p) }, property := (_ : { val := x, property := (_ : x ∈ p) } ∈ q) }) =
    { val := x, property := (_ : ∃ a, a ∈ ↑q ∧ ↑(Submodule.subtype p) a = x) }
[PROOFSTEP]
ext
[GOAL]
case a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
src✝ : { x // x ∈ q } →ₗ[R] { x // x ∈ map (Submodule.subtype p) q } :=
  LinearMap.codRestrict (map (Submodule.subtype p) q) (LinearMap.domRestrict (Submodule.subtype p) q)
    (_ : ∀ (c : { x // x ∈ q }), ↑(LinearMap.domRestrict (Submodule.subtype p) q) c ∈ map (Submodule.subtype p) q)
x✝ : { x // x ∈ map (Submodule.subtype p) q }
x : M
h : x ∈ p
left✝ : { val := x, property := h } ∈ ↑q
⊢ ↑(AddHom.toFun
        { toAddHom := src✝.toAddHom,
            map_smul' :=
              (_ :
                ∀ (r : R) (x : { x // x ∈ q }),
                  AddHom.toFun src✝.toAddHom (r • x) = ↑(RingHom.id R) r • AddHom.toFun src✝.toAddHom x) }.toAddHom
        (Subtype.casesOn { val := x, property := (_ : ∃ a, a ∈ ↑q ∧ ↑(Submodule.subtype p) a = x) } fun x hx =>
          { val := { val := x, property := (_ : x ∈ p) },
            property := (_ : { val := x, property := (_ : x ∈ p) } ∈ q) })) =
    ↑{ val := x, property := (_ : ∃ a, a ∈ ↑q ∧ ↑(Submodule.subtype p) a = x) }
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
x : { x // x ∈ map (Submodule.subtype p) q }
⊢ ↑↑(↑(LinearEquiv.symm (equivSubtypeMap p q)) x) = ↑x
[PROOFSTEP]
cases x
[GOAL]
case mk
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p : Submodule R M
q : Submodule R { x // x ∈ p }
val✝ : M
property✝ : val✝ ∈ map (Submodule.subtype p) q
⊢ ↑↑(↑(LinearEquiv.symm (equivSubtypeMap p q)) { val := val✝, property := property✝ }) =
    ↑{ val := val✝, property := property✝ }
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p q : Submodule R M
hpq : p ≤ q
x : { x // x ∈ comap (Submodule.subtype q) p }
⊢ (fun x => { val := { val := ↑x, property := (_ : ↑x ∈ q) }, property := (_ : ↑x ∈ p) })
      (AddHom.toFun
        {
            toAddHom :=
              { toFun := fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) },
                map_add' :=
                  (_ :
                    ∀ (x y : { x // x ∈ comap (Submodule.subtype q) p }),
                      (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y) =
                        (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y)) },
            map_smul' :=
              (_ :
                ∀ (c : R) (x : { x // x ∈ comap (Submodule.subtype q) p }),
                  AddHom.toFun
                      { toFun := fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) },
                        map_add' :=
                          (_ :
                            ∀ (x y : { x // x ∈ comap (Submodule.subtype q) p }),
                              (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y) =
                                (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) })
                                  (x + y)) }
                      (c • x) =
                    AddHom.toFun
                      { toFun := fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) },
                        map_add' :=
                          (_ :
                            ∀ (x y : { x // x ∈ comap (Submodule.subtype q) p }),
                              (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y) =
                                (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) })
                                  (x + y)) }
                      (c • x)) }.toAddHom
        x) =
    x
[PROOFSTEP]
simp only [coe_mk, SetLike.eta, LinearEquiv.coe_coe]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
p q : Submodule R M
hpq : p ≤ q
x : { x // x ∈ p }
⊢ AddHom.toFun
      {
          toAddHom :=
            { toFun := fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) },
              map_add' :=
                (_ :
                  ∀ (x y : { x // x ∈ comap (Submodule.subtype q) p }),
                    (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y) =
                      (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y)) },
          map_smul' :=
            (_ :
              ∀ (c : R) (x : { x // x ∈ comap (Submodule.subtype q) p }),
                AddHom.toFun
                    { toFun := fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) },
                      map_add' :=
                        (_ :
                          ∀ (x y : { x // x ∈ comap (Submodule.subtype q) p }),
                            (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y) =
                              (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y)) }
                    (c • x) =
                  AddHom.toFun
                    { toFun := fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) },
                      map_add' :=
                        (_ :
                          ∀ (x y : { x // x ∈ comap (Submodule.subtype q) p }),
                            (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y) =
                              (fun x => { val := ↑↑x, property := (_ : ↑x ∈ comap (Submodule.subtype q) p) }) (x + y)) }
                    (c • x)) }.toAddHom
      ((fun x => { val := { val := ↑x, property := (_ : ↑x ∈ q) }, property := (_ : ↑x ∈ p) }) x) =
    x
[PROOFSTEP]
simp only [Subtype.coe_mk, SetLike.eta, LinearEquiv.coe_coe]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
x : M₂
⊢ x ∈ map (↑e) p ↔ ↑(LinearEquiv.symm e) x ∈ p
[PROOFSTEP]
rw [Submodule.mem_map]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
x : M₂
⊢ (∃ y, y ∈ p ∧ ↑↑e y = x) ↔ ↑(LinearEquiv.symm e) x ∈ p
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
x : M₂
⊢ (∃ y, y ∈ p ∧ ↑↑e y = x) → ↑(LinearEquiv.symm e) x ∈ p
[PROOFSTEP]
rintro ⟨y, hy, hx⟩
[GOAL]
case mp.intro.intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
x : M₂
y : M
hy : y ∈ p
hx : ↑↑e y = x
⊢ ↑(LinearEquiv.symm e) x ∈ p
[PROOFSTEP]
simp [← hx, hy]
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
x : M₂
⊢ ↑(LinearEquiv.symm e) x ∈ p → ∃ y, y ∈ p ∧ ↑↑e y = x
[PROOFSTEP]
intro hx
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
x : M₂
hx : ↑(LinearEquiv.symm e) x ∈ p
⊢ ∃ y, y ∈ p ∧ ↑↑e y = x
[PROOFSTEP]
refine' ⟨e.symm x, hx, by simp⟩
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
x : M₂
hx : ↑(LinearEquiv.symm e) x ∈ p
⊢ ↑↑e (↑(LinearEquiv.symm e) x) = x
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K✝ : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
K : Submodule R M
x✝ : M₂
⊢ x✝ ∈ map (↑e) K ↔ x✝ ∈ comap (↑(LinearEquiv.symm e)) K
[PROOFSTEP]
rw [mem_map_equiv, mem_comap, LinearEquiv.coe_coe]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K✝ : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
K : Submodule R₂ M₂
⊢ map (LinearEquiv.symm e) K = p ↔ map e p = K
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K✝ : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
K : Submodule R₂ M₂
⊢ map (LinearEquiv.symm e) K = p → map e p = K
[PROOFSTEP]
rintro rfl
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K✝ : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
K : Submodule R₂ M₂
⊢ map e p = K → map (LinearEquiv.symm e) K = p
[PROOFSTEP]
rintro rfl
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K✝ : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
K : Submodule R₂ M₂
⊢ map e (map (LinearEquiv.symm e) K) = K
[PROOFSTEP]
calc
  map e (map e.symm K) = comap e.symm (map e.symm K) := map_equiv_eq_comap_symm _ _
  _ = K := comap_map_eq_of_injective e.symm.injective _
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
e : M ≃ₛₗ[τ₁₂] M₂
⊢ map (LinearEquiv.symm e) (map e p) = p
[PROOFSTEP]
calc
  map e.symm (map e p) = comap e (map e p) := (comap_equiv_eq_map_symm _ _).symm
  _ = p := comap_map_eq_of_injective e.injective _
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
fₗ : N →ₗ[R] N₂
c : R
⊢ comap fₗ qₗ ≤ comap (c • fₗ) qₗ
[PROOFSTEP]
rw [SetLike.le_def]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
fₗ : N →ₗ[R] N₂
c : R
⊢ ∀ ⦃x : N⦄, x ∈ comap fₗ qₗ → x ∈ comap (c • fₗ) qₗ
[PROOFSTEP]
intro m h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
fₗ : N →ₗ[R] N₂
c : R
m : N
h : m ∈ comap fₗ qₗ
⊢ m ∈ comap (c • fₗ) qₗ
[PROOFSTEP]
change c • fₗ m ∈ qₗ
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
fₗ : N →ₗ[R] N₂
c : R
m : N
h : m ∈ comap fₗ qₗ
⊢ c • ↑fₗ m ∈ qₗ
[PROOFSTEP]
replace h : fₗ m ∈ qₗ := h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
fₗ : N →ₗ[R] N₂
c : R
m : N
h : ↑fₗ m ∈ qₗ
⊢ c • ↑fₗ m ∈ qₗ
[PROOFSTEP]
apply qₗ.smul_mem _ h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
f₁ f₂ : M →ₛₗ[τ₁₂] M₂
⊢ comap f₁ q ⊓ comap f₂ q ≤ comap (f₁ + f₂) q
[PROOFSTEP]
rw [SetLike.le_def]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
f₁ f₂ : M →ₛₗ[τ₁₂] M₂
⊢ ∀ ⦃x : M⦄, x ∈ comap f₁ q ⊓ comap f₂ q → x ∈ comap (f₁ + f₂) q
[PROOFSTEP]
intro m h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
f₁ f₂ : M →ₛₗ[τ₁₂] M₂
m : M
h : m ∈ comap f₁ q ⊓ comap f₂ q
⊢ m ∈ comap (f₁ + f₂) q
[PROOFSTEP]
change f₁ m + f₂ m ∈ q
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
f₁ f₂ : M →ₛₗ[τ₁₂] M₂
m : M
h : m ∈ comap f₁ q ⊓ comap f₂ q
⊢ ↑f₁ m + ↑f₂ m ∈ q
[PROOFSTEP]
replace h : f₁ m ∈ q ∧ f₂ m ∈ q := h
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
f₁ f₂ : M →ₛₗ[τ₁₂] M₂
m : M
h : ↑f₁ m ∈ q ∧ ↑f₂ m ∈ q
⊢ ↑f₁ m + ↑f₂ m ∈ q
[PROOFSTEP]
apply q.add_mem h.1 h.2
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
f₁ f₂ : N →ₗ[R] N₂
h₁ : f₁ ∈ {fₗ | pₗ ≤ comap fₗ qₗ}
h₂ : f₂ ∈ {fₗ | pₗ ≤ comap fₗ qₗ}
⊢ f₁ + f₂ ∈ {fₗ | pₗ ≤ comap fₗ qₗ}
[PROOFSTEP]
apply le_trans _ (inf_comap_le_comap_add qₗ f₁ f₂)
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
f₁ f₂ : N →ₗ[R] N₂
h₁ : f₁ ∈ {fₗ | pₗ ≤ comap fₗ qₗ}
h₂ : f₂ ∈ {fₗ | pₗ ≤ comap fₗ qₗ}
⊢ pₗ ≤ comap f₁ qₗ ⊓ comap f₂ qₗ
[PROOFSTEP]
rw [le_inf_iff]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
f₁ f₂ : N →ₗ[R] N₂
h₁ : f₁ ∈ {fₗ | pₗ ≤ comap fₗ qₗ}
h₂ : f₂ ∈ {fₗ | pₗ ≤ comap fₗ qₗ}
⊢ pₗ ≤ comap f₁ qₗ ∧ pₗ ≤ comap f₂ qₗ
[PROOFSTEP]
exact ⟨h₁, h₂⟩
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
⊢ 0 ∈
    { carrier := {fₗ | pₗ ≤ comap fₗ qₗ},
        add_mem' :=
          (_ :
            ∀ {f₁ f₂ : N →ₗ[R] N₂},
              f₁ ∈ {fₗ | pₗ ≤ comap fₗ qₗ} → f₂ ∈ {fₗ | pₗ ≤ comap fₗ qₗ} → pₗ ≤ comap (f₁ + f₂) qₗ) }.carrier
[PROOFSTEP]
change pₗ ≤ comap (0 : N →ₗ[R] N₂) qₗ
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
⊢ pₗ ≤ comap 0 qₗ
[PROOFSTEP]
rw [comap_zero]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
⊢ pₗ ≤ ⊤
[PROOFSTEP]
refine' le_top
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
c : R
fₗ : N →ₗ[R] N₂
h :
  fₗ ∈
    {
          toAddSubsemigroup :=
            { carrier := {fₗ | pₗ ≤ comap fₗ qₗ},
              add_mem' :=
                (_ :
                  ∀ {f₁ f₂ : N →ₗ[R] N₂},
                    f₁ ∈ {fₗ | pₗ ≤ comap fₗ qₗ} → f₂ ∈ {fₗ | pₗ ≤ comap fₗ qₗ} → pₗ ≤ comap (f₁ + f₂) qₗ) },
          zero_mem' := (_ : pₗ ≤ comap 0 qₗ) }.toAddSubsemigroup.carrier
⊢ c • fₗ ∈
    {
          toAddSubsemigroup :=
            { carrier := {fₗ | pₗ ≤ comap fₗ qₗ},
              add_mem' :=
                (_ :
                  ∀ {f₁ f₂ : N →ₗ[R] N₂},
                    f₁ ∈ {fₗ | pₗ ≤ comap fₗ qₗ} → f₂ ∈ {fₗ | pₗ ≤ comap fₗ qₗ} → pₗ ≤ comap (f₁ + f₂) qₗ) },
          zero_mem' := (_ : pₗ ≤ comap 0 qₗ) }.toAddSubsemigroup.carrier
[PROOFSTEP]
dsimp at h 
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M₂
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N
inst✝² : Module R N₂
τ₁₂ : R →+* R₂
τ₂₁ : R₂ →+* R
inst✝¹ : RingHomInvPair τ₁₂ τ₂₁
inst✝ : RingHomInvPair τ₂₁ τ₁₂
p : Submodule R M
q : Submodule R₂ M₂
pₗ : Submodule R N
qₗ : Submodule R N₂
c : R
fₗ : N →ₗ[R] N₂
h : pₗ ≤ comap fₗ qₗ
⊢ c • fₗ ∈
    {
          toAddSubsemigroup :=
            { carrier := {fₗ | pₗ ≤ comap fₗ qₗ},
              add_mem' :=
                (_ :
                  ∀ {f₁ f₂ : N →ₗ[R] N₂},
                    f₁ ∈ {fₗ | pₗ ≤ comap fₗ qₗ} → f₂ ∈ {fₗ | pₗ ≤ comap fₗ qₗ} → pₗ ≤ comap (f₁ + f₂) qₗ) },
          zero_mem' := (_ : pₗ ≤ comap 0 qₗ) }.toAddSubsemigroup.carrier
[PROOFSTEP]
exact le_trans h (comap_le_comap_smul qₗ fₗ c)
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Injective f
⊢ Surjective ↑(funLeft R M f)
[PROOFSTEP]
classical
intro g
refine' ⟨fun x => if h : ∃ y, f y = x then g h.choose else 0, _⟩
· ext
  dsimp only [funLeft_apply]
  split_ifs with w
  · congr
    exact hf w.choose_spec
  · simp only [not_true, exists_apply_eq_apply] at w 
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Injective f
⊢ Surjective ↑(funLeft R M f)
[PROOFSTEP]
intro g
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Injective f
g : m → M
⊢ ∃ a, ↑(funLeft R M f) a = g
[PROOFSTEP]
refine' ⟨fun x => if h : ∃ y, f y = x then g h.choose else 0, _⟩
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Injective f
g : m → M
⊢ (↑(funLeft R M f) fun x => if h : ∃ y, f y = x then g (Exists.choose h) else 0) = g
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Injective f
g : m → M
x✝ : m
⊢ ↑(funLeft R M f) (fun x => if h : ∃ y, f y = x then g (Exists.choose h) else 0) x✝ = g x✝
[PROOFSTEP]
dsimp only [funLeft_apply]
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Injective f
g : m → M
x✝ : m
⊢ (if h : ∃ y, f y = f x✝ then g (Exists.choose h) else 0) = g x✝
[PROOFSTEP]
split_ifs with w
[GOAL]
case pos
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Injective f
g : m → M
x✝ : m
w : ∃ y, f y = f x✝
⊢ g (Exists.choose w) = g x✝
[PROOFSTEP]
congr
[GOAL]
case pos.e_a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Injective f
g : m → M
x✝ : m
w : ∃ y, f y = f x✝
⊢ Exists.choose w = x✝
[PROOFSTEP]
exact hf w.choose_spec
[GOAL]
case neg
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Injective f
g : m → M
x✝ : m
w : ¬∃ y, f y = f x✝
⊢ 0 = g x✝
[PROOFSTEP]
simp only [not_true, exists_apply_eq_apply] at w 
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Surjective f
⊢ Injective ↑(funLeft R M f)
[PROOFSTEP]
obtain ⟨g, hg⟩ := hf.hasRightInverse
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
⊢ Injective ↑(funLeft R M f)
[PROOFSTEP]
suffices LeftInverse (funLeft R M g) (funLeft R M f) by exact this.injective
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
this : LeftInverse ↑(funLeft R M g) ↑(funLeft R M f)
⊢ Injective ↑(funLeft R M f)
[PROOFSTEP]
exact this.injective
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
⊢ LeftInverse ↑(funLeft R M g) ↑(funLeft R M f)
[PROOFSTEP]
intro x
[GOAL]
case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
x : n → M
⊢ ↑(funLeft R M g) (↑(funLeft R M f) x) = x
[PROOFSTEP]
rw [← LinearMap.comp_apply, ← funLeft_comp, hg.id, funLeft_id]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
e : m ≃ n
x : m → M
i : m
⊢ ↑(LinearMap.comp (funLeft R M ↑e) (funLeft R M ↑e.symm)) x i = ↑LinearMap.id x i
[PROOFSTEP]
rw [id_apply, ← funLeft_comp, Equiv.symm_comp_self, LinearMap.funLeft_id]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
R₄ : Type u_5
S : Type u_6
K : Type u_7
K₂ : Type u_8
M : Type u_9
M' : Type u_10
M₁ : Type u_11
M₂ : Type u_12
M₃ : Type u_13
M₄ : Type u_14
N : Type u_15
N₂ : Type u_16
ι : Type u_17
V : Type u_18
V₂ : Type u_19
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_20
n : Type u_21
p : Type u_22
e : m ≃ n
x : n → M
i : n
⊢ ↑(LinearMap.comp (funLeft R M ↑e.symm) (funLeft R M ↑e)) x i = ↑LinearMap.id x i
[PROOFSTEP]
rw [id_apply, ← funLeft_comp, Equiv.self_comp_symm, LinearMap.funLeft_id]
