Overview

Feynman.FeynmanModule

The 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$.

source
Feynman.ISPMethod

ISP(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]
source
Feynman.balancingIdealMethod

balancingIdeal(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]
source
Feynman.computeBaikovMatrixMethod

computeBaikovMatrix(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}\]

source
Feynman.computeIBPMethod

computeIBP(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)
source
Feynman.computeM1Method

computeM1(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]
source
Feynman.eliminateVariablesMethod

eliminateVariables(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]
source
Feynman.feynmanDenominatorsMethod

feynmanDenominators(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
source
Feynman.labelGraphMethod

labelGraph(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]"]
source
Feynman.makePolyMethod

makePoly(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
source
Feynman.printGraphMethod

printGraph(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
source
Feynman.printIBPMethod

printIBP(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)
source
Feynman.printLabeledGraphMethod

printLabeledGraph(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"]
source
Feynman.propagatorsMethod

propagators(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
source
Feynman.removeElimVarsMethod

removeElimVars(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[]
source
Feynman.removeParameterMethod

removeParameter(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])
source
Feynman.removeVariableMethod

removeVariable(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
source
Feynman.removeVariableLocalMethod

removeVariableLocal(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])
source
Feynman.substituteGraphMethod

substituteGraph(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'

source