--*-: Mode: M2 -*-

A = QQ[a,b,c,d,Degrees=>{1,2,1,2}]
f = (1+a+b)*(1+c+d)-1
A/(part_1 f, part_2 f, part_3 f, part_4 f)
I = ideal presentation oo
prune ooo
prune oo
prune I
end
debug Core
coreProgram(I,w)

F = finishMap(A,flatten entries generators I, new MutableList from first entries (vars A)); 

The answer below is wrong, because "prune" didn't eliminate the variable "a".

    i6 : A = QQ[a,b,c,d,Degrees=>{1,2,1,2}]

    o6 = A

    o6 : PolynomialRing

    i7 : f = (1+a+b)*(1+c+d)-1

    o7 = a*c + b*c + a*d + b*d + a + b + c + d

    o7 : A

    i10 : A/(part_1 f, part_2 f, part_3 f, part_4 f)

		     QQ [a, b, c, d]
    o10 = ------------------------------------
	  (a + c, a*c + b + d, b*c + a*d, b*d)

    o10 : QuotientRing

    i11 : prune oo

	       QQ [a, c, d]
    o11 = ---------------------
	    3          2     2
	  (c  - 2c*d, c d - d )

    o11 : QuotientRing
