Overview
Feynman.Feynman
Feynman.ISP
Feynman.balancingIdeal
Feynman.computeBaikovMatrix
Feynman.computeIBP
Feynman.computeM1
Feynman.eliminateVariables
Feynman.feynmanDenominators
Feynman.labelGraph
Feynman.makePoly
Feynman.printGraph
Feynman.printIBP
Feynman.printLabeledGraph
Feynman.propagators
Feynman.removeElimVars
Feynman.removeParameter
Feynman.removeVariable
Feynman.removeVariableLocal
Feynman.substituteGraph
Feynman.Feynman
— ModuleThe package Feynman generate the Feynman integrand associated to a Feynman diagram (graph) and compute an IBP system using the powerful module-intersection integration-by-parts (IBP) method, suitable for multi-loop and multi-scale Feynman integral reduction. It will provide( soon! ) an application programming interface(API) in OSCAR to use packages NeatIBP, pfd-parallel to make this computation much faster and to solve the reduction problem associated to Feynman integrals completely.The package Feynman is based on the computer algebra system OSCAR and is provided as a package for the Julia programming language. This package can generate the Feynman integrand associated to a Feynman graph $G$ if $\text{number of internal edges} < \frac{1}{2}l(l+1)+el$. Here $l$ is the loop number and $e=span<p_1,...,p_{n_{ext}}>$ is the number of linearly independent external momenta of $G$. In the generic case (That we considered in this package), $e=p_{n_{ext}}-1$. In the case $\text{number of internal edges} < \frac{1}{2}l(l+1)+el$, the package generate the Feynman integrand associated to a larger Feynman graph $G'$ so that $G$ is a subgraph of $G'$. User can set appropriately the denomiator powers to zero to obtain the Baikov representation of $G$.
Feynman.ISP
— MethodISP(G::labeledgraph)
USAGE : ISP(G);
ASSUME : G is a labeled graph.
RETURN : ideal containing the irreducible scalar products(ISPs).
THEORY : An scalar product that cannot expressed interms of inverse propagators in called an irreducible scalar product
#Examples
julia> G=simple_graph([1,2,3,4,5,6],[(1,2),(3,6),(4,5),(1,6),(2,3),(5,6),(3,4),1,2,5,4]);
julia> G=labelGraph(G,0);
julia> Gelim=eliminateVariables(G);
julia> ISP(Gelim)
Ideal generated by
p[3]*q[1]
p[1]*q[2]
Feynman.balancingIdeal
— MethodbalancingIdeal(G::labeledgraph)
USAGE : balancingIdeal(G);
ASSUME : G is a labeled graph.
RETURN : Ideal of balancing condition of the graph. i.e Ideal generated by the relation of the momentums which are obtained by applying momentum conservation law to external mementa, and at each vertex; This is an ideal of the ring G.over.
#Examples
julia> G=simple_graph([1,2,3,4],[(1,3),(1,2),(2,4),(3,4),1,2,3,4]);
julia> G=labelGraph(G,0);
julia> balancingIdeal(G)
Ideal generated by
p[1] + p[2] + p[3] + p[4]
p[1] + q[1] + q[2]
p[2] - q[2] + q[3]
p[3] - q[1] + q[4]
p[4] - q[3] - q[4]
Feynman.computeBaikovMatrix
— MethodcomputeBaikovMatrix(G::simple_graphgraph)
USAGE : computeBaikovMatrix(G);
ASSUME : G is a graph, or G is a labled graph where redundant variables have been eliminated by the procedure eliminateVariables, and deleted from the ring by the procedure removeElimVars.
RETURN : a labeled graph G, where the computed Baikov matrix and the polynomial ring where baikovmatrix is defined are stored in G.baikovmatrix and G.baikovover respectively.
THEORY :This function compute the Baikov representation of the given graph $G$, which holds the condition $n_{int} \leq N$. There, it will compute the so-called Baikov matrix, which is the Gram matrix corresponding to the graph such that all scalar products are replaced by the corresponding expression of Baikov variables ($z_1,...,z_N$) and kinematic variables ($t_i,\,i=1,..., N_B$), assuming $p_i^2=0$ for $i=1,...,n_{ext}$. The user only needs to provide the graph details in terms of vertices and edges
#Examples(If G considerd as labeled graph)
julia> G=simple_graph([1,2,3,4,5,6],[(6,1),(4,6),(1,2),(3,5),(4,3),(2,5),(5,6),1,2,3,4]);
julia> G=labelGraph(G,0);
julia> G=eliminateVariables(G);
julia> G=removeElimVars(G);
julia> G=computeBaikovMatrix(G);
labels used for Gram matrix of external loop momenta:
["p[1]*p[2] => 1//2*t[1]"]
["p[1]*p[3] => 1//2*t[2]"]
["p[2]*p[3] => -1//2*t[1] - 1//2*t[2]"]
Assignment of Baikov variables (Z_i) are:
["z[1] => p[3]*q[1]"]
["z[2] => q[1]^2"]
["z[3] => -2*p[1]*q[1] + q[1]^2"]
["z[4] => 2*p[1]*p[2] - 2*p[1]*q[1] - 2*p[2]*q[1] + q[1]^2"]
["z[5] => p[1]*q[2]"]
["z[6] => q[2]^2"]
["z[7] => 2*p[1]*p[2] - 2*p[1]*q[2] - 2*p[2]*q[2] + q[2]^2"]
["z[8] => -2*p[1]*q[2] - 2*p[2]*q[2] - 2*p[3]*q[2] + q[2]^2"]
["z[9] => q[1]^2 - 2*q[1]*q[2] + q[2]^2"]
julia> G.baikovmatrix
5×5 Matrix{RingElem}:
0 1//2*t[1] … 1//2*z[2] - 1//2*z[3] z[5]
1//2*t[1] 0 1//2*t[1] + 1//2*z[3] - 1//2*z[4] 1//2*t[1] - z[5] + 1//2*z[6] - 1//2*z[7]
1//2*t[2] -1//2*t[1] - 1//2*t[2] z[1] -1//2*t[1] + 1//2*z[7] - 1//2*z[8]
1//2*z[2] - 1//2*z[3] 1//2*t[1] + 1//2*z[3] - 1//2*z[4] z[2] 1//2*z[2] + 1//2*z[6] - 1//2*z[9]
z[5] 1//2*t[1] - z[5] + 1//2*z[6] - 1//2*z[7] 1//2*z[2] + 1//2*z[6] - 1//2*z[9] z[6]
#Examples( if G considered as simple graph)
julia> G=simple_graph([1,2,3,4,5,6],[(6,1),(4,6),(1,2),(3,5),(4,3),(2,5),(5,6),1,2,3,4]);
julia> G=computeBaikovMatrix(G);
labels used for Gram matrix of external loop momenta:
["p[1]*p[2] => 1//2*t[1]"]
["p[1]*p[3] => 1//2*t[2]"]
["p[2]*p[3] => -1//2*t[1] - 1//2*t[2]"]
Assignment of Baikov variables (Z_i) are:
["z[1] => p[3]*q[1]"]
["z[2] => q[1]^2"]
["z[3] => -2*p[1]*q[1] + q[1]^2"]
["z[4] => 2*p[1]*p[2] - 2*p[1]*q[1] - 2*p[2]*q[1] + q[1]^2"]
["z[5] => p[1]*q[2]"]
["z[6] => q[2]^2"]
["z[7] => 2*p[1]*p[2] - 2*p[1]*q[2] - 2*p[2]*q[2] + q[2]^2"]
["z[8] => -2*p[1]*q[2] - 2*p[2]*q[2] - 2*p[3]*q[2] + q[2]^2"]
["z[9] => q[1]^2 - 2*q[1]*q[2] + q[2]^2"]
G.baikovmatrix is the Gram matrix where entries are replaced with Baikov variables:
\[\begin{bmatrix} 0 & 1//2*t[1] & 1//2*t[2] & 1//2*z[2] - 1//2*z[3] & z[5]\\ 1//2*t[1] & 0 & -1//2*t[1] - 1//2*t[2] & 1//2*t[1] + 1//2*z[3] - 1//2*z[4] & 1//2*t[1] - z[5] + 1//2*z[6] - 1//2*z[7] \\ 1//2*t[2] & -1//2*t[1] - 1//2*t[2] & 0 & z[1] & -1//2*t[1] + 1//2*z[7] - 1//2*z[8]\\ 1//2*z[2] - 1//2*z[3] & 1//2*t[1] + 1//2*z[3] - 1//2*z[4] & z[1] & z[2] & 1//2*z[2] + 1//2*z[6] - 1//2*z[9]\\ z[5] & 1//2*t[1] - z[5] + 1//2*z[6] - 1//2*z[7] & -1//2*t[1] + 1//2*z[7] - 1//2*z[8] & 1//2*z[2] + 1//2*z[6] - 1//2*z[9] & z[6]\\ \end{bmatrix}\]
Feynman.computeIBP
— MethodcomputeIBP(G::simple_graph,Nu::Vector{Int64},cutDeg::Int,showGens::Bool) computeIBP(G::labeledgraph,Nu::Vector{Int64},cutDeg::Int,showGens::Bool) computeIBP(G::labeledgraph,Nu::Vector{Int64},cutDeg::Int)
USAGE : computeIBP(G,ν,d);
ASSUME : G is a labeled graph, d is a positive integer and ν is vector of integers correspond to the parent diagram of the integral.
RETURN : A set of simplified IBP identities without double propagators (without performing trimming) .
Examples
julia> G=simple_graph([1,2,3,4],[(1,4),(1,2),(2,3),(3,4),1,2,3,4]);
julia> set_IBP=computeIBP(G,[1,1,1,0],8,true);
labels used for Gram matrix of external loop momenta:
["p[1]*p[2] => 1//2*t[1]"]
["p[1]*p[3] => 1//2*t[2]"]
["p[2]*p[3] => -1//2*t[1] - 1//2*t[2]"]
Assignment of Baikov variables (Z_i) are:
["z[1] => q[1]^2"]
["z[2] => 2*p[1]*q[1] + q[1]^2"]
["z[3] => 2*p[1]*p[2] + 2*p[1]*q[1] + 2*p[2]*q[1] + q[1]^2"]
["z[4] => 2*p[1]*q[1] + 2*p[2]*q[1] + 2*p[3]*q[1] + q[1]^2"]
julia> printIBP(set_IBP.setIBP,3);
First 3 IBP identities associated to G (Total number of relations=22):
0=(-t[1]^2 - t[1]*t[2] + t[1] + t[2] - D + 6)I(0,-1,-1,0)+(t[1]^2 + t[1]*t[2] + 2)I(0,-1,-2,1)+(t[1]^2 + t[1]*t[2] + 2*t[1] + 2*t[2] + 2)I(0,-2,-1,1)+(t[1]^2 + t[1]*t[2] + D - 6)I(-1,-1,-1,0)+(-2*t[1]^2 - 2*t[1])I(-2,-1,-1,1)+(-t[1]*D + 5*t[1] - t[2]*D + 7*t[2])I(0,-1,-1,1)+(-t[1]*D + 10*t[1] - 8)I(-1,0,-1,1)+(t[1]*D - 6*t[1] + t[2]*D - 6*t[2])I(-1,-1,0,1)+(t[1]*D - 7*t[1] + 8)I(-1,-1,-1,1)+(t[1] + t[2])I(1,-1,-1,0)+(-t[1] - t[2])I(1,-1,-2,1)+(-t[1] - t[2])I(1,-2,-1,1)+(-t[1] + D - 6)I(0,0,-1,0)+(t[1] - 2)I(0,0,-2,1)+(t[1] - t[2] + D - 7)I(0,-1,0,0)+(t[1])I(0,-1,-2,2)+(t[1] + 1)I(0,-1,-2,0)+(-t[1] + t[2] - 1)I(0,-2,0,1)+(t[1] + t[2] - 1)I(0,-2,0,0)+(t[1])I(0,-2,-1,2)+(t[1] - D + 7)I(-1,0,-1,0)+(-2*t[1] + 4)I(-1,0,-2,2)+(-3*t[1] - t[2] - D + 5)I(-1,-1,0,0)+(2*t[1] - 4)I(-1,-1,-2,2)+(-2*t[1])I(-1,-1,-2,1)+(-t[1])I(-1,-1,-2,0)+(2*t[1] + 1)I(-1,-2,0,1)+(-t[1] - t[2])I(-1,-2,0,0)+(2*t[1] + 2*t[2] - 4)I(-1,-2,-1,2)+(-4*t[1] - 4*t[2])I(-1,-2,-1,1)+(-2*t[1] + 4)I(-2,0,-1,2)+(2*t[1])I(-2,0,-1,1)+(t[1])I(-2,0,-1,0)+(2*t[1] + 1)I(-2,-1,0,1)+(-t[1])I(-2,-1,0,0)+(-D + 8)I(0,0,0,0)+(D - 7)I(-1,0,0,0)+(-1)I(1,-1,-2,0)+(1)I(1,-2,0,0)+(-1)I(1,-2,-1,0)+(-1)I(0,-2,1,0)+(1)I(0,-2,-1,0)+(6)I(-1,0,-1,2)+(-2)I(-1,0,-2,3)+(-6)I(-1,-1,-1,2)+(2)I(-1,-1,-2,3)+(1)I(-1,-2,1,0)+(2)I(-1,-2,-1,3)+(-1)I(-2,0,0,1)+(-1)I(-2,0,0,0)+(-2)I(-2,0,-1,3)+(1)I(-2,-1,1,0)+(2)I(-2,-1,-1,3)+(-4)I(-2,-1,-1,2)
0=(-t[1] - 1)I(0,-1,-2,0)+(t[1])I(-1,-1,-2,0)+(t[1] + 1)I(-2,-1,0,0)+(-t[1])I(-2,-1,-1,0)+(1)I(1,-1,-2,0)+(-1)I(1,-2,0,0)+(1)I(1,-2,-1,0)+(-1)I(0,-1,-1,0)+(1)I(0,-2,1,0)+(-1)I(0,-2,-1,0)+(1)I(-1,-1,0,0)+(-1)I(-1,-2,1,0)+(1)I(-1,-2,0,0)+(-1)I(-2,-1,1,0)
0=(-t[1] - t[2])I(0,-2,-1,0)+(t[1] + t[2])I(-1,-2,-1,0)+(-t[1])I(-2,0,-1,0)+(t[1])I(-2,-1,-1,0)+(-1)I(0,0,-1,0)+(1)I(0,0,-2,1)+(1)I(0,-1,-1,0)+(-1)I(0,-1,-2,1)+(1)I(0,-2,0,0)+(-1)I(0,-2,-1,1)+(1)I(-1,0,-1,0)+(-1)I(-1,0,-2,1)+(-1)I(-1,-1,-1,0)+(1)I(-1,-1,-2,1)+(-1)I(-1,-2,0,0)+(1)I(-1,-2,-1,1)+(1)I(-2,0,0,0)+(-1)I(-2,0,-1,1)+(-1)I(-2,-1,0,0)+(1)I(-2,-1,-1,1)
Feynman.computeM1
— MethodcomputeM1(G::labeledgraph)
USAGE : computeM1(G);
ASSUME : G is the output of computeBaikovMatrix.
RETURN : It computes the module M1 associated to graph $G$ which uses in the powerful module intersection method
Examples
julia> G=simple_graph([1,2,3,4],[(1,4),(1,2),(2,3),(3,4),1,2,3,4]);
julia> G=computeBaikovMatrix(G);
labels used for Gram matrix of external loop momenta:
["p[1]*p[2] => 1//2*t[1]"]
["p[1]*p[3] => 1//2*t[2]"]
["p[2]*p[3] => -1//2*t[1] - 1//2*t[2]"]
Assignment of Baikov variables (Z_i) are:
["z[1] => q[1]^2"]
["z[2] => 2*p[1]*q[1] + q[1]^2"]
["z[3] => 2*p[1]*p[2] + 2*p[1]*q[1] + 2*p[2]*q[1] + q[1]^2"]
["z[4] => 2*p[1]*q[1] + 2*p[2]*q[1] + 2*p[3]*q[1] + q[1]^2"]
julia> computeM1(G)
4-element Vector{Any}:
QQMPolyRingElem[-z[1] + z[2], -z[1] + z[2], t[1] - z[1] + z[2], t[1] + t[2] - z[1] + z[2], 0]
QQMPolyRingElem[-t[1] - z[2] + z[3], -z[2] + z[3], -z[2] + z[3], -t[1] - t[2] - z[2] + z[3], 0]
QQMPolyRingElem[t[1] - z[3] + z[4], t[1] + t[2] - z[3] + z[4], -z[3] + z[4], -z[3] + z[4], 0]
QQMPolyRingElem[2*z[1], z[1] + z[2], -t[1] + z[1] + z[3], z[1] + z[4], -2]
Feynman.eliminateVariables
— MethodeliminateVariables(G::labeledgraph)
USAGE : eliminateVariables(G);
ASSUME : G is a labeled graph.
RETURN : labeled graph with variables of the bounded edges eliminated according to balancing condition.
#Examples
julia> G=simple_graph([1,2,3,4],[(1,3),(1,2),(2,4),(3,4),1,2,3,4]);
julia> G=labelGraph(G,0);
julia> G=eliminateVariables(G);
julia> printLabeledGraph(G);
Graph with 4 vertices and 4 bounded edges 4 unbounded edges
Edge terms:
["(1, 3)=>q[1]", "(1, 2)=>-p[1] - q[1]", "(2, 4)=>-p[1] - p[2] - q[1]", "(3, 4)=>-p[3] + q[1]", "1=>p[1]", "2=>p[2]", "3=>p[3]", "4=>-p[1] - p[2] - p[3]"]
julia> G.elimvar
4-element Vector{QQMPolyRingElem}:
p[4]
q[2]
q[3]
q[4]
Feynman.feynmanDenominators
— MethodfeynmanDenominators(G::labeledgraph)
USAGE : feynmanDenominators(G);
ASSUME : $G$ is a labeled graph with the variables of the bounded edges eliminated according to balancing condition. i.e. $G$ is a labeled graph where the function eliminatedVariables applied.
RETURN : ideal containing the propagators in the Feynman integral
#Examples
julia> G=simple_graph([1,2,3,4],[(1,3),(1,2),(2,4),(3,4),1,2,3,4]);
julia> G=labelGraph(G,0);
julia> Gelim=eliminateVariables(G);
julia> feynmanDenominators(Gelim)
Ideal generated by
q[1]^2
p[1]^2 + 2*p[1]*q[1] + q[1]^2
p[1]^2 + 2*p[1]*p[2] + 2*p[1]*q[1] + p[2]^2 + 2*p[2]*q[1] + q[1]^2
p[3]^2 - 2*p[3]*q[1] + q[1]^2
Feynman.labelGraph
— MethodlabelGraph(G::simple_graph,ch::Int)
USAGE : labelGraph(G,ch);
ASSUME : G is a graph and ch is either zero or prime.
RETURN : labeled graph with polynomialvariables qi at the bounded edges and functin filed variables pi at the unbounded edges over a prime filed of characteristic ch Initially we it sets the fields Baikovmatrix and elimvar empty.
#Examples
julia> G3=simple_graph([1,2,3,4],[(1,3),(1,2),(2,4),(3,4),1,2,3,4]);
julia> G4=labelGraph(G3,0);
julia> printLabeledGraph(G4);
Graph with 4 vertices and 4 bounded edges 4 unbounded edges
Edge terms:
["(1, 3)=>q[1]", "(1, 2)=>q[2]", "(2, 4)=>q[3]", "(3, 4)=>q[4]", "1=>p[1]", "2=>p[2]", "3=>p[3]", "4=>p[4]"]
Feynman.makePoly
— MethodmakePoly(n::Int,m::Int)
USAGE : makePoly(m,n);
ASSUME : m and n are positve integers.
RETURN : A polynomial ring with vatiables t[1],...,t[n],D,z[1],...,z[m] over QQ.
#Examples
julia> makePoly(2,3)
Multivariate polynomial ring in 6 variables t[1], t[2], D, z[1], ..., z[3]
over rational field
Feynman.printGraph
— MethodprintGraph(G::simple_graph)
USAGE : prinGraph(G);
ASSUME : G is a lsimple graph.
Theory: This is the print function used in julia to print a lsimple graph.
#Examples
julia> G=Feynman.simple_graph([1,2,3,4],[(1,4),(1,2),(2,3),(3,4),1,2,3,4]);
julia> printGraph(G);
Graph with 4 vertices and 4 bounded edges 4 unbounded edges
Feynman.printIBP
— MethodprintIBP(set_IBP::Vector{Vector{}},n::Int64)
USAGE : printIBP(set_IBP,n);
ASSUME : set_IBP is the output of computeIBP
RETURN : It prints first n IBP relations
Examples
julia> G=simple_graph([1,2,3,4],[(1,4),(1,2),(2,3),(3,4),1,2,3,4]);
julia> set_IBP=computeIBP(G,[1,1,1,0],8,true);
labels used for Gram matrix of external loop momenta:
["p[1]*p[2] => 1//2*t[1]"]
["p[1]*p[3] => 1//2*t[2]"]
["p[2]*p[3] => -1//2*t[1] - 1//2*t[2]"]
Assignment of Baikov variables (Z_i) are:
["z[1] => q[1]^2"]
["z[2] => 2*p[1]*q[1] + q[1]^2"]
["z[3] => 2*p[1]*p[2] + 2*p[1]*q[1] + 2*p[2]*q[1] + q[1]^2"]
["z[4] => 2*p[1]*q[1] + 2*p[2]*q[1] + 2*p[3]*q[1] + q[1]^2"]
julia> printIBP(set_IBP.setIBP,3);
First 3 IBP identities associated to G (Total number of relations=22):
0=(-t[1]^2 - t[1]*t[2] + t[1] + t[2] - D + 6)I(0,-1,-1,0)+(t[1]^2 + t[1]*t[2] + 2)I(0,-1,-2,1)+(t[1]^2 + t[1]*t[2] + 2*t[1] + 2*t[2] + 2)I(0,-2,-1,1)+(t[1]^2 + t[1]*t[2] + D - 6)I(-1,-1,-1,0)+(-2*t[1]^2 - 2*t[1])I(-2,-1,-1,1)+(-t[1]*D + 5*t[1] - t[2]*D + 7*t[2])I(0,-1,-1,1)+(-t[1]*D + 10*t[1] - 8)I(-1,0,-1,1)+(t[1]*D - 6*t[1] + t[2]*D - 6*t[2])I(-1,-1,0,1)+(t[1]*D - 7*t[1] + 8)I(-1,-1,-1,1)+(t[1] + t[2])I(1,-1,-1,0)+(-t[1] - t[2])I(1,-1,-2,1)+(-t[1] - t[2])I(1,-2,-1,1)+(-t[1] + D - 6)I(0,0,-1,0)+(t[1] - 2)I(0,0,-2,1)+(t[1] - t[2] + D - 7)I(0,-1,0,0)+(t[1])I(0,-1,-2,2)+(t[1] + 1)I(0,-1,-2,0)+(-t[1] + t[2] - 1)I(0,-2,0,1)+(t[1] + t[2] - 1)I(0,-2,0,0)+(t[1])I(0,-2,-1,2)+(t[1] - D + 7)I(-1,0,-1,0)+(-2*t[1] + 4)I(-1,0,-2,2)+(-3*t[1] - t[2] - D + 5)I(-1,-1,0,0)+(2*t[1] - 4)I(-1,-1,-2,2)+(-2*t[1])I(-1,-1,-2,1)+(-t[1])I(-1,-1,-2,0)+(2*t[1] + 1)I(-1,-2,0,1)+(-t[1] - t[2])I(-1,-2,0,0)+(2*t[1] + 2*t[2] - 4)I(-1,-2,-1,2)+(-4*t[1] - 4*t[2])I(-1,-2,-1,1)+(-2*t[1] + 4)I(-2,0,-1,2)+(2*t[1])I(-2,0,-1,1)+(t[1])I(-2,0,-1,0)+(2*t[1] + 1)I(-2,-1,0,1)+(-t[1])I(-2,-1,0,0)+(-D + 8)I(0,0,0,0)+(D - 7)I(-1,0,0,0)+(-1)I(1,-1,-2,0)+(1)I(1,-2,0,0)+(-1)I(1,-2,-1,0)+(-1)I(0,-2,1,0)+(1)I(0,-2,-1,0)+(6)I(-1,0,-1,2)+(-2)I(-1,0,-2,3)+(-6)I(-1,-1,-1,2)+(2)I(-1,-1,-2,3)+(1)I(-1,-2,1,0)+(2)I(-1,-2,-1,3)+(-1)I(-2,0,0,1)+(-1)I(-2,0,0,0)+(-2)I(-2,0,-1,3)+(1)I(-2,-1,1,0)+(2)I(-2,-1,-1,3)+(-4)I(-2,-1,-1,2)
0=(-t[1] - 1)I(0,-1,-2,0)+(t[1])I(-1,-1,-2,0)+(t[1] + 1)I(-2,-1,0,0)+(-t[1])I(-2,-1,-1,0)+(1)I(1,-1,-2,0)+(-1)I(1,-2,0,0)+(1)I(1,-2,-1,0)+(-1)I(0,-1,-1,0)+(1)I(0,-2,1,0)+(-1)I(0,-2,-1,0)+(1)I(-1,-1,0,0)+(-1)I(-1,-2,1,0)+(1)I(-1,-2,0,0)+(-1)I(-2,-1,1,0)
0=(-t[1] - t[2])I(0,-2,-1,0)+(t[1] + t[2])I(-1,-2,-1,0)+(-t[1])I(-2,0,-1,0)+(t[1])I(-2,-1,-1,0)+(-1)I(0,0,-1,0)+(1)I(0,0,-2,1)+(1)I(0,-1,-1,0)+(-1)I(0,-1,-2,1)+(1)I(0,-2,0,0)+(-1)I(0,-2,-1,1)+(1)I(-1,0,-1,0)+(-1)I(-1,0,-2,1)+(-1)I(-1,-1,-1,0)+(1)I(-1,-1,-2,1)+(-1)I(-1,-2,0,0)+(1)I(-1,-2,-1,1)+(1)I(-2,0,0,0)+(-1)I(-2,0,-1,1)+(-1)I(-2,-1,0,0)+(1)I(-2,-1,-1,1)
Feynman.printLabeledGraph
— MethodprintLabeledGraph(G::labeledgraph)
USAGE : printLabeledGraph(G);
ASSUME : G is a labeled graph.
Theory: This is the print function used in julia to print a labeled graph.
#Examples
julia> var=["x","y","z","p","q","r"];
julia> R, (x,y,z,p,q,r)=polynomial_ring(QQ,var);
julia> G=labeledgraph([1,2,3,4],[(1,3),(1,2),(1,2),(2,4),(3,4),(3,4)],R,var,R,[3,4],R,[[y+1,R(2)] [R(3),r+3]]);
julia> printLabeledGraph(G);
Graph with 4 vertices and 6 edges
Edge terms:
["(1, 3)=>x", "(1, 2)=>y", "(1, 2)=>z", "(2, 4)=>p", "(3, 4)=>q", "(3, 4)=>r"]
Feynman.propagators
— Methodpropagators(G::labeledgraph)
USAGE: propagators(G);
ASSUME: G is a labeld graph.
RETURN: ideal, containing the denominators in the Feynman integral.
#Examples
julia> G=simple_graph([1,2,3,4,5,6],[(6,1),(4,6),(1,2),(3,5),(4,3),(2,5),(5,6),1,2,3,4]);
julia> G=labelGraph(G,0);
julia> Gelim=eliminateVariables(G);
Gelim=removeElimVars(Gelim);
julia> propagators(Gelim)
Ideal generated by
q[1]^2
q[2]^2
-2*p[1]*q[1] + q[1]^2
2*p[1]*p[2] - 2*p[1]*q[2] - 2*p[2]*q[2] + q[2]^2
-2*p[1]*q[2] - 2*p[2]*q[2] - 2*p[3]*q[2] + q[2]^2
2*p[1]*p[2] - 2*p[1]*q[1] - 2*p[2]*q[1] + q[1]^2
q[1]^2 - 2*q[1]*q[2] + q[2]^2
Feynman.removeElimVars
— MethodremoveElimVars(G::labeledgraph)
USAGE : removeElimVars(G);
ASSUME : G is a labled graph.
RETURN : Removes the variables from G.elimvars. This key is generated by the procedure eliminatedVariables.
#Examples
julia> G=simple_graph([1,2,3,4,5,6],[(1,2),(3,6),(4,5),(1,6),(2,3),(5,6),(3,4),1,2,5,4]);
julia> G=labelGraph(G,0);
julia> Gelim=eliminateVariables(G);
julia> G=removeElimVars(Gelim);
julia> G.elimvar
Any[]
Feynman.removeParameter
— MethodremoveParameter(P::Ring,l::Vector)
USAGE : removeParameter(R,l);
ASSUME : R is a polynomial ring.
RETURN : polynomial ring with the parameters at indeces in l removed.
#Examples
julia> R,v,w=polynomial_ring(QQ,"p"=>(1:5),"q"=>(1:6));
julia> I=ideal(R,[v[1],v[2],v[3],v[4],v[5],w[1]]);
julia> u=complement_of_prime_ideal(I);
julia> S,iso=localization(R,u);
julia> S
julia> S
Localization
of multivariate polynomial ring in 11 variables p[1], p[2], p[3], p[4], ..., q[6]
over rational field
at complement of prime ideal (p[1], p[2], p[3], p[4], p[5], q[1])
julia> removeParameter(S,[2])
Localization
of multivariate polynomial ring in 10 variables p[1], p[3], p[4], p[5], ..., q[6]
over rational field
at complement of prime ideal (p[1], p[3], p[4], p[5], q[1])
Feynman.removeVariable
— MethodremoveVariable(R::Ring,l::Vector)
USAGE: removeVariable(G,l);
ASSUME: R is a polynomial ring.
RERUTN: polynomial ring with the vaiables at indeces given in l removed.
#Examples
julia> R,v=polynomial_ring(QQ,"p"=>(1:3));
julia> removeVariable(R,[2])
Multivariate polynomial ring in 2 variables p[1], p[3]
over rational field
Feynman.removeVariableLocal
— MethodremoveVariableLocal(P::Ring,l::Vector)
USAGE : removeVariableLocal(P,l);
ASSUME : P is a local ring locaized by the maximal ideal generated by parameters.
RETURN : local ring where the variables at indeces in l removed.
#Examples
ulia> P,p,q=polynomial_ring(QQ,"p"=>(1:4),"q"=>(1:5));
julia> Q=complement_of_prime_ideal(ideal(P,p));
julia> R,iso=localization(P,Q);
julia> removeVariableLocal(R,[1])
Localization
of multivariate polynomial ring in 8 variables p[2], p[3], p[4], q[1], ..., q[5]
over rational field
at complement of prime ideal (p[2], p[3], p[4], q[1])
Feynman.substituteGraph
— MethodsubstituteGraph(G::labeledgraph,a::RingElement,b::RingElement)
USAGE :substituteGraph(G,a,b)
ASSUME : G is a labeled graph
RETURN :a labelled graph with labelling where each 'a' is replaced 'b'