ALP User Documentation  0.8.preview
Algebraic Programming User Documentation
List of all members
conjugate_left_mul< IN1, IN2, OUT, implementation > Class Template Reference

Conjugate-multiply operator that conjugates the left-hand operand before multiplication. More...

Inherits Operator< internal::conjugate_mul< IN1, IN2, OUT, true, implementation > >.

Detailed Description

template<typename IN1, typename IN2 = IN1, typename OUT = IN2, enum Backend implementation = config::default_backend>
class grb::operators::conjugate_left_mul< IN1, IN2, OUT, implementation >

Conjugate-multiply operator that conjugates the left-hand operand before multiplication.

Mathematical notation: \( \odot(x,y) \to x^* * y \).

Associativity and commutativity

In general, this operator is not associative nor commutative. This operator is anti-commutative with respect to conjugation.

If the input domains IN1 and IN2 are not complex, then this operator is both associative and commutative. The algebraic type system takes this into account automatically.

If IN1 is complex, IN2 is non-complex, and OUT is non-complex, then this operator is both associative and commutative in the generalised sense where casting a complex number to a non-complex domain is interpreted as taking the norm of the complex number.

Since this rather non-standard notion of associativity and commutativity assumes a casting behaviour that is not standard in C++, the algebraic type system does not consider the above combination of template arguments when deriving associativity and commutativity properties.

Other identities

The following holds: \( ( a \odot b ) \odot c = ( c \odot b ) \odot a. \) This property is currently not exposed by the algebraic type system, and (thus) not used by the framework.


The documentation for this class was generated from the following file: