deep_causality_multivector/alias/alias_complex.rs
1/*
2 * SPDX-License-Identifier: MIT
3 * Copyright (c) 2023 - 2026. The DeepCausality Authors and Contributors. All Rights Reserved.
4 */
5use crate::{ComplexMultiVector, Metric};
6use deep_causality_num::Complex64;
7
8impl ComplexMultiVector {
9 /// Cl_C(2): Complex Quaternions / Pauli Algebra over C
10 /// Note: The Clifford factor L_C ~ Cl(0, 1) and L_H ~ Cl(0, 2) are negative definite.
11 /// However, the canonical complex Pauli Algebra is often taken as Cl(2, 0).
12 /// We retain Euclidean(2) here for the canonical Cl_C(2) ~ Cl(2, 0) definition.
13 pub fn new_complex_pauli(data: Vec<Complex64>) -> Self {
14 Self::new_complex_clifford_2(data)
15 }
16
17 /// Cl_C(2): Complex Quaternions / Pauli Algebra over C
18 /// Note: The Clifford factor L_C ~ Cl(0, 1) and L_H ~ Cl(0, 2) are negative definite.
19 /// However, the canonical complex Pauli Algebra is often taken as Cl(2, 0).
20 /// We retain Euclidean(2) here for the canonical Cl_C(2) ~ Cl(2, 0) definition.
21 pub fn new_complex_clifford_2(data: Vec<Complex64>) -> Self {
22 Self::new(data, Metric::Euclidean(2)).unwrap()
23 }
24
25 /// Cl_C(4) (Full Multiplication Algebra of the Quaternions, M_H ~ Cl(0, 4)).
26 /// This algebra hosts the Spin(4) ~ SU(2)_L * SU(2)_R symmetries of the Pati-Salam and LR Symmetric models.
27 /// It is a key building block for the electroweak sector.
28 pub fn new_quaternion_operator(data: Vec<Complex64>) -> Self {
29 Self::new_complex_clifford_4(data)
30 }
31
32 /// Cl_C(4) (Full Multiplication Algebra of the Quaternions, M_H ~ Cl(0, 4)).
33 /// This algebra hosts the Spin(4) ~ SU(2)_L * SU(2)_R symmetries of the Pati-Salam and LR Symmetric models.
34 /// It is a key building block for the electroweak sector.
35 pub fn new_complex_clifford_4(data: Vec<Complex64>) -> Self {
36 // Metric is NonEuclidean(4) for M_H ~ Cl(0, 4).
37 // Dimension is 4, size is 2^4 = 16 complex coefficients.
38 Self::new(data, Metric::NonEuclidean(4)).unwrap()
39 }
40
41 /// Cl_C(6): The algebra acting on Octonions (via Left Multiplication), L_O ~ Cl(0, 6)
42 /// Used for the initial decomposition in the paper (Spin(10) -> Pati-Salam).
43 pub fn new_octonion_operator(data: Vec<Complex64>) -> Self {
44 Self::new_complex_clifford_6(data)
45 }
46 /// Cl_C(6): The algebra acting on Octonions (via Left Multiplication), L_O ~ Cl(0, 6)
47 /// Used for the initial decomposition in the paper (Spin(10) -> Pati-Salam).
48 pub fn new_complex_clifford_6(data: Vec<Complex64>) -> Self {
49 // Metric is NonEuclidean(6) to represent the generators e_i^2 = -1 (imaginary units).
50 Self::new(data, Metric::NonEuclidean(6)).unwrap()
51 }
52
53 /// Cl_C(6): The algebra of the Dixon state space, A = C*H*O ~ Cl(0, 6)
54 /// This is used to host the 64 complex components of the Standard Model generations.
55 pub fn new_dixon_state_space(data: Vec<Complex64>) -> Self {
56 Self::new_complex_clifford_6(data)
57 }
58
59 /// Cl_C(8): The Left Multiplication Algebra of the Dixon Algebra, L_A ~ Cl(0, 8)
60 /// L_A = L_C * L_H * L_O ~ Cl(0, 1) * Cl(0, 2) * Cl(0, 6) ~ Cl(0, 8).
61 /// This is used to host Spin(8) triality and the Cl(6) decomposition.
62 pub fn new_dixon_algebra_left(data: Vec<Complex64>) -> Self {
63 Self::new_complex_clifford_8(data)
64 }
65
66 /// Cl_C(8): The Left Multiplication Algebra of the Dixon Algebra, L_A ~ Cl(0, 8)
67 /// L_A = L_C * L_H * L_O ~ Cl(0, 1) * Cl(0, 2) * Cl(0, 6) ~ Cl(0, 8).
68 /// This is used to host Spin(8) triality and the Cl(6) decomposition.
69 pub fn new_complex_clifford_8(data: Vec<Complex64>) -> Self {
70 // Metric is NonEuclidean(8) for L_A ~ Cl(0, 8).
71 Self::new(data, Metric::NonEuclidean(8)).unwrap()
72 }
73
74 /// Cl_C(10): The Grand Unified Algebra (Spin(10)) ~ L_A * R_H ~ Cl(0, 10)
75 /// This is the full multiplication algebra of A = R*C*H*O.
76 pub fn new_gut_algebra(data: Vec<Complex64>) -> Self {
77 Self::new_complex_clifford_10(data)
78 }
79
80 /// Cl_C(10): The Grand Unified Algebra (Spin(10)) ~ L_A * R_H ~ Cl(0, 10)
81 /// This is the full multiplication algebra of A = R*C*H*O.
82 pub fn new_complex_clifford_10(data: Vec<Complex64>) -> Self {
83 // Metric is NonEuclidean(10) for M_A ~ Cl(0, 10).
84 Self::new(data, Metric::NonEuclidean(10)).unwrap()
85 }
86}