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

Involutive endofunctor concept — an endomap F : T → T with F² ≅ Id. More...

Concept definition

template<typename F, typename T>
Stated in arrow language: F is an endomorphism on the object T (IsEndomorphism, domain and codomain T...
Definition involution.cppm:195
Involutive endofunctor concept — an endomap F : T → T with F² ≅ Id.
Definition lattice.cppm:1473

Detailed Description

Involutive endofunctor concept — an endomap F : T → T with F² ≅ Id.

lattice__Involutive_Endofunctor

An involutive endofunctor on a category C is a functor F : C → C whose square is naturally isomorphic to the identity functor. In thin / lattice categories (where the category structure is reduced to a carrier T plus a relation), this collapses to an endomap on T satisfying F(F(x)) = x for all x ∈ T.

Used downstream by the row-7 IsBooleanLatticeCategory (#698 Slice 7), where the complement is the canonical involution. Examples:

  • std::logical_not<bool> on bool: !!x = x.
  • std::bit_not<T> on integral T: ~~x = x.
  • :sets::Complement on a Boolean subobject lattice Sub: !!S ≡ S (the bona-fide involution from #683).

lattice__Involutive_Sollbruchstelle

Pragmatic placement: this concept lives inline in :lattice per #698 Q2. When a second consumer arrives (e.g. dual categories, opposite functors, monad-shaped opportunities), the natural extraction target is a new partition :involution or — if the consumer is monad-shaped — :monad. Until then the lightweight inline location avoids partition-graph churn for a single consumer.

Strictly: involution is not a monad. A monad (T, η, μ) has μ : T² → T; an involution has F² ≅ Id (the iteration goes back to identity, not to the functor itself). The shared shape is "endofunctor + property of its second iteration".

A callable F is an involutive endofunctor on T — invocable T → T with F² ≅ Id. This is exactly :involution's IsInvolution under the lattice-complement reading (used by IsBooleanLatticeCategory, #698 Slice 7); it reuses that concept rather than re-stating the shape + is_involutive_v certificate.