Input expressions, apply substitutions and other transformations and Redberry will automatically match and relabel indices, resolve dummy indices clashes etc.:
expr = 'F_mn*(F^ma + T^am)' .t println 'F_ij = A_i*A_j' .t > > expr |
> A_m*A_n*(A^m*A^a + T^am) |
subs = 'x = x_a^a' .t expr = '(x*f_a + y_a)*(x*f_b + z_b)' .t println subs > > expr |
> (x_d^d*f_a+y_a)*(x_c^c*f_b+z_b) |
Redberry provides a wide range of general-purpose and tensor-specific transformations:
println Expand > > '(a+b)**2' .t |
> a**2 + 2*a*b + b**2 |
expr = 'g_mn*A^mn + g_ab*(g^ab + A^ab)' .t println EliminateMetrics > > expr |
> 2*A^m_m + d^b_b |
Define symmetries of tensors and Redberry will take them into account during any manipulation:
// Setting up Riemann symmetries addSymmetry 'R_abcd' , [[ 0 , 2 ], [ 1 , 3 ]] .p addSymmetry 'R_abcd' , - [[ 1 , 0 ]] .p println 'R^abc_d*R_abc^m + R_rdqp*R^mrqp' .t |
> 0 |
Calculate trace of Dirac, SU(N) matrices, simplify Levi-Civita tensors, calculate one-loop counterterms etc.:
// Set up gamma matrix defineMatrices 'G_a' , Matrix1 .matrix // DiracTrace transformation dTrace = DiracTrace[ 'G_a' ] expr = 'Tr[(p_a*G^a + m)*(q_a*G^a-m)*G_n]' .t println dTrace > > expr |
> 4*m*q_n - 4*m*p_n |
The underlying Redberry algorithms are largely based on computational graph and group theory:
perm1 = [[ 0 , 7 , 4 , 2 ], [ 8 , 5 ]] .p perm2 = [[ 0 , 3 , 6 ], [ 1 , 4 , 2 ]] .p group = Group(perm1, perm2) println group .setwiseStabilizer ( 0 , 4 , 2 , 5 ) |
> Group( [[1, 7, 6]], [[1, 3, 7]], [[1, 6], [2, 4]], [[0, 2], [1, 6]] ) |
Use all features of general-purpose programming language (looping, branching, functions, classes etc.) to implement custom functions and transformations:
//invert indices of expr invert = { expr - > indices = expr .indices (indices % indices .inverted ) > > expr } as Transformation println invert > > [ 'f_mn' .t , 't^ab' .t ] |
> [f^mn, t_ab] |
This is a sitemap over all available pages ordered by namespaces.