diff --git a/build/pkgs/configure/checksums.ini b/build/pkgs/configure/checksums.ini index 1c872212d2e..8e9ce5a9e51 100644 --- a/build/pkgs/configure/checksums.ini +++ b/build/pkgs/configure/checksums.ini @@ -1,3 +1,3 @@ tarball=configure-VERSION.tar.gz -sha1=852d0d200a6a73aa5ddb9e00874cbe4a61c211e9 -sha256=c4b089d90850dfdf15b905f66e4f6a0d961b96eb0663d8603beaff1a9efb2cbe +sha1=1eddcd428863dd3f9a9b59ac701e63d9b718748d +sha256=bb763394dfaa0ba132b9e8055eaca3d3fb0cae9135403582eff41491d40248e5 diff --git a/build/pkgs/configure/package-version.txt b/build/pkgs/configure/package-version.txt index 093cb148078..1e7e4b96461 100644 --- a/build/pkgs/configure/package-version.txt +++ b/build/pkgs/configure/package-version.txt @@ -1 +1 @@ -a2ba1f943f88775218c385efe55509c4548d1b44 +0cb2721d2a823ab7042811c7fca5752c54248e67 diff --git a/src/sage/geometry/hyperplane_arrangement/ordered_arrangement.py b/src/sage/geometry/hyperplane_arrangement/ordered_arrangement.py index c0024f4c982..87774ec64ab 100644 --- a/src/sage/geometry/hyperplane_arrangement/ordered_arrangement.py +++ b/src/sage/geometry/hyperplane_arrangement/ordered_arrangement.py @@ -394,7 +394,6 @@ def projective_fundamental_group(self): < x0, x1, x2, x3, x4 | x4^-1*x3^-1*x2^-1*x3*x4*x0*x2*x0^-1, x4^-1*x2^-1*x4*x2, x4^-1*x1^-1*x0^-1*x1*x4*x0, x4^-1*x1^-1*x0^-1*x4*x0*x1, - x4^-1*x1^-1*x3*x0*x1*x3^-1*x2^-1*x4*x0^-1*x2, x3^-1*x2^-1*x1^-1*x0^-1*x3*x0*x1*x2, x3^-1*x1^-1*x3*x1 > sage: G3.abelian_invariants() @@ -406,9 +405,7 @@ def projective_fundamental_group(self): < x0, x1, x2, x3, x4 | x4^-1*x3^-1*x2^-1*x3*x4*x0*x2*x0^-1, x4^-1*x2^-1*x4*x2, x4^-1*x1^-1*x0^-1*x1*x4*x0, x4^-1*x1^-1*x0^-1*x4*x0*x1, - x4^-1*x1^-1*x3*x0*x1*x3^-1*x2^-1*x4*x0^-1*x2, - x3^-1*x2^-1*x1^-1*x0^-1*x3*x0*x1*x2, - x3^-1*x1^-1*x3*x1 > + x3^-1*x2^-1*x1^-1*x0^-1*x3*x0*x1*x2, x3^-1*x1^-1*x3*x1 > sage: G4.abelian_invariants() (0, 0, 0, 0, 0) diff --git a/src/sage/schemes/curves/plane_curve_arrangement.py b/src/sage/schemes/curves/plane_curve_arrangement.py index 63e8d03f556..a13faab50bc 100644 --- a/src/sage/schemes/curves/plane_curve_arrangement.py +++ b/src/sage/schemes/curves/plane_curve_arrangement.py @@ -513,7 +513,7 @@ def fundamental_group(self, simplified=True, vertical=True, {0: [x1, x2], 1: [x0], 2: [x3], 3: [x3^-1*x2^-1*x1^-1*x0^-1]} sage: A.fundamental_group(vertical=False) Finitely presented group - < x0, x1, x2 | x2^-1*x1^-1*x2*x1, x1*x0*x1^-1*x0^-1, (x0*x2)^2*(x0^-1*x2^-1)^2 > + < x0, x1, x2 | x2*x1^-1*x2^-1*x1, x1*x0*x1^-1*x0^-1, (x0*x2)^2*(x0^-1*x2^-1)^2 > sage: A.meridians(vertical=False) {0: [x2, x0*x2*x0^-1], 1: [x1], 2: [x0], 3: [x0*x2^-1*x0^-1*x2^-1*x1^-1*x0^-1]} sage: G = A.fundamental_group(simplified=False, vertical=False) @@ -834,7 +834,7 @@ def fundamental_group(self, simplified=True): sage: A.fundamental_group().sorted_presentation() Finitely presented group < x0, x1 | x1^-1*x0^-1*x1*x0 > sage: A.meridians() - {0: [x1], 1: [x0], 2: [x1^-1*x0^-1*x1^-1]} + {0: [x1], 1: [x0], 2: [x0^-1*x1^-2]} sage: G = A.fundamental_group(simplified=False) sage: G.sorted_presentation() Finitely presented group @@ -945,7 +945,7 @@ def meridians(self, simplified=True): sage: A.fundamental_group().sorted_presentation() Finitely presented group < x0, x1 | x1^-1*x0^-1*x1*x0 > sage: A.meridians() - {0: [x1], 1: [x0], 2: [x1^-1*x0^-1*x1^-1]} + {0: [x1], 1: [x0], 2: [x0^-1*x1^-2]} sage: A = H(y^2 + x*z, z, x) sage: A.fundamental_group() Finitely presented group < x0, x1 | (x1*x0)^2*(x1^-1*x0^-1)^2 > diff --git a/src/sage/schemes/curves/projective_curve.py b/src/sage/schemes/curves/projective_curve.py index d50ef0063e3..09fb3ffd3db 100644 --- a/src/sage/schemes/curves/projective_curve.py +++ b/src/sage/schemes/curves/projective_curve.py @@ -1775,8 +1775,9 @@ def fundamental_group(self): sage: C = P.curve(x^2*z - y^3) sage: C.fundamental_group() # needs sirocco Finitely presented group < x0 | x0^3 > - sage: P.curve(z*(x^2*z - y^3)).fundamental_group() # needs sirocco - Finitely presented group < x0, x1 | x1*x0*x1*x0^-1*x1^-1*x0^-1 > + sage: g = P.curve(z*(x^2*z - y^3)).fundamental_group() # needs sirocco + sage: g.sorted_presentation() # needs sirocco + Finitely presented group < x0, x1 | x1^-1*x0^-1*x1^-1*x0*x1*x0 > In the case of number fields, they need to have an embedding into the algebraic field:: diff --git a/src/sage/schemes/curves/zariski_vankampen.py b/src/sage/schemes/curves/zariski_vankampen.py index 47485b86340..f7a7cb28921 100644 --- a/src/sage/schemes/curves/zariski_vankampen.py +++ b/src/sage/schemes/curves/zariski_vankampen.py @@ -1416,7 +1416,7 @@ def conjugate_positive_form(braid): A list of `r` lists. Each such list is another list with two elements, a positive braid `\alpha_i` and a list of permutation braids - `\gamma_{1}^{i},\dots,\gamma_{r}^{n_i}` such that if + `\gamma_{1}^{i},\dots,\gamma_{n_i}^{i}` such that if `\gamma_i=\prod_{j=1}^{n_i} \gamma_j^i` then the braids `\tau_i=\gamma_i\alpha_i\gamma_i^{-1}` pairwise commute and `\alpha=\prod_{i=1}^{r} \tau_i`. @@ -1426,17 +1426,15 @@ def conjugate_positive_form(braid): sage: from sage.schemes.curves.zariski_vankampen import conjugate_positive_form sage: B = BraidGroup(4) sage: t = B((1, 3, 2, -3, 1, 1)) - sage: conjugate_positive_form(t) - [[(s1*s0)^2, [s2]]] + sage: cpf = conjugate_positive_form(t); cpf + [[(s0*s1)^2, [s0*s2*s1*s0]]] + sage: t == prod(prod(b) * a / prod(b) for a, b in cpf) + True sage: B = BraidGroup(5) sage: t = B((1, 2, 3, 4, -1, -2, 3, 3, 2, -4)) sage: L = conjugate_positive_form(t); L - [[s1^2, [s3*s2]], [s1*s2, [s0]]] - sage: s = B.one() - sage: for a, l in L: - ....: b = prod(l) - ....: s *= b * a / b - sage: s == t + [[s0^2, [s0*s1*s2*s1*s3*s2*s1*s0]], [s3*s2, [s0*s1*s2*s1*s3*s2*s1*s0]]] + sage: t == prod(prod(b) * a / prod(b) for a, b in L) True sage: s1 = B.gen(1)^3 sage: conjugate_positive_form(s1) @@ -1444,33 +1442,40 @@ def conjugate_positive_form(braid): """ B = braid.parent() d = B.strands() - braid1 = braid.super_summit_set()[0] - L1 = braid1.Tietze() - sg0 = braid.conjugating_braid(braid1) - gns = set(L1) - cuts = [j for j in range(d + 1) if j not in gns] - blocks = [] - for i in range(len(cuts) - 1): - block = [j for j in L1 if cuts[i] < j < cuts[i + 1]] - if block: - blocks.append(block) + rnf = rightnormalform(braid) + ex = rnf[-1][0] + if ex >= 0: + A1 = [B(a) for a in rnf[:-1]] + braid1 = prod(A1, B.delta() ** ex) + sg0 = B.one() + else: + braid1, sg0 = braid.super_summit_set_element() + if ex > 0: + blocks = [list(braid1.Tietze())] + else: + L1 = braid1.Tietze() + gns = set(L1) + cuts = [j for j in range(d + 1) if j not in gns] + blocks = [] + for i in range(len(cuts) - 1): + block = [j for j in L1 if cuts[i] < j < cuts[i + 1]] + if block: + blocks.append(block) shorts = [] for a in blocks: - A = B(a).super_summit_set() - res = None - for tau in A: - sg = (sg0 * B(a) / sg0).conjugating_braid(tau) + if sg0 == B.one(): + res0 = [B(a), []] + else: + bra = sg0 * B(a) / sg0 + br1, sg = bra.super_summit_set_element() A1 = rightnormalform(sg) par = A1[-1][0] % 2 - A1 = [B(a) for a in A1[:-1]] - b = prod(A1, B.one()) - b1 = len(b.Tietze()) / (len(A1) + 1) - if res is None or b1 < res[3]: - res = [tau, A1, par, b1] - if res[2] == 1: - r0 = res[0].Tietze() - res[0] = B([i.sign() * (d - abs(i)) for i in r0]) - res0 = res[:2] + A1 = [B(a0) for a0 in A1[:-1]] + res = [br1, A1, par] + if res[2]: + r0 = res[0].Tietze() + res[0] = B([d - i for i in r0]) + res0 = res[:2] shorts.append(res0) return shorts @@ -1596,9 +1601,10 @@ def fundamental_group_from_braid_mon(bm, degree=None, sage: bm = [s1*s2*s0*s1*s0^-1*s1^-1*s0^-1, ....: s0*s1^2*s0*s2*s1*(s0^-1*s1^-1)^2*s0^-1, ....: (s0*s1)^2] - sage: g = fundamental_group_from_braid_mon(bm, projective=True); g # needs sirocco + sage: g = fundamental_group_from_braid_mon(bm, projective=True) # needs sirocco + sage: g.sorted_presentation() # needs sirocco Finitely presented group - < x1, x3 | x3^2*x1^2, x1^-1*x3^-1*x1*x3^-1*x1^-1*x3^-1 > + < x0, x1 | x1^-2*x0^-2, x1^-1*(x0^-1*x1)^2*x0 > sage: print(g.order(), g.abelian_invariants()) # needs sirocco 12 (4,) sage: B2 = BraidGroup(2) @@ -1697,8 +1703,8 @@ def fundamental_group(f, simplified=True, projective=False, puiseux=True): sage: from sage.schemes.curves.zariski_vankampen import fundamental_group, braid_monodromy sage: R. = QQ[] sage: f = x^2 + y^3 - sage: fundamental_group(f) - Finitely presented group < x0, x1 | x0*x1^-1*x0^-1*x1^-1*x0*x1 > + sage: fundamental_group(f).sorted_presentation() + Finitely presented group < x0, x1 | x1^-1*x0^-1*x1^-1*x0*x1*x0 > sage: fundamental_group(f, simplified=False, puiseux=False).sorted_presentation() Finitely presented group < x0, x1, x2 | x2^-1*x1^-1*x0*x1, x2^-1*x0*x1*x0^-1, @@ -1859,7 +1865,7 @@ def fundamental_group_arrangement(flist, simplified=True, projective=False, sage: G.sorted_presentation() Finitely presented group < x0, x1, x2, x3 | x3^-1*x2^-1*x3*x2, x3^-1*x1^-1*x0^-1*x1*x3*x0, - x3^-1*x1^-1*x3*x0*x1*x0^-1, x2^-1*x0^-1*x2*x0 > + x3^-1*x1^-1*x0^-1*x3*x0*x1, x2^-1*x0^-1*x2*x0 > sage: dic {0: [x1], 1: [x3], 2: [x2], 3: [x0], 4: [x3^-1*x2^-1*x1^-1*x0^-1]} sage: fundamental_group_arrangement(L, vertical=True)