Fehrian Branches or: How I Learned to Reduce y = x^2 + 1 and Love Mathematica

Atsushi Miyazawa, 3D Consortium

(RowDefault[, (Spacer1), , (Spacer1), ])  #WolframTechConf

ABSTRACT

Charles Howard Hinton (1853–1907), an English mathematician, made significant strides in the understanding of four-dimensional figures, most notably coining the term ‘tesseract’ to describe a hypercube. In his seminal 1880 article “What Is the Fourth Dimension?”, Hinton outlined methods to visualize higher-dimensional geometry, including examining shadows, cross-sections, and unravellings (geometric nets). At the turn of the 20th century, the German company Martin Schilling produced geometric plaster models for educational use that also reflected the cutting-edge mathematical research of the time. These models included graphical representations of complex functions, such as the Weierstrass p-function, depicted as if projecting their shadows into three-dimensional space.

Model in the collection of mathematical models and instruments, Georg-August-Universität Göttingen Göttingen, http://www.universitaetssammlungen.de/uimg/large/uimg4f04223ae35d6.jpg (last visited November 4, 2023).

In the 1945 annual report of The National Council of Teachers of Mathematics, Howard Franklin Fehr (1901–1982) contributed an article titled “Graphical Representation of Complex Roots.” Here, he demonstrated the complex roots of elementary algebraic equations by constructing their functions’ cross-sections. He advocated for a more meaningful approach to teaching complex roots in high school mathematics. Fehr referred to these cross-sections as real or complex branches. Yet, he did not provide a precise mathematical definition, leading to a use of terminology that lacks conventional accuracy in the fields of complex analysis and algebraic geometry. However, I argue that recent advancements in computer algebra and algebraic algorithms, particularly those implemented in the Wolfram Language, have the potential to substantiate Fehr’s application of the term ‘branch.’

What are branches, anyway?

According to the properties and behaviors of quadratics that we learned in middle school mathematics, the vertex of the parabola would be the lowest point on the graph if the quadratic were positive and opened upwards:

y==(x^2) (⧦(x^2)-y==0)

on the contrary when the highest point if the quadratic were negative and opened down.

y==-(x^2) (⧦(x^2)+y==0)

xymax=3;ofst={3/2,3/2};GraphicsRow[Table[Show[ContourPlot[{x y==0},{x,-xymax,xymax},{y,-xymax,xymax},PlotTheme->"Marketing"],Graphics[{{RGBColor[{167,204,0}/255],PointSize[1/16],Point[{0,0}]},{White,Text[Style["0",32,Bold,FontFamily->"Times"],{0,0},ofst],Text[Style["x",32,Bold,Italic,FontFamily->"Times"],{xymax,0},ofst],Text[Style["y",32,Bold,Italic,FontFamily->"Times"],{0,xymax},ofst]}}],ContourPlot[{f==0},{x,-xymax,xymax},{y,-xymax,xymax},ContourStyle->Directive[RGBColor[{0,189,223}/255],Thickness[1/64]]]],{f,{(x^2)-y,(x^2)+y(*,(x^4)-(y^2)*)}}],ImageSize->Full]

We can combine these two graphs into one on purpose to create a singular point (a point of osculation or tacnode) at the origin, and the equation then becomes a quartic function that is the product of two (because the polynomial ring is an integral domain):

((x^2)-y)×((x^2)+y)==(x^4)-(y^2)==0

but this is no longer an irreducible polynomial.

xymax=3;ofst={3/2,3/2};GraphicsRow[Table[Show[ContourPlot[{x y==0},{x,-xymax,xymax},{y,-xymax,xymax},PlotTheme->"Marketing"],Graphics[{{RGBColor[{167,204,0}/255],PointSize[1/16],Point[{0,0}]},{White,Text[Style["0",32,Bold,FontFamily->"Times"],{0,0},ofst],Text[Style["x",32,Bold,Italic,FontFamily->"Times"],{xymax,0},ofst],Text[Style["y",32,Bold,Italic,FontFamily->"Times"],{0,xymax},ofst]}}],ContourPlot[{f==0},{x,-xymax,xymax},{y,-xymax,xymax},ContourStyle->Directive[RGBColor[{0,189,223}/255],Thickness[1/64]]]],{f,{(*(x^2)-y,(x^2)+y,*)(x^4)-(y^2)}}],ImageSize->Large]

