pub struct E8RootSystem { /* private fields */ }Expand description
E₈ Root System
Encapsulates all 240 roots of E₈ with exact arithmetic.
§Invariants
- Exactly 240 roots total
- Exactly 112 integer roots
- Exactly 128 half-integer roots
- Every root has norm² = 2
- Every root r has negation -r in the system
Implementations§
Source§impl E8RootSystem
impl E8RootSystem
Sourcepub fn new() -> Self
pub fn new() -> Self
Create new E₈ root system
Generates all 240 roots and verifies invariants.
Sourcepub fn get_negation(&self, index: usize) -> usize
pub fn get_negation(&self, index: usize) -> usize
Sourcepub fn sign_class_representative(&self, index: usize) -> usize
pub fn sign_class_representative(&self, index: usize) -> usize
Get sign class representative (smaller of {r, -r})
Sourcepub fn count_sign_classes(&self, indices: &[usize]) -> usize
pub fn count_sign_classes(&self, indices: &[usize]) -> usize
Count number of distinct sign classes used by a set of root indices
Sourcepub fn inner_product(&self, i: usize, j: usize) -> Rational
pub fn inner_product(&self, i: usize, j: usize) -> Rational
Compute inner product between two roots
Sourcepub fn are_negatives(&self, i: usize, j: usize) -> bool
pub fn are_negatives(&self, i: usize, j: usize) -> bool
Check if two roots are negatives of each other
Returns true if root j is the negative of root i
Sourcepub fn find_root(&self, root: &Vector8) -> Option<usize>
pub fn find_root(&self, root: &Vector8) -> Option<usize>
Find index of a given root vector
Returns None if root is not in the system.
Sourcepub const fn simple_roots() -> [Vector8; 8]
pub const fn simple_roots() -> [Vector8; 8]
Get the 8 simple roots of E₈
§Simple Roots
The simple roots form a basis for the root system, with special properties:
- Every positive root is a non-negative integer linear combination of simple roots
- They form a linearly independent set spanning the root space
- The Weyl group is generated by reflections through these roots
For E₈, we use the standard simple root basis:
- α₁ = e₁ - e₂ = (1, -1, 0, 0, 0, 0, 0, 0)
- α₂ = e₂ - e₃ = (0, 1, -1, 0, 0, 0, 0, 0)
- α₃ = e₃ - e₄ = (0, 0, 1, -1, 0, 0, 0, 0)
- α₄ = e₄ - e₅ = (0, 0, 0, 1, -1, 0, 0, 0)
- α₅ = e₅ - e₆ = (0, 0, 0, 0, 1, -1, 0, 0)
- α₆ = e₆ - e₇ = (0, 0, 0, 0, 0, 1, -1, 0)
- α₇ = e₇ + e₈ = (0, 0, 0, 0, 0, 0, 1, 1)
- α₈ = ½(-1, -1, -1, -1, -1, -1, -1, -1)
This basis encodes the E₈ Dynkin diagram structure:
- Roots α₁ through α₇ form an A₇ chain
- Root α₈ connects to α₇, creating the E₈ branching
§Returns
Array of 8 simple roots with norm² = 2
Trait Implementations§
Source§impl Clone for E8RootSystem
impl Clone for E8RootSystem
Source§fn clone(&self) -> E8RootSystem
fn clone(&self) -> E8RootSystem
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for E8RootSystem
impl Debug for E8RootSystem
Auto Trait Implementations§
impl Freeze for E8RootSystem
impl RefUnwindSafe for E8RootSystem
impl Send for E8RootSystem
impl Sync for E8RootSystem
impl Unpin for E8RootSystem
impl UnwindSafe for E8RootSystem
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more