--Below we implement the first step of the Whitney Stratification Algorithm of Dinh and Jelone published in Discrete & Computational Geometry, in 2019 --Hypersurface cases restart n=3 R=QQ[x_0..x_n] I=ideal(x_1^2*x_2-x_3*x_0^2) n=4 R=QQ[x_0..x_4] I=ideal(x_1^4*x_2-x_3*x_0^4-x_0^5-x_4*x_0^4) n=4 R=QQ[x_0..x_n] I=ideal(x_0^2*x_4-x_1*x_2^2+x_3^3-x_3*x_0^2-x_4^2*x_3) --Codim 2 cases n=4 R=QQ[x_0..x_n] I=ideal(x_0^2*x_4-x_1*x_2^2+x_3^3,x_3*x_0^2-x_4^2*x_3) n=6 R=QQ[x_0..x_n] I=ideal(x_0*x_4-x_1*x_2+x_6^2,x_0^2-x_0*x_3-x_5^2) --codim 3 case restart n=7 R=QQ[x_0..x_7] I=ideal(x_7*x_4-x_1*x_2+x_7^2,x_0^2-x_0*x_5-x_7^2,x_3*x_7-x_6^2) time( J=I+ideal jacobian I; X0=I; X0t=I+ideal(for i from 1 to n list random(1,R)); pX0=minors(n+1,jacobian(X0t)); X1=ideal mingens (X0+pX0); --now find W(X0,X1) S=QQ[gens R,y_0..y_n,w_0..w_n,v_0..v_n,gamma,lambda_0..lambda_(numgens(I)-1)]; Lambda=matrix {toList(lambda_0..lambda_(numgens(I)-1))}; LamList=flatten entries (Lambda*(transpose ( sub(jacobian I,S)))); Gamma1=(sub(I,S)+sub(X1,for i from 0 to n list R_i=>y_i)+ideal(for i from 0 to n list w_i-gamma*(x_i-y_i))+ideal(toList(v_0..v_n) -LamList)); pGamma1=eliminate(append(toList(lambda_0..lambda_(numgens(I)-1)),gamma),Gamma1); X1t=X1+ideal(for i from 1 to ((n+1)-numgens(X1)) list random(1,R)); pX1a=sub(det(jacobian(X1t)),S); Gamma2=pGamma1+ideal(for i from 0 to n list x_i-y_i)+ideal(gamma*sum(0..n,i->w_i*v_i)-1)+ideal(lambda_0*pX1a-1); --compute p_{X1,W(X0,X1)} time W01=sub(eliminate((gens(S))_{n+1..numgens(S)-1},Gamma2),R); H01=sum(flatten entries gens W01,f->random(QQ)*f); X1t=X1+ideal(for i from 1 to n-1 list random(1,R)); Jx1t=jacobian(X1t); pX1=minors(min(numRows Jx1t,numcols Jx1t),Jx1t)*H01; X2=radical(X1+pX1); )