# Singular

#### D.15.1.1 RiemannRochBN

Procedure from library `brillnoether.lib` (see brillnoether_lib).

Usage:
RiemannRochBN(C,I,J); ideal C, ideal I, ideal J

Assume:
C is a homogeneous ideal defining a projective curve. If C is a non-planar curve, then C is assumed to be
nonsingular. This assumption is not checked.
The ideals I and J represent a
a divisor D on C.

Return:
A vector space basis of the Riemann-Roch space of D,
stored in a list RRBasis. The list RRBasis contains a list IH and a form F. The vector space basis of L(D)
consists of all rational functions G/F, where G is an element of IH.

Example:
 ```LIB "brillnoether.lib"; ring R = 0,(x,y,z),dp; poly f = y^2+x^2-1; f = homog(f,z); ideal C = f; ideal P1 = x,y-z; ideal P2 = x^2+y^2,z; ideal I = intersect(P1^3,P2^2); ideal P3 = x+z,y; ideal J = P3^2; RiemannRochBN(C,I,J); ==> [1]: ==> _[1]=65y2z2-81xz3-81z4 ==> _[2]=65xyz2+63xz3+65yz3+63z4 ==> _[3]=65y3z-81xyz2-81yz3 ==> _[4]=65xy2z-81x2z2-81xz3 ==> _[5]=65y4-81xy2z-81y2z2 ==> _[6]=65xy3-81x2yz-81xyz2 ==> [2]: ==> 8xyz2-y2z2-8xz3+2yz3-z4 ```