Theorem: Submodule.fstEquiv_apply
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₂
m : M
⊢ (m, 0) ∈ fst R M M₂
state_after: no goals
tactic: simp only [fst, comap_bot, mem_ker, snd_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 : ↥(fst R M M₂)), (fun x => (↑x).1) (x + y) = (fun x => (↑x).1) x + (fun x => (↑x).1) y
state_after: no goals
tactic: simp only [AddSubmonoid.coe_add, coe_toAddSubmonoid, Prod.fst_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 : ↥(fst R M M₂)),
    { toFun := fun x => (↑x).1, map_add' := ⋯ }.toFun (m • x) =
      (RingHom.id R) m • { toFun := fun x => (↑x).1, map_add' := ⋯ }.toFun x
state_after: no goals
tactic: simp only [SetLike.val_smul, Prod.smul_fst, 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 m => ⟨(m, 0), ⋯⟩) { toFun := fun x => (↑x).1, 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₂
hy : (x, y) ∈ fst R M M₂
⊢ (fun m => ⟨(m, 0), ⋯⟩) ({ toFun := fun x => (↑x).1, map_add' := ⋯, map_smul' := ⋯ }.toFun ⟨(x, y), hy⟩) = ⟨(x, y), hy⟩
tactic: rintro ⟨⟨x, y⟩, hy⟩
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₂
hy : (x, y) ∈ fst R M M₂
⊢ (fun m => ⟨(m, 0), ⋯⟩) ({ toFun := fun x => (↑x).1, map_add' := ⋯, map_smul' := ⋯ }.toFun ⟨(x, y), hy⟩) = ⟨(x, y), hy⟩
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₂
hy✝ : (x, y) ∈ fst R M M₂
hy : y = 0
⊢ (fun m => ⟨(m, 0), ⋯⟩) ({ toFun := fun x => (↑x).1, map_add' := ⋯, map_smul' := ⋯ }.toFun ⟨(x, y), hy✝⟩) =
    ⟨(x, y), hy✝⟩
tactic: simp only [fst, comap_bot, mem_ker, snd_apply] at hy
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₂
hy✝ : (x, y) ∈ fst R M M₂
hy : y = 0
⊢ (fun m => ⟨(m, 0), ⋯⟩) ({ toFun := fun x => (↑x).1, map_add' := ⋯, map_smul' := ⋯ }.toFun ⟨(x, y), hy✝⟩) =
    ⟨(x, y), hy✝⟩
state_after: no goals
tactic: simpa only [Subtype.mk.injEq, Prod.mk.injEq, true_and] using hy.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 m => ⟨(m, 0), ⋯⟩) { toFun := fun x => (↑x).1, 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).1, map_add' := ⋯, map_smul' := ⋯ }.toFun ((fun m => ⟨(m, 0), ⋯⟩) 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).1, map_add' := ⋯, map_smul' := ⋯ }.toFun ((fun m => ⟨(m, 0), ⋯⟩) x) = x
state_after: no goals
tactic: rfl