anton@purismus:~$ sage ┌────────────────────────────────────────────────────────────────────┐ │ SageMath version 9.1, Release Date: 2020-05-20 │ │ Using Python 3.8.3. Type "help()" for help. │ └────────────────────────────────────────────────────────────────────┘ Exception reporting mode: Plain sage: R.=QQ[] sage: RXY.=R[] sage: conic1=X^2+A*X*Y+B*Y^2+C*X+D*Y+E sage: R.=QQ[] sage: RXY.=R[] sage: conic1=X^2+A*X*Y+B*Y^2+C*X+D*Y+E sage: RT.=R[] sage: line=(T,k*T+x0) sage: conic1(line[0], line[1]) (B*k^2 + A*k + 1)*T^2 + (2*B*k*x0 + D*k + A*x0 + C)*T + B*x0^2 + D*x0 + E sage: conic1(line[0], line[1]).discriminant() D^2*k^2 - 4*B*E*k^2 + 4*B*C*k*x0 - 2*A*D*k*x0 + A^2*x0^2 + 2*C*D*k - 4*A*E*k + 2*A*C*x0 - 4*B*x0^2 + C^2 - 4*D*x0 - 4*E sage: disc=conic1(line[0], line[1]).discriminant() sage: disc D^2*k^2 - 4*B*E*k^2 + 4*B*C*k*x0 - 2*A*D*k*x0 + A^2*x0^2 + 2*C*D*k - 4*A*E*k + 2*A*C*x0 - 4*B*x0^2 + C^2 - 4*D*x0 - 4*E sage: R.=QQ[] sage: RXY.=R[] sage: conic1=X^2+A*X*Y+B*Y^2+C*X+D*Y+E sage: Rkx0.=RXY[] sage: RT.=Rkx0[] sage: line=(T,k*T+x0) sage: disc=conic1(line[0], line[1]).discriminant() sage: disc (D^2 - 4*B*E)*k^2 + (4*B*C - 2*A*D)*k*x0 + (A^2 - 4*B)*x0^2 + (2*C*D - 4*A*E)*k + (2*A*C - 4*D)*x0 + C^2 - 4*E sage: disc/(D^2-4*B*E) k^2 + ((4*B*C - 2*A*D)/(D^2 - 4*B*E))*k*x0 + ((A^2 - 4*B)/(D^2 - 4*B*E))*x0^2 + ((2*C*D - 4*A*E)/(D^2 - 4*B*E))*k + ((2*A*C - 4*D)/(D^2 - 4*B*E))*x0 + (C^2 - 4*E)/(D^2 - 4*B*E) sage: A1=(4*B*C - 2*A*D)/(D^2 - 4*B*E) sage: B1=(A^2 - 4*B)/(D^2 - 4*B*E) sage: C1=(2*C*D - 4*A*E)/(D^2 - 4*B*E) sage: D1=(2*A*C - 4*D)/(D^2 - 4*B*E) sage: E1=(C^2 - 4*E)/(D^2 - 4*B*E) sage: A1(A1, B1, C1, D1, E1) -A sage: B1(A1, B1, C1, D1, E1) B sage: C1(A1, B1, C1, D1, E1) -C sage: D1(A1, B1, C1, D1, E1) D sage: E1(A1, B1, C1, D1, E1) E sage: conic1 X^2 + A*X*Y + B*Y^2 + C*X + D*Y + E sage: R2.=QQ[] sage: A2*(D^2-4*B*E)-R2(A1.numerator()) D^2*A2 - 4*B*E*A2 - 4*B*C + 2*A*D sage: eqns=[A2*(D^2-4*B*E)-R2(A1.numerator()),B2*(D^2-4*B*E)-R2(B1.numerator()),C2*(D^2-4*B*E)-R2(C1.numerator()),D2* ....: (D^2-4*B*E)-R2(D1.numerator()),E2*(D^2-4*B*E)-R2(E1.numerator())] sage: eqns [D^2*A2 - 4*B*E*A2 - 4*B*C + 2*A*D, D^2*B2 - 4*B*E*B2 - A^2 + 4*B, D^2*C2 - 4*B*E*C2 - 2*C*D + 4*A*E, D^2*D2 - 4*B*E*D2 - 2*A*C + 4*D, D^2*E2 - 4*B*E*E2 - C^2 + 4*E] sage: J=R2.ideal(eqns) sage: J.minimal_associated_primes() [Ideal (-E*D2^2 + 4*E*B2*E2 + C2^2 - 4*E2, -2*E*A2*C2 + D*C2^2 + 4*E*D2 - 4*D*E2, -D*D2^2 + 4*D*B2*E2 + 2*A2*C2 - 4*D2, 2*E*A2 - D*C2 + 2*C, 2*E*A2^2 - D*A2*C2 - 2*D*D2 + 8*B*E2 - 8, 2*E*A2^2*B2 - D*A2*B2*C2 - 2*D*B2*D2 + 2*B*D2^2 - 2*A2^2, 4*E*A2*B2 - 2*D*B2*C2 - D*A2*D2 + 2*B*C2*D2 - 4*A2, -D*A2*C2 + 2*B*C2^2 + 8*E*B2 - 2*D*D2 - 8, -D*A2^2 + 2*B*A2*C2 + 4*D*B2 - 4*B*D2, -D^2*A2*D2 + 4*B*E*A2*D2 - 4*C*D*B2 + 4*B*C*D2 - 8*B*C2 + 8*A) of Multivariate Polynomial Ring in A, B, C, D, E, A2, B2, C2, D2, E2 over Rational Field, Ideal (C^2 - 4*E, -D^2 + 4*B*E, -C*D + 2*A*E, -2*B*C + A*D, A*C - 2*D, A^2 - 4*B) of Multivariate Polynomial Ring in A, B, C, D, E, A2, B2, C2, D2, E2 over Rational Field] sage: J0=_[0] sage: J0 Ideal (-E*D2^2 + 4*E*B2*E2 + C2^2 - 4*E2, -2*E*A2*C2 + D*C2^2 + 4*E*D2 - 4*D*E2, -D*D2^2 + 4*D*B2*E2 + 2*A2*C2 - 4*D2, 2*E*A2 - D*C2 + 2*C, 2*E*A2^2 - D*A2*C2 - 2*D*D2 + 8*B*E2 - 8, 2*E*A2^2*B2 - D*A2*B2*C2 - 2*D*B2*D2 + 2*B*D2^2 - 2*A2^2, 4*E*A2*B2 - 2*D*B2*C2 - D*A2*D2 + 2*B*C2*D2 - 4*A2, -D*A2*C2 + 2*B*C2^2 + 8*E*B2 - 2*D*D2 - 8, -D*A2^2 + 2*B*A2*C2 + 4*D*B2 - 4*B*D2, -D^2*A2*D2 + 4*B*E*A2*D2 - 4*C*D*B2 + 4*B*C*D2 - 8*B*C2 + 8*A) of Multivariate Polynomial Ring in A, B, C, D, E, A2, B2, C2, D2, E2 over Rational Field sage: Rabc.=QQ[] sage: RXY.=Rabc[] sage: Rabc.=QQ[] sage: RXY.=Rabc[] sage: (X+a1*Y+b1)*(X+a2*Y+b2) X^2 + (a1 + a2)*X*Y + a1*a2*Y^2 + (b1 + b2)*X + (b1*a2 + a1*b2)*Y + b1*b2 sage: (b1*a2 + a1*b2)^2-4*a1*a2*b1*b2 b1^2*a2^2 - 2*a1*b1*a2*b2 + a1^2*b2^2 sage: factor(_) (b1*a2 - a1*b2)^2 sage: (X+a1*Y+b1)^2 X^2 + 2*a1*X*Y + a1^2*Y^2 + 2*b1*X + 2*a1*b1*Y + b1^2 sage: new_equations=(4*B-A^2,2*D-A*C,4*E-C^2) sage: J1=R2.ideal(J0.gens()+new_equations) sage: J1.dimension() 4 sage: J1.elimination_ideal([A,B,C,D,E]) Ideal (B2*C2^2 - A2*C2*D2 + A2^2*E2 + D2^2 - 4*B2*E2) of Multivariate Polynomial Ring in A, B, C, D, E, A2, B2, C2, D2, E2 over Rational Field sage: (B2*C2^2 - A2*C2*D2 + A2^2*E2 + D2^2 - 4*B2*E2).factor() (-1) * (-B2*C2^2 + A2*C2*D2 - A2^2*E2 - D2^2 + 4*B2*E2) sage: (B2*C2^2 - A2*C2*D2 + A2^2*E2 + D2^2 - 4*B2*E2) B2*C2^2 - A2*C2*D2 + A2^2*E2 + D2^2 - 4*B2*E2 sage: M=matrix([[1, A/2, C/2], [A/2, B, D/2], [C/2, D/2, E]]) sage: M.det() -1/4*B*C^2 + 1/4*A*C*D - 1/4*A^2*E - 1/4*D^2 + B*E sage: M.det()*-4 B*C^2 - A*C*D + A^2*E + D^2 - 4*B*E sage: conic1 X^2 + A*X*Y + B*Y^2 + C*X + D*Y + E sage: R.=QQ[] sage: RXY.=R[] sage: conic1=X^2+A*X*Y+B*Y^2+C*X+D*Y+E sage: Rkx0.=RXY[] sage: RT.=Rkx0[] sage: curve=[(s11*T^2+s12*T+s13)/(s21*T^2+s22*T+s23), (s31*T^2+s32*T+s13)/(s21*T^2+s22*T+s23)] sage: curve [(s11*T^2 + s12*T + s13)/(s21*T^2 + s22*T + s23), (s31*T^2 + s32*T + s13)/(s21*T^2 + s22*T + s23)] sage: disc=conic1(curve[0], curve[1]).discriminant() Traceback (most recent call last): File "", line 1, in disc=conic1(curve[Integer(0)], curve[Integer(1)]).discriminant() File "sage/structure/element.pyx", line 487, in sage.structure.element.Element.__getattr__ (build/cythonized/sage/structure/element.c:4651) return self.getattr_from_category(name) File "sage/structure/element.pyx", line 500, in sage.structure.element.Element.getattr_from_category (build/cythonized/sage/structure/element.c:4763) return getattr_from_other_class(self, cls, name) File "sage/cpython/getattr.pyx", line 394, in sage.cpython.getattr.getattr_from_other_class (build/cythonized/sage/cpython/getattr.c:2633) raise AttributeError(dummy_error_message) AttributeError: 'sage.rings.fraction_field_element.FractionFieldElement' object has no attribute 'discriminant' sage: disc=conic1(curve[0], curve[1]).numerator().discriminant()