|
Dedekind 0.0.0
A structuralist C++23 Module Library
|
A linear operator: a (callable) IsArrow that additionally preserves the semimodule structure (the right-S-semimodule-hom law above — sound over any semiring, no commutativity assumed).
More...
A linear operator: a (callable) IsArrow that additionally preserves the semimodule structure (the right-S-semimodule-hom law above — sound over any semiring, no commutativity assumed).
What this concept reifies (and what it does not). As code, IsLinearOperator<F> is exactly IsArrow<F> plus the opt-in linearity trait — a callable arrow (Domain/ a call operator, which is what makes Codomain +Mat(S) an IsArrow) that is declared linear. The wider reading IsLinearOperator ⟹ IsFunction ⟹ IsRelation ⟹ IsArrow is the conceptual chain, not a direct concept subsumption: the relational IsFunction<R,A,B> / IsRelation<S,T1,T2> are predicates over a Set<pair> carrier, a different shape from this unary callable arrow. The bridge is the graph: graph(f) (:relational, via arrow_as_relation) IS the IsFunction / IsRelation, so the chain is reified through that adapter, not by making IsLinearOperator require the relational concepts directly. (Linearity itself is a law over all inputs — uncheckable — hence the opt-in trait, not a computed refinement.)
FIXME(#787): once Mat(S) carries a dagger inverse, IsUnitary ⟹ IsIsomorphism becomes real; FIXME(#301): invertibility via determinant/adjugate; FIXME(#442): the law set that survives when S is not a field.