Theorem: Submodule.sndEquiv_symm_apply_coe
File: Mathlib/LinearAlgebra/Prod.lean

Proof steps:
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
n : M₂
⊢ (0, n) ∈ snd R M M₂
state_after: no goals
tactic: simp only [snd, comap_bot, mem_ker, fst_apply]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
⊢ ∀ (x y : ↥(snd R M M₂)), (fun x => (↑x).2) (x + y) = (fun x => (↑x).2) x + (fun x => (↑x).2) y
state_after: no goals
tactic: simp only [AddSubmonoid.coe_add, coe_toAddSubmonoid, Prod.snd_add, Subtype.forall,
    implies_true, Prod.forall, forall_const]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
⊢ ∀ (m : R) (x : ↥(snd R M M₂)),
    { toFun := fun x => (↑x).2, map_add' := ⋯ }.toFun (m • x) =
      (RingHom.id R) m • { toFun := fun x => (↑x).2, map_add' := ⋯ }.toFun x
state_after: no goals
tactic: simp only [SetLike.val_smul, Prod.smul_snd, RingHom.id_apply, Subtype.forall,
    implies_true, Prod.forall, forall_const]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
⊢ Function.LeftInverse (fun n => ⟨(0, n), ⋯⟩) { toFun := fun x => (↑x).2, map_add' := ⋯, map_smul' := ⋯ }.toFun
state_after: case mk.mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
x : M
y : M₂
hx : (x, y) ∈ snd R M M₂
⊢ (fun n => ⟨(0, n), ⋯⟩) ({ toFun := fun x => (↑x).2, map_add' := ⋯, map_smul' := ⋯ }.toFun ⟨(x, y), hx⟩) = ⟨(x, y), hx⟩
tactic: rintro ⟨⟨x, y⟩, hx⟩
state_before: case mk.mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
x : M
y : M₂
hx : (x, y) ∈ snd R M M₂
⊢ (fun n => ⟨(0, n), ⋯⟩) ({ toFun := fun x => (↑x).2, map_add' := ⋯, map_smul' := ⋯ }.toFun ⟨(x, y), hx⟩) = ⟨(x, y), hx⟩
state_after: case mk.mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
x : M
y : M₂
hx✝ : (x, y) ∈ snd R M M₂
hx : x = 0
⊢ (fun n => ⟨(0, n), ⋯⟩) ({ toFun := fun x => (↑x).2, map_add' := ⋯, map_smul' := ⋯ }.toFun ⟨(x, y), hx✝⟩) =
    ⟨(x, y), hx✝⟩
tactic: simp only [snd, comap_bot, mem_ker, fst_apply] at hx
state_before: case mk.mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
x : M
y : M₂
hx✝ : (x, y) ∈ snd R M M₂
hx : x = 0
⊢ (fun n => ⟨(0, n), ⋯⟩) ({ toFun := fun x => (↑x).2, map_add' := ⋯, map_smul' := ⋯ }.toFun ⟨(x, y), hx✝⟩) =
    ⟨(x, y), hx✝⟩
state_after: no goals
tactic: simpa only [Subtype.mk.injEq, Prod.mk.injEq, and_true] using hx.symm
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
⊢ Function.RightInverse (fun n => ⟨(0, n), ⋯⟩) { toFun := fun x => (↑x).2, map_add' := ⋯, map_smul' := ⋯ }.toFun
state_after: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
x : M₂
⊢ { toFun := fun x => (↑x).2, map_add' := ⋯, map_smul' := ⋯ }.toFun ((fun n => ⟨(0, n), ⋯⟩) x) = x
tactic: rintro x
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
x : M₂
⊢ { toFun := fun x => (↑x).2, map_add' := ⋯, map_smul' := ⋯ }.toFun ((fun n => ⟨(0, n), ⋯⟩) x) = x
state_after: no goals
tactic: rfl