Obstructing unknotting number two for some alternating knotsThanks: Justin Gebel was partially supported by an NSERC Canada Graduate Research Scholarship - Master’s grant. William Prangley was partially supported by an Ontario Graduate Scholarship grant. This work was made possible by the facilities of the Shared Hierarchical Academic Research Computing Network (SHARCNET:www.sharcnet.ca) and Digital Research Alliance of Canada (https://alliancecan.ca/en).
Abstract.
We apply the -invariants of Ozsváth-Szabó and a theorem due to Brendan Owens to determine the unknotting numbers of 194 alternating knots with 13 or fewer crossings.
Introduction. The unknotting number of a knot is the minimal number of crossing changes needed to turn into the unknot, taken across all diagrams of . The interest in computing unknotting numbers has recently been rekindled by the landmark papers [BH25] and [BH26] from Brittenham and Hermiller, which exhibit and explore the non-additivity of under connected sum. Following their terminology, if two knots and are such that , then the knots and are said to be symbionts for each other. Whether there exists a knot which does not possess a symbiont is unknown, and provides a deeply interesting open problem. This project grew out of a failed attempt to show that , which would give the trefoil knot a symbiont and demonstrate this property for all torus knots (see [BH26, Theorem 1.3, Corollary 4.2]). Although is still unknown, we are, however, pleased to present 194 new unknotting numbers, which were computed using techniques of Owens and Ozsváth-Szabó.
Theorem 1.
The following 11 and 12 crossing knots have : 11a63, 11a64, 11a144, 11a299, 11a320, 11a329, 12a35, 12a37, 12a47, 12a75, 12a97, 12a152, 12a231, 12a254, 12a269, 12a289, 12a320, 12a331, 12a421, 12a443, 12a610, 12a653, 12a661, 12a763, 12a764, 12a795, 12a796, 12a798, 12a800, 12a812, 12a880, 12a938, 12a967, 12a974, 12a978, 12a983, 12a996.
Theorem 2.
The following 13 crossing knots have : 13a16, 13a48, 13a60, 13a65, 13a82, 13a150, 13a154, 13a170, 13a172, 13a209, 13a217, 13a231, 13a251, 13a419, 13a434, 13a438, 13a443, 13a571, 13a576, 13a584, 13a586, 13a589, 13a644, 13a645, 13a653, 13a661, 13a666, 13a670, 13a796, 13a859, 13a901, 13a933, 13a983, 13a1043, 13a1051, 13a1062, 13a1137, 13a1140, 13a1147, 13a1182, 13a1295, 13a1329, 13a1331, 13a1339, 13a1403, 13a1413, 13a1440, 13a1465, 13a1469, 13a1472, 13a1475, 13a1491, 13a1495, 13a1499, 13a1546, 13a1547, 13a1552, 13a1554, 13a1580, 13a1615, 13a1616, 13a1618, 13a1643, 13a1943, 13a2037, 13a2125, 13a2185, 13a2269, 13a2290, 13a2291, 13a2295, 13a2310, 13a2317, 13a2334, 13a2359, 13a2360, 13a2365, 13a2373, 13a2379, 13a2399, 13a2412, 13a2434, 13a2478, 13a2502, 13a2520, 13a2697, 13a2698, 13a2761, 13a2766, 13a2777, 13a2784, 13a2785, 13a2805, 13a2821, 13a2832, 13a2834, 13a2843, 13a2859, 13a2865, 13a2888, 13a2911, 13a3065, 13a3089, 13a3100, 13a3310, 13a3531, 13a3601, 13a3691, 13a3698, 13a3704, 13a3705, 13a3716, 13a3784, 13a3902, 13a3963, 13a3975, 13a3981, 13a4057, 13a4080, 13a4091, 13a4093, 13a4101, 13a4104, 13a4106, 13a4113, 13a4156, 13a4185, 13a4191, 13a4198, 13a4200, 13a4207, 13a4216, 13a4232, 13a4293, 13a4320, 13a4322, 13a4385, 13a4390, 13a4392, 13a4396, 13a4461, 13a4465, 13a4508, 13a4510, 13a4556, 13a4565, 13a4571, 13a4579, 13a4580, 13a4624, 13a4655, 13a4756, 13a4796, 13a4810, 13a4820, 13a4835, 13a4836.
We have also improved lower bounds on for 30 knots, as below;
Theorem 3.
The following knots have : 11a354, 12a156, 12a392, 12a1037, 12a1097, 12a1113, 13a2129, 13a2767, 13a3176, 13a3595, 13a4088, 13a4196, 13a4214, 13a4233, 13a4304, 13a4454, 13a4493, 13a4554, 13a4773, 13a4781, 13a4790, 13a4813, 13a4840, 13a4842, 13a4851, 13a4853, 13a4855, 13a4869, 13a4871, 13a4872.
We may also add a sign restriction on the following knots having unknotting number 2.
Theorem 4.
If the following knots do have , then they must be unknotted with two crossings of the same sign: 11a362, 11a363, 12a86, 12a150, 12a153, 12a161, 12a372, 12a376, 12a379, 12a414, 12a767, 12a989, 12a1103, 12a1118, 13a17, 13a51, 13a159, 13a175, 13a285, 13a338, 13a339, 13a365, 13a382, 13a473, 13a619, 13a800, 13a862, 13a998, 13a1150, 13a1259, 13a1332, 13a1361, 13a1406, 13a1476, 13a1542, 13a1548, 13a1553, 13a1581, 13a1609, 13a1788, 13a1868, 13a1887, 13a2228, 13a2327, 13a2328, 13a2386, 13a2396, 13a2422, 13a2436, 13a2451, 13a2711, 13a2795, 13a2822, 13a2882, 13a2886, 13a2897, 13a2917, 13a3174, 13a3175, 13a3274, 13a3451, 13a3452, 13a3496, 13a3597, 13a3692, 13a3701, 13a3706, 13a3808, 13a3813, 13a4072, 13a4102, 13a4154, 13a4208, 13a4278, 13a4337, 13a4338, 13a4401, 13a4515, 13a4705, 13a4843, 13a4856, 13a4873.
Our computations are supplied at [GP26] for the reader to verify, but below we give all the details necessary to reproduce Theorems 1 through 4.
Conventions
We denote the double branch cover of a knot by . As per [S56, Satz 6], we denote the two-bridge knot corresponding to by . In computing the correction terms we use the convention of [O08] to orient , that is, the opposite of [OS03]. Note that Theorem 5 only applies to knots with non-negative signature, but this can always be arranged by taking mirror images. Since for any knot , we suppose that always.
Acknowledgments
Both authors are extremely grateful to Brendan Owens for providing immense feedback and a Maple notebook to compare results. We also thank him for his incredible hospitality and insights during our brief visit to the University of Glasgow. We would also like to thank Hans Boden for his unwavering support and invaluable guidance in compiling this note.
Background. Currently on KnotInfo [LM26], the knots listed in Theorems 1 and 2 all have , and the knots listed in Theorem 3 all have . For each of these, we use Theorem 1 in [O08] to obstruct , and hence conclude that (or ). The knots listed in Theorem 4 all have . We now summarize Owens’ result and the necessary background information.
Firstly, recall that given a Seifert matrix for a knot , the signature of is defined to be the signature of . This is commonly denoted , and it gives a well-defined and useful knot invariant. Remark 3 in [G82] (also see Proposition 2.1 in [CL86]) tells us that the behaviour of under crossing changes is well understood. Indeed, if is obtained from by changing a positive crossing, then or . Alternatively, if is obtained from by changing a negative crossing, then or . Note that this further implies the known fact that for any knot .
A positive definite matrix presents a group via the short exact sequence
Note that since is positive-definite, it has rank and the group will always be finite as it is a quotient of the free abelian group of rank .
A characteristic covector for is an element of which is congruent to the diagonal of modulo 2. We denote the set of these by Now define a function by
Since is positive definite, this minimum must exist as the quantity is always non-negative. It is now possible to state Theorem 1 of [O08]:
Theorem 5 ([O08], Theorem 1).
Let be a knot which may be unknotted by changing positive and negative crossings, where and . Then there exists a positive-definite matrix
with , , and exactly of are even; and a group isomorphism such that for all ,
When is a lens space, the following proposition of Ozsváth and Szabó allows for a simple computation of the correction terms used above.
Proposition 6 ([OS03], Proposition 4.8).
Let be a lens space. The correction terms of , with a canonical cyclic ordering, may be computed recursively using the following formula
where is the index of the ordering, , and .
It is worth noting here that the canonical cyclic ordering of gives the group structure of up to a shift and potential sign correction (see [OS03, Proposition 4.2] and the proof of Lemma 2.1 in [OS06]). As two-bridge knots are double branch covered by lens spaces (see [S56, Satz 6] or [BZH14, Proposition 12.3]), this proposition may be combined with Theorem 5 to yield Theorems 1 through 4 for all of the two-bridge knots listed.
If is a general alternating knot, Owens [O08, Theorem 4.1] uses a method due to Ozsváth and Szabó [OS05, Proposition 3.2] for computing the correction terms using the positive definite Goeritz matrix of an alternating diagram of . This method combined with Theorem 5 gives the lower bound for all other alternating knots listed in Theorems 1 through 4.
Our worked example highlights the two-bridge case as computing the correction terms via the Goeritz matrix is well documented in [O08, Theorem 4.1, Corollary 2] and [OS05, Proposition 3.2].
Proof of Theorems 1 through 4 : We provide the details for . Note that a similar procedure can be used to obstruct unknotting number 2 for all of the knots listed. In the case of Theorem 4 we obstruct unknotting with crossing changes. As all of those knots have signature 2, we are left with being the only possible unknotting configuration. Explicit details of these obstructions may be found at [GP26].
Let . One can easily compute that , so it follows that . Moreover, notice that may be unknotted by performing the three crossing changes indicated in Figure 1. This tells us that .
Now suppose that and note that if this were the case, then both crossing changes would need to be on negative crossings so that we end with signature 0. Hence, it must be that is unknotted by positive crossing changes and negative crossing changes, so we satisfy the hypotheses of Theorem 5.
Recall that the two-bridge knot is double-branch covered by the lens space . In our case, we need to look at . By Proposition 6, or via a Goeritz matrix of , we compute that the correction terms for Spin with respect to the group structure are as follows
Since has determinant 57, we now seek all matrices of the form specified in Theorem 5 with determinant 57. This is equivalent to finding all integer solutions to the equation
| (1) |
which satisfy and both even. First suppose that . Then since , we find by (1) that , which implies that . But this is impossible since , so there are no solutions when . Note additionally that we have no solutions when is prime, since the only way that can be prime is if or . Neither is possible since and must be even. Now consider , and note that has integer sequence
One can check that is composite only when . Hence, there are no solutions outside of these values. Moreover, by the prime factorizations of in these cases, all of which require . Similarly, since that requires . Lastly, since this requires , which is not even. Hence, and , are the only solutions, and
are the only possible matrices from Theorem 5. In both cases, we find that , and we compute and as
where the orders of these lists are determined by the ordering of with generator (i.e. the th entry is ).
To contradict Theorem 5, we must show in both cases that there is no isomorphism with the specified properties. In particular, we will show that for all possible , there exists some such that .
As both and are cyclic groups of order , we may instead think of as an automorphism from to itself, and thus multiplication by some some integer coprime to . Furthermore, the palindromic nature of tells us if multiplication by is obstructed, then multiplication by is as well. Thus we may also assume .
Let us first obstruct . As , we need so that and differs from by a multiple of 2. The highlighted values above correspond to generators with values less than or equal to . However, each potential generator fails the mod condition, so is obstructed, and we move to .
In the case of we may not obstruct all as easily as multiplication by gives an isomorphism with . We may now go further through the relevant and values of the isomorphism until this isomorphism is obstructed. The list below offers such an obstruction as .
mQ2[i] = [-35/57, 31/57, 9/19, 67/57, 37/57, 17/19, -5/57, -17/57, 5/19, -23/57,
-17/57, 11/19, 13/57, 37/57, -3/19, -11/57, 31/57, 1/19, 1/3, -35/57]
d[10i mod 57] = [-35/57, 31/57, 9/19, 67/57, 37/57, -21/19, -5/57, -17/57, 5/19, -23/57,
-17/57, 11/19, 13/57, 37/57, -3/19, -11/57, -83/57, 1/19, 1/3, 79/57]
In either case we have all possible isomorphisms obstructed and so as desired. ∎
Remark 7.
Appendix and Python functions
We give a SageMath [Sage26] and SnapPy [Snap26] implementation of the process described above for a given two-bridge or alternating knot. A full notebook to use with KnotInfo data is available at [GP26].
import itertools
from snappy import Link
All_Qs = dict()
Knot_Names = dict()
def load_pickle_file(file_path):
with open(file_path, ’rb’) as file:
return pickle.load(file)
def dump_pickle_file(file_path, file_data):
with open(file_path,"wb") as file:
pickle.dump(file_data, file)
return True
def d_invariant_of_two_bridged_knots(p, q):
def d(p, q, i):
return 0 if q == 0 else 1/4 - 1/4 * (2 * i + 1 - p - q)^2 / (p*q) - d(q, p % q, i %q)
original_dlist = [d(p, q, i) for i in range(0, p)]
# Rotate the resulting list to align with the cyclic group structure
k = (q-1)/2 if q%2 == 1 else (p+q-1)/2
dlist = vector(original_dlist[k:] + original_dlist[:k])
return dlist if dlist[0] < 0 else -1 * dlist
def convert_lattice_to_group_word(lattice_element, group):
gens = group.gens()
group_element = gens[0]^lattice_element[0]
for i in range(1, len(lattice_element)):
group_element *= gens[i]^lattice_element[i]
return group_element
def quotient_by_lattice(Q):
r = rank(Q)
G = FreeGroup(rank(Q))
gens = G.gens()
commutators = [gens[i]*gens[j]*gens[i]^(-1)*gens[j]^(-1) for i in range(r-1) for j in range(i+1, r)]
lattice_relation_vectors = (Q).columns()
return G.quotient(commutators + [convert_lattice_to_group_word(x,G) for x in lattice_relation_vectors])
def get_characteristic_covectors(Q):
each_component_options = [list(range(-Q[i][i], Q[i][i]-1, 2)) for i in range(rank(Q))]
return itertools.product(*each_component_options)
def make_intersection_form(m2, m1, a):
return matrix([[m1, 1, a, 0], [1, 2, 0, 0],
[a, 0, m2, 1], [0, 0, 1, 2]])
def find_all_possible_intersection_forms(detK, n = 2):
possibleQ = []
for a in range(0, detK//4 + 1):
for k1 in divisors(detK + 4 * a^2):
k2 = (detK + 4 * a^2)/k1
if k1 <= k2 and sum([x%4 for x in [k1,k2]]) == 3 * n + 1 * (2-n):
m1 = (k1 + 1)/2
m2 = (k2 + 1)/2
if a < m1:
possibleQ += [make_intersection_form(m2, m1, a)]
return possibleQ
def get_group_element(covector, Q):
group = quotient_by_lattice(Q)
return convert_lattice_to_group_word(covector, group)
def get_dlist_Q(Q):
unique_char_cvectors = []
generators = []
for char_covector in get_characteristic_covectors(Q):
m_covector = matrix(char_covector)
current_d_value = (m_covector * Q^(-1) * m_covector.transpose() - rank(Q))/4
current_group_element = get_group_element(char_covector, Q)
if current_group_element.order() == det(Q):
generators += [current_group_element]
unique = True
for i in range(len(unique_char_cvectors)):
(group_element, d_value) = unique_char_cvectors[i]
if current_group_element == group_element:
unique = False
unique_char_cvectors[i] = (group_element, min([d_value, current_d_value]))
break
if unique:
unique_char_cvectors += [(current_group_element, current_d_value)]
new_dlist = []
if len(generators) > 0:
generator = generators[0]
for i in range(det(Q)):
current_group_element = generator^i
for (group_element, d_value) in unique_char_cvectors:
if group_element == current_group_element:
new_dlist += [d_value[0][0]]
break
return new_dlist
def pretty_print(original_dlist):
new_list = []
length = len(original_dlist)
for i in range(length//15 + 1):
new_list += [[]]
for j in range(15):
pointer = i*15 + j
if pointer >= length:
new_list[i] += [0]
else:
new_list[i] += [original_dlist[pointer]]
print(matrix(new_list))
def obstruct(dlist, Q):
# Note if the group is cyclic we may assume an automorphism of Z_p
Q_dlist = get_dlist_Q(Q)
p = Integer(det(Q))
if len(Q_dlist) != p:
print ("Obstructed by Z^n/Q not being cyclic")
return True
(shift_for_simplicity, _) = find_minimal_generator(Q_dlist)
isomorphic_Q_dlist = vector(isomorphic_dlist(Q_dlist, shift_for_simplicity))
pretty_print(isomorphic_Q_dlist)
for possible_isomorphism_shift in p.coprime_integers((p+1)/2):
isomorphism_attempt_d_values = []
isomorphism = vector(isomorphic_dlist(dlist, possible_isomorphism_shift))
for group_index in range(1, p):
isomorphism_attempt_d_values += [isomorphism[group_index]]
difference_in_values = isomorphism[group_index] - isomorphic_Q_dlist[group_index]
obs_diff_mod_2 = not (difference_in_values / 2).is_integer()
if isomorphism[group_index] > isomorphic_Q_dlist[group_index] or obs_diff_mod_2:
break
if len(isomorphism_attempt_d_values) < p - 1:
if len(isomorphism_attempt_d_values) > 1:
print(list(isomorphic_Q_dlist[1: len(isomorphism_attempt_d_values) + 1]))
print(possible_isomorphism_shift, isomorphism_attempt_d_values)
else:
print("Unobstructed")
print(possible_isomorphism_shift)
return False
return True
def find_minimal_generator(MCQ_list):
p = Integer(len(MCQ_list))
gens = [(i, MCQ_list[i]) for i in p.coprime_integers(p)]
return min(gens, key = lambda generator: generator[1])
def isomorphic_dlist(dlist, shift):
p = len(dlist)
assert gcd(shift, p) == 1
return [dlist[i*shift % p] for i in range(p)]
def obstruct_alternating(name, expected_signature = 4):
print(f"{name}")
L = Link(name)
assert L.signature() in [-expected_signature, expected_signature]
assert L.is_alternating()
signature = abs(L.signature())
G = L.goeritz_matrix()
G = G if G.is_positive_definite() else L.mirror().goeritz_matrix()
assert G.is_positive_definite()
detK = abs(det(G))
dlist = vector(get_dlist_Q(G))
if len(dlist) != detK:
print("Not cyclic will skip for now")
return
if not dlist[0] in [-signature/4, signature/4]:
print("Bad Goeritz matrix. Should check")
return
dlist = -dlist if dlist[0] == signature/4 else dlist # correct possible sign error
print(f"Correction terms")
pretty_print(dlist)
if detK in All_Qs:
QS = All_Qs[detK]
else:
QS = find_all_possible_intersection_forms(detK, n = signature/2)
All_Qs[detK] = QS
unobstructed = False
for Q in QS:
print("Testing obstruction for")
print(f"m1: {Q[0][0]}, m2: {Q[2][2]},a: {Q[0][2]}")
unobstructed = not obstruct(dlist, Q)
if unobstructed:
break
print("---------------------------")
if not unobstructed:
print(f"SUCCESS for name = {name}")
Knot_Names[name] = True
print("---------------------------")
def obstruct_twobridge(p,q, name):
print(f"Obstructing p = {p} | q = {q}")
dlist = d_invariant_of_two_bridged_knots(p,q)
print(f"Correction terms")
pretty_print(dlist)
if p in All_Qs:
QS = All_Qs[p]
else:
QS = find_all_possible_intersection_forms(p)
All_Qs[p] = QS
unobstructed = False
for Q in QS:
print("Testing obstruction for")
print(f"m1: {Q[0][0]}, m2: {Q[2][2]},a: {Q[0][2]}")
unobstructed = not obstruct(dlist, Q)
if unobstructed:
break
print("---------------------------")
if not unobstructed:
print(f"SUCCESS for p = {p} | q = {q} | name = {name}")
Knot_Names[name] = True
print("---------------------------")
References
- [B] Mark Brittenham. Brittenham’s letters. Correspondence with Knot info. Available at https://knotinfo.org/descriptions/brittenham-letter.html.
- [BH25] Mark Brittenham and Susan Hermiller. Unknotting number is not additive under connected sum, 2025. ArXiv/2506.24088v2
- [BH26] Mark Brittenham and Susan Hermiller. Unknotting number and connected sums: The knots and , 2026. ArXiv/2601.18757
- [BZH14] Gerhard Burde, Heiner Zieschang, and Michael Heusener. Knots, volume 5 of De Gruyter Studies in Mathematics. De Gruyter, Berlin, extended edition, 2014.
- [CL86] Tim D. Cochran and W. B. Raymond Lickorish. Unknotting information from -manifolds. Trans. Amer. Math. Soc., 297(1):125–142, 1986.
- [G82] Cole A. Giller. A family of links and the Conway calculus. Trans. Amer. Math. Soc., 270(1):75–109, 1982.
- [GP26] Justin Gebel and William Prangley. Stored unknotting obstructions. https://github.com/knots-and-four-manifolds/alternating-knots, 2026.
- [LM26] Charles Livingston and Allison H. Moore. Knotinfo: Table of knot invariants. URL: knotinfo.org, August 2026.
- [OS03] Peter Ozsváth and Zoltán Szabó. Absolutely graded Floer homologies and intersection forms for four-manifolds with boundary. Adv. Math., 173(2):179–261, 2003.
- [OS05] Peter Ozsváth and Zoltán Szabó. Knots with unknotting number one and Heegaard Floer homology. Topology., 44(4):705–745, 2005.
- [OS06] Brendan Owens and Sašo Strle. Rational homology spheres and the four-ball genus of knots. Adv. Math., 200(1):196–216, 2006.
- [O08] Brendan Owens. Unknotting information from Heegaard Floer homology. Adv. Math., 217(5):2353–2376, 2008.
- [S56] Horst Schubert. Knoten mit zwei brücken. Math. Z., 65:133–170, 1956.
- [Sage26] The Sage Developers. SageMath, the Sage Mathematics Software System, 2026. DOI 10.5281/zenodo.6259615.
- [Snap26] Marc Culler, Nathan M. Dunfield, Matthias Goerner, and Jeffrey R. Weeks. SnapPy, a computer program for studying the geometry and topology of 3-manifolds, 2026. Available at http://snappy.computop.org.