Sympy should suffice
I have just received a copy of Instant SymPy Starter, by Ronan Lamy—a no-nonsense guide to the main properties of SymPy, the Python library for symbolic mathematics. This short monograph packs everything you should need, with neat examples included, in about 50 pages. Well-worth its money.
To celebrate, I would like to pose a few coding challenges on the use of this library, based on a fun geometric puzzle from cut-the-knot: Rhombus in Circles
Segments and are equal. Lines and intersect at Form four circumcircles: Prove that the circumcenters form a rhombus, with
Note that if this construction works, it must do so independently of translations, rotations and dilations. We may then assume that is the origin, that the segments have length one, and that for some parameters it is We let SymPy take care of the computation of circumcenters:
import sympy from sympy import * # Point definitions M=Point(0,0) A=Point(2,0) B=Point(1,0) a,theta=symbols('a,theta',real=True,positive=True) C=Point((a+1)*cos(theta),(a+1)*sin(theta)) D=Point(a*cos(theta),a*sin(theta)) #Circumcenters E=Triangle(A,C,M).circumcenter F=Triangle(A,D,M).circumcenter G=Triangle(B,D,M).circumcenter H=Triangle(B,C,M).circumcenter
Finding that the alternate angles are equal in the quadrilateral is pretty straightforward:
In [11]: P=Polygon(E,F,G,H) In [12]: P.angles[E]==P.angles[G] Out[12]: True In [13]: P.angles[F]==P.angles[H] Out[13]: True
To prove it a rhombus, the two sides that coincide on each angle must be equal. This presents us with the first challenge: Note for example that if we naively ask SymPy whether the triangle is equilateral, we get a False statement:
In [14]: Triangle(E,F,G).is_equilateral() Out[14]: False In [15]: F.distance(E) Out[15]: Abs((a/2 - cos(theta))/sin(theta) - (a - 2*cos(theta) + 1)/(2*sin(theta))) In [16]: F.distance(G) Out[16]: sqrt(((a/2 - cos(theta))/sin(theta) - (a - cos(theta))/(2*sin(theta)))**2 + 1/4)
Part of the reason is that we have not indicated anywhere that the parameter theta is to be strictly bounded above by (we did indicate that it must be strictly positive). The other reason is that SymPy does not handle identities well, unless the expressions to be evaluated are perfectly simplified. For example, if we trust the routines of simplification of trigonometric expressions alone, we will not be able to resolve this problem with this technique:
In [17]: trigsimp(F.distance(E)-F.distance(G),deep=True)==0 Out[17]: False
Finding that with SymPy is not that easy either. This is the second challenge.
How would the reader resolve this situation?
A nice application of Fatou’s Lemma
Let me show you an exciting technique to prove some convergence statements using exclusively functional inequalities and Fatou’s Lemma. The following are two classic problems solved this way. Enjoy!
Exercise 1 Let be a measurable space and suppose is a sequence of measurable functions in that converge almost everywhere to a function and such that the sequence of norms converges to . Prove that the sequence of integrals converges to the integral for every measurable set .
Proof: Note first that
Set then (which are non-negative functions) and apply Fatou’s Lemma to that sequence. We have then
which implies
It must then be . But this proves the statement, since
Exercise 2 Let be a finite measure space and let . Suppose that is a sequence of measurable functions in whose norms are uniformly bounded in and which converge almost everywhere to a function . Prove that the sequence converges to for all where is the conjugate exponent of .
Proof: The proof is very similar to the previous problem. We start by noticing that under the hypotheses of the problem,
If we prove that , we are done.
We will achieve this by using the convexity of , since in that case it is
hence,
Set then (which are non-negative functions) and apply Fatou’s Lemma as before.