What are branches, anyway? (cont’d)

A cubic function that also has a singularity (an ordinary double point or crunode) at the origin:

(y^2)-(x^2)(x+1)==0

xymax=2;ofst={3/2,3/2};GraphicsRow[Table[Show[ContourPlot[{x y==0},{x,-xymax,xymax},{y,-xymax,xymax},PlotTheme->"Marketing"],Graphics[{{RGBColor[{167,204,0}/255],PointSize[1/16],Point[{0,0}]},{White,Text[Style["0",32,Bold,FontFamily->"Times"],{0,0},ofst],Text[Style["x",32,Bold,Italic,FontFamily->"Times"],{xymax,0},ofst],Text[Style["y",32,Bold,Italic,FontFamily->"Times"],{0,xymax},ofst]}}],ContourPlot[{f==0},{x,-xymax,xymax},{y,-xymax,xymax},ContourStyle->Directive[RGBColor[{0,189,223}/255],Thickness[1/64]]]],{f,{(y^2)-(x^2)(x+1)(*,y-x(Sqrt[x+1]),y+x(Sqrt[x+1])*)}}],ImageSize->Large]

cannot be further factored as a polynomial, but using a formal power series,

(y^2)-(x^2)(x+1)==(y-x(Sqrt[x+1]))(y+x(Sqrt[x+1]))
	==(y-x-((x^2)/2)+((x^3)/8)-((x^4)/16)+...)(y+x+((x^2)/2)-((x^3)/8)+((x^4)/16)-...)
	==0

the function can be resolved into the product of the irreducible factors, and each factor is called a “branch” (in algebraic geometry); in the example above, there are two branches.

xymax=2;ofst={3/2,3/2};GraphicsRow[Table[Show[ContourPlot[{x y==0},{x,-xymax,xymax},{y,-xymax,xymax},PlotTheme->"Marketing"],Graphics[{{RGBColor[{167,204,0}/255],PointSize[1/16],Point[{0,0}]},{White,Text[Style["0",32,Bold,FontFamily->"Times"],{0,0},ofst],Text[Style["x",32,Bold,Italic,FontFamily->"Times"],{xymax,0},ofst],Text[Style["y",32,Bold,Italic,FontFamily->"Times"],{0,xymax},ofst]}}],ContourPlot[{f==0},{x,-xymax,xymax},{y,-xymax,xymax},ContourStyle->Directive[RGBColor[{0,189,223}/255],Thickness[1/64]]]],{f,{(*(y^2)-(x^2)(x+1),*)y-x(Sqrt[x+1]),y+x(Sqrt[x+1])}}],ImageSize->Full]

Fehrian branches versus conventional ones

Meanwhile, back in 1945, Dr. Howard F. Fehr (1901–1982), professor emeritus of mathematics education at Columbia University Teachers College (as of 1982), put forward his “real and complex branches.”

Howard F. Fehr, “Graphical Representation of Complex Roots,” ‘Multi-Sensory Aids in the Teaching of Mathematics’, ‘Eighteenth Yearbook of the National Council of Teachers of mathematics’ [1945] pp. 130-138

However, from the point of view of algebraic geometry, the quadratic equation shown in the previous slide can be factorized as:

(x^2)-4x-y+8==0
	⧦(((x-2))^2)-(y-4)==0
	⧦(x-2-(Sqrt[y-4]))(x-2+(Sqrt[y-4]))==0

meaning that the graph’s left and right halves are branches (branches in algebraic geometry and ones in complex analysis meet here).

