Theorem: Module.Baer.ExtensionOf.ext
File: Mathlib/Algebra/Module/Injective.lean

tactic: rcases a with ⟨a, a_le, e1⟩
state_before: R : Type u
inst✝⁶ : Ring R
Q : Type v
inst✝⁵ : AddCommGroup Q
inst✝⁴ : Module R Q
M : Type u_1
N : Type u_2
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup N
inst✝¹ : Module R M
inst✝ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
a b : ExtensionOf i f
domain_eq : a.domain = b.domain
to_fun_eq : ∀ ⦃x : ↥a.domain⦄ ⦃y : ↥b.domain⦄, ↑x = ↑y → ↑a.toLinearPMap x = ↑b.toLinearPMap y
⊢ a = b
state_after: case mk
R : Type u
inst✝⁶ : Ring R
Q : Type v
inst✝⁵ : AddCommGroup Q
inst✝⁴ : Module R Q
M : Type u_1
N : Type u_2
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup N
inst✝¹ : Module R M
inst✝ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
b : ExtensionOf i f
a : N →ₗ.[R] Q
a_le : LinearMap.range i ≤ a.domain
e1 : ∀ (m : M), f m = ↑a ⟨i m, ⋯⟩
domain_eq : { toLinearPMap := a, le := a_le, is_extension := e1 }.domain = b.domain
to_fun_eq :
  ∀ ⦃x : ↥{ toLinearPMap := a, le := a_le, is_extension := e1 }.domain⦄ ⦃y : ↥b.domain⦄,
    ↑x = ↑y → ↑{ toLinearPMap := a, le := a_le, is_extension := e1 }.toLinearPMap x = ↑b.toLinearPMap y
⊢ { toLinearPMap := a, le := a_le, is_extension := e1 } = b

tactic: rcases b with ⟨b, b_le, e2⟩
state_before: case mk
R : Type u
inst✝⁶ : Ring R
Q : Type v
inst✝⁵ : AddCommGroup Q
inst✝⁴ : Module R Q
M : Type u_1
N : Type u_2
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup N
inst✝¹ : Module R M
inst✝ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
b : ExtensionOf i f
a : N →ₗ.[R] Q
a_le : LinearMap.range i ≤ a.domain
e1 : ∀ (m : M), f m = ↑a ⟨i m, ⋯⟩
domain_eq : { toLinearPMap := a, le := a_le, is_extension := e1 }.domain = b.domain
to_fun_eq :
  ∀ ⦃x : ↥{ toLinearPMap := a, le := a_le, is_extension := e1 }.domain⦄ ⦃y : ↥b.domain⦄,
    ↑x = ↑y → ↑{ toLinearPMap := a, le := a_le, is_extension := e1 }.toLinearPMap x = ↑b.toLinearPMap y
⊢ { toLinearPMap := a, le := a_le, is_extension := e1 } = b
state_after: case mk.mk
R : Type u
inst✝⁶ : Ring R
Q : Type v
inst✝⁵ : AddCommGroup Q
inst✝⁴ : Module R Q
M : Type u_1
N : Type u_2
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup N
inst✝¹ : Module R M
inst✝ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
a : N →ₗ.[R] Q
a_le : LinearMap.range i ≤ a.domain
e1 : ∀ (m : M), f m = ↑a ⟨i m, ⋯⟩
b : N →ₗ.[R] Q
b_le : LinearMap.range i ≤ b.domain
e2 : ∀ (m : M), f m = ↑b ⟨i m, ⋯⟩
domain_eq :
  { toLinearPMap := a, le := a_le, is_extension := e1 }.domain =
    { toLinearPMap := b, le := b_le, is_extension := e2 }.domain
to_fun_eq :
  ∀ ⦃x : ↥{ toLinearPMap := a, le := a_le, is_extension := e1 }.domain⦄
    ⦃y : ↥{ toLinearPMap := b, le := b_le, is_extension := e2 }.domain⦄,
    ↑x = ↑y →
      ↑{ toLinearPMap := a, le := a_le, is_extension := e1 }.toLinearPMap x =
        ↑{ toLinearPMap := b, le := b_le, is_extension := e2 }.toLinearPMap y
⊢ { toLinearPMap := a, le := a_le, is_extension := e1 } = { toLinearPMap := b, le := b_le, is_extension := e2 }

