ALP User Documentation
0.8.preview
Algebraic Programming User Documentation
|
Conjugate-multiply operator that conjugates the left-hand operand before multiplication. More...
Inherits Operator< internal::conjugate_mul< IN1, IN2, OUT, true, implementation > >.
Conjugate-multiply operator that conjugates the left-hand operand before multiplication.
Mathematical notation: \( \odot(x,y) \to x^* * y \).
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.
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.