Software to determine if one ring is free over another Suppose the fates have given me a polynomial ring $C$ in four indeterminates over $\mathbb Z$ and subrings $A < B < C$. Suppose further that the expressions the fates have given me for generators of $A$ and $B$ are not particularly simple, but that I would still like to determine if $B$ is a free $A$-module. It is now 2022; is there a way of asking a computer to do this for me?
Edit: It looks like someone is having a bad day, judging by the abuse and the downvote. Allow me to elaborate. I am an occasional user of algebra but not particularly strong in computations. Consider the subgroup $\mathrm{PSp}(4) = \mathrm{Sp}(4)/\mathrm{center}$ of the simply-connected compact exceptional group $E_6$ which is the fixed point set of a certain well known outer automorphism, giving rise to the compact symmetric space of type EI. The inclusion induces an injective map of complex representation rings, and regarding $\mathbb Z$ as a module over $R(E_6)$ by the augmentation, it is known that
$$R(\mathrm{PSp}(4)) \otimes_{R(E_6)} \mathbb Z$$
is a free $\mathbb Z$-module of rank three. The ring $R(\mathrm{PSp}(4))$ injects into the representation ring of a subgroup $\mathrm{SU}(2)\mathrm{Sp}(3)$, so the image of $R(E_6)$ in $R(\mathrm{PSp}(4))$ can be understood in terms of the images of both in $R(\mathrm{SU}(2)\mathrm{Sp}(3))$. This in turn naturally embeds as a subring of $R(\mathrm{SU}(2) \times \mathrm{Sp}(3))$, which is actually a polynomial ring. I would like to use these observations to determine if $R(\mathrm{PSp}(4))$ is free as a module over $R(F_4)$. Unfortunately, the most tractable expressions I have for the images in $R(\mathrm{SU}(2)\times\mathrm{Sp}(3))$ are not particularly usable, at least so far, and at least for me.
But it has occurred to me that I've used Macaulay to determine if certain sequences are regular, GAP and Sage to count cosets of certain groups, etc., and that a computer may be faster at this sort of thing than me—that in fact this may be a solved problem in the world of computer algebra, and I may just not know the way. If it were, that would be good to know. If not, that would also be interesting. So, are such problems solvable algorithmically, and if so, does a currently existing package do it?
 A: Hm... annoyingly it looks like Macaulay2 only lets you do this when $B$ is module-finite over $A$.
The relevant function is pushForward (documentation here) which takes a $B$-module $M$ and a ring map $f : A \to B$ and returns the pushforward $f^* M$, which is an $A$-module. There's another function pushFwd (documentation here) provided you loadPackage "PushForward" first.
Both pushForward and pushFwd throw an error if $f^* M$ is not a finitely generated $A$-module, so for your purposes, an error will be thrown if $B$ is not module-finite over $A$. I've looked around for a while (which was the source of the long delay before posting this answer) and I wasn't able to find a way around this (at least not with Macaulay2). Hopefully somebody who knows better than me comes around, and either shows a function that I missed, or maybe a way to do this with singular (which I didn't look into, because I'm not familiar with it). It seems reasonable that the finitely-generated assumption can't be lifted, because I'm not sure how a computer would be able to do computations on an infinitely generated module.
Anyways, here's a minimal working example (in Macaulay2) in case $B$ is module-finite over $A$:
A = QQ[t]
B = QQ[x,y] / (x*y, y^2)
C = QQ[a,b] / (b^2)

f = map(B,A,{x}) -- the map sending t |--> x
g = map(C,A,{a}) -- the map sending t |--> a

M = B^1 -- B as a B-module in the obvious way
N = C^1

-- now we can view M and N as A-modules
-- (throws an error if we get something that isn't module finite over A)
M' = pushForward (f, M)
N' = pushForward (g, N)

-- now we prune to get a minimal presentation
M' = prune M'
N' = prune N'

-- and lastly we check if the presentation is free
isFreeModule M' -- returns false
isFreeModule N' -- returns true


I hope this helps ^_^
