Dedekind 0.0.0
A structuralist C++23 Module Library
Loading...
Searching...
No Matches
dedekind::linear_algebra::HasInvolutiveTranspose Concept Referenceexport

Transpose is its own inverse at the type level: decltype((a.transpose()).transpose()) is M. More...

Concept definition

template<typename M>
std::same_as<std::remove_cvref_t<
decltype(std::declval<M>().transpose().transpose())>,
std::remove_cvref_t<M>>
Transpose is its own inverse at the type level: decltype((a.transpose()).transpose()) is M.
Definition contracts.cppm:364
A matrix carrier equipped with a transpose operation.
Definition contracts.cppm:343

Detailed Description

Transpose is its own inverse at the type level: decltype((a.transpose()).transpose()) is M.

This is the structural half of the involution law (Mᵀ)ᵀ = M. The value-level equality (a.transpose()).transpose() == a is a per-type theorem, witnessed via static_assert on concrete instances; the concept just pins that the types round-trip.

Involutions generate a ℤ/2 action on matrix carriers: the two-element group {identity, transpose} under composition. Matrix2x2V<T> is a degenerate witness (the orbit {M, Mᵀ} lives entirely inside Matrix2x2V<T>); the non-degenerate action is the Vec2V<T> ↔ Covec2V<T> exchange captured by IsTransposeDualPair.