File: Mathlib/Algebra/Module/Submodule/Equiv.lean

full_name: LinearEquiv.ofEq
code: /-- Linear equivalence between two equal submodules. -/
def ofEq (h : p = q) : p ≃ₗ[R] q 
goal: ↥p ≃ₗ[R] ↥q

full_name: LinearEquiv.coe_ofEq_apply
code: @[simp]
theorem coe_ofEq_apply (h : p = q) (x : p) : (ofEq p q h x : M) = x 
goal: ↑((LinearEquiv.ofEq p q h) x) = ↑x

full_name: LinearEquiv.ofEq_symm
code: @[simp]
theorem ofEq_symm (h : p = q) : (ofEq p q h).symm = ofEq q p h.symm 
goal: (LinearEquiv.ofEq p q h).symm = LinearEquiv.ofEq q p ⋯

full_name: LinearEquiv.ofEq_rfl
code: @[simp]
theorem ofEq_rfl : ofEq p p rfl = LinearEquiv.refl R p 
goal: LinearEquiv.ofEq p p ⋯ = LinearEquiv.refl R ↥p

full_name: LinearEquiv.ofSubmodules
code: /-- A linear equivalence which maps a submodule of one module onto another, restricts to a linear
equivalence of the two submodules. -/
def ofSubmodules (p : Submodule R M) (q : Submodule R₂ M₂) (h : p.map (e : M →ₛₗ[σ₁₂] M₂) = q) :
    p ≃ₛₗ[σ₁₂] q 
goal: ↥p ≃ₛₗ[σ₁₂] ↥q

full_name: LinearEquiv.ofSubmodules_apply
code: @[simp]
theorem ofSubmodules_apply {p : Submodule R M} {q : Submodule R₂ M₂} (h : p.map ↑e = q) (x : p) :
    ↑(e.ofSubmodules p q h x) = e x 
goal: ↑((e.ofSubmodules p q h) x) = e ↑x

full_name: LinearEquiv.ofSubmodules_symm_apply
code: @[simp]
theorem ofSubmodules_symm_apply {p : Submodule R M} {q : Submodule R₂ M₂} (h : p.map ↑e = q)
    (x : q) : ↑((e.ofSubmodules p q h).symm x) = e.symm x 
goal: ↑((e.ofSubmodules p q h).symm x) = e.symm ↑x

full_name: LinearEquiv.ofSubmodule'
code: /-- A linear equivalence of two modules restricts to a linear equivalence from the preimage of any
submodule to that submodule.

This is `LinearEquiv.ofSubmodule` but with `comap` on the left instead of `map` on the right. -/
def ofSubmodule' [Module R M] [Module R₂ M₂] (f : M ≃ₛₗ[σ₁₂] M₂) (U : Submodule R₂ M₂) :
    U.comap (f : M →ₛₗ[σ₁₂] M₂) ≃ₛₗ[σ₁₂] U 
goal: ↥(Submodule.comap (↑f) U) ≃ₛₗ[σ₁₂] ↥U