xmax=5;xmin=-1;ymax=11;ymin=-1;ofst={3/2,3/2};GraphicsRow[Table[Show[ContourPlot[{x y==0},{x,xmin,xmax},{y,ymin,ymax}(*,AspectRatio->Automatic*),PlotTheme->"Marketing"],Graphics[{{RGBColor[{167,204,0}/255],PointSize[1/16],Point[{2,4}]},{White,Text[Style["0",32,Bold,FontFamily->"Times"],{0,0},ofst],Text[Style["x",32,Bold,Italic,FontFamily->"Times"],{xmax,0},ofst],Text[Style["y",32,Bold,Italic,FontFamily->"Times"],{0,ymax},ofst]}}],ContourPlot[{f==0},{x,xmin,xmax},{y,ymin,ymax},ContourStyle->Directive[RGBColor[{0,189,223}/255],Thickness[1/64]]]],{f,{(x^2)-4x-y+8,x-2+(Sqrt[y-4]),x-2-(Sqrt[y-4])}}],ImageSize->Full]

How to justify Fehrian branches with Mathematica, step by step

Replace real variables x and y in equation f(x,y) with complex ones:

In[]:=	f = x^2 - y + 1 /. {x -> x + I y, y -> u + I v}
Out[]=	1 - u - I v + (x + I y)^2

Set v to 0, i.e., restrict the equation to the 3-subspace {{x, y, u}} to render three-dimensional cross-sections of the fourth dimension:

In[]:=	c = v == 0 /. Equal -> Rule
	lSubspace = {x, y, u, v} /. c /. (0 -> Nothing)
Out[]=	v -> 0
	{x, y, u}

Using the equality of complex numbers ((Subscript[c, 1])==(Subscript[c, 2])⧦(Subscript[a, 1])==(Subscript[a, 2]) && (Subscript[b, 1])==(Subscript[b, 2]), where (Subscript[c, 1])==(Subscript[a, 1])+i (Subscript[b, 1]) and (Subscript[c, 2])==(Subscript[a, 2])+i (Subscript[b, 2])):

In[]:=	(ComplexExpand[Re[f]]) == 0 && (ComplexExpand[Im[f]]) 		== 0
Out[]=	1 - u + x^2 - y^2 == 0 && -v + 2 x y == 0

Reduce the expression over the reals:

In[]:=	% /. c
Out[]=	1 - u + x^2 - y^2 == 0 && 2 x y == 0

Using the axiom satisfied by integral domains (a b==0⧦a==0 || b==0):

1-u+(x^2)-(y^2)==0&&2 x y==0
	⧦1-u+(x^2)-(y^2)==0&&(x==0||y==0)
	⧦(x==0||1-u-(y^2)==0)&&(y==0||1-u+(x^2)==0)

Reduce[] performs these equivalence transformations for us:

In[]:=	Reduce[%, lSubspace]
Out[]=	(x == 0 && u == 1 - y^2) || (y == 0 && u == 1 + x^2)

Solve the UNDERDETERMINED simultaneous equations in x, y, and u:

In[]:=	llBranches = lSubspace /. Solve[%, lSubspace] // Quiet
Out[]=	{{0, y, 1 - y^2}, {x, 0, 1 + x^2}}

f=x^2-y+1/.{x->x+I y,y->u+I v};
c=v==0/.Equal->Rule;
lSubspace={x,y,u,v}/.c/.(0->Nothing);
(ComplexExpand[Re[f]])==0&&(ComplexExpand[Im[f]])==0;

%/.c;

Reduce[%,lSubspace];

llBranches=lSubspace/.Solve[%,lSubspace]//Quiet;

We are now ready to plot all parameterized Fehrian branches:

xymax=2;
Show[Table[
ParametricPlot3D[i,Evaluate@Flatten@{Intersection[i,lSubspace],-xymax,xymax},PlotRange->All]
,{i,llBranches}]]