tactic: congr
state_before: case mk.mk
R : Type u
inst✝⁶ : Ring R
Q : Type v
inst✝⁵ : AddCommGroup Q
inst✝⁴ : Module R Q
M : Type u_1
N : Type u_2
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup N
inst✝¹ : Module R M
inst✝ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
a : N →ₗ.[R] Q
a_le : LinearMap.range i ≤ a.domain
e1 : ∀ (m : M), f m = ↑a ⟨i m, ⋯⟩
b : N →ₗ.[R] Q
b_le : LinearMap.range i ≤ b.domain
e2 : ∀ (m : M), f m = ↑b ⟨i m, ⋯⟩
domain_eq :
  { toLinearPMap := a, le := a_le, is_extension := e1 }.domain =
    { toLinearPMap := b, le := b_le, is_extension := e2 }.domain
to_fun_eq :
  ∀ ⦃x : ↥{ toLinearPMap := a, le := a_le, is_extension := e1 }.domain⦄
    ⦃y : ↥{ toLinearPMap := b, le := b_le, is_extension := e2 }.domain⦄,
    ↑x = ↑y →
      ↑{ toLinearPMap := a, le := a_le, is_extension := e1 }.toLinearPMap x =
        ↑{ toLinearPMap := b, le := b_le, is_extension := e2 }.toLinearPMap y
⊢ { toLinearPMap := a, le := a_le, is_extension := e1 } = { toLinearPMap := b, le := b_le, is_extension := e2 }
state_after: case mk.mk.e_toLinearPMap
R : Type u
inst✝⁶ : Ring R
Q : Type v
inst✝⁵ : AddCommGroup Q
inst✝⁴ : Module R Q
M : Type u_1
N : Type u_2
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup N
inst✝¹ : Module R M
inst✝ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
a : N →ₗ.[R] Q
a_le : LinearMap.range i ≤ a.domain
e1 : ∀ (m : M), f m = ↑a ⟨i m, ⋯⟩
b : N →ₗ.[R] Q
b_le : LinearMap.range i ≤ b.domain
e2 : ∀ (m : M), f m = ↑b ⟨i m, ⋯⟩
domain_eq :
  { toLinearPMap := a, le := a_le, is_extension := e1 }.domain =
    { toLinearPMap := b, le := b_le, is_extension := e2 }.domain
to_fun_eq :
  ∀ ⦃x : ↥{ toLinearPMap := a, le := a_le, is_extension := e1 }.domain⦄
    ⦃y : ↥{ toLinearPMap := b, le := b_le, is_extension := e2 }.domain⦄,
    ↑x = ↑y →
      ↑{ toLinearPMap := a, le := a_le, is_extension := e1 }.toLinearPMap x =
        ↑{ toLinearPMap := b, le := b_le, is_extension := e2 }.toLinearPMap y
⊢ a = b

tactic: exact LinearPMap.ext domain_eq to_fun_eq
state_before: case mk.mk.e_toLinearPMap
R : Type u
inst✝⁶ : Ring R
Q : Type v
inst✝⁵ : AddCommGroup Q
inst✝⁴ : Module R Q
M : Type u_1
N : Type u_2
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup N
inst✝¹ : Module R M
inst✝ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
a : N →ₗ.[R] Q
a_le : LinearMap.range i ≤ a.domain
e1 : ∀ (m : M), f m = ↑a ⟨i m, ⋯⟩
b : N →ₗ.[R] Q
b_le : LinearMap.range i ≤ b.domain
e2 : ∀ (m : M), f m = ↑b ⟨i m, ⋯⟩
domain_eq :
  { toLinearPMap := a, le := a_le, is_extension := e1 }.domain =
    { toLinearPMap := b, le := b_le, is_extension := e2 }.domain
to_fun_eq :
  ∀ ⦃x : ↥{ toLinearPMap := a, le := a_le, is_extension := e1 }.domain⦄
    ⦃y : ↥{ toLinearPMap := b, le := b_le, is_extension := e2 }.domain⦄,
    ↑x = ↑y →
      ↑{ toLinearPMap := a, le := a_le, is_extension := e1 }.toLinearPMap x =
        ↑{ toLinearPMap := b, le := b_le, is_extension := e2 }.toLinearPMap y
⊢ a = b
state_after: no goals