full_name: LinearEquiv.ofSubmodule'_toLinearMap
code: theorem ofSubmodule'_toLinearMap [Module R M] [Module R₂ M₂] (f : M ≃ₛₗ[σ₁₂] M₂)
    (U : Submodule R₂ M₂) :
    (f.ofSubmodule' U).toLinearMap = (f.toLinearMap.domRestrict _).codRestrict _ Subtype.prop 
goal: ↑(f.ofSubmodule' U) = LinearMap.codRestrict U ((↑f).domRestrict (Submodule.comap (↑f) U)) ⋯

full_name: LinearEquiv.ofSubmodule'_apply
code: @[simp]
theorem ofSubmodule'_apply [Module R M] [Module R₂ M₂] (f : M ≃ₛₗ[σ₁₂] M₂) (U : Submodule R₂ M₂)
    (x : U.comap (f : M →ₛₗ[σ₁₂] M₂)) : (f.ofSubmodule' U x : M₂) = f (x : M) 
goal: ↑((f.ofSubmodule' U) x) = f ↑x

full_name: LinearEquiv.ofSubmodule'_symm_apply
code: @[simp]
theorem ofSubmodule'_symm_apply [Module R M] [Module R₂ M₂] (f : M ≃ₛₗ[σ₁₂] M₂)
    (U : Submodule R₂ M₂) (x : U) : ((f.ofSubmodule' U).symm x : M) = f.symm (x : M₂) 
goal: ↑((f.ofSubmodule' U).symm x) = f.symm ↑x

full_name: LinearEquiv.ofTop
code: /-- The top submodule of `M` is linearly equivalent to `M`. -/
def ofTop (h : p = ⊤) : p ≃ₗ[R] M 
goal: ↥p ≃ₗ[R] M

full_name: LinearEquiv.ofTop_apply
code: @[simp]
theorem ofTop_apply {h} (x : p) : ofTop p h x = x 
goal: (LinearEquiv.ofTop p h) x = ↑x

full_name: LinearEquiv.coe_ofTop_symm_apply
code: @[simp]
theorem coe_ofTop_symm_apply {h} (x : M) : ((ofTop p h).symm x : M) = x 
goal: ↑((LinearEquiv.ofTop p h).symm x) = x

full_name: LinearEquiv.ofTop_symm_apply
code: theorem ofTop_symm_apply {h} (x : M) : (ofTop p h).symm x = ⟨x, h.symm ▸ trivial⟩ 
goal: (LinearEquiv.ofTop p h).symm x = ⟨x, ⋯⟩

full_name: LinearEquiv.range
code: @[simp]
protected theorem range : LinearMap.range (e : M →ₛₗ[σ₁₂] M₂) = ⊤ 
goal: LinearMap.range ↑e = ⊤

full_name: LinearEquivClass.range
code: @[simp]
protected theorem _root_.LinearEquivClass.range [Module R M] [Module R₂ M₂] {F : Type*}
    [EquivLike F M M₂] [SemilinearEquivClass F σ₁₂ M M₂] (e : F) : LinearMap.range e = ⊤ 
goal: LinearMap.range e = ⊤

full_name: LinearEquiv.eq_bot_of_equiv
code: theorem eq_bot_of_equiv [Module R₂ M₂] (e : p ≃ₛₗ[σ₁₂] (⊥ : Submodule R₂ M₂)) : p = ⊥ 
goal: p = ⊥

full_name: LinearEquiv.range_comp
code: @[simp]
theorem range_comp [RingHomSurjective σ₂₃] [RingHomSurjective σ₁₃] :
    LinearMap.range (h.comp (e : M →ₛₗ[σ₁₂] M₂) : M →ₛₗ[σ₁₃] M₃) = LinearMap.range h 
goal: LinearMap.range (h.comp ↑e) = LinearMap.range h

full_name: LinearEquiv.ofLeftInverse
code: /-- A linear map `f : M →ₗ[R] M₂` with a left-inverse `g : M₂ →ₗ[R] M` defines a linear
equivalence between `M` and `f.range`.

This is a computable alternative to `LinearEquiv.ofInjective`, and a bidirectional version of
`LinearMap.rangeRestrict`. -/
def ofLeftInverse [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {g : M₂ → M}
    (h : Function.LeftInverse g f) : M ≃ₛₗ[σ₁₂] (LinearMap.range f) 
goal: M ≃ₛₗ[σ₁₂] ↥(LinearMap.range f)

full_name: LinearEquiv.ofLeftInverse_apply
code: @[simp]
theorem ofLeftInverse_apply [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂]
    (h : Function.LeftInverse g f) (x : M) : ↑(ofLeftInverse h x) = f x 
goal: ↑((LinearEquiv.ofLeftInverse h) x) = f x

full_name: LinearEquiv.ofLeftInverse_symm_apply
code: @[simp]
theorem ofLeftInverse_symm_apply [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂]
    (h : Function.LeftInverse g f) (x : LinearMap.range f) : (ofLeftInverse h).symm x = g x 
goal: (LinearEquiv.ofLeftInverse h).symm x = g ↑x

full_name: LinearEquiv.ofInjective
code: /-- An `Injective` linear map `f : M →ₗ[R] M₂` defines a linear equivalence
between `M` and `f.range`. See also `LinearMap.ofLeftInverse`. -/
noncomputable def ofInjective [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] (h : Injective f) :
    M ≃ₛₗ[σ₁₂] LinearMap.range f 
goal: M ≃ₛₗ[σ₁₂] ↥(LinearMap.range f)

full_name: LinearEquiv.ofInjective_apply
code: @[simp]
theorem ofInjective_apply [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {h : Injective f}
    (x : M) : ↑(ofInjective f h x) = f x 
goal: ↑((LinearEquiv.ofInjective f h) x) = f x

full_name: LinearEquiv.ofBijective
code: /-- A bijective linear map is a linear equivalence. -/
noncomputable def ofBijective [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] (hf : Bijective f) :
    M ≃ₛₗ[σ₁₂] M₂ 
goal: M ≃ₛₗ[σ₁₂] M₂

full_name: LinearEquiv.ofBijective_apply
code: @[simp]
theorem ofBijective_apply [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {hf} (x : M) :
    ofBijective f hf x = f x 
goal: (LinearEquiv.ofBijective f hf) x = f x

full_name: LinearEquiv.ofBijective_symm_apply_apply
code: @[simp]
theorem ofBijective_symm_apply_apply [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {h} (x : M) :
    (ofBijective f h).symm (f x) = x 
goal: (LinearEquiv.ofBijective f h).symm (f x) = x

full_name: Submodule.equivSubtypeMap
code: /-- Given `p` a submodule of the module `M` and `q` a submodule of `p`, `p.equivSubtypeMap q`
is the natural `LinearEquiv` between `q` and `q.map p.subtype`. -/
def equivSubtypeMap (p : Submodule R M) (q : Submodule R p) : q ≃ₗ[R] q.map p.subtype 
goal: ↥q ≃ₗ[R] ↥(Submodule.map p.subtype q)

full_name: Submodule.equivSubtypeMap_apply
code: @[simp]
theorem equivSubtypeMap_apply {p : Submodule R M} {q : Submodule R p} (x : q) :
    (p.equivSubtypeMap q x : M) = p.subtype.domRestrict q x 
goal: ↑((p.equivSubtypeMap q) x) = (p.subtype.domRestrict q) x

full_name: Submodule.equivSubtypeMap_symm_apply
code: @[simp]
theorem equivSubtypeMap_symm_apply {p : Submodule R M} {q : Submodule R p} (x : q.map p.subtype) :
    ((p.equivSubtypeMap q).symm x : M) = x 
goal: ↑↑((p.equivSubtypeMap q).symm x) = ↑x

full_name: Submodule.comap_equiv_self_of_inj_of_le
code: /-- A linear injection `M ↪ N` restricts to an equivalence `f⁻¹ p ≃ p` for any submodule `p`
contained in its range. -/
@[simps! apply]
noncomputable def comap_equiv_self_of_inj_of_le {f : M →ₗ[R] N} {p : Submodule R N}
    (hf : Injective f) (h : p ≤ LinearMap.range f) :
    p.comap f ≃ₗ[R] p 
goal: ↥(Submodule.comap f p) ≃ₗ[R] ↥p

full_name: Submodule.comap_equiv_self_of_inj_of_le_apply
code: /-- A linear injection `M ↪ N` restricts to an equivalence `f⁻¹ p ≃ p` for any submodule `p`
contained in its range. -/
@[simps! apply]
noncomputable def comap_equiv_self_of_inj_of_le {f : M →ₗ[R] N} {p : Submodule R N}
    (hf : Injective f) (h : p ≤ LinearMap.range f) :
    p.comap f ≃ₗ[R] p 
goal: ∀ (a : ↥(Submodule.comap f p)),
  (Submodule.comap_equiv_self_of_inj_of_le hf h) a = (LinearMap.codRestrict p (f ∘ₗ (Submodule.comap f p).subtype) ⋯) a