Verified computations ======================================== Overview -------- When used inside `Sage `_, SnapPy can verify the following computations: * Complex intervals for the shapes that are guaranteed to contain a true but not necessarily geometric solution to the rectangular gluing equations:: sage: M = Manifold("m015(3,1)") sage: M.tetrahedra_shapes('rect', intervals=True) [0.625222762246? + 3.177940133813?*I, -0.0075523593782? + 0.5131157955971?*I, 0.6515818912107? - 0.1955023488930?*I] (Specify :py:attr:`bits_prec` or :py:attr:`dec_prec` for higher precision intervals.) * Verify the hyperbolicity of an orientable 3-manifold giving complex intervals for the shapes corresponding to a hyperbolic structure or holonomy representation with :py:meth:`~snappy.Manifold.verify_hyperbolicity`:: sage: M = Manifold("m015") sage: M.verify_hyperbolicity() (True, [0.6623589786224? + 0.5622795120623?*I, 0.6623589786224? + 0.5622795120623?*I, 0.6623589786224? + 0.5622795120623?*I]) sage: M.verify_hyperbolicity(holonomy=True)[1].SL2C('a') [-0.324717957? - 1.124559024?*I -0.704807293? + 0.398888830?*I] [ 1.409614585? - 0.797777659?*I -1.000000000? + 0.?e-9*I] * Intervals for the volume and complex volume of a hyperbolic orientable 3-manifold:: sage: M = Manifold("m003(-3,1)") sage: M.volume(verified=True, bits_prec = 100) 0.942707362776927720921299603? sage: M = Manifold("m015") sage: M.complex_volume(verified_modulo_2_torsion=True) 2.8281220883? + 1.9106738240?*I (Note that when using verified computation, the Chern-Simons invariant is only computed modulo pi^2/2 even though it is defined modulo pi^2.) * Give the :doc:`canonical retriangulation ` (a close relative to the canonical cell decomposition) of a cusped hyperbolic manifold using intervals or exact arithmetic if necessary with :py:meth:`~snappy.Manifold.canonical_retriangulation`:: sage: M = Manifold("m412") sage: K = M.canonical_retriangulation(verified = True) sage: len(K.isomorphisms_to(K)) # Certified size of isometry group 8 **Remark:** For the case of non-tetrahedral canonical cell, exact values are used which are found using the `LLL-algorithm `_ and then verified using exact computations. These computations can be slow. A massive speed-up was achieved by recent improvements so that the computation of the isometry signature of any manifold in ``OrientableCuspedCensus`` takes at most a couple of seconds, typically, far less. Manifolds with more simplices might require setting a higher value for :py:attr:`exact_bits_prec_and_degrees`. * The :doc:`isometry signature ` which is a complete invariant of the isometry type of a cusped hyperbolic manifold (i.e., two manifolds are isometric if and only if they have the same isometry signature):: sage: M = Manifold("m412") sage: M.isometry_signature(verified = True) 'mvvLALQQQhfghjjlilkjklaaaaaffffffff' The isometry signature can be strengthened to include the peripheral curves such that it is a complete invariant of a hyperbolic link:: sage: M = Manifold("L5a1") sage: M.isometry_signature(of_link = True, verified = True) 'eLPkbdcddhgggb_baCbbaCb' See :py:meth:`~snappy.Manifold.isometry_signature` for details. **Remark:** The isometry signature is based on the canonical retriangulation so the same warning applies. * The maximal cusp area matrix which characterizes the configuration space of disjoint cusp neighborhoods with :py:meth:`~snappy.Manifold.cusp_area_matrix`:: sage: M=Manifold("m203") sage: M.cusp_area_matrix(method='maximal', verified=True) [ 27.000000? 9.0000000000?] [9.0000000000? 27.0000000?] In this example, the cusp neighborhood about cusp 0 or 1 is only embedded if and only if its area is less than sqrt(27). The cusp neighborhood about cusp 0 is only disjoint from the one about cusp 1 if and only if the product of their areas is less than 9. * Compute areas for disjoint cusp neighborhoods with :py:meth:`~snappy.Manifold.cusp_areas`:: sage: M=Manifold("m203") sage: M.cusp_areas(policy = 'unbiased', method='maximal', verified = True) [3.00000000000?, 3.00000000000?] With the above parameters, the result is intrinsic to the hyperbolic manifold with labeled cusped. * Find all slopes of length less or equal to 6 when measured on the boundary of disjoint cusp neighborhoods:: sage: M=Manifold("m203") sage: M.short_slopes(policy = 'unbiased', method='maximal', verified = True) [[(1, 0), ..., (1, 2)], [(1, 0), ..., (1, 2)]] First block has all short slopes for first cusp, ..., see :py:meth:`~snappy.Manifold.short_slopes` for details. By `Agol's `_ and `Lackenby's `_ 6-Theorem any Dehn-filling resulting in a non-hyperbolic manifold must contain one of the above slopes. Thus, :py:meth:`~snappy.Manifold.short_slopes` can be used to implement the techniques to find exceptional Dehn surgeries (`arXiv:1109.0903 `_ and `arXiv:1310.3472 `_). This is all based on a reimplementation of `HIKMOT `_ which pioneered the use of interval methods for hyperbolic manifolds (also see `Zgliczynski's notes `_). It can be used in a way very similar to HIKMOT, but uses Sage's complex interval types for certification. It furthermore makes use of code by `Dunfield, Hoffman, Licata `_. The code to compute the isomorphism signature was ported over from `Regina `_. This verification code was contributed by Matthias Goerner. Verified computation topics --------------------------- .. toctree:: :maxdepth: 1 verify_canon verify_internals