# Rational Solutions

## `RationalSolutions(L): RngDiffOpElt -> SeqEnum`

Given a differential operator $L$, a basis of the nullspace of rational solutions of $L(y)=0$ in $F$ is returned as a sequence of basis elements. This function only works for operators whose derivation is defined by a differential. The algorithm that is used is described in Section $4.1$ of [[van der Put and Singer, 2003](../../references.md#cite-vdps03)].

## `HasRationalSolutions(L, g): RngDiffOpElt, RngElt -> BoolElt, RngElt, SeqEnum`

Given a differential operator $L$ with coefficients in $F$ and an element $g$ of $F$, return `true` if there is an element $y\in F$ satisfying $L(y)=g$. If such a solution exists a particular solution in $F$ and the basis of the nullspace of rational solutions in $F$ are also returned. If there is no solution, only `false` is returned. This function only works for operators whose derivation is defined by a differential.

## `Example Rational Sols (ex-a82ef2)`

```magma
> F<z> := RationalDifferentialField(Rationals());
> R<D> := DifferentialOperatorRing(F);
> H := (z^2-z)*D^2+(3*z-6)*D+1;
> RationalSolutions(H);
[ (z^4 - 4*z^3 + 6*z^2 - 4*z + 1)/z^5 ]
> L := D^2-6/z^2;
> RationalSolutions(L);
[ z^3, 1/z^2 ]
> Apply(L, z^3+1/z^2);
0
> HasRationalSolutions(L, 6/z);
true -z [ z^3, 1/z^2 ]
> L(-z);
6/z

```
