# Singular

#### D.2.4.12 envelop

Procedure from library `grobcov.lib` (see grobcov_lib).

Usage:
envelop(F,C);
The first argument F must be the family of curves of which on want to compute the envelop.
The second argument C must be the ideal of conditions
over the variables, and should contain as polynomials
as the number of variables -1.

Return:
The components of the envelop with its taxonomy:
The taxonomy distinguishes 'Normal',
'Special', 'Accumulation', 'Degenerate' components.
In the case of 'Special' components, it also
outputs the antiimage of the component
and an integer (0-1). If the integer is 0
the component is not a curve of the family and is
not considered as 'Relevant' by the envelopdg routine applied to it, but is considered as 'Relevant' if the integer is 1.

Note:
grobcov is called internally.
The basering R, must be of the form Q[a][x] (a=parameters, x=variables).

Example:
 ```LIB "grobcov.lib"; // Steiner Deltoid // 1. Consider the circle x1^2+y1^2-1=0, and a mover point M(x1,y1) on it. // 2. Consider the triangle A(0,1), B(-1,0), C(1,0). // 3. Consider lines passing through M perpendicular to two sides of ABC triangle. // 4. Obtain the envelop of the lines above. ring R=(0,x,y),(x1,y1,x2,y2),lp; ideal C=(x1)^2+(y1)^2-1, x2+y2-1, x2-y2-x1+y1; matrix M[3][3]=x,y,1,x2,y2,1,x1,0,1; poly F=det(M); short=0; // Curves Family F= F; ==> -x1*y2+(y)*x1+(-y)*x2+(x)*y2 // Conditions C= C; ==> C[1]=x1^2+y1^2-1 ==> C[2]=x2+y2-1 ==> C[3]=-x1+y1+x2-y2 def Env=envelop(F,C); Env; ==> [1]: ==> [1]: ==> _[1]=(x^4+2*x^2*y^2+10*x^2*y-x^2+y^4-6*y^3+12*y^2-8*y) ==> [2]: ==> [1]: ==> _[1]=1 ==> [3]: ==> Normal ==> [4]: ==> 1 ==> [2]: ==> [1]: ==> _[1]=(x+y-1) ==> [2]: ==> [1]: ==> _[1]=1 ==> [3]: ==> [1]: ==> Special ==> [2]: ==> y2,x2-1,y1,x1-1 ==> [3]: ==> 0 ==> [4]: ==> 1 ```