File: Mathlib/LinearAlgebra/BilinearForm/DualLattice.lean

full_name: LinearMap.BilinForm.dualSubmodule
code: /-- The dual submodule of a submodule with respect to a bilinear form. -/
def dualSubmodule (N : Submodule R M) : Submodule R M 
goal: Submodule R M

full_name: LinearMap.BilinForm.mem_dualSubmodule
code: lemma mem_dualSubmodule {N : Submodule R M} {x} :
    x ∈ B.dualSubmodule N ↔ ∀ y ∈ N, B x y ∈ (1 : Submodule R S) 
goal: x ∈ B.dualSubmodule N ↔ ∀ y ∈ N, (B x) y ∈ 1

full_name: LinearMap.BilinForm.le_flip_dualSubmodule
code: lemma le_flip_dualSubmodule {N₁ N₂ : Submodule R M} :
    N₁ ≤ B.flip.dualSubmodule N₂ ↔ N₂ ≤ B.dualSubmodule N₁ 
goal: N₁ ≤ B.flip.dualSubmodule N₂ ↔ N₂ ≤ B.dualSubmodule N₁

full_name: LinearMap.BilinForm.dualSubmoduleParing
code: /-- The natural paring of `B.dualSubmodule N` and `N`.
This is bundled as a bilinear map in `BilinForm.dualSubmoduleToDual`. -/
noncomputable
def dualSubmoduleParing {N : Submodule R M} (x : B.dualSubmodule N) (y : N) : R 
goal: R

full_name: LinearMap.BilinForm.dualSubmoduleParing_spec
code: @[simp]
lemma dualSubmoduleParing_spec {N : Submodule R M} (x : B.dualSubmodule N) (y : N) :
    algebraMap R S (B.dualSubmoduleParing x y) = B x y 
goal: (algebraMap R S) (B.dualSubmoduleParing x y) = (B ↑x) ↑y

full_name: LinearMap.BilinForm.dualSubmoduleToDual
code: /-- The natural paring of `B.dualSubmodule N` and `N`. -/
-- TODO: Show that this is perfect when `N` is a lattice and `B` is nondegenerate.
@[simps]
noncomputable
def dualSubmoduleToDual [NoZeroSMulDivisors R S] (N : Submodule R M) :
    B.dualSubmodule N →ₗ[R] Module.Dual R N 
goal: ↥(B.dualSubmodule N) →ₗ[R] Module.Dual R ↥N

full_name: LinearMap.BilinForm.dualSubmoduleToDual_apply_apply
code: /-- The natural paring of `B.dualSubmodule N` and `N`. -/
-- TODO: Show that this is perfect when `N` is a lattice and `B` is nondegenerate.
@[simps]
noncomputable
def dualSubmoduleToDual [NoZeroSMulDivisors R S] (N : Submodule R M) :
    B.dualSubmodule N →ₗ[R] Module.Dual R N 
goal: ((B.dualSubmoduleToDual N) x) y = B.dualSubmoduleParing x y

full_name: LinearMap.BilinForm.dualSubmoduleToDual_injective
code: lemma dualSubmoduleToDual_injective (hB : B.Nondegenerate) [NoZeroSMulDivisors R S]
    (N : Submodule R M) (hN : Submodule.span S (N : Set M) = ⊤) :
    Function.Injective (B.dualSubmoduleToDual N) 
goal: Function.Injective ⇑(B.dualSubmoduleToDual N)

full_name: LinearMap.BilinForm.dualSubmodule_span_of_basis
code: lemma dualSubmodule_span_of_basis {ι} [Finite ι] [DecidableEq ι]
    (hB : B.Nondegenerate) (b : Basis ι S M) :
    B.dualSubmodule (Submodule.span R (Set.range b)) =
      Submodule.span R (Set.range <| B.dualBasis hB b) 
goal: B.dualSubmodule (Submodule.span R (Set.range ⇑b)) = Submodule.span R (Set.range ⇑(B.dualBasis hB b))

full_name: LinearMap.BilinForm.dualSubmodule_dualSubmodule_flip_of_basis
code: lemma dualSubmodule_dualSubmodule_flip_of_basis {ι : Type*} [Finite ι]
    (hB : B.Nondegenerate) (b : Basis ι S M) :
    B.dualSubmodule (B.flip.dualSubmodule (Submodule.span R (Set.range b))) =
      Submodule.span R (Set.range b) 
goal: B.dualSubmodule (B.flip.dualSubmodule (Submodule.span R (Set.range ⇑b))) = Submodule.span R (Set.range ⇑b)

full_name: LinearMap.BilinForm.dualSubmodule_flip_dualSubmodule_of_basis
code: lemma dualSubmodule_flip_dualSubmodule_of_basis {ι : Type*} [Finite ι]
    (hB : B.Nondegenerate) (b : Basis ι S M) :
    B.flip.dualSubmodule (B.dualSubmodule (Submodule.span R (Set.range b))) =
      Submodule.span R (Set.range b) 
goal: B.flip.dualSubmodule (B.dualSubmodule (Submodule.span R (Set.range ⇑b))) = Submodule.span R (Set.range ⇑b)

full_name: LinearMap.BilinForm.dualSubmodule_dualSubmodule_of_basis
code: lemma dualSubmodule_dualSubmodule_of_basis
    {ι} [Finite ι] (hB : B.Nondegenerate) (hB' : B.IsSymm) (b : Basis ι S M) :
    B.dualSubmodule (B.dualSubmodule (Submodule.span R (Set.range b))) =
      Submodule.span R (Set.range b) 
goal: B.dualSubmodule (B.dualSubmodule (Submodule.span R (Set.range ⇑b))) = Submodule.span R (Set.range ⇑b)