While this submission is a draft, it cannot be used by other submissions.

Exact image pins in nominal coefficient spaces

Lax342547.ExactPins · concepts/Lax342547/ExactPins.lean · lax-342547

proven

Loading review…

Sign in with ORCID

Community review

Flags

Each flag is tied to a public ORCID identity and explains why this concept may be incorrect.

No flags have been submitted.

    Community review

    Flag this concept

    State precisely what appears incorrect. This explanation will be public under your ORCID name.

    No source line selected.

    Natural Language Statement

    Lemma

    A pin stores a subspace at each component/sign and the prescribed linear image on that subspace. New rank is the sum of dimensions of the tested spaces in the quotients by the old pins, before any frame is applied.

    Concept map
    2 concepts
    100%
    Proven claimDefinitionThis conceptRelated conceptA → B: B builds on ADescendants are omitted for concepts with more than 10 descendants.
    Evidence

    This concept declares 5 statements. Each proof establishes one of them relative to its assumptions.

    1 basis_rank proven

    2 event_basis proven

    3 event_refinement proven

    4 rank_mono proven

    5 rank_refinement proven

    Lean source view on GitHub

    1import Lax342547.MomentSpace
    2import Mathlib.LinearAlgebra.Matrix.Rank
    3import Mathlib.LinearAlgebra.Isomorphisms
    4
    5/-!
    6---
    7title: Exact image pins in nominal coefficient spaces
    8type: lemma
    9---
    10A pin stores a subspace at each component/sign and the prescribed linear
    11image on that subspace. New rank is the sum of dimensions of the tested
    12spaces in the quotients by the old pins, before any frame is applied.
    13-/
    14
    15namespace Lax342547.ExactPins
    16
    17open Lax342547.MomentSpace
    18
    19def Pin (Axis I N : Type) :=
    20 Σ S : Axis → Submodule Binary (I → Binary), ∀ a, S a →ₗ[Binary] (N → Binary)
    21
    22namespace Pin
    23
    24variable {Axis I N : Type}
    25
    26def space (P : Pin Axis I N) (a : Axis) : Submodule Binary (I → Binary) := P.1 a
    27def value (P : Pin Axis I N) (a : Axis) : P.space a →ₗ[Binary] (N → Binary) := P.2 a
    28
    29def empty : Pin Axis I N := ⟨fun _ => ⊥, fun _ => 0⟩
    30
    31def Extends (P Q : Pin Axis I N) : Prop :=
    32 ∃ h : ∀ a, P.space a ≤ Q.space a,
    33 ∀ a (v : P.space a), Q.value a ⟨v.val, h a v.property⟩ = P.value a v
    34
    35noncomputable def rank [Fintype Axis] (P : Pin Axis I N) : ℕ :=
    36 ∑ a, Module.finrank Binary (P.space a)
    37
    38noncomputable def relativeRank [Fintype Axis] (P Q : Pin Axis I N) : ℕ :=
    39 ∑ a, Module.finrank Binary ((Q.space a).map (P.space a).mkQ)
    40
    41def event {Ω : Type} (A : Ω → Axis → (I → Binary) →ₗ[Binary] (N → Binary))
    42 (P : Pin Axis I N) : Set Ω :=
    43 {o | ∀ a (v : P.space a), A o a v.val = P.value a v}
    44
    45def joinAt {Ω : Type} (A : Ω → Axis → (I → Binary) →ₗ[Binary] (N → Binary))
    46 (P Q : Pin Axis I N) (o : Ω) : Pin Axis I N :=
    47 ⟨fun a => P.space a ⊔ Q.space a,
    48 fun a => (A o a).comp (P.space a ⊔ Q.space a).subtype⟩
    49
    50noncomputable def basisMatrix [Fintype I] (P : Pin Axis I N) (a : Axis) :
    51 Matrix I (Fin (Module.finrank Binary (P.space a))) Binary :=
    52 fun i j => (Module.finBasis Binary (P.space a) j).val i
    53
    54noncomputable def basisImage [Fintype I] (P : Pin Axis I N) (a : Axis) :
    55 Matrix N (Fin (Module.finrank Binary (P.space a))) Binary :=
    56 fun n j => P.value a (Module.finBasis Binary (P.space a) j) n
    57
    58end Pin
    59
    60noncomputable instance {Axis I N : Type} [Fintype Axis] [Fintype I] [Fintype N] :
    61 Fintype (Pin Axis I N) := by
    62 classical
    63 let : Finite (Submodule Binary (I → Binary)) :=
    64 Finite.of_injective (fun S : Submodule Binary (I → Binary) => (S : Set (I → Binary))) SetLike.coe_injective
    65 let : ∀ S : Submodule Binary (I → Binary), Finite (S →ₗ[Binary] (N → Binary)) :=
    66 fun S => Finite.of_injective (fun f : S →ₗ[Binary] (N → Binary) => (f : S → N → Binary)) DFunLike.coe_injective
    67 exact Fintype.ofFinite (Σ S : Axis → Submodule Binary (I → Binary), ∀ a, S a →ₗ[Binary] (N → Binary))
    68
    69axiom event_refinement {Ω Axis I N : Type}
    70 (A : Ω → Axis → (I → Binary) →ₗ[Binary] (N → Binary)) (P Q : Pin Axis I N)
    71 (o : Ω) (ho : o ∈ P.event A ∩ Q.event A) :
    72 P.Extends (P.joinAt A Q o) ∧ Q.Extends (P.joinAt A Q o) ∧
    73 (P.joinAt A Q o).event A = P.event A ∩ Q.event A
    74
    75axiom rank_refinement {Ω Axis I N : Type} [Fintype Axis] [Fintype I]
    76 (A : Ω → Axis → (I → Binary) →ₗ[Binary] (N → Binary)) (P Q : Pin Axis I N) (o : Ω) :
    77 (P.joinAt A Q o).rank = P.rank + P.relativeRank Q
    78
    79axiom rank_mono {Axis I N : Type} [Fintype Axis] [Fintype I]
    80 (P Q : Pin Axis I N) (h : P.Extends Q) : P.rank ≤ Q.rank
    81
    82axiom basis_rank {Axis I N : Type} [Fintype I] (P : Pin Axis I N) (a : Axis) :
    83 (P.basisMatrix a).rank = Module.finrank Binary (P.space a)
    84
    85axiom event_basis {Ω Axis I N : Type} [Fintype I]
    86 (A : Ω → Axis → Matrix N I Binary) (P : Pin Axis I N) :
    87 P.event (fun o a => (A o a).mulVecLin) =
    88 {o | ∀ a, A o a * P.basisMatrix a = P.basisImage a}
    89
    90end Lax342547.ExactPins
    91
    Show ProofShow ProofShow ProofShow ProofShow Proof

    Discussion

    Ask a question or add context. Endorsements and structured flags are kept in the review panel above.

    Loading discussion…