Over the summer I came across an elementary bug in Magma when working with congruence subgroups of SL_2(Z). The isEquivalent function, which is supposed to tell whether two points are identified by a congruence subgroup, would miss a lot of identifications. For example:
G := CongruenceSubgroup(2); % \Gamma(2)
H := UpperHalfPlaneWithCusps();
(G! [-11,4,8,-3]) in G; % Cast this matrix into \Gamma(2)
true % It's really in \Gamma(2)!
(G! [-11,4,8,-3]) * (H! 3/8); % Have the matrix act on the point 3/8
oo % Magma correctly computes that it gets sent to infinity
IsEquivalent(G, H! 3/8, H! Infinity()); % Are 3/8 and infinity equivalent under the action of \Gamma(2), and specifically, can you given me a matrix representing an element of \Gamma(2) sending the former to the latter?
false [1 0] [0 1] % Doh!
It's a pretty simple computation, and it was pretty clear what loop it was leaving out. We may have been running an old version of Magma, but anyway we reported the error to them, and they fixed it quickly, but I've never trusted computer algebra systems since!