Scope  (2)

First, consider defining a function called fnEnumerateBranches that contains all steps we have so far:

fnEnumerateBranches[func_,cond_]:=
Module[{f,c},
f=func&[x,y]/.{x->x+I y,y->u+I v};
c=cond&[x,y,u,v]/.Equal->Rule;
lSubspace={x,y,u,v}/.c/.(0->Nothing);
lReals=lSubspace/.{y->0,u->_,v->0};
(*lRealConstants=lSubspace/.{x->_,y->0,u->_,v->0};*)
lSubspace/.Solve[(result=Reduce[(ComplexExpand[Re[f]])==0&&(ComplexExpand[Im[f]])==0/.c,lSubspace(*,Reals*),Cubics->True]),lSubspace]
]

Options[fnRenderCrossSection]={"HeaveDistance"->0,"PitchAngle"->0,PlotRange->6};fnRenderCrossSection[branches_,subspace_,OptionsPattern[]]:=
Module[{b,k,l=TranslationTransform[{0,0,OptionValue["HeaveDistance"]}],r=RotationTransform[OptionValue["PitchAngle"],{1,0,0}],pr=OptionValue[PlotRange]},
Show[Plot3D[0,{x,-pr,pr},{y,-pr,pr},AxesLabel->(l@*r)[subspace],PlotRange->pr,],
,Table[ParametricPlot3D[(l@*r)[k],Evaluate@Flatten@{Intersection[k,subspace],-pr,pr},PlotStyle->Evaluate@If[MatchQ[k,lReals],{Gray,Thickness[0.01]},{Red,Thickness[0.02]}]],{k,branches}]]
]

Shows the branches for the cubic equation y = x (x^2 - 3)/4 + 2, which has only one real and two complex roots:

llBranches=fnEnumerateBranches[Evaluate@#(#^2-3)/4-#2+2,#4==0]//Quiet

fnRenderCrossSection[llBranches,lSubspace]

We can show the complex branches (colored red) of the circle x^2 + y^2 - 1 with a slight change in subspace definition:

llBranches=fnEnumerateBranches[Evaluate@#^2+#2^2-1,#2==0]//Quiet

fnRenderCrossSection[llBranches,lSubspace,PlotRange->4]

Possible Issues  (1)

Algebraic curves containing higher-degree polynomials that Reduce does not solve (e.g., the Trifolium Curve) cannot be handled.

llBranches=fnEnumerateBranches[Evaluate@(#^2+#2^2)^2+3#^2 #2-#2^3,#2==0]//Quiet

Neat Examples  (1)

Complexify the catalog of elliptic curves.

Elliptic curve, https://en.wikipedia.org/w/index.php?title=Elliptic_curve&oldid=1116437068 (last visited July 23, 2023).

lllBranches=Table[fnEnumerateBranches[Evaluate@#^3-#2^2+a x+b,#2==0]//Quiet,{a,-2,1},{b,-1,2}]

xuvmax=4;Table[Show[Plot3D[0,{x,-xuvmax,xuvmax},{u,-xuvmax,xuvmax},BoxRatios->Automatic,Mesh->None,PlotRange->xuvmax,PlotStyle->Directive[EdgeForm[],FaceForm[]]],Table[ParametricPlot3D[k,Evaluate@Flatten@{Intersection[k,lSubspace],-xuvmax,xuvmax},PlotStyle->Evaluate@If[MatchQ[k,lReals],{Gray,Thickness[0.01]},{Red,Thickness[0.02]}]],{k,lllBranches[[j,i]]}]],{j,4},{i,4}]

%//GraphicsGrid

Acknowledgments

I thank Dr. Michael Trott (Wolfram|Alpha LLC), Mr. Brett Champion (Wolfram Research), and Dr. Fusashi Nakamura (Wolfram Research Asia Ltd.) for their assistance with Wolfram Language programming and for providing comments that significantly improved the notebook.