import sympy as sp

# Define measured values
m_W = 80.379  # W boson mass in GeV/c^2
m_Z = 91.1876  # Z boson mass in GeV/c^2
m_h = 125.1  # Higgs boson mass in GeV/c^2
m_e = 0.511e-3  # Electron mass in GeV/c^2
m_mu = 105.66e-3  # Muon mass in GeV/c^2
m_tau = 1776.86e-3  # Tau mass in GeV/c^2
m_c = 1.27  # Charm quark mass in GeV/c^2
m_s = 95e-3  # Strange quark mass in GeV/c^2
m_t = 172.76  # Top quark mass in GeV/c^2
m_b = 4.18  # Bottom quark mass in GeV/c^2

# Gauge boson terms
term_bosons = -1/4 * sp.symbols('F_a_mu_nu') * sp.symbols('F_a_mu_nu')
term_bosons = term_bosons.subs(sp.symbols('m_W'), m_W).subs(sp.symbols('m_Z'), m_Z)

# Fermion field terms
term_fermions = sp.summation(sp.conjugate(sp.symbols('psi_f')) * (sp.I * sp.symbols('gamma_mu') * sp.symbols('D_mu') - sp.symbols('m_f')) * sp.symbols('psi_f'), (sp.symbols('f'), 1, sp.symbols('N_f')))

# Higgs field terms
term_higgs = sp.symbols('D_mu_phi').conjugate() * sp.symbols('D_mu_phi') - sp.symbols('V_phi')

# Terms for additional fields (e.g., neutrinos and electrons)
term_additional = sp.summation(sp.conjugate(sp.symbols('e_i')) * (sp.I * sp.symbols('gamma_mu') * sp.symbols('partial_mu') * sp.symbols('e_i')), (sp.symbols('i'), 1, sp.symbols('N_i')))

# Terms for additional Higgs bosons
term_higgs_additional = 1/2 * sp.symbols('partial_mu_phi_i') * sp.symbols('partial_mu_phi_i') - 1/2 * sp.symbols('m_phi_i')**2 * sp.symbols('phi_i')**2

# Potential involving multiple Higgs fields
term_potential = sp.symbols('V_phi_1_phi_2_phi_N')

# Construct the Lagrangian
lagrangian = term_bosons + term_fermions + term_higgs + term_additional + term_higgs_additional + term_potential

def test_invariance_under_lorentz_transformations():
    """
    Verifies that the Lagrangian is invariant under Lorentz transformations.
    """

    # Import the Lorentz module
    import sympy.physics.special_functions.lorentz as sfl

    # Expand the Lagrangian
    lagrangian_expanded = lagrangian.expand()

    # Create a list of terms in the expanded Lagrangian
    lagrangian_terms = list(lagrangian_expanded)

    # Apply the Lorentz transformation to each term in the expanded Lagrangian
    transformed_terms = []
    for term in lagrangian_terms:
        transformed_term = term.transform(sfl.LorentzTransform())
        transformed_terms.append(transformed_term)

    # Reconstruct the transformed Lagrangian
    lagrangian_transformed = sp.Add(*transformed_terms)

    # Verify that the transformed Lagrangian is equal to the original Lagrangian
    assert lagrangian_transformed == lagrangian_expanded

# test_invariance_under_lorentz_transformations()

# Print the Lagrangian
print("Lagrangian of the Standard Model:")
print(lagrangian)

work in progress, the test is not passing…

link to live code

Deja un comentario