|
Dedekind 0.0.0
A structuralist C++23 Module Library
|
Rank-1 matrix M = u][j] ⊗ v withM[i= u(i) product taken in a semiring.
More...⊗ thev(j),

Public Member Functions | |
|
template<typename I, typename J> requires dedekind::order::IsDirectedSet<I> && dedekind::order::IsDirectedSet<J> && std::convertible_to<I, row_domain_type> && std::convertible_to<J, col_domain_type> | |
| constexpr scalar_type | operator() (I const &i, J const &j) const |
Entry (i, j) = u(i) · v(j). Each axis is intensional in its factor's Domain — the row index runs in U::Domain, the column index in V::Domain (the two can differ). | |
Public Attributes | |
| U | u |
| V | v |
Rank-1 matrix M = u][j] ⊗ v withM[i= u(i) product taken in a semiring. ⊗ thev(j),
| U | Left factor (IsArrow with size_t domain). |
| V | Right factor (IsArrow with size_t domain, same scalar codomain as U). |
| Mult | The scalar product functor ⊗. Defaults to std::multiplies (the ring ·, so every existing call site and witness is unchanged), but any semiring ⊗ is admissible — pass dedekind::algebra::semiring_ops<T>::mult to build a tropical dyad (⊗ = +), which the :transfer partition folds into the bra·ket eigenvalue. This is the sole hook that lets a max-plus carrier — which has no C++ operator* — be a rank-1 matrix entry type. |
Stored intensionally — neither factor needs to be dense-materialised. Either or both factors may be infinite-dimensional intensional sequences (e.g. dedekind::sequences::Path<T>); the outer product itself carries no dense m ×.n storage