Imports
/- Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Joseph Tooby-Smith -/ module public import Physlib.Particles.BeyondTheStandardModel.RHN.AnomalyCancellation.PlusU1.Basic

Properties of Quad Sols for SM with RHN

We give a series of properties held by solutions to the quadratic equation.

In particular given a quad solution we define a map from linear solutions to quadratic solutions and show that it is a surjection. The main reference for this is:

    https://arxiv.org/abs/2006.03588

@[expose] public sectionn:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSolsa:b:quadBiLin.toHomogeneousQuad (a S.val) + 0 + 2 * (a * (b * (quadBiLin S.val) C.val)) = a * (a * accQuad S.val + 2 * b * (quadBiLin S.val) C.val) erw [n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSolsa:b:a ^ 2 * accQuad S.val + 0 + 2 * (a * (b * (quadBiLin S.val) C.val)) = a * (a * accQuad S.val + 2 * b * (quadBiLin S.val) C.val)n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSolsa:b:a ^ 2 * accQuad S.val + 0 + 2 * (a * (b * (quadBiLin S.val) C.val)) = a * (a * accQuad S.val + 2 * b * (quadBiLin S.val) C.val) All goals completed! 🐙

A helper function for what comes later.

def α₁ (S : (PlusU1 n).LinSols) : := - 2 * quadBiLin S.val C.val

A helper function for what comes later.

def α₂ (S : (PlusU1 n).LinSols) : := accQuad S.val
lemma α₂_AFQ (S : (PlusU1 n).QuadSols) : α₂ S.1 = 0 := quadSol Slemma accQuad_α₁_α₂ (S : (PlusU1 n).LinSols) : accQuad ((α₁ C S) S + α₂ S C.1).val = 0 := n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSolsaccQuad (α₁ C S S + α₂ S C.toLinSols).val = 0 erw [n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSolsα₁ C S * (α₁ C S * accQuad S.val + 2 * α₂ S * (quadBiLin S.val) C.val) = 0 n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSols-2 * (quadBiLin S.val) C.val * (-2 * (quadBiLin S.val) C.val * accQuad S.val + 2 * α₂ S * (quadBiLin S.val) C.val) = 0 n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSols-2 * (quadBiLin S.val) C.val * (-2 * (quadBiLin S.val) C.val * accQuad S.val + 2 * accQuad S.val * (quadBiLin S.val) C.val) = 0n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSols-2 * (quadBiLin S.val) C.val * (-2 * (quadBiLin S.val) C.val * accQuad S.val + 2 * accQuad S.val * (quadBiLin S.val) C.val) = 0 All goals completed! 🐙lemma accQuad_α₁_α₂_zero (S : (PlusU1 n).LinSols) (h1 : α₁ C S = 0) (h2 : α₂ S = 0) (a b : ) : accQuad (a S + b C.1).val = 0 := n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSolsh1:α₁ C S = 0h2:α₂ S = 0a:b:accQuad (a S + b C.toLinSols).val = 0 erw [n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSolsh1:α₁ C S = 0h2:α₂ S = 0a:b:a * (a * accQuad S.val + 2 * b * (quadBiLin S.val) C.val) = 0n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSolsh1:α₁ C S = 0h2:α₂ S = 0a:b:a * (a * accQuad S.val + 2 * b * (quadBiLin S.val) C.val) = 0 n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).LinSolsh2:quadBiLin.toHomogeneousQuad S.val = 0a:b:h1: x, (toSpeciesEquiv S.val 0 x * toSpeciesEquiv C.val 0 x + -(2 * (toSpeciesEquiv S.val 1 x * toSpeciesEquiv C.val 1 x)) + toSpeciesEquiv S.val 2 x * toSpeciesEquiv C.val 2 x + -(toSpeciesEquiv S.val 3 x * toSpeciesEquiv C.val 3 x) + toSpeciesEquiv S.val 4 x * toSpeciesEquiv C.val 4 x) = 0a * (a * accQuad S.val + 2 * b * (quadBiLin S.val) C.val) = 0 All goals completed! 🐙

The construction of a QuadSol from a LinSols in the generic case.

def genericToQuad (S : (PlusU1 n).LinSols) : (PlusU1 n).QuadSols := linearToQuad ((α₁ C S) S + α₂ S C.1) (accQuad_α₁_α₂ C S)
lemma genericToQuad_on_quad (S : (PlusU1 n).QuadSols) : genericToQuad C S.1 = (α₁ C S.1) S := n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsgenericToQuad C S.toLinSols = α₁ C S.toLinSols S n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSols(genericToQuad C S.toLinSols).val = (α₁ C S.toLinSols S).val n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsα₁ C S.toLinSols S.val + α₂ S.toLinSols C.val = α₁ C S.toLinSols S.val All goals completed! 🐙All goals completed! 🐙

The construction of a QuadSol from a LinSols in the special case when α₁ C S = 0 and α₂ S = 0.

def specialToQuad (S : (PlusU1 n).LinSols) (a b : ) (h1 : α₁ C S = 0) (h2 : α₂ S = 0) : (PlusU1 n).QuadSols := linearToQuad (a S + b C.1) (accQuad_α₁_α₂_zero C S h1 h2 a b)
lemma special_on_quad (S : (PlusU1 n).QuadSols) (h1 : α₁ C S.1 = 0) : specialToQuad C S.1 1 0 h1 (α₂_AFQ S) = S := n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsh1:α₁ C S.toLinSols = 0specialToQuad C S.toLinSols 1 0 h1 = S n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsh1:α₁ C S.toLinSols = 0(specialToQuad C S.toLinSols 1 0 h1 ).val = S.val n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsh1:α₁ C S.toLinSols = 01 S.val + 0 C.val = S.val All goals completed! 🐙

The construction of a QuadSols from a LinSols and two rationals taking account of the generic and special cases. This function is a surjection.

def toQuad : (PlusU1 n).LinSols × × (PlusU1 n).QuadSols := fun S => if h : α₁ C S.1 = 0 α₂ S.1 = 0 then specialToQuad C S.1 S.2.1 S.2.2 h.1 h.2 else S.2.1 genericToQuad C S.1

A function from QuadSols to LinSols × ℚ × ℚ which is a right inverse to toQuad.

@[simp] def toQuadInv : (PlusU1 n).QuadSols (PlusU1 n).LinSols × × := fun S => if α₁ C S.1 = 0 then (S.1, 1, 0) else (S.1, (α₁ C S.1)⁻¹, 0)
n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSols(if α₁ C S.toLinSols = 0 then (S.toLinSols, 1, 0) else (S.toLinSols, (α₁ C S.toLinSols)⁻¹, 0)).1 = S.toLinSols n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsh✝:α₁ C S.toLinSols = 0(S.toLinSols, 1, 0).1 = S.toLinSolsn:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsh✝:¬α₁ C S.toLinSols = 0(S.toLinSols, (α₁ C S.toLinSols)⁻¹, 0).1 = S.toLinSols n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsh✝:α₁ C S.toLinSols = 0(S.toLinSols, 1, 0).1 = S.toLinSolsn:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsh✝:¬α₁ C S.toLinSols = 0(S.toLinSols, (α₁ C S.toLinSols)⁻¹, 0).1 = S.toLinSols All goals completed! 🐙n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsα₁ C S.toLinSols = 0 α₁ C S.toLinSols = 0 0 = 0 All goals completed! 🐙All goals completed! 🐙All goals completed! 🐙n:C:(PlusU1 n).QuadSolsS:(PlusU1 n).QuadSolsh:¬α₁ C S.toLinSols = 0(toQuadInv C S).2.1 genericToQuad C (toQuadInv C S).1 = S All goals completed! 🐙theorem toQuad_surjective : Function.Surjective (toQuad C) := Function.RightInverse.surjective (toQuad_rightInverse C)