Theorem: Module.Baer.injective
File: Mathlib/Algebra/Module/Injective.lean

tactic: rw [← LinearPMap.map_add]
state_before: R : Type u
inst✝⁷ : Ring R
Q : TypeMax
inst✝⁶ : AddCommGroup Q
inst✝⁵ : Module R Q
M N : Type (max u v)
inst✝⁴ : AddCommGroup M
inst✝³ : AddCommGroup N
inst✝² : Module R M
inst✝¹ : Module R N
i✝ : M →ₗ[R] N
f✝ : M →ₗ[R] Q
inst✝ : Fact (Function.Injective ↑i✝)
h : Baer R Q
X Y : TypeMax
ins1 : AddCommGroup X
ins2 : AddCommGroup Y
ins3 : Module R X
ins4 : Module R Y
i : X →ₗ[R] Y
hi : Function.Injective ↑i
f : X →ₗ[R] Q
this : Fact (Function.Injective ↑i)
x y : Y
⊢ (fun y =>
        ↑(extensionOfMax i f).toLinearPMap { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
      (x + y) =
    (fun y =>
          ↑(extensionOfMax i f).toLinearPMap
            { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
        x +
      (fun y =>
          ↑(extensionOfMax i f).toLinearPMap
            { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
        y

tactic: congr
state_before: R : Type u
inst✝⁷ : Ring R
Q : TypeMax
inst✝⁶ : AddCommGroup Q
inst✝⁵ : Module R Q
M N : Type (max u v)
inst✝⁴ : AddCommGroup M
inst✝³ : AddCommGroup N
inst✝² : Module R M
inst✝¹ : Module R N
i✝ : M →ₗ[R] N
f✝ : M →ₗ[R] Q
inst✝ : Fact (Function.Injective ↑i✝)
h : Baer R Q
X Y : TypeMax
ins1 : AddCommGroup X
ins2 : AddCommGroup Y
ins3 : Module R X
ins4 : Module R Y
i : X →ₗ[R] Y
hi : Function.Injective ↑i
f : X →ₗ[R] Q
this : Fact (Function.Injective ↑i)
x y : Y
⊢ (fun y =>
        ↑(extensionOfMax i f).toLinearPMap { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
      (x + y) =
    ↑(extensionOfMax i f).toLinearPMap
      ({ val := x, property := (_ : x ∈ (extensionOfMax i f).toLinearPMap.domain) } +
        { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })

tactic: rw [← LinearPMap.map_smul]
state_before: R : Type u
inst✝⁷ : Ring R
Q : TypeMax
inst✝⁶ : AddCommGroup Q
inst✝⁵ : Module R Q
M N : Type (max u v)
inst✝⁴ : AddCommGroup M
inst✝³ : AddCommGroup N
inst✝² : Module R M
inst✝¹ : Module R N
i✝ : M →ₗ[R] N
f✝ : M →ₗ[R] Q
inst✝ : Fact (Function.Injective ↑i✝)
h : Baer R Q
X Y : TypeMax
ins1 : AddCommGroup X
ins2 : AddCommGroup Y
ins3 : Module R X
ins4 : Module R Y
i : X →ₗ[R] Y
hi : Function.Injective ↑i
f : X →ₗ[R] Q
this : Fact (Function.Injective ↑i)
r : R
x : Y
⊢ AddHom.toFun
      {
        toFun := fun y =>
          ↑(extensionOfMax i f).toLinearPMap
            { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) },
        map_add' :=
          (_ :
            ∀ (x y : Y),
              (fun y =>
                    ↑(extensionOfMax i f).toLinearPMap
                      { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
                  (x + y) =
                (fun y =>
                      ↑(extensionOfMax i f).toLinearPMap
                        { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
                    x +
                  (fun y =>
                      ↑(extensionOfMax i f).toLinearPMap
                        { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
                    y) }
      (r • x) =
    ↑(RingHom.id R) r •
      AddHom.toFun
        {
          toFun := fun y =>
            ↑(extensionOfMax i f).toLinearPMap
              { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) },
          map_add' :=
            (_ :
              ∀ (x y : Y),
                (fun y =>
                      ↑(extensionOfMax i f).toLinearPMap
                        { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
                    (x + y) =
                  (fun y =>
                        ↑(extensionOfMax i f).toLinearPMap
                          { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
                      x +
                    (fun y =>
                        ↑(extensionOfMax i f).toLinearPMap
                          { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
                      y) }
        x

tactic: dsimp
state_before: R : Type u
inst✝⁷ : Ring R
Q : TypeMax
inst✝⁶ : AddCommGroup Q
inst✝⁵ : Module R Q
M N : Type (max u v)
inst✝⁴ : AddCommGroup M
inst✝³ : AddCommGroup N
inst✝² : Module R M
inst✝¹ : Module R N
i✝ : M →ₗ[R] N
f✝ : M →ₗ[R] Q
inst✝ : Fact (Function.Injective ↑i✝)
h : Baer R Q
X Y : TypeMax
ins1 : AddCommGroup X
ins2 : AddCommGroup Y
ins3 : Module R X
ins4 : Module R Y
i : X →ₗ[R] Y
hi : Function.Injective ↑i
f : X →ₗ[R] Q
this : Fact (Function.Injective ↑i)
r : R
x : Y
⊢ AddHom.toFun
      {
        toFun := fun y =>
          ↑(extensionOfMax i f).toLinearPMap
            { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) },
        map_add' :=
          (_ :
            ∀ (x y : Y),
              (fun y =>
                    ↑(extensionOfMax i f).toLinearPMap
                      { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
                  (x + y) =
                (fun y =>
                      ↑(extensionOfMax i f).toLinearPMap
                        { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
                    x +
                  (fun y =>
                      ↑(extensionOfMax i f).toLinearPMap
                        { val := y, property := (_ : y ∈ (extensionOfMax i f).toLinearPMap.domain) })
                    y) }
      (r • x) =
    ↑(extensionOfMax i f).toLinearPMap
      (↑(RingHom.id R) r • { val := x, property := (_ : x ∈ (extensionOfMax i f).toLinearPMap.domain) })