From 0ddf6de4535749aa0cbb7b432268ae9e1a9d049e Mon Sep 17 00:00:00 2001 From: Johannes Schmitt Date: Mon, 17 Jun 2024 18:18:59 +0200 Subject: [PATCH 01/12] Fix some combinatorics (#3860) * Make sure the combinatorics functions work for every integer type * Fix `is_standard` for negative values * Fix documentation of Schur polynomials * Fix `schur_polynomial` * Change one-line/terse printing of tableaux (cherry picked from commit 265e89c83b36e1eb566b92cb1eb3f16672444746) --- .../schur_polynomials.md | 2 +- .../EnumerativeCombinatorics/partitions.jl | 25 ++-- .../schur_polynomials.jl | 9 +- .../EnumerativeCombinatorics/tableaux.jl | 5 +- .../EnumerativeCombinatorics/types.jl | 6 +- .../EnumerativeCombinatorics/compositions.jl | 33 +++-- .../EnumerativeCombinatorics/partitions.jl | 118 ++++++++++-------- .../schur_polynomials.jl | 5 + .../EnumerativeCombinatorics/tableaux.jl | 2 + .../weak_compositions.jl | 39 +++--- 10 files changed, 134 insertions(+), 110 deletions(-) diff --git a/docs/src/Combinatorics/EnumerativeCombinatorics/schur_polynomials.md b/docs/src/Combinatorics/EnumerativeCombinatorics/schur_polynomials.md index eeb1cae86bb5..8a417d958040 100644 --- a/docs/src/Combinatorics/EnumerativeCombinatorics/schur_polynomials.md +++ b/docs/src/Combinatorics/EnumerativeCombinatorics/schur_polynomials.md @@ -1,6 +1,6 @@ # Schur polynomials -Given a partition $\lambda$ of $n$, the **Schur polynomial** is defined to be +Given a partition $\lambda$ with $n$ parts, the **Schur polynomial** is defined to be the polynomial $$s_\lambda := \sum x_1^{m_1}\dots x_n^{m_n}$$ diff --git a/src/Combinatorics/EnumerativeCombinatorics/partitions.jl b/src/Combinatorics/EnumerativeCombinatorics/partitions.jl index 204970cf6bfa..b9e853a9d150 100644 --- a/src/Combinatorics/EnumerativeCombinatorics/partitions.jl +++ b/src/Combinatorics/EnumerativeCombinatorics/partitions.jl @@ -227,10 +227,9 @@ function Base.iterate(P::Partitions{T}) where T return partition(T[1], check=false), (T[1], 1, 0) end - d = fill( T(1), n ) + d = fill(T(1), Int(n)) d[1] = n return partition(d[1:1], check=false), (d, 1, 1) - end @inline function Base.iterate(P::Partitions{T}, state::Tuple{Vector{T}, Int, Int}) where T @@ -381,7 +380,7 @@ function Base.iterate(P::PartitionsFixedNumParts{T}) where T only_distinct_parts = P.distinct_parts if n == 0 && k == 0 - return partition(T[], check=false), (T[], T[], 0, 0, 1, false) + return partition(T[], check=false), (T[], T[], T(0), T(0), 1, false) end # This iterator should be empty @@ -391,17 +390,17 @@ function Base.iterate(P::PartitionsFixedNumParts{T}) where T if n == k && lb == 1 only_distinct_parts && k > 1 && return nothing - return partition(T[1 for i in 1:n], check=false), (T[], T[], 0, 0, 1, false) + return partition(T[1 for i in 1:n], check=false), (T[], T[], T(0), T(0), 1, false) end if k == 1 && lb <= n <= ub - return partition(T[n], check=false), (T[], T[], 0, 0, 1, false) + return partition(T[n], check=false), (T[], T[], T(0), T(0), 1, false) end x = zeros(T,k) y = zeros(T,k) jj = only_distinct_parts*k*(k-1) - N = n - k*lb - div(jj,2) + N = T(n - k*lb - div(jj,2)) L2 = ub-lb 0 <= N <= k*L2 - jj || return nothing @@ -410,7 +409,7 @@ function Base.iterate(P::PartitionsFixedNumParts{T}) where T end i = 1 - L2 = L2 - only_distinct_parts*(k-1) + L2 = L2 - only_distinct_parts*T(k-1) while N > L2 N -= L2 @@ -421,7 +420,7 @@ function Base.iterate(P::PartitionsFixedNumParts{T}) where T return partition(x[1:k], check = false), (x, y, N, L2, i, true) end -@inline function Base.iterate(P::PartitionsFixedNumParts{T}, state::Tuple{Vector{T}, Vector{T}, T, IntegerUnion, Int, Bool}) where T +@inline function Base.iterate(P::PartitionsFixedNumParts{T}, state::Tuple{Vector{T}, Vector{T}, T, T, Int, Bool}) where T k = P.k x, y, N, L2, i, flag = state @@ -429,7 +428,7 @@ end if flag if i < k && N > 1 - N = 1 + N = T(1) x[i] = x[i] - 1 i += 1 x[i] = y[i] + 1 @@ -442,12 +441,11 @@ end flag = false end end - if !flag lcycle = false for j in i - 1:-1:1 - L2 = x[j] - y[j] - 1 - N = N + 1 + L2 = x[j] - y[j] - T(1) + N = N + T(1) if N <= (k-j)*L2 x[j] = y[j] + L2 lcycle = true @@ -457,7 +455,6 @@ end x[i] = y[i] i = j end - lcycle || return nothing while N > L2 N -= L2 @@ -769,7 +766,7 @@ end x[i] = m i -= 1 i == 0 && break # inner while loop - r = ii[i] + r = Int(ii[i]) N = N + x[i] - m m = y[i] end diff --git a/src/Combinatorics/EnumerativeCombinatorics/schur_polynomials.jl b/src/Combinatorics/EnumerativeCombinatorics/schur_polynomials.jl index 1f54c50e6477..48af8f85e786 100644 --- a/src/Combinatorics/EnumerativeCombinatorics/schur_polynomials.jl +++ b/src/Combinatorics/EnumerativeCombinatorics/schur_polynomials.jl @@ -120,7 +120,7 @@ function schur_polynomial_cbf(R::ZZMPolyRing, lambda::Partition{T}, n::Int = len end #calculate sub_dets[2:n] using Laplace extension - exp = zeros(Int, n) + exp = zeros(Int, ngens(R)) for i = 2:n for (columnview, ) in sub_dets[i] d = R() #the alternating sum of minors @@ -134,8 +134,11 @@ function schur_polynomial_cbf(R::ZZMPolyRing, lambda::Partition{T}, n::Int = len #multiply by the factorized term factor = MPolyBuildCtx(R) - exp = zeros(Int, n) - exp[columnview] .= exp_incr[i] + exp = zeros(Int, ngens(R)) + for j in 1:n + columnview[j] || continue + exp[j] = exp_incr[i] + end push_term!(factor, one(ZZ), exp) sub_dets[i][columnview] = mul!(d, d, finish(factor)) end diff --git a/src/Combinatorics/EnumerativeCombinatorics/tableaux.jl b/src/Combinatorics/EnumerativeCombinatorics/tableaux.jl index d82b81e2229f..86a7e8d0fe82 100644 --- a/src/Combinatorics/EnumerativeCombinatorics/tableaux.jl +++ b/src/Combinatorics/EnumerativeCombinatorics/tableaux.jl @@ -58,8 +58,7 @@ young_tableau(v::Vector{Vector{T}}; check::Bool = true) where T <: IntegerUnion data(tab::YoungTableau) = tab.t function Base.show(io::IO, tab::YoungTableau) - print(io, "Young tableau") - # TODO: is there meaningful information to add in one-line mode? + print(io, data(tab)) end function Base.show(io::IO, ::MIME"text/plain", tab::YoungTableau) @@ -591,7 +590,7 @@ function is_standard(tab::YoungTableau) numbs = falses(n) for i = 1:length(s) for j = 1:s[i] - if tab[i][j] > n + if tab[i][j] < 1 || tab[i][j] > n return false end numbs[tab[i][j]] = true diff --git a/src/Combinatorics/EnumerativeCombinatorics/types.jl b/src/Combinatorics/EnumerativeCombinatorics/types.jl index 848f96ba3d0c..ff9f4044c76e 100644 --- a/src/Combinatorics/EnumerativeCombinatorics/types.jl +++ b/src/Combinatorics/EnumerativeCombinatorics/types.jl @@ -78,10 +78,10 @@ struct CompositionsFixedNumParts{T<:IntegerUnion} if k > n # 1 does not have any weak compositions into 0 parts, so this will # produce an empty iterator - nk = 1 + nk = T(1) kk = 0 else - nk = n - k + nk = n - T(k) kk = k end return new{T}(n, k, weak_compositions(nk, kk)) @@ -165,7 +165,7 @@ struct PartitionsFixedNumParts{T<:IntegerUnion} if lb == 0 lb = 1 end - return new{T}(n, convert(T, k), T(lb), T(ub), only_distinct_parts) + return new{T}(n, Int(k), T(lb), T(ub), only_distinct_parts) end end diff --git a/test/Combinatorics/EnumerativeCombinatorics/compositions.jl b/test/Combinatorics/EnumerativeCombinatorics/compositions.jl index 7a847f012d20..e11e53145c1c 100644 --- a/test/Combinatorics/EnumerativeCombinatorics/compositions.jl +++ b/test/Combinatorics/EnumerativeCombinatorics/compositions.jl @@ -1,15 +1,15 @@ -@testset "compositions" begin +@testset "Compositions with integer type $T" for T in [Int, Int8, ZZRingElem] # Check some stupid cases - @test number_of_compositions(0, 0) == 1 - @test number_of_compositions(0, 1) == 0 - @test number_of_compositions(1, 0) == 0 - @test number_of_compositions(0) == 1 + @test number_of_compositions(T(0), T(0)) == 1 + @test number_of_compositions(T(0), T(1)) == 0 + @test number_of_compositions(T(1), T(0)) == 0 + @test number_of_compositions(T(0)) == 1 # First few number of compositions from https://oeis.org/A011782 nums = [1, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592] # Check if number_of_compositions is correct in these examples - @test [number_of_compositions(n) for n in 0:length(nums) - 1] == nums + @test [number_of_compositions(T(n)) for n in 0:length(nums) - 1] == nums # Complete check of compositions for small cases for n in 0:5 @@ -17,8 +17,9 @@ # of n into k parts for 0 <= k <= n allcomps = [] for k in 0:n - C = collect(compositions(n, k)) - @test length(C) == number_of_compositions(n, k) + C = @inferred collect(compositions(T(n), T(k))) + @test C isa Vector{Oscar.Composition{T}} + @test length(C) == number_of_compositions(T(n), T(k)) # Check if each composition consists of k parts and sums up to n for c in C @@ -37,19 +38,25 @@ @test allcomps == unique(allcomps) # Number of compositions needs to be correct - @test length(allcomps) == number_of_compositions(n) + @test length(allcomps) == number_of_compositions(T(n)) # Finally, check compositions(n) function - allcomps2 = collect(compositions(n)) + allcomps2 = @inferred collect(compositions(T(n))) + @test allcomps2 isa Vector{Oscar.Composition{T}} @test allcomps2 == unique(allcomps2) @test Set(allcomps) == Set(allcomps2) end + + # Test the case k > n + C = @inferred collect(compositions(T(2), T(3))) + @test C isa Vector{Oscar.Composition{T}} + @test isempty(C) end -@testset "Ascending compositions" begin +@testset "Ascending compositions with integer type $T" for T in [Int, Int8, ZZRingElem] for n in 0:20 - C = collect(ascending_compositions(n)) - @test length(C) == number_of_partitions(n) + C = @inferred collect(ascending_compositions(T(n))) + @test length(C) == number_of_partitions(T(n)) @test C == unique(C) for lambda in C @test sum(lambda) == n diff --git a/test/Combinatorics/EnumerativeCombinatorics/partitions.jl b/test/Combinatorics/EnumerativeCombinatorics/partitions.jl index bd3443a90cb6..bb17ba21013e 100644 --- a/test/Combinatorics/EnumerativeCombinatorics/partitions.jl +++ b/test/Combinatorics/EnumerativeCombinatorics/partitions.jl @@ -20,28 +20,31 @@ ############################################################################ # number_of_partitions(n) ############################################################################ - @testset "number_of_partitions(n)" begin + @testset "number_of_partitions(n) for integer type $T" for T in [Int, Int8, ZZRingElem] # From https://oeis.org/A000041 - @test [ number_of_partitions(i) for i in 0:49 ] == + @test [ number_of_partitions(T(i)) for i in 0:49 ] == ZZRingElem[ 1, 1, 2, 3, 5, 7, 11, 15, 22, 30, 42, 56, 77, 101, 135, 176, 231, 297, 385, 490, 627, 792, 1002, 1255, 1575, 1958, 2436, 3010, 3718, 4565, 5604, 6842, 8349, 10143, 12310, 14883, 17977, 21637, 26015, 31185, 37338, 44583, 53174, 63261, 75175, 89134, 105558, 124754, 147273, 173525 ] # For some random large numbers, checked with Sage # Partitions(991).cardinality() - @test number_of_partitions(991) == ZZ(16839773100833956878604913215477) + if T !== Int8 + @test number_of_partitions(T(991)) == ZZ(16839773100833956878604913215477) + end - @test number_of_partitions(-1) == ZZ(0) + @test number_of_partitions(T(-1)) == ZZ(0) end ############################################################################ # partitions(n) ############################################################################ - @testset "partitions($n)" for n in 0:10 - P = collect(partitions(n)) + @testset "partitions($n) for integer type $T" for n in 0:10, T in [Int, Int8, ZZRingElem] + P = @inferred collect(partitions(T(n))) + @test P isa Vector{Oscar.Partition{T}} # Check that the number of partitions is correct # Note that number_of_partitions(n) is computed independently of partitions(n) - @test length(P) == number_of_partitions(n) + @test length(P) == number_of_partitions(T(n)) # Check that all partitions are distinct @test P == unique(P) @@ -55,59 +58,65 @@ ############################################################################ # number_of_partitions(n,k) ############################################################################ - @testset "number_of_partitions(n,k)" begin - @test number_of_partitions(0,0) == 1 - @test number_of_partitions(1,0) == 0 - @test number_of_partitions(1,1) == 1 - @test number_of_partitions(0,1) == 0 - @test number_of_partitions(2,3) == 0 + @testset "number_of_partitions(n,k) for integer type $T" for T in [Int, Int8, ZZRingElem] + @test number_of_partitions(T(0), T(0)) == 1 + @test number_of_partitions(T(1), T(0)) == 0 + @test number_of_partitions(T(1), T(1)) == 1 + @test number_of_partitions(T(0), T(1)) == 0 + @test number_of_partitions(T(2), T(3)) == 0 # From https://oeis.org/A008284 - @test [ number_of_partitions(n,k) for n in 1:14 for k in 1:n ] == + @test [ number_of_partitions(T(n), T(k)) for n in 1:14 for k in 1:n ] == ZZRingElem[ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 3, 3, 2, 1, 1, 1, 3, 4, 3, 2, 1, 1, 1, 4, 5, 5, 3, 2, 1, 1, 1, 4, 7, 6, 5, 3, 2, 1, 1, 1, 5, 8, 9, 7, 5, 3, 2, 1, 1, 1, 5, 10, 11, 10, 7, 5, 3, 2, 1, 1, 1, 6, 12, 15, 13, 11, 7, 5, 3, 2, 1, 1, 1, 6, 14, 18, 18, 14, 11, 7, 5, 3, 2, 1, 1, 1, 7, 16, 23, 23, 20, 15, 11, 7, 5, 3, 2, 1, 1 ] # For some random large numbers, checked with Sage # Partitions(1991,length=170).cardinality() - @test number_of_partitions(1991,170) == ZZ(22381599503916828837298114953756766080813312) - @test number_of_partitions(1991,1000) == ZZ(16839773100833956878604913215477) - @test number_of_partitions(1991,670) == ZZ(3329965216307826492368402165868892548) - @test number_of_partitions(1991,1991) == ZZ(1) - @test number_of_partitions(1991,1) == ZZ(1) + if T !== Int8 + @test number_of_partitions(T(1991), T(170)) == ZZ(22381599503916828837298114953756766080813312) + @test number_of_partitions(T(1991), T(1000)) == ZZ(16839773100833956878604913215477) + @test number_of_partitions(T(1991), T(670)) == ZZ(3329965216307826492368402165868892548) + @test number_of_partitions(T(1991), T(1991)) == ZZ(1) + @test number_of_partitions(T(1991), T(1)) == ZZ(1) + end # From Knuth (2011), p. 25. - @test sum([number_of_partitions(30, i) for i in 0:10]) == 3590 + @test sum([number_of_partitions(T(30), T(i)) for i in 0:10]) == 3590 - @test number_of_partitions(-1, 0) == ZZ(0) - @test number_of_partitions(0, -1) == ZZ(0) + @test number_of_partitions(T(-1), T(0)) == ZZ(0) + @test number_of_partitions(T(0), T(-1)) == ZZ(0) end ############################################################################ # partitions(n,k) ############################################################################ - @testset "partitions($n,$k)" for n in 0:10, k in 0:n+1 - P = collect(partitions(n,k)) + @testset "partitions($n, $k) for integer type $T" for n in 0:10, k in 0:n+1, T in [Int, Int8, ZZRingElem] + P = @inferred collect(partitions(T(n), T(k))) + @test P isa Vector{Oscar.Partition{T}} # Create the same by filtering all partitions - Q = collect(partitions(n)) - filter!( Q->length(Q) == k, Q) + Q = @inferred collect(partitions(T(n))) + @test Q isa Vector{Oscar.Partition{T}} + filter!(Q -> length(Q) == k, Q) # Check that P and Q coincide (up to reordering) @test length(P) == length(Q) @test Set(P) == Set(Q) # Compare length with number_of_partitions(n,k) - @test length(P) == number_of_partitions(n,k) + @test length(P) == number_of_partitions(T(n), T(k)) end ############################################################################ # partitions(n,k,lb,ub) ############################################################################ - @testset "partitions($n,$k,lb,ub)" for n in 0:10, k in 0:n+1 - @testset "partitions($n,$k,$lb,$ub)" for lb in 0:n, ub in lb:n - P = collect(partitions(n,k,lb,ub)) + @testset "partitions($n, $k, lb, ub)" for n in 0:10, k in 0:n+1 + @testset "partitions($n, $k, $lb, $ub) for integer type $T" for lb in 0:n, ub in lb:n, T in [Int, Int8, ZZRingElem] + P = @inferred collect(partitions(T(n), T(k), T(lb), T(ub))) + @test P isa Vector{Oscar.Partition{T}} # Create the same by filtering all partitions - Q = collect(partitions(n,k)) + Q = @inferred collect(partitions(T(n), T(k))) + @test Q isa Vector{Oscar.Partition{T}} filter!( Q->all(>=(lb),Q), Q) filter!( Q->all(<=(ub),Q), Q) @@ -120,12 +129,14 @@ ############################################################################ # partitions(n,k,lb,ub; only_distinct_parts=true) ############################################################################ - @testset "partitions($n,$k,lb,ub; only_distinct_parts=true)" for n in 0:10, k in 0:n+1 - @testset "partitions($n,$k,$lb,$ub; only_distinct_parts=true)" for lb in 0:n, ub in lb:n - P = collect(partitions(n, k, lb, ub; only_distinct_parts=true)) + @testset "partitions($n, $k, lb, ub; only_distinct_parts=true)" for n in 0:10, k in 0:n+1 + @testset "partitions($n, $k, $lb, $ub; only_distinct_parts=true) for integer type $T" for lb in 0:n, ub in lb:n, T in [Int, Int16, ZZRingElem] + P = @inferred collect(partitions(T(n), T(k), T(lb), T(ub); only_distinct_parts=true)) + @test P isa Vector{Oscar.Partition{T}} # Create the same by filtering all partitions - Q = collect(partitions(n, k, lb, ub)) + Q = @inferred collect(partitions(T(n), T(k), T(lb), T(ub))) + @test Q isa Vector{Oscar.Partition{T}} filter!( Q->Q==unique(Q), Q ) # Check that P and Q coincide (up to reordering) @@ -137,34 +148,36 @@ ############################################################################ # partitions(n,k,v,mu) ############################################################################ - @testset "partitions(n,k,v,mu)" begin + @testset "partitions(n, k, v, mu) for integer type $T" for T in [Int, Int16, ZZRingElem] # Check argument errors - @test_throws ArgumentError partitions(5,2, [1,2], [1,2,3]) - @test_throws ArgumentError partitions(-1,2, [1,2,3], [1,2,3]) - @test_throws ArgumentError partitions(5,0,[1,2,3], [1,2]) - @test_throws ArgumentError partitions(6,3,[3,2,1],[1,2,3]) #req v strictly increasing - @test_throws ArgumentError partitions(6,3,[3,2,1],[0,2,3]) #mu > 0 - @test_throws ArgumentError partitions(6,3,[0,2,1],[1,2,3]) #v > 0 + @test_throws ArgumentError partitions(T(5), 2, T[1,2], [1,2,3]) + @test_throws ArgumentError partitions(T(-1), 2, T[1,2,3], [1,2,3]) + @test_throws ArgumentError partitions(T(5), 0, T[1,2,3], [1,2]) + @test_throws ArgumentError partitions(T(6), 3, T[3,2,1], [1,2,3]) #req v strictly increasing + @test_throws ArgumentError partitions(T(6), 3, T[3,2,1], [0,2,3]) #mu > 0 + @test_throws ArgumentError partitions(T(6), 3, T[0,2,1], [1,2,3]) #v > 0 # Issues from https://github.com/oscar-system/Oscar.jl/issues/2043 - @test length(collect(partitions(17, 3, [1, 4], [1,4]))) == 0 - @test collect(partitions(17, 5, [1, 4], [1, 4])) == [ partition(4, 4, 4, 4, 1) ] - @test length(collect(partitions(17, 6, [1, 2], [1, 7]))) == 0 - @test length(collect(partitions(20, 5, [1, 2, 3], [1, 3, 6]))) == 0 + @test length(collect(partitions(T(17), 3, T[1, 4], [1,4]))) == 0 + @test collect(partitions(T(17), 5, T[1, 4], [1, 4])) == [ partition(T[4, 4, 4, 4, 1]) ] + @test length(collect(partitions(T(17), 6, T[1, 2], [1, 7]))) == 0 + @test length(collect(partitions(T(20), 5, T[1, 2, 3], [1, 3, 6]))) == 0 # Issues UT found - @test length(collect(partitions(1, 1, [1], [1]))) == 1 - @test length(collect(partitions(100, 7, [1, 2, 5, 10, 20, 50], [2, 2, 2, 2, 2, 2]))) == 1 + @test length(collect(partitions(T(1), 1, T[1], [1]))) == 1 + @test length(collect(partitions(T(100), 7, T[1, 2, 5, 10, 20, 50], [2, 2, 2, 2, 2, 2]))) == 1 # Special cases @testset "Special cases n=$n, k=$k" for n in 0:20, k in 0:n+1 - P = collect(partitions(n, k, [i for i in 1:n], [n for i in 1:n])) - Q = collect(partitions(n, k)) + P = @inferred collect(partitions(T(n), k, T[i for i in 1:n], [n for i in 1:n])) + @test P isa Vector{Oscar.Partition{T}} + Q = collect(partitions(T(n), T(k))) @test length(P) == length(Q) @test Set(P) == Set(Q) - P = collect(partitions(n, k, [i for i in 1:n], [1 for i in 1:n])) - Q = collect(partitions(n, k, 1, n; only_distinct_parts=true)) + P = @inferred collect(partitions(T(n), k, T[i for i in 1:n], [1 for i in 1:n])) + @test P isa Vector{Oscar.Partition{T}} + Q = collect(partitions(T(n), T(k), T(1), T(n); only_distinct_parts=true)) @test length(P) == length(Q) @test Set(P) == Set(Q) end @@ -190,7 +203,6 @@ @test collect(partitions(1, Int[], Int[])) == Partition{Int}[] end - ############################################################################ # dominates(P) ############################################################################ diff --git a/test/Combinatorics/EnumerativeCombinatorics/schur_polynomials.jl b/test/Combinatorics/EnumerativeCombinatorics/schur_polynomials.jl index a8e12bd3ab35..4531532e6ff2 100644 --- a/test/Combinatorics/EnumerativeCombinatorics/schur_polynomials.jl +++ b/test/Combinatorics/EnumerativeCombinatorics/schur_polynomials.jl @@ -45,4 +45,9 @@ schur_polynomial(S, partition([2,1,1]), 3) == x[1]*x[2]*x[3]*(x[1]+x[2]+x[3]) schur_polynomial(S, partition([2,2]), 3) == x[1]^2*x[2]^2 + x[1]^2*x[3]^2 + x[2]^2*x[3]^2 + x[1]^2*x[2]*x[3] + x[1]*x[2]^2*x[3] + x[1]*x[2]*x[3]^2 + # From issue #3850 + R, _ = polynomial_ring(ZZ, ["x1", "x2", "x3"]) + f = Oscar.schur_polynomial_cbf(R, partition([49, 2])) + g = Oscar.schur_polynomial_combinat(R, partition([49, 2])) + @test f == g end diff --git a/test/Combinatorics/EnumerativeCombinatorics/tableaux.jl b/test/Combinatorics/EnumerativeCombinatorics/tableaux.jl index e994a4f1d9d1..f63cd47884f3 100644 --- a/test/Combinatorics/EnumerativeCombinatorics/tableaux.jl +++ b/test/Combinatorics/EnumerativeCombinatorics/tableaux.jl @@ -18,6 +18,7 @@ @test is_standard(young_tableau([[1,4],[2,4]])) == false @test is_standard(young_tableau([[1,2],[4]])) == false @test is_standard(young_tableau([[1,3,2],[4]])) == false + @test is_standard(young_tableau([[-1]])) == false # is_semistandard @test is_semistandard(young_tableau([[1,2,4,7,8],[3,5,6,9],[10]])) == true @@ -28,6 +29,7 @@ @test is_semistandard(young_tableau([[1,2,2],[3]])) == true @test is_semistandard(young_tableau([[1,2,3],[1,4]])) == false @test is_semistandard(young_tableau([[1,2,1],[2,4]])) == false + @test is_semistandard(young_tableau([[-1]])) == true # semistandard_tableaux(shape::Array{T,1}, max_val=sum(shape)::Integer) shapes = [[3,2,1],[3,3,1],[2,2,2]] diff --git a/test/Combinatorics/EnumerativeCombinatorics/weak_compositions.jl b/test/Combinatorics/EnumerativeCombinatorics/weak_compositions.jl index 57ceeb59d916..29aaedb03dd2 100644 --- a/test/Combinatorics/EnumerativeCombinatorics/weak_compositions.jl +++ b/test/Combinatorics/EnumerativeCombinatorics/weak_compositions.jl @@ -1,30 +1,29 @@ -@testset "weak compositions" begin - @test length(weak_compositions(3, 2)) == 4 - @test @inferred collect(weak_compositions(3, 2)) == map(weak_composition, [[3, 0], [2, 1], [1, 2], [0, 3]]) - @test @inferred collect(weak_compositions(Int8(3), 2)) == map(weak_composition, Vector{Int8}[[3, 0], [2, 1], [1, 2], [0, 3]]) - @test isempty(weak_compositions(1, 0)) - @test @inferred collect(weak_compositions(1, 0)) == Oscar.WeakComposition{Int}[] - @test length(weak_compositions(0, 0)) == 1 - @test @inferred collect(weak_compositions(0, 0)) == [weak_composition(Int[])] - @test length(weak_compositions(0, 3)) == 1 - @test @inferred collect(weak_compositions(0, 3)) == [weak_composition(Int[0, 0, 0])] +@testset "weak compositions for integer type $T" for T in [Int, Int8, ZZRingElem] + @test length(weak_compositions(T(3), T(2))) == 4 + @test @inferred collect(weak_compositions(T(3), T(2))) == map(weak_composition, [T[3, 0], T[2, 1], T[1, 2], T[0, 3]]) + @test isempty(weak_compositions(T(1), T(0))) + @test @inferred collect(weak_compositions(T(1), T(0))) == Oscar.WeakComposition{T}[] + @test length(weak_compositions(T(0), T(0))) == 1 + @test @inferred collect(weak_compositions(T(0), T(0))) == [weak_composition(T[])] + @test length(weak_compositions(T(0), T(3))) == 1 + @test @inferred collect(weak_compositions(T(0), T(3))) == [weak_composition(T[0, 0, 0])] - l = @inferred collect(weak_compositions(5, 3)) + l = @inferred collect(weak_compositions(T(5), T(3))) @test length(l) == 21 @test all(x -> sum(x) == 5, l) b = unique!(l) @test length(b) == length(l) - l = @inferred collect(weak_compositions(5, 0)) - @test l == Vector{Oscar.WeakComposition{Int}}() - l = @inferred collect(weak_compositions(0, 7)) - @test l == [weak_composition([0 for i in 1:7])] - l = @inferred collect(weak_compositions(1, 7)) + l = @inferred collect(weak_compositions(T(5), T(0))) + @test l == Vector{Oscar.WeakComposition{T}}() + l = @inferred collect(weak_compositions(T(0), T(7))) + @test l == [weak_composition(T[0 for i in 1:7])] + l = @inferred collect(weak_compositions(T(1), T(7))) @test length(l) == length(unique!(l)) == 7 - l = @inferred collect(weak_compositions(7, 1)) - @test l == [weak_composition([7])] + l = @inferred collect(weak_compositions(T(7), T(1))) + @test l == [weak_composition(T[7])] - @test number_of_weak_compositions(1, -2) == ZZ(0) - @test number_of_weak_compositions(-1, 0) == ZZ(0) + @test number_of_weak_compositions(T(1), T(-2)) == ZZ(0) + @test number_of_weak_compositions(T(-1), T(0)) == ZZ(0) end From 78a2368875757f1e82e825dd5688178d9c0ea92d Mon Sep 17 00:00:00 2001 From: Tommy Hofmann Date: Tue, 18 Jun 2024 08:36:07 +0200 Subject: [PATCH 02/12] fix: change idel to idele and improve printing (#3859) (cherry picked from commit 268c5f1caa622637e5bd6763d472855883bf85be) --- examples/{Idel.jl => Idele.jl} | 20 ++--- experimental/GModule/src/GaloisCohomology.jl | 89 +++++++++++--------- 2 files changed, 58 insertions(+), 51 deletions(-) rename examples/{Idel.jl => Idele.jl} (79%) diff --git a/examples/Idel.jl b/examples/Idele.jl similarity index 79% rename from examples/Idel.jl rename to examples/Idele.jl index e18c05b14e50..321f4fd04cde 100644 --- a/examples/Idel.jl +++ b/examples/Idele.jl @@ -1,8 +1,8 @@ -module Idel +module Idele using Oscar -mutable struct IdelParent +mutable struct IdeleParent k::AbsSimpleNumField mG::Map # AutGrp -> Automorohisms S::Vector{AbsNumFieldOrderIdeal} # for each prime number ONE ideal above @@ -20,35 +20,35 @@ mutable struct IdelParent mU::Map #S-unit group map M::FinGenAbGroup # the big module - function IdelParent() + function IdeleParent() return new() end end -mutable struct Idel - parent::IdelParent +mutable struct Idele + parent::IdeleParent m::FinGenAbGroupElem #in parent.M end -function support(a::Idel) +function support(a::Idele) #the full galois orbit of parent.S end -function getindex(a::Idel, P::AbsNumFieldOrderIdeal) +function getindex(a::Idele, P::AbsNumFieldOrderIdeal) #element at place P as an element in the completion #needs to find the "correct" P in parent.S, the (index) of the coset #and return the component of the induced module end -function getindex(a::Idel, p) #real embedding +function getindex(a::Idele, p) #real embedding # the unit representing this: find the correct component... end -function getindex(a::Idel, p) #complex embedding +function getindex(a::Idele, p) #complex embedding # the unit representing this + a vector with the lambda exponents end -function disc_exp(a::Idel) +function disc_exp(a::Idele) # a dict mapping primes/places to s.th. in the number field? end diff --git a/experimental/GModule/src/GaloisCohomology.jl b/experimental/GModule/src/GaloisCohomology.jl index d814297ea3eb..6cbe30173571 100644 --- a/experimental/GModule/src/GaloisCohomology.jl +++ b/experimental/GModule/src/GaloisCohomology.jl @@ -8,7 +8,7 @@ import Base: parent import Oscar: direct_sum import Oscar: pretty, Lowercase, Indent, Dedent, terse -export is_coboundary, idel_class_gmodule, relative_brauer_group +export is_coboundary, idele_class_gmodule, relative_brauer_group export local_invariants, global_fundamental_class, shrink export local_index, units_mod_ideal @@ -610,9 +610,9 @@ Sort: # - ??? # - a different type containing all this drivel? (probably) # YES - need to have maps to and from local stuff -# use Klueners/ Acciaro to map arbitrary local into idel +# use Klueners/ Acciaro to map arbitrary local into idele # use ... to project to ray class -# - a magic(?) function to get idel-approximations in and out? +# - a magic(?) function to get idele approximations in and out? """ M has to be a torsion free Z module with a C_2 action by sigma. @@ -627,7 +627,7 @@ Two arrays are returned: Follows Debeerst rather closely... -(Helper for the idel-class stuff) +(Helper for the idele class stuff) """ function debeerst(M::FinGenAbGroup, sigma::Map{FinGenAbGroup, FinGenAbGroup}) @assert domain(sigma) == codomain(sigma) == M @@ -756,13 +756,13 @@ end """ - IdelParent + IdeleParent -A container structure for computations around idel-class cohomology. +A container structure for computations around idele class cohomology. Describes a gmodule that is cohomologically equivalent to the -idel-class group, following Chinberg/ Debeerst/ Aslam. +idele class group, following Chinberg/Debeerst/Aslam. """ -mutable struct IdelParent +mutable struct IdeleParent k::AbsSimpleNumField mG::Map # AutGrp -> Automorphisms S::Vector{AbsNumFieldOrderIdeal} # for each prime number ONE ideal above @@ -785,29 +785,29 @@ mutable struct IdelParent data - function IdelParent() + function IdeleParent() return new() end end """ - idel_class_gmodule(k::AbsSimpleNumField, s::Vector{Int} = Int[]) + idele_class_gmodule(k::AbsSimpleNumField, s::Vector{Int} = Int[]) Following Debeerst: Algorithms for Tamagawa Number Conjectures. Dissertation, University of Kassel, June 2011. or Ali, Find a gmodule C s.th. C is cohomology-equivalent to the cohomology -of the idel-class group. The primes in `s` will always be used. +of the idele class group. The primes in `s` will always be used. """ -function idel_class_gmodule(k::AbsSimpleNumField, s::Vector{Int} = Int[]; redo::Bool=false) +function idele_class_gmodule(k::AbsSimpleNumField, s::Vector{Int} = Int[]; redo::Bool=false) @vprint :GaloisCohomology 2 "Ideal class group cohomology for $k\n" - I = get_attribute(k, :IdelClassGmodule) + I = get_attribute(k, :IdeleClassGmodule) if !redo && I !== nothing return I end - I = IdelParent() + I = IdeleParent() I.k = k G, mG = automorphism_group(PermGroup, k) I.mG = mG @@ -1012,17 +1012,17 @@ function idel_class_gmodule(k::AbsSimpleNumField, s::Vector{Int} = Int[]; redo:: @hassert :GaloisCohomology 1 is_consistent(q) I.mq = mq I.data = (q, F[1]) - set_attribute!(k, :IdelClassGmodule=>I) + set_attribute!(k, :IdeleClassGmodule=>I) return I end """ -returns a `Dict` containing the prime ideals where the idel +returns a `Dict` containing the prime ideals where the idele represented by `a` as an element of `I` can be non-trivial, ie. at the places in `I`. The values are elements in the corresponding completion. """ -function idel_finite(I::IdelParent, a::FinGenAbGroupElem) +function idele_finite(I::IdeleParent, a::FinGenAbGroupElem) a = preimage(I.mq, a) #a lives in a direct product # 1st the units - induced, thus a direct product @@ -1055,10 +1055,10 @@ function _local_norm(m0::AbsSimpleNumFieldOrderIdeal, a::AbsNumFieldOrderElem, p end -#maybe we need Idel's as independent objects? +#maybe we need Idele's as independent objects? #realizes C -> Cl (or the coprime version into a ray class group: -#for the idel `a` in `I` find an "equivalent" ideal. -function Oscar.ideal(I::IdelParent, a::FinGenAbGroupElem; coprime::Union{AbsSimpleNumFieldOrderIdeal, Nothing}) +#for the idele `a` in `I` find an "equivalent" ideal. +function Oscar.ideal(I::IdeleParent, a::FinGenAbGroupElem; coprime::Union{AbsSimpleNumFieldOrderIdeal, Nothing}) a = preimage(I.mq, a) zk = maximal_order(I.k) o_zk = zk @@ -1092,7 +1092,7 @@ function Oscar.galois_group(A::ClassField) end """ - galois_group(A::ClassField, ::QQField; idel_parent::IdelParent = idel_class_gmodule(base_field(A))) + galois_group(A::ClassField, ::QQField; idele_parent::IdeleParent = idele_class_gmodule(base_field(A))) Determines the Galois group (over `QQ`) of the extension parametrized by `A`. `A` needs to be normal over `QQ`. @@ -1107,9 +1107,9 @@ julia> a = ray_class_field(8*3*maximal_order(k), n_quo = 2); julia> a = filter(is_normal, subfields(a, degree = 2)); -julia> I = idel_class_gmodule(k); +julia> I = idele_class_gmodule(k); -julia> b = [galois_group(x, QQ, idel_parent = I) for x = a]; +julia> b = [galois_group(x, QQ, idele_parent = I) for x = a]; julia> [describe(x[1]) for x = b] 3-element Vector{String}: @@ -1119,7 +1119,7 @@ julia> [describe(x[1]) for x = b] ``` """ -function Oscar.galois_group(A::ClassField, ::QQField; idel_parent::Union{IdelParent,Nothing} = nothing) +function Oscar.galois_group(A::ClassField, ::QQField; idele_parent::Union{IdeleParent,Nothing} = nothing) m0, m_inf = defining_modulus(A) @assert length(m_inf) == 0 @@ -1134,20 +1134,20 @@ function Oscar.galois_group(A::ClassField, ::QQField; idel_parent::Union{IdelPar s, ms = split_extension(gmodule(A)) return permutation_group(s), ms end - if idel_parent === nothing - idel_parent = idel_class_gmodule(base_field(A)) + if idele_parent === nothing + idele_parent = idele_class_gmodule(base_field(A)) end - qI = cohomology_group(idel_parent, 2) + qI = cohomology_group(idele_parent, 2) q, mq = snf(qI[1]) a = qI[2](image(mq, q[1])) # should be a 2-cycle in q @assert Oscar.GrpCoh.istwo_cocycle(a) - gA = gmodule(A, idel_parent.mG) + gA = gmodule(A, idele_parent.mG) qA = cohomology_group(gA, 2) n = degree(Hecke.nf(zk)) aa = map_entries(a, parent = gA) do x x = parent(x)(Hecke.mod_sym(x.coeff, gcd(n, degree(A)))) - J = ideal(idel_parent, x, coprime = m0) + J = ideal(idele_parent, x, coprime = m0) mQ(preimage(mR, numerator(J)) - preimage(mR, denominator(J)*zk)) end @assert Oscar.GrpCoh.istwo_cocycle(aa) @@ -1158,7 +1158,7 @@ function Oscar.components(A::FinGenAbGroup) return get_attribute(A, :direct_product) end -function Oscar.completion(I::IdelParent, P::AbsNumFieldOrderIdeal) +function Oscar.completion(I::IdeleParent, P::AbsNumFieldOrderIdeal) s = [minimum(x) for x = I.S] p = findfirst(isequal(minimum(P)), s) @assert p !== nothing @@ -1843,7 +1843,7 @@ function Hecke.StructureConstantAlgebra(CC::GrpCoh.CoChain{2, PermGroupElem, Grp return Hecke.StructureConstantAlgebra(base_field(k), M) end -function serre(A::IdelParent, P::AbsNumFieldOrderIdeal) +function serre(A::IdeleParent, P::AbsNumFieldOrderIdeal) C = A.data[1] Kp, mKp, mGp, mUp, pro, inj = completion(A, P) mp = decomposition_group(A.k, mKp, A.mG, mGp) @@ -1860,7 +1860,7 @@ function serre(A::IdelParent, P::AbsNumFieldOrderIdeal) return c end -function serre(A::IdelParent, P::Union{Integer, ZZRingElem}) +function serre(A::IdeleParent, P::Union{Integer, ZZRingElem}) C = A.data[1] t = findfirst(isequal(ZZ(P)), [minimum(x) for x = A.S]) Inj = canonical_injection(A.M, t+1) @@ -1885,10 +1885,10 @@ function serre(A::IdelParent, P::Union{Integer, ZZRingElem}) #g is the (non-canonical) generator of H^2 of the induced module hg = map_entries(Inj*A.mq, g, parent = C) #hg is the (non-canonical) generator of H^2 of the induced module - #in the global idel-class cohomology + #in the global idele class cohomology # #Z[G_p] K_p <-> Ind_G_p^G K_p = Z[G] prod K_p over all conjugate primes - # -> Z[G] C the idel-class group + # -> Z[G] C the idele class group #the image should be the restriction I think gg = map_entries(pro, g, parent = tt.C) #gg is the non-canomical generator in Z[G_p] K_p @@ -1906,16 +1906,16 @@ function serre(A::IdelParent, P::Union{Integer, ZZRingElem}) end """ - global_fundamental_class(A::IdelParent) + global_fundamental_class(A::IdeleParent) Tries to find the canonical generator of `H^2(C)` the 2nd -cohomology group of the idel-class group. +cohomology group of the idele class group. Currently only works if this can be inferred from the local data in the field, ie. if the `lcm` of the degrees of the completions is the full field degree. """ -function global_fundamental_class(A::IdelParent) +function global_fundamental_class(A::IdeleParent) C = A.data[1] d = lcm([ramification_index(P) * inertia_degree(P) for P = A.S]) G = C.G @@ -1963,7 +1963,7 @@ function global_fundamental_class(A::IdelParent) return p[1] end -function Oscar.cohomology_group(A::IdelParent, i::Int) +function Oscar.cohomology_group(A::IdeleParent, i::Int) return Oscar.cohomology_group(A.data[1], i) end @@ -2024,12 +2024,19 @@ end #deliberately at the end as it messes up the syntax-highlighting for me #confusion about " and ()... -function Base.show(io::IO, I::IdelParent) - print(io, "Idel-group for $(I.k) using $(sort(collect(Set(minimum(x) for x = I.S)))) as places") +function Base.show(io::IO, I::IdeleParent) + io = pretty(io) + #print(io, "Relative Brauer group for ", Lowercase(), B.K, " over ", Lowercase(), B.k) + println(io, "Idele group of") + print(io, Indent()) + println(io, Lowercase(), I.k) + plcs = sort(collect(Set(minimum(x) for x = I.S))) + print(io, "using prime ideals over [", join(plcs, ", "), "] as places") + print(io, Dedent()) end end # module GrpCoh using .GaloisCohomology_Mod -export is_coboundary, idel_class_gmodule, relative_brauer_group, units_mod_ideal +export is_coboundary, idele_class_gmodule, relative_brauer_group, units_mod_ideal From 14e6591e66bd689d35bcbbafc399ee963ec93892 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C4=B7elis=20Em=C4=ABls=20Mi=C4=B7elsons?= <164499508+emikelsons@users.noreply.github.com> Date: Mon, 17 Jun 2024 21:53:02 +0200 Subject: [PATCH 03/12] Added more attributes including gauge algebras (#3822) [FtheoryTools] More attributes including gauge algebras: Added torsion sections to the attributes Added gauge algebras for almost all models including parametric models Fixed some arxiv ids(removed v2) Changed model information so that the gauge algebra constructor can parse it. (cherry picked from commit a1cce055d04245e8ab4c517f6e0f34e0807d7fd2) --- .../FTheoryTools/docs/src/generalities.md | 2 + .../FTheoryTools/docs/src/literature.md | 4 +- .../src/AbstractFTheoryModels/attributes.jl | 59 +++++++- .../src/AbstractFTheoryModels/methods.jl | 36 +++++ .../src/AbstractFTheoryModels/properties.jl | 2 + .../Models/model1208_2695-1.json | 2 +- .../Models/model1208_2695-2.json | 2 +- .../Models/model1212_2949-1.json | 4 +- .../Models/model1212_2949-2.json | 4 +- .../Models/model1212_2949-3.json | 4 +- .../Models/model1212_2949-4.json | 4 +- .../Models/model1212_2949-5.json | 2 +- .../Models/model1212_2949-6.json | 2 +- .../Models/model1212_2949-7.json | 2 +- .../Models/model1408_4808-1-WSF.json | 2 +- .../Models/model1408_4808-1.json | 2 +- .../Models/model1408_4808-10-WSF.json | 4 +- .../Models/model1408_4808-10.json | 4 +- .../Models/model1408_4808-11-WSF.json | 6 +- .../Models/model1408_4808-11.json | 6 +- .../Models/model1408_4808-12-WSF.json | 6 +- .../Models/model1408_4808-12.json | 6 +- .../Models/model1408_4808-13-WSF.json | 6 +- .../Models/model1408_4808-13.json | 6 +- .../Models/model1408_4808-14-WSF.json | 6 +- .../Models/model1408_4808-14.json | 6 +- .../Models/model1408_4808-15-WSF.json | 6 +- .../Models/model1408_4808-15.json | 6 +- .../Models/model1408_4808-16-WSF.json | 8 +- .../Models/model1408_4808-16.json | 6 +- .../Models/model1408_4808-2-WSF.json | 4 +- .../Models/model1408_4808-2.json | 4 +- .../Models/model1408_4808-3-WSF.json | 4 +- .../Models/model1408_4808-3.json | 4 +- .../Models/model1408_4808-4-WSF.json | 4 +- .../Models/model1408_4808-4.json | 4 +- .../Models/model1408_4808-5-WSF.json | 4 +- .../Models/model1408_4808-5.json | 4 +- .../Models/model1408_4808-6-WSF.json | 6 +- .../Models/model1408_4808-6.json | 6 +- .../Models/model1408_4808-7-WSF.json | 4 +- .../Models/model1408_4808-7.json | 4 +- .../Models/model1408_4808-8-WSF.json | 6 +- .../Models/model1408_4808-8.json | 6 +- .../Models/model1408_4808-9-WSF.json | 6 +- .../Models/model1408_4808-9.json | 6 +- .../Models/model1507_05954-1.json | 2 +- .../Models/model1507_05954-2.json | 2 +- .../Models/model1903.00009.json | 3 +- .../src/LiteratureModels/constructors.jl | 14 ++ .../src/LiteratureModels/index.json | 2 +- experimental/FTheoryTools/src/exports.jl | 6 + .../FTheoryTools/test/literature_models.jl | 137 ++++++++++-------- 53 files changed, 292 insertions(+), 165 deletions(-) diff --git a/experimental/FTheoryTools/docs/src/generalities.md b/experimental/FTheoryTools/docs/src/generalities.md index efe8f4a1e835..1c63c013e62c 100644 --- a/experimental/FTheoryTools/docs/src/generalities.md +++ b/experimental/FTheoryTools/docs/src/generalities.md @@ -57,6 +57,8 @@ explicit_model_sections(m::AbstractFTheoryModel) defining_section_parametrization(m::AbstractFTheoryModel) classes_of_model_sections(m::AbstractFTheoryModel) defining_classes(m::AbstractFTheoryModel) +gauge_algebra(m::AbstractFTheoryModel) +global_gauge_quotients(m::AbstractFTheoryModel) ``` diff --git a/experimental/FTheoryTools/docs/src/literature.md b/experimental/FTheoryTools/docs/src/literature.md index bfdc8a7a3ff7..943f275ff7ef 100644 --- a/experimental/FTheoryTools/docs/src/literature.md +++ b/experimental/FTheoryTools/docs/src/literature.md @@ -98,7 +98,9 @@ following methods: * `has_weighted_resolutions(m::AbstractFTheoryModel)`, * `has_weighted_resolution_generating_sections(m::AbstractFTheoryModel)`, * `has_weighted_resolution_zero_sections(m::AbstractFTheoryModel)`, -* `has_zero_section(m::AbstractFTheoryModel)`. +* `has_zero_section(m::AbstractFTheoryModel)`, +* `has_gauge_algebra(m::AbstractFTheoryModel)`, +* `has_global_gauge_quotients(m::AbstractFTheoryModel)`. ## Methods diff --git a/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl b/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl index 9132fe4b14c1..7e67c26352cb 100644 --- a/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl +++ b/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl @@ -673,7 +673,7 @@ If no `model_parameters` are known, an error is raised. julia> m = literature_model(arxiv_id = "1212.2949", equation = "3.2", model_parameters = Dict("k" => 5)) Assuming that the first row of the given grading is the grading under Kbar -Global Tate model over a not fully specified base -- SU(2k+1) Tate model with parameter values (k = 5) based on arXiv paper 1212.2949 Eq. (3.2) +Global Tate model over a not fully specified base -- SU(11) Tate model with parameter values (k = 5) based on arXiv paper 1212.2949 Eq. (3.2) julia> model_parameters(m) Dict{String, Int64} with 1 entry: @@ -793,7 +793,7 @@ the given model, but that are distinct from the given model. If no julia> m = literature_model(arxiv_id = "1212.2949", equation = "3.2", model_parameters = Dict("k" => 5)) Assuming that the first row of the given grading is the grading under Kbar -Global Tate model over a not fully specified base -- SU(2k+1) Tate model with parameter values (k = 5) based on arXiv paper 1212.2949 Eq. (3.2) +Global Tate model over a not fully specified base -- SU(11) Tate model with parameter values (k = 5) based on arXiv paper 1212.2949 Eq. (3.2) julia> related_literature_models(m) 6-element Vector{String}: @@ -1018,3 +1018,58 @@ function zero_section(m::AbstractFTheoryModel) @req has_zero_section(m) "No zero section stored for this model" return get_attribute(m, :zero_section) end + + +@doc raw""" + gauge_algebra(m::AbstractFTheoryModel) + +Return the gauge algebra of the given model. +If no gauge algebra is known, an error is raised. +This information is typically available for all models, however. + +```jldoctest +julia> t = literature_model(arxiv_id = "1408.4808", equation = "3.190", type = "hypersurface") +Assuming that the first row of the given grading is the grading under Kbar + +Hypersurface model over a not fully specified base + +julia> gauge_algebra(t) +5-element Vector{LinearLieAlgebra{QQBarFieldElem}}: + Special linear Lie algebra of degree 2 over QQBar + Special linear Lie algebra of degree 2 over QQBar + Special linear Lie algebra of degree 2 over QQBar + Special linear Lie algebra of degree 2 over QQBar + Linear Lie algebra with 1x1 matrices over QQBar +``` +""" +function gauge_algebra(m::AbstractFTheoryModel) + @req has_gauge_algebra(m) "No gauge algebra stored for this model" + return get_attribute(m, :gauge_algebra) +end + + +@doc raw""" + global_gauge_quotients(m::AbstractFTheoryModel) +Return list of lists of matrices, where each list of matrices corresponds to a gauge factor of the same index given by gauge_algebra(m). +These matrices are elements of the center of the corresponding gauge factor and quotienting by them replicates the action of some discrete group on the center of the lie algebra. +This list combined with gauge_algebra(m) completely determines the gauge group of the model. +If no gauge quotients are known, an error is raised. +```jldoctest +julia> t = literature_model(arxiv_id = "1408.4808", equation = "3.190", type = "hypersurface") +Assuming that the first row of the given grading is the grading under Kbar + +Hypersurface model over a not fully specified base + +julia> global_gauge_quotients(t) +5-element Vector{Vector{String}}: + ["-identity_matrix(C,2)", "-identity_matrix(C,2)"] + ["-identity_matrix(C,2)"] + ["-identity_matrix(C,2)"] + ["-identity_matrix(C,2)", "-identity_matrix(C,2)"] + ["-identity_matrix(C,1)"] +``` +""" +function global_gauge_quotients(m::AbstractFTheoryModel) + @req has_global_gauge_quotients(m) "No gauge quotients stored for this model" + return get_attribute(m, :global_gauge_quotients) +end diff --git a/experimental/FTheoryTools/src/AbstractFTheoryModels/methods.jl b/experimental/FTheoryTools/src/AbstractFTheoryModels/methods.jl index 6a12da4b4bdb..9e8eabdbfea8 100644 --- a/experimental/FTheoryTools/src/AbstractFTheoryModels/methods.jl +++ b/experimental/FTheoryTools/src/AbstractFTheoryModels/methods.jl @@ -582,6 +582,12 @@ function set_generating_sections(m::AbstractFTheoryModel, vs::Vector{Vector{Stri set_attribute!(m, :generating_sections => [[f(eval_poly(l, R)) for l in k] for k in vs]) end +function set_torsion_sections(m::AbstractFTheoryModel, vs::Vector{Vector{String}}) + R, _ = polynomial_ring(QQ, collect(keys(explicit_model_sections(m))), cached = false) + f = hom(R, cox_ring(base_space(m)), collect(values(explicit_model_sections(m)))) + set_attribute!(m, :torsion_sections => [[f(eval_poly(l, R)) for l in k] for k in vs]) +end + function set_resolutions(m::AbstractFTheoryModel, desired_value::Vector{Vector{Vector}}) set_attribute!(m, :resolutions => desired_value) end @@ -624,6 +630,36 @@ function set_zero_section(m::AbstractFTheoryModel, desired_value::Vector{String} set_attribute!(m, :zero_section => [f(eval_poly(l, R)) for l in desired_value]) end +function set_gauge_algebra(m::AbstractFTheoryModel, algebras::Vector{String}) + C = algebraic_closure(QQ) + function _construct(g::String) + if g == "0" + return nothing + end + if g == "u(1)" + return lie_algebra(C,1,[C(1im)*identity_matrix(C,1)],["i"]) + elseif g[1:2] == "su" + return special_linear_lie_algebra(C, parse(Int, g[4:end-1])) + elseif g[1:2] == "so" + return special_orthogonal_lie_algebra(C, parse(Int, g[4:end-1])) + elseif g[1:2] == "sp" + return symplectic_lie_algebra(C, parse(Int, g[4:end-1])) + #For the algebras that are constructed from their Dynkin diagramms we cannot use QQBarField as the current implementation looks for a GAP iso and finds none. + elseif g[1] == "e" + return lie_algebra(QQ, Symbol('E'), parse(Int, g[3:end-1])) + elseif g[1] == "g" + return lie_algebra(QQ, Symbol('G'), parse(Int, g[3:end-1])) + #elseif g[1] == "f" This is not implemented yet + #return lie_algebra(C,Symbol('G'),parse(Int, g[3:end-1])); + end + end + gauge_algebras = [_construct(g) for g in algebras] + set_attribute!(m, :gauge_algebra => gauge_algebras) +end + +function set_global_gauge_quotients(m::AbstractFTheoryModel, quotients::Vector{Vector{String}}) + set_attribute!(m, :global_gauge_quotients => quotients) +end ########################################## diff --git a/experimental/FTheoryTools/src/AbstractFTheoryModels/properties.jl b/experimental/FTheoryTools/src/AbstractFTheoryModels/properties.jl index a4b96fc34831..5802c18ac1a3 100644 --- a/experimental/FTheoryTools/src/AbstractFTheoryModels/properties.jl +++ b/experimental/FTheoryTools/src/AbstractFTheoryModels/properties.jl @@ -96,3 +96,5 @@ has_weighted_resolutions(m::AbstractFTheoryModel) = has_attribute(m, :weighted_r has_weighted_resolution_generating_sections(m::AbstractFTheoryModel) = has_attribute(m, :weighted_resolution_generating_sections) has_weighted_resolution_zero_sections(m::AbstractFTheoryModel) = has_attribute(m, :weighted_resolution_zero_sections) has_zero_section(m::AbstractFTheoryModel) = has_attribute(m, :zero_section) +has_gauge_algebra(m::AbstractFTheoryModel) = has_attribute(m, :gauge_algebra) +has_global_gauge_quotients(m::AbstractFTheoryModel) = has_attribute(m, :global_gauge_quotients) diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1208_2695-1.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1208_2695-1.json index 13a6d957e7f2..044b40d16c70 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1208_2695-1.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1208_2695-1.json @@ -35,7 +35,7 @@ "model_descriptors": { "type": "hypersurface", "description": "U(1) hypersurface model", - "gauge_algebra": ["u1"] + "gauge_algebra": ["u(1)"] }, "model_data": { "base_dim": 2, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1208_2695-2.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1208_2695-2.json index b7cbfa270271..72e3742073bd 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1208_2695-2.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1208_2695-2.json @@ -35,7 +35,7 @@ "model_descriptors": { "type": "weierstrass", "description": "U(1) Weierstrass model", - "gauge_algebra": ["u1"] + "gauge_algebra": ["u(1)"] }, "model_data": { "base_dim": 2, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-1.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-1.json index d5eceac5947b..253f87b0a59d 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-1.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-1.json @@ -34,8 +34,8 @@ }, "model_descriptors": { "type": "tate", - "description": "SU(2k+1) Tate model", - "gauge_algebra": ["su(2k+1)"] + "description": "SU(2*k+1) Tate model", + "gauge_algebra": ["su(2*k+1)"] }, "model_parameters": ["k"], "model_data": { diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-2.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-2.json index e5b1ec77d881..0e6bccf451c1 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-2.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-2.json @@ -34,8 +34,8 @@ }, "model_descriptors": { "type": "tate", - "description": "SU(2k) Tate model", - "gauge_algebra": ["su(2k)"] + "description": "SU(2*k) Tate model", + "gauge_algebra": ["su(2*k)"] }, "model_parameters": ["k"], "model_data": { diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-3.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-3.json index 6c8d4c771e94..c8fac12886db 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-3.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-3.json @@ -34,8 +34,8 @@ }, "model_descriptors": { "type": "tate", - "description": "SO(4k+2) Tate model", - "gauge_algebra": ["so(4k+2)"] + "description": "SO(4*k+2) Tate model", + "gauge_algebra": ["so(4*k+2)"] }, "model_parameters": ["k"], "model_data": { diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-4.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-4.json index 2d9c5d830c36..48a22232757a 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-4.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-4.json @@ -34,9 +34,9 @@ }, "model_descriptors": { "type": "tate", - "description": "SO(4k+4)xU(1) Tate model", + "description": "SO(4*k+4)xU(1) Tate model", "comment": "The paper only states that this is an SO(4k+4) model, but setting a6 = 0 also introduces an additional generating section, so there is additionally a U(1) factor, which may not have been relevant for the authors' purposes.", - "gauge_algebra": ["so(4k+4)", "u(1)"] + "gauge_algebra": ["so(4*k+4)", "u(1)"] }, "model_parameters": ["k"], "model_data": { diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-5.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-5.json index 869b67074adb..f4a1cee6df5d 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-5.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-5.json @@ -35,7 +35,7 @@ "model_descriptors": { "type": "tate", "description": "E6 Tate model", - "gauge_algebra": ["e6"] + "gauge_algebra": ["e(6)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-6.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-6.json index bb4fcd2b0bf6..25e4e0b758e6 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-6.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-6.json @@ -35,7 +35,7 @@ "model_descriptors": { "type": "tate", "description": "E7 Tate model", - "gauge_algebra": ["e7"] + "gauge_algebra": ["e(7)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-7.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-7.json index 4b14f53838c4..b98fc38ec374 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-7.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1212_2949-7.json @@ -35,7 +35,7 @@ "model_descriptors": { "type": "tate", "description": "E8 Tate model", - "gauge_algebra": ["e8"] + "gauge_algebra": ["e(8)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-1-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-1-WSF.json index 42187bf8c538..6765184cb298 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-1-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-1-WSF.json @@ -1,7 +1,7 @@ { "model_index": "13", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-1.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-1.json index 06551d46e612..fcc5021b1a16 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-1.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-1.json @@ -1,7 +1,7 @@ { "model_index": "14", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-10-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-10-WSF.json index db5b0969ac84..2cc5d1a5f6e9 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-10-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-10-WSF.json @@ -1,7 +1,7 @@ { "model_index": "31", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_10", - "gauge_algebra": ["su2","su3"] + "gauge_algebra": ["su(2)","su(3)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-10.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-10.json index 6aaf8ab58398..c112df27ca67 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-10.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-10.json @@ -1,7 +1,7 @@ { "model_index": "32", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_10", - "gauge_algebra": ["su2","su3"] + "gauge_algebra": ["su(2)","su(3)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-11-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-11-WSF.json index 11f7ae926162..b983be943af9 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-11-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-11-WSF.json @@ -1,7 +1,7 @@ { "model_index": "33", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_11", - "gauge_algebra": ["su3","su2","u1"], - "global_gauge_quotients": [["Z3", [1, 3]], ["Z2", [2, 3]]] + "gauge_algebra": ["su(3)","su(2)","u(1)"], + "global_gauge_quotients": [["diagonal_matrix(root_of_unity(C,3),3)"], ["-identity_matrix(C,2)"], ["diagonal_matrix(root_of_unity(C,6,-1),1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-11.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-11.json index 8557ffda8a57..67bc4de56668 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-11.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-11.json @@ -1,7 +1,7 @@ { "model_index": "34", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_11", - "gauge_algebra": ["su3","su2","u1"], - "global_gauge_quotients": [["Z3", [1, 3]], ["Z2", [2, 3]]] + "gauge_algebra": ["su(3)","su(2)","u(1)"], + "global_gauge_quotients": [["diagonal_matrix(root_of_unity(C,3),3)"], ["-identity_matrix(C,2)"], ["diagonal_matrix(root_of_unity(C,6,-1),1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-12-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-12-WSF.json index 4fecb112110e..fc11e481106e 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-12-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-12-WSF.json @@ -1,7 +1,7 @@ { "model_index": "35", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_12", - "gauge_algebra": ["su2","su2","u1","u1"], - "global_gauge_quotients": [["Z2", [1, 3]], ["Z2", [2, 4]]] + "gauge_algebra": ["su(2)","su(2)","u(1)","u(1)"], + "global_gauge_quotients": [["-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,1)"], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-12.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-12.json index f056577e35b9..6173697d183a 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-12.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-12.json @@ -1,7 +1,7 @@ { "model_index": "36", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_12", - "gauge_algebra": ["su2","su2","u1","u1"], - "global_gauge_quotients": [["Z2", [1, 3]], ["Z2", [2, 4]]] + "gauge_algebra": ["su(2)","su(2)","u(1)","u(1)"], + "global_gauge_quotients": [["-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,1)"], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-13-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-13-WSF.json index 937c548a2c9f..12b8456c0b0d 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-13-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-13-WSF.json @@ -1,7 +1,7 @@ { "model_index": "37", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_13", - "gauge_algebra": ["su2", "su2", "su4"], - "global_gauge_quotients": [["Z2", [1, 2, 3]]] + "gauge_algebra": ["su(2)", "su(2)", "su(4)"], + "global_gauge_quotients": [["-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,4)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-13.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-13.json index 3e70928c710a..70e83f7695a0 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-13.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-13.json @@ -1,7 +1,7 @@ { "model_index": "38", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_13", - "gauge_algebra": ["su2", "su2", "su4"], - "global_gauge_quotients": [["Z2", [1, 2, 3]]] + "gauge_algebra": ["su(2)", "su(2)", "su(4)"], + "global_gauge_quotients": [["-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,4)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-14-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-14-WSF.json index 0416ad4fad70..a8968da96d4e 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-14-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-14-WSF.json @@ -1,7 +1,7 @@ { "model_index": "39", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_14", - "gauge_algebra": ["su3","su2","su2","u1"], - "global_gauge_quotients": [["Z3", [1, 4]], ["Z2", [2, 3, 4]]] + "gauge_algebra": ["su(3)","su(2)","su(2)","u(1)"], + "global_gauge_quotients": [["diagonal_matrix(root_of_unity(C,3),3)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["diagonal_matrix(root_of_unity(C,6,-1),1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-14.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-14.json index 0e35c0f46277..ce701e04f74e 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-14.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-14.json @@ -1,7 +1,7 @@ { "model_index": "40", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_14", - "gauge_algebra": ["su3","su2","su2","u1"], - "global_gauge_quotients": [["Z3", [1, 4]], ["Z2", [2, 3, 4]]] + "gauge_algebra": ["su(3)","su(2)","su(2)","u(1)"], + "global_gauge_quotients": [["diagonal_matrix(root_of_unity(C,3),3)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["diagonal_matrix(root_of_unity(C,6,-1),1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-15-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-15-WSF.json index b82408a4a196..46caaa91a999 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-15-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-15-WSF.json @@ -1,7 +1,7 @@ { "model_index": "41", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_15", - "gauge_algebra": ["su2", "su2", "su2", "su2", "u1"], - "global_gauge_quotients": [["Z2", [1, 2, 3, 4]], ["Z2", [1, 4, 5]]] + "gauge_algebra": ["su(2)", "su(2)", "su(2)", "su(2)", "u(1)"], + "global_gauge_quotients": [["-identity_matrix(C,2)", "-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,2)", "-identity_matrix(C,2)"], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-15.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-15.json index 5179f1945e2e..3b6eaab6100a 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-15.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-15.json @@ -1,7 +1,7 @@ { "model_index": "42", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_15", - "gauge_algebra": ["su2", "su2", "su2", "su2", "u1"], - "global_gauge_quotients": [["Z2", [1, 2, 3, 4]], ["Z2", [1, 4, 5]]] + "gauge_algebra": ["su(2)", "su(2)", "su(2)", "su(2)", "u(1)"], + "global_gauge_quotients": [["-identity_matrix(C,2)", "-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,2)"], ["-identity_matrix(C,2)", "-identity_matrix(C,2)"], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-16-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-16-WSF.json index d52c4524b552..37e365d0bd6e 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-16-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-16-WSF.json @@ -1,7 +1,7 @@ { "model_index": "43", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,9 +41,9 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_16", - "gauge_algebra": ["su3", "su3", "su3"], - "global_gauge_quotients": [["Z3", [1, 2, 3]]] - }, + "gauge_algebra": ["su(3)", "su(3)", "su(3)"], + "global_gauge_quotients": [["diagonal_matrix(root_of_unity(C,3),3)"], ["diagonal_matrix(root_of_unity(C,3),3)"], ["diagonal_matrix(root_of_unity(C,3),3)"]] + }, "model_data": { "base_dim": 3, "defining_classes": ["s7", "s9"], diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-16.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-16.json index c94830ccb157..70aa44bcac5c 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-16.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-16.json @@ -1,7 +1,7 @@ { "model_index": "44", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_16", - "gauge_algebra": ["su3", "su3", "su3"], - "global_gauge_quotients": [["Z3", [1, 2, 3]]] + "gauge_algebra": ["su(3)", "su(3)", "su(3)"], + "global_gauge_quotients": [["diagonal_matrix(root_of_unity(C,3),3)"], ["diagonal_matrix(root_of_unity(C,3),3)"], ["diagonal_matrix(root_of_unity(C,3),3)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-2-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-2-WSF.json index b3446c894f88..24e0bef64053 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-2-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-2-WSF.json @@ -1,7 +1,7 @@ { "model_index": "15", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_2", - "gauge_algebra": ["u1"], + "gauge_algebra": ["u(1)"], "discrete_factors": ["Z2"] }, "model_data": { diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-2.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-2.json index c48d94ce2323..ad2c64e872de 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-2.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-2.json @@ -1,7 +1,7 @@ { "model_index": "16", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_2", - "gauge_algebra": ["u1"], + "gauge_algebra": ["u(1)"], "discrete_factors": ["Z2"] }, "model_data": { diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-3-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-3-WSF.json index bf4579cf55f2..32b018e04611 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-3-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-3-WSF.json @@ -1,7 +1,7 @@ { "model_index": "17", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_3", - "gauge_algebra": ["u1"] + "gauge_algebra": ["u(1)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-3.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-3.json index 46e229bab8fa..221531825028 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-3.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-3.json @@ -1,7 +1,7 @@ { "model_index": "18", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_3", - "gauge_algebra": ["u1"] + "gauge_algebra": ["u(1)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-4-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-4-WSF.json index bc7ddfa2c16a..8a5bb38a68a4 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-4-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-4-WSF.json @@ -1,7 +1,7 @@ { "model_index": "19", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_4", - "gauge_algebra": ["su2"], + "gauge_algebra": ["su(2)"], "discrete_factors": ["Z4"] }, "model_data": { diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-4.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-4.json index f05e7b613cf6..6a203955a3ba 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-4.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-4.json @@ -1,7 +1,7 @@ { "model_index": "20", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_4", - "gauge_algebra": ["su2"], + "gauge_algebra": ["su(2)"], "discrete_factors": ["Z4"] }, "model_data": { diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-5-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-5-WSF.json index 453ab3c68c78..c891d8eddc63 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-5-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-5-WSF.json @@ -1,7 +1,7 @@ { "model_index": "21", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_5", - "gauge_algebra": ["u1", "u1"] + "gauge_algebra": ["u(1)", "u(1)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-5.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-5.json index a2fdce42c55b..34cd1343a492 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-5.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-5.json @@ -1,7 +1,7 @@ { "model_index": "22", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_5", - "gauge_algebra": ["u1", "u1"] + "gauge_algebra": ["u(1)", "u(1)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-6-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-6-WSF.json index 1ec780d0b694..cd9439e59ca0 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-6-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-6-WSF.json @@ -1,7 +1,7 @@ { "model_index": "23", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_6", - "gauge_algebra": ["su2", "u1"], - "global_gauge_quotients": [["Z2", [1, 2]]] + "gauge_algebra": ["su(2)", "u(1)"], + "global_gauge_quotients": [["-identity_matrix(C,2)"], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-6.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-6.json index c2c375689754..adb1cde09003 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-6.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-6.json @@ -1,7 +1,7 @@ { "model_index": "24", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_6", - "gauge_algebra": ["su2", "u1"], - "global_gauge_quotients": [["Z2", [1, 2]]] + "gauge_algebra": ["su(2)", "u(1)"], + "global_gauge_quotients": [["-identity_matrix(C,2)"], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-7-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-7-WSF.json index 515580cd7907..b0ef6683cee4 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-7-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-7-WSF.json @@ -1,7 +1,7 @@ { "model_index": "25", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_7", - "gauge_algebra": ["u1", "u1", "u1"] + "gauge_algebra": ["u(1)", "u(1)", "u(1)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-7.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-7.json index ffdd0a5a1d08..4f336b90571c 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-7.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-7.json @@ -1,7 +1,7 @@ { "model_index": "26", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,7 +41,7 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_7", - "gauge_algebra": ["u1", "u1", "u1"] + "gauge_algebra": ["u(1)", "u(1)", "u(1)"] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-8-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-8-WSF.json index 80b21df18fd8..c6f61a9ed00f 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-8-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-8-WSF.json @@ -1,7 +1,7 @@ { "model_index": "27", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_8", - "gauge_algebra": ["su2", "su2", "u1"], - "global_gauge_quotients": [["Z2", [2, 3]]] + "gauge_algebra": ["su(2)", "su(2)", "u(1)"], + "global_gauge_quotients": [[""], ["-identity_matrix(C,2)"], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-8.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-8.json index 10080f055433..b75a59f1156d 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-8.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-8.json @@ -1,7 +1,7 @@ { "model_index": "28", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_8", - "gauge_algebra": ["su2", "su2", "u1"], - "global_gauge_quotients": [["Z2", [2, 3]]] + "gauge_algebra": ["su(2)", "su(2)", "u(1)"], + "global_gauge_quotients": [[""], ["-identity_matrix(C,2)"], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-9-WSF.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-9-WSF.json index 32c5b04f907e..1ca61b3fb773 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-9-WSF.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-9-WSF.json @@ -1,7 +1,7 @@ { "model_index": "29", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "weierstrass", "description": "F-theory weierstrass model dual to hypersurface model with fiber ambient space F_9", - "gauge_algebra": ["su2", "u1", "u1"], - "global_gauge_quotients": [["Z2", [1, 3]]] + "gauge_algebra": ["su(2)", "u(1)", "u(1)"], + "global_gauge_quotients": [["-identity_matrix(C,2)"], [""], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-9.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-9.json index 424ac1ec6c1e..22def2dee02f 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-9.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1408_4808-9.json @@ -1,7 +1,7 @@ { "model_index": "30", "arxiv_data": { - "id": "1408.4808v2", + "id": "1408.4808", "doi": "10.48550/arXiv.1408.4808", "version": "2", "discipline": "hep-th", @@ -41,8 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "F-theory hypersurface model with fiber ambient space F_9", - "gauge_algebra": ["su2", "u1", "u1"], - "global_gauge_quotients": [["Z2", [1, 3]]] + "gauge_algebra": ["su(2)", "u(1)", "u(1)"], + "global_gauge_quotients": [["-identity_matrix(C,2)"], [""], ["-identity_matrix(C,1)"]] }, "model_data": { "base_dim": 3, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1507_05954-1.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1507_05954-1.json index 0aa1ff83b7f2..241aa35d9d78 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1507_05954-1.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1507_05954-1.json @@ -40,7 +40,7 @@ "model_descriptors": { "type": "hypersurface", "description": "U(1)xU(1) hypersurface model", - "gauge_algebra": ["u1", "u1"] + "gauge_algebra": ["u(1)", "u(1)"] }, "model_data": { "base_dim": 2, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1507_05954-2.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1507_05954-2.json index 928c1e60070c..653a2df45f20 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1507_05954-2.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1507_05954-2.json @@ -40,7 +40,7 @@ "model_descriptors": { "type": "weierstrass", "description": "U(1)xU(1) Weierstrass model", - "gauge_algebra": ["u1", "u1"] + "gauge_algebra": ["u(1)", "u(1)"] }, "model_data": { "base_dim": 2, diff --git a/experimental/FTheoryTools/src/LiteratureModels/Models/model1903.00009.json b/experimental/FTheoryTools/src/LiteratureModels/Models/model1903.00009.json index 974d06d74a0b..3441cff42da1 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/Models/model1903.00009.json +++ b/experimental/FTheoryTools/src/LiteratureModels/Models/model1903.00009.json @@ -41,7 +41,8 @@ "model_descriptors": { "type": "hypersurface", "description": "Quadrillion F-theory Standard Model", - "gauge_algebra": ["(su3 x su2 x u1)/Z6"] + "gauge_algebra": ["su(3)","su(2)","u(1)"], + "global_gauge_quotients": [["diagonal_matrix(root_of_unity(C,3),3)"], ["-identity_matrix(C,2)"], ["diagonal_matrix(root_of_unity(C,6,-1),1)"]] }, "model_parameters": ["k"], "model_data": { diff --git a/experimental/FTheoryTools/src/LiteratureModels/constructors.jl b/experimental/FTheoryTools/src/LiteratureModels/constructors.jl index a48683fae8d8..91c8b80eab70 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/constructors.jl +++ b/experimental/FTheoryTools/src/LiteratureModels/constructors.jl @@ -313,6 +313,8 @@ function literature_model(model_dict::Dict{String, Any}; model_parameters::Dict{ for (key, val) in model_parameters map!(x -> nested_string_map(s -> replace(s, key => string(val)), x), values(model_dict["model_data"])) + map!(x -> nested_string_map(s -> replace(s, key => string(val)), x), values(model_dict["model_descriptors"])) + map!(x -> nested_string_map(s -> replace(s, r"\(([^(),]+)\)" => dim -> string("(", Oscar.eval_poly(string.(match(r"\(([^(),]+)\)", dim).captures[1]), ZZ),")")), x), values(model_dict["model_descriptors"])) end end @@ -717,6 +719,18 @@ function _set_all_attributes(model::AbstractFTheoryModel, model_dict::Dict{Strin if haskey(model_dict["model_data"], "generating_sections") set_generating_sections(model, map(k -> string.(k), model_dict["model_data"]["generating_sections"])) end + + if haskey(model_dict["model_data"], "torsion_sections") + set_torsion_sections(model, map(k -> string.(k), model_dict["model_data"]["torsion_sections"])) + end + + if haskey(model_dict["model_descriptors"], "gauge_algebra") + set_gauge_algebra(model, string.(model_dict["model_descriptors"]["gauge_algebra"])) + end + + if haskey(model_dict["model_descriptors"], "global_gauge_quotients") + set_global_gauge_quotients(model, map(k -> string.(k), model_dict["model_descriptors"]["global_gauge_quotients"])) + end end diff --git a/experimental/FTheoryTools/src/LiteratureModels/index.json b/experimental/FTheoryTools/src/LiteratureModels/index.json index d7d40778f909..34b16fdc8c14 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/index.json +++ b/experimental/FTheoryTools/src/LiteratureModels/index.json @@ -1 +1 @@ -[{"journal_section":"3","arxiv_page":"10","journal_page":"9","arxiv_id":"1109.3454","arxiv_equation":"3.1","arxiv_version":"2","journal_doi":"10.1016/j.nuclphysb.2011.12.013","journal_equation":"3.1","arxiv_section":"3","journal":"Nucl. Phys. B","file":"model1109_3454.json","arxiv_doi":"10.48550/arXiv.1109.3454","model_index":"1","type":"tate"},{"journal_section":"B","arxiv_page":"32","journal_page":"33","arxiv_id":"1208.2695","arxiv_equation":"B.5","arxiv_version":"2","journal_doi":"10.1007/JHEP10(2012)128","journal_equation":"B.5","arxiv_section":"B","journal":"JHEP","file":"model1208_2695-1.json","arxiv_doi":"10.48550/arXiv.1208.2695","model_index":"2","type":"hypersurface"},{"journal_section":"B","arxiv_page":"34","journal_page":"34","arxiv_id":"1208.2695","arxiv_equation":"B.19","arxiv_version":"2","journal_doi":"10.1007/JHEP10(2012)128","journal_equation":"B.19","arxiv_section":"B","journal":"JHEP","file":"model1208_2695-2.json","arxiv_doi":"10.48550/arXiv.1208.2695","model_index":"3","type":"weierstrass"},{"journal_section":"","arxiv_page":"19","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"3.2","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"3.1","journal":"JHEP","file":"model1212_2949-1.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"4","type":"tate"},{"journal_section":"","arxiv_page":"31","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"3.42","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"3.2","journal":"JHEP","file":"model1212_2949-2.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"5","type":"tate"},{"journal_section":"","arxiv_page":"37","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"4.1","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"4.1","journal":"JHEP","file":"model1212_2949-3.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"6","type":"tate"},{"journal_section":"","arxiv_page":"44","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"4.23","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"4.2","journal":"JHEP","file":"model1212_2949-4.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"7","type":"tate"},{"journal_section":"","arxiv_page":"49","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"5.1","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"5.1","journal":"JHEP","file":"model1212_2949-5.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"8","type":"tate"},{"journal_section":"","arxiv_page":"49","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"5.7","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"5.1","journal":"JHEP","file":"model1212_2949-6.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"9","type":"tate"},{"journal_section":"","arxiv_page":"49","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"5.13","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"5.1","journal":"JHEP","file":"model1212_2949-7.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"10","type":"tate"},{"journal_section":"3","arxiv_page":"18","journal_page":"19","arxiv_id":"1408.4808v2","arxiv_equation":"3.4","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.4","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-1-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"13","type":"weierstrass"},{"journal_section":"3","arxiv_page":"18","journal_page":"19","arxiv_id":"1408.4808v2","arxiv_equation":"3.4","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.4","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-1.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"14","type":"hypersurface"},{"journal_section":"3","arxiv_page":"62","journal_page":"62","arxiv_id":"1408.4808v2","arxiv_equation":"3.130","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.129","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-10-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"31","type":"weierstrass"},{"journal_section":"3","arxiv_page":"62","journal_page":"62","arxiv_id":"1408.4808v2","arxiv_equation":"3.130","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.129","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-10.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"32","type":"hypersurface"},{"journal_section":"3","arxiv_page":"67","journal_page":"67","arxiv_id":"1408.4808v2","arxiv_equation":"3.142","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.141","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-11-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"33","type":"weierstrass"},{"journal_section":"3","arxiv_page":"67","journal_page":"67","arxiv_id":"1408.4808v2","arxiv_equation":"3.142","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.141","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-11.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"34","type":"hypersurface"},{"journal_section":"3","arxiv_page":"70","journal_page":"70","arxiv_id":"1408.4808v2","arxiv_equation":"3.155","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.154","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-12-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"35","type":"weierstrass"},{"journal_section":"3","arxiv_page":"70","journal_page":"70","arxiv_id":"1408.4808v2","arxiv_equation":"3.155","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.154","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-12.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"36","type":"hypersurface"},{"journal_section":"3","arxiv_page":"79","journal_page":"79","arxiv_id":"1408.4808v2","arxiv_equation":"3.181","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.180","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-13-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"37","type":"weierstrass"},{"journal_section":"3","arxiv_page":"79","journal_page":"79","arxiv_id":"1408.4808v2","arxiv_equation":"3.181","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.180","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-13.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"38","type":"hypersurface"},{"journal_section":"3","arxiv_page":"75","journal_page":"75","arxiv_id":"1408.4808v2","arxiv_equation":"3.168","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.167","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-14-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"39","type":"weierstrass"},{"journal_section":"3","arxiv_page":"75","journal_page":"75","arxiv_id":"1408.4808v2","arxiv_equation":"3.168","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.167","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-14.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"40","type":"hypersurface"},{"journal_section":"3","arxiv_page":"83","journal_page":"83","arxiv_id":"1408.4808v2","arxiv_equation":"3.190","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.189","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-15-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"41","type":"weierstrass"},{"journal_section":"3","arxiv_page":"83","journal_page":"83","arxiv_id":"1408.4808v2","arxiv_equation":"3.190","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.189","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-15.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"42","type":"hypersurface"},{"journal_section":"3","arxiv_page":"87","journal_page":"88","arxiv_id":"1408.4808v2","arxiv_equation":"3.203","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.202","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-16-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"43","type":"weierstrass"},{"journal_section":"3","arxiv_page":"87","journal_page":"88","arxiv_id":"1408.4808v2","arxiv_equation":"3.203","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.202","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-16.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"44","type":"hypersurface"},{"journal_section":"3","arxiv_page":"20","journal_page":"20","arxiv_id":"1408.4808v2","arxiv_equation":"3.12","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.12","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-2-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"15","type":"weierstrass"},{"journal_section":"3","arxiv_page":"20","journal_page":"20","arxiv_id":"1408.4808v2","arxiv_equation":"3.12","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.12","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-2.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"16","type":"hypersurface"},{"journal_section":"3","arxiv_page":"36","journal_page":"36","arxiv_id":"1408.4808v2","arxiv_equation":"3.54","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.53","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-3-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"17","type":"weierstrass"},{"journal_section":"3","arxiv_page":"36","journal_page":"36","arxiv_id":"1408.4808v2","arxiv_equation":"3.54","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.53","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-3.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"18","type":"hypersurface"},{"journal_section":"3","arxiv_page":"22","journal_page":"22","arxiv_id":"1408.4808v2","arxiv_equation":"3.17","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.17","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-4-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"19","type":"weierstrass"},{"journal_section":"3","arxiv_page":"22","journal_page":"22","arxiv_id":"1408.4808v2","arxiv_equation":"3.17","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.17","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-4.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"20","type":"hypersurface"},{"journal_section":"3","arxiv_page":"43","journal_page":"43","arxiv_id":"1408.4808v2","arxiv_equation":"3.73","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.72","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-5-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"21","type":"weierstrass"},{"journal_section":"3","arxiv_page":"43","journal_page":"43","arxiv_id":"1408.4808v2","arxiv_equation":"3.73","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.72","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-5.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"22","type":"hypersurface"},{"journal_section":"3","arxiv_page":"46","journal_page":"46","arxiv_id":"1408.4808v2","arxiv_equation":"3.82","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.81","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-6-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"23","type":"weierstrass"},{"journal_section":"3","arxiv_page":"46","journal_page":"46","arxiv_id":"1408.4808v2","arxiv_equation":"3.82","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.81","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-6.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"24","type":"hypersurface"},{"journal_section":"3","arxiv_page":"50","journal_page":"51","arxiv_id":"1408.4808v2","arxiv_equation":"3.96","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.95","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-7-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"25","type":"weierstrass"},{"journal_section":"3","arxiv_page":"50","journal_page":"51","arxiv_id":"1408.4808v2","arxiv_equation":"3.96","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.95","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-7.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"26","type":"hypersurface"},{"journal_section":"3","arxiv_page":"54","journal_page":"55","arxiv_id":"1408.4808v2","arxiv_equation":"3.106","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.105","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-8-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"27","type":"weierstrass"},{"journal_section":"3","arxiv_page":"54","journal_page":"55","arxiv_id":"1408.4808v2","arxiv_equation":"3.106","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.105","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-8.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"28","type":"hypersurface"},{"journal_section":"3","arxiv_page":"58","journal_page":"59","arxiv_id":"1408.4808v2","arxiv_equation":"3.118","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.117","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-9-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"29","type":"weierstrass"},{"journal_section":"3","arxiv_page":"58","journal_page":"59","arxiv_id":"1408.4808v2","arxiv_equation":"3.118","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.117","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-9.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"30","type":"hypersurface"},{"journal_section":"","arxiv_page":"17","journal_page":"","arxiv_id":"1507.05954","arxiv_equation":"3.4","arxiv_version":"2","journal_doi":"10.1007/JHEP11(2015)204","journal_equation":"","arxiv_section":"3","journal":"JHEP","file":"model1507_05954-1.json","arxiv_doi":"10.48550/arXiv.1507.05954","model_index":"11","type":"hypersurface"},{"journal_section":"","arxiv_page":"71","journal_page":"","arxiv_id":"1507.05954","arxiv_equation":"A.1","arxiv_version":"2","journal_doi":"10.1007/JHEP11(2015)204","journal_equation":"","arxiv_section":"A","journal":"JHEP","file":"model1507_05954-2.json","arxiv_doi":"10.48550/arXiv.1507.05954","model_index":"12","type":"weierstrass"},{"journal_section":"","arxiv_page":"2","journal_page":"2","arxiv_id":"1903.00009","arxiv_equation":"2","arxiv_version":"3","journal_doi":"10.1103/PhysRevLett.123.101601","journal_equation":"2","arxiv_section":"II","journal":"Physical Review Letters","file":"model1903.00009.json","arxiv_doi":"10.48550/arXiv.1903.00009","model_index":"13","type":"hypersurface"}] \ No newline at end of file +[{"journal_section":"3","arxiv_page":"10","journal_page":"9","arxiv_id":"1109.3454","arxiv_equation":"3.1","arxiv_version":"2","journal_doi":"10.1016/j.nuclphysb.2011.12.013","journal_equation":"3.1","arxiv_section":"3","journal":"Nucl. Phys. B","file":"model1109_3454.json","arxiv_doi":"10.48550/arXiv.1109.3454","model_index":"1","type":"tate"},{"journal_section":"B","arxiv_page":"32","journal_page":"33","arxiv_id":"1208.2695","arxiv_equation":"B.5","arxiv_version":"2","journal_doi":"10.1007/JHEP10(2012)128","journal_equation":"B.5","arxiv_section":"B","journal":"JHEP","file":"model1208_2695-1.json","arxiv_doi":"10.48550/arXiv.1208.2695","model_index":"2","type":"hypersurface"},{"journal_section":"B","arxiv_page":"34","journal_page":"34","arxiv_id":"1208.2695","arxiv_equation":"B.19","arxiv_version":"2","journal_doi":"10.1007/JHEP10(2012)128","journal_equation":"B.19","arxiv_section":"B","journal":"JHEP","file":"model1208_2695-2.json","arxiv_doi":"10.48550/arXiv.1208.2695","model_index":"3","type":"weierstrass"},{"journal_section":"","arxiv_page":"19","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"3.2","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"3.1","journal":"JHEP","file":"model1212_2949-1.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"4","type":"tate"},{"journal_section":"","arxiv_page":"31","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"3.42","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"3.2","journal":"JHEP","file":"model1212_2949-2.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"5","type":"tate"},{"journal_section":"","arxiv_page":"37","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"4.1","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"4.1","journal":"JHEP","file":"model1212_2949-3.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"6","type":"tate"},{"journal_section":"","arxiv_page":"44","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"4.23","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"4.2","journal":"JHEP","file":"model1212_2949-4.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"7","type":"tate"},{"journal_section":"","arxiv_page":"49","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"5.1","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"5.1","journal":"JHEP","file":"model1212_2949-5.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"8","type":"tate"},{"journal_section":"","arxiv_page":"49","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"5.7","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"5.1","journal":"JHEP","file":"model1212_2949-6.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"9","type":"tate"},{"journal_section":"","arxiv_page":"49","journal_page":"","arxiv_id":"1212.2949","arxiv_equation":"5.13","arxiv_version":"2","journal_doi":"10.1007/JHEP04(2013)061","journal_equation":"","arxiv_section":"5.1","journal":"JHEP","file":"model1212_2949-7.json","arxiv_doi":"10.48550/arXiv.1212.2949","model_index":"10","type":"tate"},{"journal_section":"3","arxiv_page":"18","journal_page":"19","arxiv_id":"1408.4808","arxiv_equation":"3.4","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.4","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-1-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"13","type":"weierstrass"},{"journal_section":"3","arxiv_page":"18","journal_page":"19","arxiv_id":"1408.4808","arxiv_equation":"3.4","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.4","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-1.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"14","type":"hypersurface"},{"journal_section":"3","arxiv_page":"62","journal_page":"62","arxiv_id":"1408.4808","arxiv_equation":"3.130","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.129","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-10-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"31","type":"weierstrass"},{"journal_section":"3","arxiv_page":"62","journal_page":"62","arxiv_id":"1408.4808","arxiv_equation":"3.130","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.129","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-10.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"32","type":"hypersurface"},{"journal_section":"3","arxiv_page":"67","journal_page":"67","arxiv_id":"1408.4808","arxiv_equation":"3.142","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.141","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-11-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"33","type":"weierstrass"},{"journal_section":"3","arxiv_page":"67","journal_page":"67","arxiv_id":"1408.4808","arxiv_equation":"3.142","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.141","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-11.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"34","type":"hypersurface"},{"journal_section":"3","arxiv_page":"70","journal_page":"70","arxiv_id":"1408.4808","arxiv_equation":"3.155","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.154","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-12-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"35","type":"weierstrass"},{"journal_section":"3","arxiv_page":"70","journal_page":"70","arxiv_id":"1408.4808","arxiv_equation":"3.155","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.154","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-12.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"36","type":"hypersurface"},{"journal_section":"3","arxiv_page":"79","journal_page":"79","arxiv_id":"1408.4808","arxiv_equation":"3.181","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.180","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-13-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"37","type":"weierstrass"},{"journal_section":"3","arxiv_page":"79","journal_page":"79","arxiv_id":"1408.4808","arxiv_equation":"3.181","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.180","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-13.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"38","type":"hypersurface"},{"journal_section":"3","arxiv_page":"75","journal_page":"75","arxiv_id":"1408.4808","arxiv_equation":"3.168","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.167","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-14-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"39","type":"weierstrass"},{"journal_section":"3","arxiv_page":"75","journal_page":"75","arxiv_id":"1408.4808","arxiv_equation":"3.168","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.167","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-14.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"40","type":"hypersurface"},{"journal_section":"3","arxiv_page":"83","journal_page":"83","arxiv_id":"1408.4808","arxiv_equation":"3.190","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.189","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-15-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"41","type":"weierstrass"},{"journal_section":"3","arxiv_page":"83","journal_page":"83","arxiv_id":"1408.4808","arxiv_equation":"3.190","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.189","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-15.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"42","type":"hypersurface"},{"journal_section":"3","arxiv_page":"87","journal_page":"88","arxiv_id":"1408.4808","arxiv_equation":"3.203","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.202","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-16-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"43","type":"weierstrass"},{"journal_section":"3","arxiv_page":"87","journal_page":"88","arxiv_id":"1408.4808","arxiv_equation":"3.203","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.202","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-16.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"44","type":"hypersurface"},{"journal_section":"3","arxiv_page":"20","journal_page":"20","arxiv_id":"1408.4808","arxiv_equation":"3.12","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.12","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-2-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"15","type":"weierstrass"},{"journal_section":"3","arxiv_page":"20","journal_page":"20","arxiv_id":"1408.4808","arxiv_equation":"3.12","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.12","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-2.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"16","type":"hypersurface"},{"journal_section":"3","arxiv_page":"36","journal_page":"36","arxiv_id":"1408.4808","arxiv_equation":"3.54","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.53","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-3-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"17","type":"weierstrass"},{"journal_section":"3","arxiv_page":"36","journal_page":"36","arxiv_id":"1408.4808","arxiv_equation":"3.54","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.53","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-3.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"18","type":"hypersurface"},{"journal_section":"3","arxiv_page":"22","journal_page":"22","arxiv_id":"1408.4808","arxiv_equation":"3.17","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.17","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-4-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"19","type":"weierstrass"},{"journal_section":"3","arxiv_page":"22","journal_page":"22","arxiv_id":"1408.4808","arxiv_equation":"3.17","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.17","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-4.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"20","type":"hypersurface"},{"journal_section":"3","arxiv_page":"43","journal_page":"43","arxiv_id":"1408.4808","arxiv_equation":"3.73","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.72","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-5-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"21","type":"weierstrass"},{"journal_section":"3","arxiv_page":"43","journal_page":"43","arxiv_id":"1408.4808","arxiv_equation":"3.73","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.72","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-5.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"22","type":"hypersurface"},{"journal_section":"3","arxiv_page":"46","journal_page":"46","arxiv_id":"1408.4808","arxiv_equation":"3.82","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.81","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-6-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"23","type":"weierstrass"},{"journal_section":"3","arxiv_page":"46","journal_page":"46","arxiv_id":"1408.4808","arxiv_equation":"3.82","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.81","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-6.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"24","type":"hypersurface"},{"journal_section":"3","arxiv_page":"50","journal_page":"51","arxiv_id":"1408.4808","arxiv_equation":"3.96","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.95","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-7-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"25","type":"weierstrass"},{"journal_section":"3","arxiv_page":"50","journal_page":"51","arxiv_id":"1408.4808","arxiv_equation":"3.96","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.95","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-7.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"26","type":"hypersurface"},{"journal_section":"3","arxiv_page":"54","journal_page":"55","arxiv_id":"1408.4808","arxiv_equation":"3.106","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.105","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-8-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"27","type":"weierstrass"},{"journal_section":"3","arxiv_page":"54","journal_page":"55","arxiv_id":"1408.4808","arxiv_equation":"3.106","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.105","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-8.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"28","type":"hypersurface"},{"journal_section":"3","arxiv_page":"58","journal_page":"59","arxiv_id":"1408.4808","arxiv_equation":"3.118","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.117","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-9-WSF.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"29","type":"weierstrass"},{"journal_section":"3","arxiv_page":"58","journal_page":"59","arxiv_id":"1408.4808","arxiv_equation":"3.118","arxiv_version":"2","journal_doi":"10.1007/JHEP01(2015)142","journal_equation":"3.117","arxiv_section":"3","journal":"JHEP","file":"model1408_4808-9.json","arxiv_doi":"10.48550/arXiv.1408.4808","model_index":"30","type":"hypersurface"},{"journal_section":"","arxiv_page":"17","journal_page":"","arxiv_id":"1507.05954","arxiv_equation":"3.4","arxiv_version":"2","journal_doi":"10.1007/JHEP11(2015)204","journal_equation":"","arxiv_section":"3","journal":"JHEP","file":"model1507_05954-1.json","arxiv_doi":"10.48550/arXiv.1507.05954","model_index":"11","type":"hypersurface"},{"journal_section":"","arxiv_page":"71","journal_page":"","arxiv_id":"1507.05954","arxiv_equation":"A.1","arxiv_version":"2","journal_doi":"10.1007/JHEP11(2015)204","journal_equation":"","arxiv_section":"A","journal":"JHEP","file":"model1507_05954-2.json","arxiv_doi":"10.48550/arXiv.1507.05954","model_index":"12","type":"weierstrass"},{"journal_section":"","arxiv_page":"2","journal_page":"2","arxiv_id":"1903.00009","arxiv_equation":"2","arxiv_version":"3","journal_doi":"10.1103/PhysRevLett.123.101601","journal_equation":"2","arxiv_section":"II","journal":"Physical Review Letters","file":"model1903.00009.json","arxiv_doi":"10.48550/arXiv.1903.00009","model_index":"13","type":"hypersurface"}] diff --git a/experimental/FTheoryTools/src/exports.jl b/experimental/FTheoryTools/src/exports.jl index c8a7331a62d2..0bf8cccb3a78 100644 --- a/experimental/FTheoryTools/src/exports.jl +++ b/experimental/FTheoryTools/src/exports.jl @@ -43,7 +43,9 @@ export display_all_literature_models export explicit_model_sections export family_of_spaces export fiber_ambient_space +export gauge_algebra export generating_sections +export global_gauge_quotients export global_tate_model export global_tate_model_over_del_pezzo_surface export global_tate_model_over_hirzebruch_surface @@ -56,7 +58,9 @@ export has_arxiv_model_page export has_arxiv_model_section export has_arxiv_version export has_associated_literature_models +export has_gauge_algebra export has_generating_sections +export has_global_gauge_quotients export has_journal_doi export has_journal_link export has_journal_model_equation_number @@ -120,7 +124,9 @@ export set_arxiv_model_page export set_arxiv_model_section export set_arxiv_version export set_associated_literature_models +export set_gauge_algebra export set_generating_sections +export set_global_gauge_quotients export set_global_tate_model export set_journal_doi export set_journal_link diff --git a/experimental/FTheoryTools/test/literature_models.jl b/experimental/FTheoryTools/test/literature_models.jl index 842f34a23f99..bcc4176fad14 100644 --- a/experimental/FTheoryTools/test/literature_models.jl +++ b/experimental/FTheoryTools/test/literature_models.jl @@ -374,22 +374,22 @@ end # 8: Test models from F-theory on all toric hypersurfaces over arbitrary base ############################################################################# -foah1 = literature_model(arxiv_id = "1408.4808v2", equation = "3.4", type = "hypersurface") -foah2 = literature_model(arxiv_id = "1408.4808v2", equation = "3.12", type = "hypersurface") -foah3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.54", type = "hypersurface") -foah4 = literature_model(arxiv_id = "1408.4808v2", equation = "3.17", type = "hypersurface") -foah5 = literature_model(arxiv_id = "1408.4808v2", equation = "3.73", type = "hypersurface") -foah6 = literature_model(arxiv_id = "1408.4808v2", equation = "3.82", type = "hypersurface") -foah7 = literature_model(arxiv_id = "1408.4808v2", equation = "3.96", type = "hypersurface") -foah8 = literature_model(arxiv_id = "1408.4808v2", equation = "3.106", type = "hypersurface") -foah9 = literature_model(arxiv_id = "1408.4808v2", equation = "3.118", type = "hypersurface") -foah10 = literature_model(arxiv_id = "1408.4808v2", equation = "3.130", type = "hypersurface") -foah11 = literature_model(arxiv_id = "1408.4808v2", equation = "3.142", type = "hypersurface") -foah12 = literature_model(arxiv_id = "1408.4808v2", equation = "3.155", type = "hypersurface") -foah13 = literature_model(arxiv_id = "1408.4808v2", equation = "3.181", type = "hypersurface") -foah14 = literature_model(arxiv_id = "1408.4808v2", equation = "3.168", type = "hypersurface") -foah15 = literature_model(arxiv_id = "1408.4808v2", equation = "3.190", type = "hypersurface") -foah16 = literature_model(arxiv_id = "1408.4808v2", equation = "3.203", type = "hypersurface") +foah1 = literature_model(arxiv_id = "1408.4808", equation = "3.4", type = "hypersurface") +foah2 = literature_model(arxiv_id = "1408.4808", equation = "3.12", type = "hypersurface") +foah3 = literature_model(arxiv_id = "1408.4808", equation = "3.54", type = "hypersurface") +foah4 = literature_model(arxiv_id = "1408.4808", equation = "3.17", type = "hypersurface") +foah5 = literature_model(arxiv_id = "1408.4808", equation = "3.73", type = "hypersurface") +foah6 = literature_model(arxiv_id = "1408.4808", equation = "3.82", type = "hypersurface") +foah7 = literature_model(arxiv_id = "1408.4808", equation = "3.96", type = "hypersurface") +foah8 = literature_model(arxiv_id = "1408.4808", equation = "3.106", type = "hypersurface") +foah9 = literature_model(arxiv_id = "1408.4808", equation = "3.118", type = "hypersurface") +foah10 = literature_model(arxiv_id = "1408.4808", equation = "3.130", type = "hypersurface") +foah11 = literature_model(arxiv_id = "1408.4808", equation = "3.142", type = "hypersurface") +foah12 = literature_model(arxiv_id = "1408.4808", equation = "3.155", type = "hypersurface") +foah13 = literature_model(arxiv_id = "1408.4808", equation = "3.181", type = "hypersurface") +foah14 = literature_model(arxiv_id = "1408.4808", equation = "3.168", type = "hypersurface") +foah15 = literature_model(arxiv_id = "1408.4808", equation = "3.190", type = "hypersurface") +foah16 = literature_model(arxiv_id = "1408.4808", equation = "3.203", type = "hypersurface") @testset "Test hypersurface form of models in F-theory on all toric hypersurfaces, defined over arbitrary base" begin @test dim(base_space(foah1)) == 3 @@ -457,6 +457,15 @@ foah16 = literature_model(arxiv_id = "1408.4808v2", equation = "3.203", type = " @test model_description(foah15) == "F-theory hypersurface model with fiber ambient space F_15" @test model_description(foah16) == "F-theory hypersurface model with fiber ambient space F_16" @test haskey(explicit_model_sections(foah6), "s9") == false + @test length(global_gauge_quotients(foah6)) == length(gauge_algebra(foah6)) + @test length(global_gauge_quotients(foah8)) == length(gauge_algebra(foah8)) + @test length(global_gauge_quotients(foah9)) == length(gauge_algebra(foah9)) + @test length(global_gauge_quotients(foah11)) == length(gauge_algebra(foah11)) + @test length(global_gauge_quotients(foah12)) == length(gauge_algebra(foah12)) + @test length(global_gauge_quotients(foah13)) == length(gauge_algebra(foah13)) + @test length(global_gauge_quotients(foah14)) == length(gauge_algebra(foah14)) + @test length(global_gauge_quotients(foah15)) == length(gauge_algebra(foah15)) + @test length(global_gauge_quotients(foah16)) == length(gauge_algebra(foah16)) end @@ -467,22 +476,22 @@ end B3 = projective_space(NormalToricVariety, 3) Kbar = anticanonical_divisor(B3) -foah1_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.4", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah2_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.12", type = "hypersurface", base_space = B3, defining_classes = Dict("b7" => Kbar, "b9" => Kbar), completeness_check = false) -foah3_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.54", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah4_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.17", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah5_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.73", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah6_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.82", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah7_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.96", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah8_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.106", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah9_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.118", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah10_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.130", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah11_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.142", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah12_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.155", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah13_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.181", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah14_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.168", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah15_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.190", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah16_B3 = literature_model(arxiv_id = "1408.4808v2", equation = "3.203", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah1_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.4", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah2_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.12", type = "hypersurface", base_space = B3, defining_classes = Dict("b7" => Kbar, "b9" => Kbar), completeness_check = false) +foah3_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.54", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah4_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.17", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah5_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.73", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah6_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.82", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah7_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.96", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah8_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.106", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah9_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.118", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah10_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.130", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah11_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.142", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah12_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.155", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah13_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.181", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah14_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.168", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah15_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.190", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah16_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.203", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) @testset "Test hypersurface form of models in F-theory on all toric hypersurfaces, defined over concrete base" begin @test dim(base_space(foah1_B3)) == 3 @@ -574,22 +583,22 @@ end # 10: Test weierstrass counterparts of models from F-theory on all toric hypersurfaces over arbitrary base ########################################################################################################## -foah1_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.4", type = "weierstrass") -foah2_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.12", type = "weierstrass") -foah3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.54", type = "weierstrass") -foah4_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.17", type = "weierstrass") -foah5_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.73", type = "weierstrass") -foah6_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.82", type = "weierstrass") -foah7_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.96", type = "weierstrass") -foah8_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.106", type = "weierstrass") -foah9_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.118", type = "weierstrass") -foah10_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.130", type = "weierstrass") -foah11_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.142", type = "weierstrass") -foah12_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.155", type = "weierstrass") -foah13_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.181", type = "weierstrass") -foah14_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.168", type = "weierstrass") -foah15_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.190", type = "weierstrass") -foah16_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.203", type = "weierstrass") +foah1_weier = literature_model(arxiv_id = "1408.4808", equation = "3.4", type = "weierstrass") +foah2_weier = literature_model(arxiv_id = "1408.4808", equation = "3.12", type = "weierstrass") +foah3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.54", type = "weierstrass") +foah4_weier = literature_model(arxiv_id = "1408.4808", equation = "3.17", type = "weierstrass") +foah5_weier = literature_model(arxiv_id = "1408.4808", equation = "3.73", type = "weierstrass") +foah6_weier = literature_model(arxiv_id = "1408.4808", equation = "3.82", type = "weierstrass") +foah7_weier = literature_model(arxiv_id = "1408.4808", equation = "3.96", type = "weierstrass") +foah8_weier = literature_model(arxiv_id = "1408.4808", equation = "3.106", type = "weierstrass") +foah9_weier = literature_model(arxiv_id = "1408.4808", equation = "3.118", type = "weierstrass") +foah10_weier = literature_model(arxiv_id = "1408.4808", equation = "3.130", type = "weierstrass") +foah11_weier = literature_model(arxiv_id = "1408.4808", equation = "3.142", type = "weierstrass") +foah12_weier = literature_model(arxiv_id = "1408.4808", equation = "3.155", type = "weierstrass") +foah13_weier = literature_model(arxiv_id = "1408.4808", equation = "3.181", type = "weierstrass") +foah14_weier = literature_model(arxiv_id = "1408.4808", equation = "3.168", type = "weierstrass") +foah15_weier = literature_model(arxiv_id = "1408.4808", equation = "3.190", type = "weierstrass") +foah16_weier = literature_model(arxiv_id = "1408.4808", equation = "3.203", type = "weierstrass") @testset "Test weierstrass form of models in F-theory on all toric hypersurfaces, defined over arbitrary base" begin @test dim(base_space(foah1_weier)) == 3 @@ -666,22 +675,22 @@ end B3 = projective_space(NormalToricVariety, 3) Kbar = anticanonical_divisor(B3) -foah1_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.4", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah2_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.12", type = "weierstrass", base_space = B3, defining_classes = Dict("b7" => Kbar, "b9" => Kbar), completeness_check = false) -foah3_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.54", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah4_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.17", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah5_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.73", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah6_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.82", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah7_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.96", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah8_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.106", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah9_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.118", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah10_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.130", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah11_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.142", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah12_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.155", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah13_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.181", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah14_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.168", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah15_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.190", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) -foah16_B3_weier = literature_model(arxiv_id = "1408.4808v2", equation = "3.203", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah1_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.4", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah2_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.12", type = "weierstrass", base_space = B3, defining_classes = Dict("b7" => Kbar, "b9" => Kbar), completeness_check = false) +foah3_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.54", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah4_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.17", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah5_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.73", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah6_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.82", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah7_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.96", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah8_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.106", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah9_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.118", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah10_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.130", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah11_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.142", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah12_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.155", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah13_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.181", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah14_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.168", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah15_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.190", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) +foah16_B3_weier = literature_model(arxiv_id = "1408.4808", equation = "3.203", type = "weierstrass", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), completeness_check = false) @testset "Test weierstrass form of models in F-theory on all toric hypersurfaces, defined over concrete base" begin @test dim(base_space(foah1_B3_weier)) == 3 From d9a3ab68ec2c89bbff6b17c9cd519cdbdaa8da1f Mon Sep 17 00:00:00 2001 From: Matthias Zach <85350711+HechtiDerLachs@users.noreply.github.com> Date: Tue, 18 Jun 2024 23:31:48 +0200 Subject: [PATCH 04/12] Fibration hopping presentation (#3839) * Add error message to warn the user about a particular failure in Singular. * select a good chart for subsystems of a linear system * Factor denominators for mappings. * Tune convert routine. * improve is_one for SumIdealSheaf * Repair _maximal_associated_points. * Improve arithmetic of elements in localizations of quotients. * has_is_prime for ideal sheaves * view the trivial gluing as computed --------- Co-authored-by: Simon Brandhorst (cherry picked from commit 7877cd75e025b13536783de12190ab1e08f76360) --- .../Schemes/src/CoveredProjectiveSchemes.jl | 18 +- experimental/Schemes/src/IdealSheaves.jl | 178 +++++++++--------- experimental/Schemes/src/LazyGluing.jl | 5 +- .../src/MorphismFromRationalFunctions.jl | 15 +- experimental/Schemes/src/WeilDivisor.jl | 17 +- experimental/Schemes/src/elliptic_surface.jl | 6 +- .../Schemes/Covering/Objects/Attributes.jl | 5 +- src/Rings/MPolyQuo.jl | 4 + src/Rings/mpoly-ideals.jl | 6 + src/Rings/mpoly-localizations.jl | 18 ++ src/Rings/mpolyquo-localizations.jl | 51 +++-- .../AlgebraicGeometry/Schemes/IdealSheaves.jl | 34 +++- 12 files changed, 222 insertions(+), 135 deletions(-) diff --git a/experimental/Schemes/src/CoveredProjectiveSchemes.jl b/experimental/Schemes/src/CoveredProjectiveSchemes.jl index e55c294bf58a..67ebcd30cb3b 100644 --- a/experimental/Schemes/src/CoveredProjectiveSchemes.jl +++ b/experimental/Schemes/src/CoveredProjectiveSchemes.jl @@ -938,16 +938,14 @@ end result_covering = Covering(result_patches, result_gluings, check=false) # Now we need to add gluings - for U in patches(C) - for V in patches(C) - U === V && continue - for UW in affine_charts(parts[U]) - for VW in affine_charts(parts[V]) - GGG = LazyGluing(UW, VW, _compute_gluing, - ProjectiveGluingData(U, V, UW, VW, C, P) - ) - result_gluings[(UW, VW)] = GGG - end + for (U, V) in keys(gluings(C)) + U === V && continue + for UW in affine_charts(parts[U]) + for VW in affine_charts(parts[V]) + GGG = LazyGluing(UW, VW, _compute_gluing, + ProjectiveGluingData(U, V, UW, VW, C, P) + ) + result_gluings[(UW, VW)] = GGG end end end diff --git a/experimental/Schemes/src/IdealSheaves.jl b/experimental/Schemes/src/IdealSheaves.jl index 2aef91102274..c6dd35a3f872 100644 --- a/experimental/Schemes/src/IdealSheaves.jl +++ b/experimental/Schemes/src/IdealSheaves.jl @@ -580,7 +580,23 @@ function is_one(I::SumIdealSheaf; covering::Covering=default_covering(scheme(I)) is_one(I(U)) || return false end end - + + if has_decomposition_info(covering) + dec = decomposition_info(covering) + for U in covering + D = ideal(OO(U), dec[U]) + K = D + for J in summands(I) # shortcut for trivial patches + if U in keys(object_cache(J)) + K = K + J(U) + end + end + isone(K) && continue + + isone(D + cheap_sub_ideal(I, U)) || isone(I(U)+D) || return false + end + return true + end return all(x->(isone(cheap_sub_ideal(I, x)) || isone(I(x))), covering) end::Bool end @@ -608,6 +624,9 @@ function is_prime(I::PrimeIdealSheafFromChart) return true end +has_is_prime(I::PrimeIdealSheafFromChart) = true +has_is_prime(I::AbsIdealSheaf) = has_attribute(I, :is_prime) + @doc raw""" is_locally_prime(I::AbsIdealSheaf) -> Bool @@ -822,6 +841,14 @@ function pushforward(inc::ClosedEmbedding, I::Ideal) ) end +function radical_membership(x::RingElem, I::MPolyLocalizedIdeal) + return radical_membership(lifted_numerator(x), saturated_ideal(I)) +end + +function radical_membership(x::RingElem, I::MPolyQuoLocalizedIdeal) + return radical_membership(lifted_numerator(x), saturated_ideal(I)) +end + ######################################################################## # primary decomposition ######################################################################## @@ -838,81 +865,7 @@ Background: More generally, a point ``x`` on a scheme ``X`` associated to a quasi-coherent sheaf ``F`` is embedded, if it is the specialization of another associated point of ``F``. Note that maximal associated points of an ideal sheaf on an affine scheme ``Spec(A)`` correspond to the minimal associated primes of the corresponding ideal in ``A``. """ -function maximal_associated_points(I::AbsIdealSheaf; - covering=default_covering(scheme(I)), - algorithm::Symbol=:GTZ - ) - # The following would reroute to a more high-brow method with cleaner code. - # It performs equally well in terms of time and memory consumption, but is disabled for the moment. - # return _maximal_associated_points(I; covering, use_decomposition_info=false) - !isone(I) || return typeof(I)[] - X = scheme(I) - OOX = OO(X) - - charts_todo = copy(patches(covering)) ## todo-list of charts - - associated_primes_temp = Vector{IdDict{AbsAffineScheme, Ideal}}() ## already identified components - ## may not yet contain all relevant charts. but - ## at least one for each identified component - - result = AbsIdealSheaf[] - # run through all charts and try to match the components - while length(charts_todo) > 0 - @vprint :MaximalAssociatedPoints 2 "$(length(charts_todo)) remaining charts to go through\n" - U = pop!(charts_todo) - !is_one(I(U)) || continue ## supp(I) might not meet all components - components_here = minimal_primes(I(U); algorithm) - - ## run through all primes in MinAss(I(U)) and try to match them with previously found ones - for comp in components_here - matches = match_on_intersections(X,U,comp,associated_primes_temp,false) - nmatches = length(matches) - - if nmatches == 0 ## not found - add_dict = IdDict{AbsAffineScheme,Ideal}() ## create new dict - add_dict[U] = comp ## and fill it - push!(associated_primes_temp, add_dict) - elseif nmatches == 1 ## unique match, update it - component_index = matches[1] - associated_primes_temp[component_index][U] = comp - else ## more than one match, form union - target_comp = pop!(matches) - merge!(associated_primes_temp[target_comp], associated_primes_temp[x] for x in matches) - deleteat!(associated_primes_temp,matches) - associated_primes_temp[target_comp][U] = comp - end - end - end - - # fill the gaps arising from a support not meeting a patch - # Warning: This relies on the current implementation of `==` for - # `PrimeIdealSheafFromChart`s which cache intermediate results. - for U in affine_charts(X) - I_one = ideal(OOX(U),one(OOX(U))) - for i in 1:length(associated_primes_temp) - !haskey(associated_primes_temp[i],U) || continue - associated_primes_temp[i][U] = I_one - end - end - - # make sure to return ideal sheaves, not dicts - associated_primes_result = [IdealSheaf(X,associated_primes_temp[i],check=false) for i in 1:length(associated_primes_temp)] - for Itemp in associated_primes_result - set_attribute!(Itemp, :is_prime=>true) - end - return associated_primes_result -end - -function radical_membership(x::RingElem, I::MPolyLocalizedIdeal) - return radical_membership(lifted_numerator(x), saturated_ideal(I)) -end - -function radical_membership(x::RingElem, I::MPolyQuoLocalizedIdeal) - return radical_membership(lifted_numerator(x), saturated_ideal(I)) -end - -# Proof of concept method -function _maximal_associated_points( +function maximal_associated_points( I::AbsIdealSheaf; covering=default_covering(scheme(I)), use_decomposition_info::Bool=true, @@ -920,12 +873,12 @@ function _maximal_associated_points( ) X = scheme(I) comps = AbsIdealSheaf[] - dec_inf = decomposition_info(covering) for U in patches(covering) - # A list of equations which indicate the locus in this chart - # which is *not* visible in "previous" charts. - loc_dec = elem_type(OO(U))[OO(U)(a) for a in dec_inf[U]] + loc_dec = elem_type(OO(U))[] # Initialize the variable if use_decomposition_info && has_decomposition_info(covering) + # A list of equations which indicate the locus in this chart + # which is *not* visible in "previous" charts. + loc_dec = elem_type(OO(U))[OO(U)(a) for a in decomposition_info(covering)[U]] # If the following holds, everything is visible in other charts already. is_one(I(U) + ideal(OO(U), loc_dec)) && continue else @@ -1200,6 +1153,11 @@ function Base.show(io::IO, I::AbsIdealSheaf) end function Base.show(io::IO, ::MIME"text/plain", I::PrimeIdealSheafFromChart) + io = pretty(io) + if has_attribute(I, :name) + print(io, get_attribute(I, :name)) + return + end print(io, "Prime ideal sheaf on ", scheme(I), " extended from ", I.P, " on ", I.U) end @@ -1245,6 +1203,10 @@ end function Base.show(io::IO, I::PrimeIdealSheafFromChart) io = pretty(io) + if has_attribute(I, :name) + print(io, get_attribute(I, :name)) + return + end print(io, "Prime ideal sheaf on ", Lowercase(), scheme(I), " extended from ", Lowercase(), I.P, " on ", @@ -1630,6 +1592,9 @@ function produce_object(F::PrimeIdealSheafFromChart, U2::AbsAffineScheme) sort!(fat, by=complexity) for W in fat + # In case there is no gluing there is no extension. + !haskey(gluings(default_covering(X)), (W, V2)) && continue + glue = default_covering(X)[W, V2] f, g = gluing_morphisms(glue) if glue isa SimpleGluing || (glue isa LazyGluing && first(gluing_domains(glue)) isa PrincipalOpenSubset) @@ -1765,7 +1730,19 @@ function cheap_sub_ideal(II::AbsIdealSheaf, U::AbsAffineScheme) return II(U) end + function cheap_sub_ideal(II::SumIdealSheaf, U::AbsAffineScheme) + for J in summands(II) # shortcut for trivial patches + if U in keys(object_cache(J)) + if has_attribute(J(U),:is_one) && is_one(J(U)) + return J(U) + else + # sometimes the ideal is obviously one but the attribute not set + ngens(J(U))==1 && isone(J(U)) + return J(U) + end + end + end return sum(cheap_sub_ideal(J, U) for J in summands(II); init = ideal(OO(U), elem_type(OO(U))[])) end @@ -1972,7 +1949,10 @@ function is_subset(P::PrimeIdealSheafFromChart, I::AbsIdealSheaf) X = scheme(P) @assert X === scheme(I) U = original_chart(P) - return is_subset(P(U), I(U)) + is_subset(P(U), I(U)) || return false + # I might have support outside the support of P. Hence, we can not + # avoid the full check, as it seems. + return all(is_subset(P(U), I(U)) for U in affine_charts(X) if !is_one(I(U))) end function ==(P::PrimeIdealSheafFromChart, Q::PrimeIdealSheafFromChart) @@ -1990,16 +1970,38 @@ function ==(P::PrimeIdealSheafFromChart, Q::PrimeIdealSheafFromChart) return PP == Q(W1) end + for (W2, Q2) in object_cache(Q) + W2 in keys(object_cache(P)) || continue + is_one(Q2) && continue + return Q2 == P(W2) + end + if any(x->x===U, affine_charts(X)) && any(x->x===V, affine_charts(X)) gg = default_covering(X)[U, V] UV, VU = gluing_domains(gg) - h_V = complement_equation(UV) - h_U = complement_equation(VU) - h_V in P(U) && !(h_U in Q(V)) && return false - if P(UV) == Q(UV) - object_cache(P)[V] = Q(V) - object_cache(Q)[U] = P(U) - return true + if UV isa PrincipalOpenSubset + h_V = complement_equation(UV) + h_U = complement_equation(VU) + h_V in P(U) && return false # P and Q will have different support, then. + end + + if UV isa AffineSchemeOpenSubscheme && VU isa AffineSchemeOpenSubscheme + # We have to handle this special case differently as there + # is no type for ideals in the associated rings. + if all(P(UV[i]) == Q(UV[i]) for i in 1:ngens(UV)) + object_cache(P)[V] = Q(V) + object_cache(Q)[U] = P(U) + return true + end + elseif UV isa AbsAffineScheme && VU isa AbsAffineScheme + # This should be the default case + if P(UV) == Q(UV) + object_cache(P)[V] = Q(V) + object_cache(Q)[U] = P(U) + return true + end + else + error("case of this type is not handled") end end diff --git a/experimental/Schemes/src/LazyGluing.jl b/experimental/Schemes/src/LazyGluing.jl index 7002d3303ba1..e591fedbd555 100644 --- a/experimental/Schemes/src/LazyGluing.jl +++ b/experimental/Schemes/src/LazyGluing.jl @@ -36,13 +36,16 @@ patches(G::LazyGluing) = (G.X, G.Y) # The underlying_gluing triggers the computation of the gluing on request. function underlying_gluing(G::LazyGluing) - if !isdefined(G, :G) + if !isdefined(G, :G) + @vprintln :Gluing 5 "computing gluing domains" G.G = G.compute_function(G.GD) end return G.G end function is_computed(G::LazyGluing) + U, V = patches(G) + U === V && return true return isdefined(G, :G) end diff --git a/experimental/Schemes/src/MorphismFromRationalFunctions.jl b/experimental/Schemes/src/MorphismFromRationalFunctions.jl index 212ce90e635f..994b723d4318 100644 --- a/experimental/Schemes/src/MorphismFromRationalFunctions.jl +++ b/experimental/Schemes/src/MorphismFromRationalFunctions.jl @@ -678,6 +678,11 @@ function _try_pullback_cheap(phi::MorphismFromRationalFunctions, I::AbsIdealShea return nothing end +#= +# The following was thought to be easier. But it turns out not to be. +# with a complicated map it is in general cheaper to first spread out +# the ideal sheaf in the codomain and then have more choices as to which +# pair of charts to use for pullback. function _try_pullback_cheap(phi::MorphismFromRationalFunctions, I::PrimeIdealSheafFromChart) X = domain(phi) Y = codomain(phi) @@ -717,6 +722,7 @@ function _try_randomized_pullback(phi::MorphismFromRationalFunctions, I::PrimeId return nothing end +=# function _pullback(phi::MorphismFromRationalFunctions, I::PrimeIdealSheafFromChart) V0 = original_chart(I) @@ -865,7 +871,7 @@ function _find_good_representative_chart(I::PullbackIdealSheaf) error("no chart found") end -function _find_good_representative_chart(I::AbsIdealSheaf) +function _find_good_representative_chart(I::AbsIdealSheaf; covering::Covering=default_covering(scheme(I))) # We assume that I is prime # TODO: Make this an hassert? @assert is_prime(I) @@ -874,7 +880,7 @@ function _find_good_representative_chart(I::AbsIdealSheaf) # Some heuristics to choose a reasonably "easy" chart cand = AbsAffineScheme[] for U in keys(object_cache(I)) - any(x->x===U, affine_charts(X)) || continue + any(x->x===U, patches(covering)) || continue !is_one(I(U)) && push!(cand, U) end @@ -890,7 +896,7 @@ function _find_good_representative_chart(I::AbsIdealSheaf) return cand[i] end - for U in affine_charts(X) + for U in patches(covering) !is_one(I(U)) && return U end error("no chart found") @@ -909,7 +915,8 @@ function _prepare_pushforward_prime_divisor( sorted_charts = copy(codomain_charts) if has_decomposition_info(default_covering(Y)) info = decomposition_info(default_covering(Y)) - sorted_charts = filter!(V->dim(OO(V)) - dim(ideal(OO(V), elem_type(OO(V))[OO(V)(a) for a in info[V]])) <= 1, sorted_charts) + # Enabling the following line seems to lead to wrong results. Why? + #sorted_charts = filter!(V->dim(OO(V)) - dim(ideal(OO(V), elem_type(OO(V))[OO(V)(a) for a in info[V]])) <= 1, sorted_charts) end function compl(V::AbsAffineScheme) diff --git a/experimental/Schemes/src/WeilDivisor.jl b/experimental/Schemes/src/WeilDivisor.jl index 862b77063809..57de39176f24 100644 --- a/experimental/Schemes/src/WeilDivisor.jl +++ b/experimental/Schemes/src/WeilDivisor.jl @@ -704,25 +704,18 @@ of the subsystem of elements in ``|D|`` that vanish to order at least n at ``P`` The matrix ``A`` for its inclusion into ``L`` on the given set of generators. """ -function _subsystem(L::LinearSystem, P::AbsIdealSheaf, n) +function _subsystem(L::LinearSystem, P::AbsIdealSheaf, n; covering::Covering=simplified_covering(scheme(P))) # find one chart in which P is supported - # TODO: There might be preferred choices for charts with - # the least complexity. if coeff(weil_divisor(L),P) == -n return L, identity_matrix(ZZ, length(gens(L))) end X = variety(L) X === space(P) || error("input incompatible") - C = default_covering(X) - U = first(patches(C)) - for V in patches(C) - if !(one(OO(V)) in P(V)) - U = V - break - end - end - # Now U it is. + C = covering + U = _find_good_representative_chart(P; covering) + + # Now U it is. # Assemble the local representatives R = ambient_coordinate_ring(U) loc_rep = [g[U] for g in gens(L)] diff --git a/experimental/Schemes/src/elliptic_surface.jl b/experimental/Schemes/src/elliptic_surface.jl index 7a8533ecf6e0..a595c06c8fac 100644 --- a/experimental/Schemes/src/elliptic_surface.jl +++ b/experimental/Schemes/src/elliptic_surface.jl @@ -2000,10 +2000,12 @@ function _pushforward_lattice_along_isomorphism(step::MorphismFromRationalFuncti composit = morphism_from_rational_functions(X, BY, UX, UBY, [fracs[3]], check=false) lat_X = algebraic_lattice(X)[1] - if !is_prime(lat_X[1]) + if !has_attribute(lat_X[1], :is_prime) ex, pt, F = irreducible_fiber(X) ex || error("no irreducible fiber found; case not implemented") lat_X[1] = weil_divisor(F) + set_attribute!(lat_X[1], :is_prime=>true) + set_attribute!(first(components(lat_X[1])), :is_prime=>true) end # We first estimate for every element in the lattic of X whether its image @@ -2013,7 +2015,7 @@ function _pushforward_lattice_along_isomorphism(step::MorphismFromRationalFuncti for D in lat_X @assert length(components(D)) == 1 "divisors in the algebraic lattice must be prime" I = first(components(D)) - @assert is_prime(I) + @assert has_is_prime(I) && is_prime(I) "ideal sheaf must be known to be prime" pre_select[D] = _pushforward_prime_divisor(composit, I) end diff --git a/src/AlgebraicGeometry/Schemes/Covering/Objects/Attributes.jl b/src/AlgebraicGeometry/Schemes/Covering/Objects/Attributes.jl index 572e2b0eaa2b..34fe511ed2d5 100644 --- a/src/AlgebraicGeometry/Schemes/Covering/Objects/Attributes.jl +++ b/src/AlgebraicGeometry/Schemes/Covering/Objects/Attributes.jl @@ -36,7 +36,10 @@ cache, but does not try to compute new gluings. gluings(C::Covering) = C.gluings getindex(C::Covering, i::Int) = C.patches[i] getindex(C::Covering, i::Int, j::Int) = gluings(C)[(patches(C)[i], patches(C)[j])] -getindex(C::Covering, X::AbsAffineScheme, Y::AbsAffineScheme) = gluings(C)[(X, Y)] +function getindex(C::Covering, X::AbsAffineScheme, Y::AbsAffineScheme) + @vprintln :Gluing 1 "Requesting gluing ($(indexin(X,C)[1]),$(indexin(Y,C)[1]))" + return gluings(C)[(X, Y)] +end #edge_dict(C::Covering) = C.edge_dict function gluing_graph(C::Covering; all_dense::Bool=false) diff --git a/src/Rings/MPolyQuo.jl b/src/Rings/MPolyQuo.jl index 57ef19698392..99e481b90e69 100644 --- a/src/Rings/MPolyQuo.jl +++ b/src/Rings/MPolyQuo.jl @@ -642,6 +642,7 @@ function ideal(A::MPolyQuoRing{T}, V::Vector{T}) where T <: MPolyRingElem end return MPolyQuoIdeal(A, V) end + function ideal(A::MPolyQuoRing{T}, V::Vector{MPolyQuoRingElem{T}}) where T <: MPolyRingElem #@assert length(V) > 0 if length(V) == 0 @@ -653,6 +654,9 @@ function ideal(A::MPolyQuoRing{T}, V::Vector{MPolyQuoRingElem{T}}) where T <: MP return MPolyQuoIdeal(A, ideal(base_ring(A), map(p->p.f, V))) end +ideal(R::MPolyQuoRing, V::Vector) = ideal(R, R.(V)) + + function ideal(A::MPolyQuoRing{T}, x::T) where T <: MPolyRingElem return ideal(A,[x]) end diff --git a/src/Rings/mpoly-ideals.jl b/src/Rings/mpoly-ideals.jl index c88d3d089aa5..a8adc103ead9 100644 --- a/src/Rings/mpoly-ideals.jl +++ b/src/Rings/mpoly-ideals.jl @@ -2039,6 +2039,12 @@ function small_generating_set( # If we are unlucky, mstd can even produce a larger generating set # than the original one!!! return_value = filter(!iszero, (R).(gens(sing_min))) + + # The following is a common phenomenon which we can not fully explain yet. So far nothing but a + # restart really seems to help, unfortunately. + if is_zero(length(return_value)) + !is_zero(I) && error("singular crashed in the background; please restart your session!") + end if length(return_value) <= ngens(I) return return_value else diff --git a/src/Rings/mpoly-localizations.jl b/src/Rings/mpoly-localizations.jl index d1b14a346fb7..e54390441342 100644 --- a/src/Rings/mpoly-localizations.jl +++ b/src/Rings/mpoly-localizations.jl @@ -2241,6 +2241,24 @@ end # Homomorphisms of localized polynomial rings # ######################################################################## +### Mapping of elements +function (f::MPolyLocalizedRingHom)(a::AbsLocalizedRingElem) + parent(a) === domain(f) || return f(domain(f)(a)) + if total_degree(denominator(a)) > 10 + res = restricted_map(f) + img_num = res(numerator(a)) + den = denominator(a) + img_den = one(img_num) + fac_den = factor(den) + for (a, k) in fac_den + img_den = img_den * inv(res(a))^k + end + img_den = img_den * inv(res(unit(fac_den))) + return img_num * img_den + end + return codomain(f)(restricted_map(f)(numerator(a)))*inv(codomain(f)(restricted_map(f)(denominator(a)))) +end + ### additional constructors function MPolyLocalizedRingHom( R::MPolyRing, diff --git a/src/Rings/mpolyquo-localizations.jl b/src/Rings/mpolyquo-localizations.jl index a9dd3fdb4030..36f67d312370 100644 --- a/src/Rings/mpolyquo-localizations.jl +++ b/src/Rings/mpolyquo-localizations.jl @@ -719,13 +719,18 @@ function convert( abort = false # find some power which works while !abort - if length(terms(last(powers_of_d))) > 10000 + if length(terms(last(powers_of_d))) > 100 id, id_inv = _as_affine_algebra_with_many_variables(L) - aa = simplify(id(L(a))) - bb = simplify(id(L(b))) - success, cc = _divides_hack(aa, bb) - !success && error("element can not be converted to localization") - return id_inv(simplify(cc)) + cc = id(L(a)) # the result + fac_b = factor(b) + for (f, k) in fac_b + ff = id(L(f)) + for i in 1:k + success, cc = _divides_hack(cc, ff) + @assert success "element can not be converted to localization" + end + end + return id_inv(simplify(cc))*inv(unit(fac_b)) end (abort, coefficient) = _divides_hack(Q(a*last(powers_of_d)), Q(b)) if !abort @@ -770,7 +775,11 @@ function +(a::T, b::T) where {T<:MPolyQuoLocRingElem} if lifted_denominator(a) == lifted_denominator(b) return (parent(a))(lifted_numerator(a) + lifted_numerator(b), lifted_denominator(a), check=false) end - return (parent(a))(lifted_numerator(a)*lifted_denominator(b) + lifted_numerator(b)*lifted_denominator(a), lifted_denominator(a)*lifted_denominator(b), check=false) + gcd_ab = gcd([lifted_denominator(b), lifted_denominator(a)]) + p = divexact(lifted_denominator(a), gcd_ab) + q = divexact(lifted_denominator(b), gcd_ab) + new_den = p*lifted_denominator(b) + return (parent(a))(lifted_numerator(a)*q + lifted_numerator(b)*p, new_den, check=false) end # TODO: improve this method. @@ -780,16 +789,18 @@ function addeq!(a::T, b::T) where {T<:MPolyQuoLocRingElem} end function -(a::T, b::T) where {T<:MPolyQuoLocRingElem} - parent(a) == parent(b) || error("the arguments do not have the same parent ring") - if lifted_denominator(a) == lifted_denominator(b) - return (parent(a))(lifted_numerator(a) - lifted_numerator(b), lifted_denominator(a), check=false) - end - return (parent(a))(lifted_numerator(a)*lifted_denominator(b) - lifted_numerator(b)*lifted_denominator(a), lifted_denominator(a)*lifted_denominator(b), check=false) + return a + (-b) end function *(a::T, b::T) where {T<:MPolyQuoLocRingElem} parent(a) === parent(b) || error("the arguments do not have the same parent ring") - return (parent(a))(lifted_numerator(a)*lifted_numerator(b), lifted_denominator(a)*lifted_denominator(b), check=false) + p = gcd([lifted_numerator(a), lifted_denominator(b)]) + q = gcd([lifted_numerator(b), lifted_denominator(a)]) + aa = divexact(lifted_numerator(a), p) + bb = divexact(lifted_numerator(b), q) + da = divexact(lifted_denominator(a), q) + db = divexact(lifted_denominator(b), p) + return (parent(a))(aa*bb, da*db, check=false) end function *(a::RET, b::MPolyQuoLocRingElem{BRT, BRET, RT, RET, MST}) where {BRT<:Ring, BRET<:RingElem, RT<:Ring, RET <: RingElem, MST} @@ -884,7 +895,7 @@ end ### enhancement of the arithmetic function reduce_fraction(f::MPolyQuoLocRingElem{BRT, BRET, RT, RET, MST}) where {BRT, BRET, RT, RET, MST<:MPolyPowersOfElement} return f # Disable reduction here, because it slows down arithmetic. - return parent(f)(lift(simplify(numerator(f))), lifted_denominator(f), check=false) + # return parent(f)(lift(simplify(numerator(f))), lifted_denominator(f), check=false) end # for local orderings, reduction does not give the correct result. @@ -1118,6 +1129,18 @@ end function (f::MPolyQuoLocalizedRingHom)(a::AbsLocalizedRingElem) parent(a) === domain(f) || return f(domain(f)(a)) isone(lifted_denominator(a)) && return codomain(f)(restricted_map(f)(lifted_numerator(a))) + if total_degree(lifted_denominator(a)) > 10 + res = restricted_map(f) + img_num = res(lifted_numerator(a)) + den = lifted_denominator(a) + img_den = one(img_num) + fac_den = factor(den) + for (a, k) in fac_den + img_den = img_den * inv(res(a))^k + end + img_den = img_den * inv(res(unit(fac_den))) + return img_num * img_den + end b = a #simplify(a) return codomain(f)(restricted_map(f)(lifted_numerator(b)))*inv(codomain(f)(restricted_map(f)(lifted_denominator(b)))) end diff --git a/test/AlgebraicGeometry/Schemes/IdealSheaves.jl b/test/AlgebraicGeometry/Schemes/IdealSheaves.jl index 067cd36d4662..808073767449 100644 --- a/test/AlgebraicGeometry/Schemes/IdealSheaves.jl +++ b/test/AlgebraicGeometry/Schemes/IdealSheaves.jl @@ -163,9 +163,6 @@ end J = J*ideal(S, [-9*x + 3*y - 5*z + w, x+8*y+15*z+w]) #J = ideal(S, [x^2 - 3*y^2 + 4*y*z - 5*w^2 + 3*x*w, 25*x^2*y + y^2*z + z^2*w + w^2*x]) JJ = Oscar.maximal_associated_points(ideal_sheaf(X, J)) - JJ2 = Oscar._maximal_associated_points(ideal_sheaf(X, J)) - @test all(x->(x in JJ2), JJ) - @test all(x->(x in JJ), JJ2) X = covered_scheme(X) C = Oscar._separate_disjoint_components(JJ, covering=Oscar.simplified_covering(X)) @@ -220,3 +217,34 @@ end @test isempty(B) end +@testset "maximal associated points" begin + IA3 = affine_space(QQ, [:x, :y, :z]) + R = OO(IA3) + (x, y, z) = gens(R) + + I = ideal(R, z*(z-1)) + X, inc_X = sub(IA3, I) + + A = OO(X) + J = ideal(A, [x, y])*ideal(A, [y-1, z-1]) + + JJ = IdealSheaf(X, J) + + @test dim(JJ) == 1 + comp = Oscar.maximal_associated_points(JJ) + @test length(comp) == 3 + @test 1 in dim.(comp) + @test 0 in dim.(comp) + + Z = ideal(R, [x, y, z]) + + bl = blow_up(IA3, Z) + + str_JJ = strict_transform(bl, IdealSheaf(IA3, pushforward(inc_X, J), covered_scheme=codomain(bl))) + + comp2 = Oscar.maximal_associated_points(str_JJ) + @assert length(comp2) == 2 + @test 1 in dim.(comp2) + @test 0 in dim.(comp2) +end + From 6f0049a50d8e1958a2a7c4b2e35ed7667ddd1461 Mon Sep 17 00:00:00 2001 From: Claus Fieker Date: Tue, 18 Jun 2024 09:47:11 +0200 Subject: [PATCH 05/12] fixes (hopefully) #3841 (#3866) No test as this is the result of (bad) random choices internally, based on flawed mathematics (cherry picked from commit bd3e646ffbf74f671a37673ad34cc67b7f89e9d8) --- experimental/GModule/src/GaloisCohomology.jl | 22 +++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/experimental/GModule/src/GaloisCohomology.jl b/experimental/GModule/src/GaloisCohomology.jl index 6cbe30173571..e555153b13ee 100644 --- a/experimental/GModule/src/GaloisCohomology.jl +++ b/experimental/GModule/src/GaloisCohomology.jl @@ -196,6 +196,7 @@ function is_coboundary(c::CoChain{2,PermGroupElem,MultGrpElem{AbsSimpleNumFieldO M = abelian_group([0 for x = o]) h = MapFromFunc(c.C.M, M, x->M([valuation(x.data, y) for y = o])) D = gmodule(G, [hom(M, M, [h(action(c.C, g, c.C.M(i//1))) for i = o]) for g = gens(c.C.G)]) +# @assert all(is_bijective, D.ac) cc = map_entries(h, c, parent = D) h2, mh2, icb = Oscar.GrpCoh.H_two(D) @@ -204,7 +205,6 @@ function is_coboundary(c::CoChain{2,PermGroupElem,MultGrpElem{AbsSimpleNumFieldO if i == 2 return false, nothing else - @show :trying_harder continue end end @@ -234,7 +234,7 @@ function is_coboundary(c::CoChain{2,PermGroupElem,MultGrpElem{AbsSimpleNumFieldO return true, res end -function Oscar.map_entries(MI:: Oscar.GrpCoh.MultGrp{AbsSimpleNumFieldOrderFractionalIdeal}, c::Oscar.GrpCoh.CoChain{2, <:GAPGroupElem, Oscar.GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}) +function Oscar.map_entries(MI::Oscar.GrpCoh.MultGrp{AbsSimpleNumFieldOrderFractionalIdeal}, c::Oscar.GrpCoh.CoChain{2, <:GAPGroupElem, Oscar.GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}) k = c.C.M.data zk = maximal_order(k) D = gmodule(c.C.G, [MapFromFunc(MI, MI, x->MI(hom(k, k, action(c.C, g, c.C.M(gen(k))).data)(x.data))) for g = gens(c.C.G)]) @@ -428,7 +428,7 @@ function Oscar.gmodule(K::Hecke.LocalField, k::Union{Hecke.LocalField, PadicFiel #if K/k is unramified, then the units are cohomological trivial, # so Z (with trivial action) is correct for the gmodule - #if K/k is tame, then the 1-units are cohomologycal trivial, hence + #if K/k is tame, then the 1-units are cohomological trivial, hence # Z time k^* is enough... e = divexact(absolute_ramification_index(K), absolute_ramification_index(k)) @@ -513,7 +513,18 @@ function Oscar.gmodule(K::Hecke.LocalField, k::Union{Hecke.LocalField, PadicFiel @vprint :GaloisCohomology 2 " .. quotient ..\n" - Q, mQ = quo(U, [preimage(mU, 1+prime(k)^4*x) for x = o]) + if prime(k) == 2 + #we need val(p^k) > 1/(p-1) + #val(p) = 1 and the only critical one is p=2, where k>1 is + #neccessary + ex = 2 + else + ex = 1 + end + #x -> 1+pi*x is in general, not injective, not even for a basis + # if valuation(dm) == 0, then by Lorenz Alg II, 26.F10 it should + # be, but we're not using it. This was used to avoid exp + Q, mQ = quo(U, [preimage(mU, exp(prime(k)^ex*x)) for x = o]) S, mS = snf(Q) Q = S mQ = mQ*inv(mS) @@ -525,7 +536,7 @@ function Oscar.gmodule(K::Hecke.LocalField, k::Union{Hecke.LocalField, PadicFiel end @vprint :GaloisCohomology 2 " .. the module ..\n" - hh = [hom(Q, Q, [mQ(preimage(mU, mG(i)(mU(preimage(mQ, g))))) for g = gens(Q)]) for i=gens(G)] + hh = [hom(Q, Q, [mQ(preimage(mU, mG(i)(mU(preimage(mQ, g))))) for g = gens(Q)]; check = false) for i=gens(G)] Hecke.assure_has_hnf(Q) return gmodule(G, hh), mG, pseudo_inv(mQ)*mU end @@ -1287,6 +1298,7 @@ function induce_hom(ml::Hecke.CompletionMap, mL::Hecke.CompletionMap, mkK::NumFi end function local_index(CC::Vector{GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}}, P::AbsSimpleNumFieldOrderIdeal, mG::Map = automorphism_group(PermGroup, Hecke.nf(order(P)))[2]; B::Any = nothing, index_only::Bool = false) + k = Hecke.nf(order(P)) if B !== nothing && haskey(B.lp, P) From b4a0d92d61c961e2f4dc744558486f8a0c7442be Mon Sep 17 00:00:00 2001 From: Martin Bies Date: Tue, 18 Jun 2024 21:11:18 +0200 Subject: [PATCH 06/12] [FTheoryTools] Remove outdated comment (cherry picked from commit fd1f6dea3890370acc76336941dd7933ac104c42) --- .../FTheoryTools/src/AbstractFTheoryModels/attributes.jl | 3 --- 1 file changed, 3 deletions(-) diff --git a/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl b/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl index 7e67c26352cb..851c659282ac 100644 --- a/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl +++ b/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl @@ -990,9 +990,6 @@ function weighted_resolution_zero_sections(m::AbstractFTheoryModel) end -# This example cannot be used until we support literature hypersurface models -# At that point, we should simply be able to uncomment this block - @doc raw""" zero_section(m::AbstractFTheoryModel) From 05555180d56eb6f3d0fde763617d80d5b64151cf Mon Sep 17 00:00:00 2001 From: Martin Bies Date: Wed, 19 Jun 2024 09:21:30 +0200 Subject: [PATCH 07/12] [FTheoryTools] Overhall the F-theory QSMs (cherry picked from commit 902c49704a836ef08a87c7600ff404dd77fcf91a) --- docs/oscar_references.bib | 57 ++ .../FTheoryTools/docs/src/literature.md | 77 +++ .../src/AbstractFTheoryModels/attributes.jl | 567 ++++++++++++++++++ .../src/LiteratureModels/constructors.jl | 205 ++----- experimental/FTheoryTools/src/exports.jl | 24 +- experimental/FTheoryTools/src/types.jl | 94 +++ 6 files changed, 854 insertions(+), 170 deletions(-) diff --git a/docs/oscar_references.bib b/docs/oscar_references.bib index 5eb4ae50eeae..95d47717c57b 100644 --- a/docs/oscar_references.bib +++ b/docs/oscar_references.bib @@ -89,6 +89,21 @@ @Article{BBS02 doi = {10.1007/s00454-001-0051-x} } +@Article{BCL21, + author = {Bies, Martin and Cveti\v{c}, Mirjam and Liu, Muyang}, + title = {Statistics of limit root bundles relevant for exact matter spectra of F-theory MSSMs}, + journal = {Phys. Rev. D}, + volume = {104}, + publisher = {American Physical Society}, + pages = {L061903}, + year = {2021}, + month = {Sep}, + doi = {10.1103/PhysRevD.104.L061903}, + url = {https://link.aps.org/doi/10.1103/PhysRevD.104.L061903}, + issue = {6}, + numpages = {8} +} + @Article{BDEPS04, author = {Berry, Neil and Dubickas, Artūras and Elkies, Noam D. and Poonen, Bjorn and Smyth, Chris}, title = {The conjugate dimension of algebraic numbers}, @@ -346,6 +361,19 @@ @PhDThesis{Bie18 school = {Heidelberg U.} } +@Article{Bie24, + author = {Bies, Martin}, + title = {{Root bundles: Applications to F-theory Standard Models}}, + journal = {Proc. Symp. Pure Math.}, + volume = {107}, + pages = {17--44}, + year = {2024}, + doi = {10.1090/pspum/107}, + eprint = {2303.08144}, + archiveprefix = {arXiv}, + primaryclass = {hep-th} +} + @Article{Bis96, author = {Bisztriczky, T.}, title = {On a class of generalized simplices}, @@ -388,6 +416,21 @@ @Book{CCNPW85 year = {1985} } +@Article{CHLLT19, + author = {Cveti\v{c}, Mirjam and Halverson, James and Lin, Ling and Liu, Muyang and Tian, Jiahua}, + title = {{Quadrillion $F$-Theory Compactifications with the Exact Chiral Spectrum of the Standard Model}}, + journal = {Phys. Rev. Lett.}, + volume = {123}, + number = {10}, + pages = {101601}, + year = {2019}, + doi = {10.1103/PhysRevLett.123.101601}, + eprint = {1903.00009}, + archiveprefix = {arXiv}, + primaryclass = {hep-th}, + reportnumber = {UPR-1297-T} +} + @Article{CHM98, author = {Conway, John H. and Hulpke, Alexander and McKay, John}, title = {On transitive permutation groups}, @@ -1109,6 +1152,20 @@ @Misc{HRR23 url = {https://gap-packages.github.io/primgrp/} } +@Article{HT17, + author = {Halverson, James and Tian, Jiahua}, + title = {{Cost of seven-brane gauge symmetry in a quadrillion F-theory compactifications}}, + journal = {Phys. Rev. D}, + volume = {95}, + number = {2}, + pages = {026005}, + year = {2017}, + doi = {10.1103/PhysRevD.95.026005}, + eprint = {1610.08864}, + archiveprefix = {arXiv}, + primaryclass = {hep-th} +} + @Book{Har77, author = {Hartshorne, Robin}, title = {Algebraic Geometry}, diff --git a/experimental/FTheoryTools/docs/src/literature.md b/experimental/FTheoryTools/docs/src/literature.md index 943f275ff7ef..a5accf23b216 100644 --- a/experimental/FTheoryTools/docs/src/literature.md +++ b/experimental/FTheoryTools/docs/src/literature.md @@ -120,3 +120,80 @@ Provided that a resolution for a model is known, we can (attempt to) resolve the ```@docs resolve(m::AbstractFTheoryModel, index::Int) ``` + + +## The Quadrillion F-Theory Standard Models + +A yet more special instance of literature models are the Quadrillion F-theory Standard Models +(F-theory QSMs) [CHLLT19](@cite). Those hypersurface models come in 708 different families. + +The base geometry of an F-theory QSM is obtained from triangulating one of 708 reflexive 3-dimensional +polytopes. The models, whose bases are obtained from triangulations of the same polytope form a family. +The following information on the polytope in question and its triangulations is available within our database: +```@docs +vertices(m::AbstractFTheoryModel) +polytope_index(m::AbstractFTheoryModel) +has_quick_triangulation(m::AbstractFTheoryModel) +max_lattice_pts_in_facet(m::AbstractFTheoryModel) +estimated_number_of_triangulations(m::AbstractFTheoryModel) +``` + +Beyond the polytope and its triangulations, a number of other integers are of key importance. The following +are supported in our database. +```@docs +kbar3(m::AbstractFTheoryModel) +hodge_h11(m::AbstractFTheoryModel) +hodge_h12(m::AbstractFTheoryModel) +hodge_h13(m::AbstractFTheoryModel) +hodge_h22(m::AbstractFTheoryModel) +``` + +More recently, a research program estimated the exact massless spectra of the F-theory QSMs +(cf. [Bie24](@cite)). These studies require yet more information about the F-theory QSM geometries, +which are supported by our database. + +First, recall that (currently), the base of an F-theory QSM is a 3-dimensional toric variety B3. +Let s in H^0(B3, Kbar_B3), then V(s) is a K3-surface. Moreover, let xi be the coordinates +of the Cox ring of B3. Then V(xi) is a divisor in B3. Consequently, Ci = V(xi) cap V(s) +is a divisor in the K3-surface V(s). For the root bundle counting program, these curves Ci are +of ample importance (cf. [Bie24](@cite)). We support the following information on these curves: +```@docs +genera_of_ci_curves(m::AbstractFTheoryModel) +degrees_of_kbar_restrictions_to_ci_curves(m::AbstractFTheoryModel) +topological_intersection_numbers_among_ci_curves(m::AbstractFTheoryModel) +indices_of_trivial_ci_curves(m::AbstractFTheoryModel) +topological_intersection_numbers_among_nontrivial_ci_curves(m::AbstractFTheoryModel) +``` + +The collection of the Ci-curves form a nodal curve. To every nodal curve one can associate a +(dual) graph. In this graph, every irreducible component of the nodal curve becomes a node/vertex +of the dual graph, and every nodal singularity of the nodal curve turns into an edge of the dual +graph. In the case at hand, this is rather simple. + +The Ci-curves turn into the irreducible components of the nodel curve. Certainly, we only need +to focus on the non-trivial Ci-curves. A non-trivial Ci-curve can split into multiple irreducible +components. This is taken into acccount when the nodes/vertices of the dual graph are constructed. + +The topological intersection numbers among the Ci-curves (or rather, their irreducible components) +tells us how many nodal singularities link the Ci-curves (or rather, their irreducible components) +in question. Hence, if the topological intersection numbers is zero, there is no edge between the +corresponding nodes. Otherwise, if the topological intersection number is positive - say n -, then +there are exactly n edges between the nodes in question. + +The following functions access/create the so-obtained dual graph: +```@docs +dual_graph(m::AbstractFTheoryModel) +components_of_dual_graph(m::AbstractFTheoryModel) +degrees_of_kbar_restrictions_to_components_of_dual_graph(m::AbstractFTheoryModel) +genera_of_components_of_dual_graph(m::AbstractFTheoryModel) +``` + +The dual graph is essential in counting root bundles (cf. [BCL21](@cite)). It turns out, that one +can simplify this graph so that the computations at hand can be conducted on a simpler graph +instead. The following functionality exists to access this simplified dual graph. +```@docs +simplified_dual_graph(m::AbstractFTheoryModel) +components_of_simplified_dual_graph(m::AbstractFTheoryModel) +degrees_of_kbar_restrictions_to_components_of_simplified_dual_graph(m::AbstractFTheoryModel) +genera_of_components_of_simplified_dual_graph(m::AbstractFTheoryModel) +``` diff --git a/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl b/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl index 851c659282ac..94d9e742eec6 100644 --- a/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl +++ b/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl @@ -1070,3 +1070,570 @@ function global_gauge_quotients(m::AbstractFTheoryModel) @req has_global_gauge_quotients(m) "No gauge quotients stored for this model" return get_attribute(m, :global_gauge_quotients) end + + + +########################################## +### (4) Attributes specially for the QSMs +########################################## + +### (4.1) Attributes regarding the polytope in the Kreuzer-Skarke database + +@doc raw""" + vertices(m::AbstractFTheoryModel) + +This method returns the vertices of the polytope the the base of the F-theory QSM is +build from. Note that those vertices are normalized according to the Polymake standard +to rational numbers. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> vertices(qsm_model) +4-element Vector{Vector{QQFieldElem}}: + [-1, -1, -1] + [1, -1//2, -1//2] + [-1, 2, -1] + [-1, -1, 5] +``` +""" +function vertices(m::AbstractFTheoryModel) + @req has_attribute(m, :vertices) "No vertices known for this model" + return get_attribute(m, :vertices) +end + + +@doc raw""" + polytope_index(m::AbstractFTheoryModel) + +Of the 3-dimensional reflexive polytope that the base of this F-theory model is build from, +this method returns the index within the Kreuzer-Skarke list. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> polytope_index(qsm_model) +4 +``` +""" +function polytope_index(m::AbstractFTheoryModel) + @req has_attribute(m, :poly_index) "No polytope index known for this model" + return get_attribute(m, :poly_index) +end + + +@doc raw""" + has_quick_triangulation(m::AbstractFTheoryModel) + +For a 3-dimensional reflexive polytope in the Kreuzer-Skarke list, the list of +full (sometimes also called fine), regular, star triangulations can be extremely +large. Consequently, one may wonder if the triangulations can be enumerated in a +somewhat reasonable time (say 5 minutes on a personal computer). This method tries +to provide an answer to this. It returns `true` if one should expect a timly response +to the atttempt to enumerate all (full, regular, star) triangulations. Otherwise, this +method returns `false`. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> has_quick_triangulation(qsm_model) +true +``` +""" +function has_quick_triangulation(m::AbstractFTheoryModel) + @req has_attribute(m, :triang_quick) "It is not known if the base of this model can be triangulated quickly" + return get_attribute(m, :triang_quick)::Bool +end + + +@doc raw""" + max_lattice_pts_in_facet(m::AbstractFTheoryModel) + +In order to enumerate the number of full, regular, star triangulations of a +3-dimensional reflexive polytope, it is possible to first find the corresponding +triangulations of all facets of the polytope [HT17](@cite). A first indication for +the complexity of this triangulation task is the maximum number of lattice points +in a facet of the polytope in question. This method returns this maximal number of +lattice points. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> max_lattice_pts_in_facet(qsm_model) +16 +``` +""" +function max_lattice_pts_in_facet(m::AbstractFTheoryModel) + @req has_attribute(m, :max_lattice_pts_in_facet) "Maximal number of lattice points of facets not known for this model" + return get_attribute(m, :max_lattice_pts_in_facet) +end + + +@doc raw""" + estimated_number_of_triangulations(m::AbstractFTheoryModel) + +This method returns an estimate for the number of full, regular, star triangulations +of the 3-dimensional reflexive polytope, those triangulations define the possible base +spaces of the F-theory QSM in question. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> estimated_number_of_triangulations(qsm_model) +212533333333 +``` +""" +function estimated_number_of_triangulations(m::AbstractFTheoryModel) + @req has_attribute(m, :estimated_number_of_triangulations) "Estimated number of (full, regular, star) triangulation not known for this model" + return get_attribute(m, :estimated_number_of_triangulations) +end + + +### (4.2) Attributes regarding the polytope in the Kreuzer-Skarke database + + +@doc raw""" + kbar3(m::AbstractFTheoryModel) + +Let Kbar denote the anticanonical class of the 3-dimensional base space of the F-theory QSM. +Of ample importance is the triple intersection number of Kbar, i.e. Kbar * Kbar * Kbar. +This method returns this intersection number. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> kbar3(qsm_model) +6 +``` +""" +function kbar3(m::AbstractFTheoryModel) + @req has_attribute(m, :Kbar3) "Kbar3 not known for this model" + return get_attribute(m, :Kbar3) +end + + +@doc raw""" + hodge_h11(m::AbstractFTheoryModel) + +This methods return the Hodge number h11 of the elliptically +fibered 4-fold that defined the F-theory QSM in question. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> hodge_h11(qsm_model) +31 +``` +""" +function hodge_h11(m::AbstractFTheoryModel) + @req has_attribute(m, :h11) "Hodge number h11 of ambient space not known for this model" + return get_attribute(m, :h11) +end + + +@doc raw""" + hodge_h12(m::AbstractFTheoryModel) + +This methods return the Hodge number h12 of the elliptically +fibered 4-fold that defined the F-theory QSM in question. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> hodge_h12(qsm_model) +10 +``` +""" +function hodge_h12(m::AbstractFTheoryModel) + @req has_attribute(m, :h12) "Hodge number h12 of ambient space not known for this model" + return get_attribute(m, :h12) +end + + +@doc raw""" + hodge_h13(m::AbstractFTheoryModel) + +This methods return the Hodge number h13 of the elliptically +fibered 4-fold that defined the F-theory QSM in question. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> hodge_h13(qsm_model) +34 +``` +""" +function hodge_h13(m::AbstractFTheoryModel) + @req has_attribute(m, :h13) "Hodge number h13 of ambient space not known for this model" + return get_attribute(m, :h13) +end + + +@doc raw""" + hodge_h22(m::AbstractFTheoryModel) + +This methods return the Hodge number h22 of the elliptically +fibered 4-fold that defined the F-theory QSM in question. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> hodge_h22(qsm_model) +284 +``` +""" +function hodge_h22(m::AbstractFTheoryModel) + @req has_attribute(m, :h22) "Hodge number h22 of ambient space not known for this model" + return get_attribute(m, :h22) +end + + +### (4.3) Attributes regarding the Ci-curves + + +@doc raw""" + genera_of_ci_curves(m::AbstractFTheoryModel) + +This methods return the genera of the Ci curves. +Recall that Ci = V(xi, s), where xi is a homogeneous +coordinate of the 3-dimensional toric base space B3 of the +QSM hypersurface model in question, and s is a generic +section of the anticanonical bundle of B3. Consequently, +we may use the coordinates xi as labels for the curves Ci. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> my_key = collect(keys(genera_of_ci_curves(qsm_model)))[1] +x7 + +julia> genera_of_ci_curves(qsm_model)[my_key] +0 +``` +""" +function genera_of_ci_curves(m::AbstractFTheoryModel) + @req has_attribute(m, :genus_ci) "Genera of Ci curves not known for this model" + return get_attribute(m, :genus_ci) +end + + +@doc raw""" + degrees_of_kbar_restrictions_to_ci_curves(m::AbstractFTheoryModel) + +The anticanonical divisor of the 3-dimensional toric base space B3 of the +QSM hypersurface model in question can be restricted to the Ci curves. The +result of this operation is a line bundle. This method returns the degree of +this line bundle for every Ci curve. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> my_key = collect(keys(degrees_of_kbar_restrictions_to_ci_curves(qsm_model)))[1] +x7 + +julia> degrees_of_kbar_restrictions_to_ci_curves(qsm_model)[my_key] +0 +``` +""" +function degrees_of_kbar_restrictions_to_ci_curves(m::AbstractFTheoryModel) + @req has_attribute(m, :degree_of_Kbar_of_tv_restricted_to_ci) "Degree of Kbar restriction to Ci curves not known for this model" + return get_attribute(m, :degree_of_Kbar_of_tv_restricted_to_ci) +end + + +@doc raw""" + topological_intersection_numbers_among_ci_curves(m::AbstractFTheoryModel) + +The topological intersection numbers among Ci curves are also of ample importance. +This method returns those intersection numbers in the form of a matrix. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> n_rows(topological_intersection_numbers_among_ci_curves(qsm_model)) +29 + +julia> n_columns(topological_intersection_numbers_among_ci_curves(qsm_model)) +29 +``` +""" +function topological_intersection_numbers_among_ci_curves(m::AbstractFTheoryModel) + @req has_attribute(m, :intersection_number_among_ci_cj) "Topological intersection numbers among Ci curves not known for this model" + return get_attribute(m, :intersection_number_among_ci_cj) +end + + +@doc raw""" + indices_of_trivial_ci_curves(m::AbstractFTheoryModel) + +Some of the Ci curves are trivial, in that V(xi, s) is the empty set. +This method returns the vector of all indices of trivial Ci curves. +That is, should V(x23, s) be the empty set, then 23 will be included in +the returned list. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> indices_of_trivial_ci_curves(qsm_model) +10-element Vector{Int64}: + 23 + 22 + 18 + 19 + 20 + 26 + 10 + 11 + 12 + 15 +``` +""" +function indices_of_trivial_ci_curves(m::AbstractFTheoryModel) + @req has_attribute(m, :index_facet_interior_divisors) "Degree of Kbar restriction to Ci curves not known for this model" + return get_attribute(m, :index_facet_interior_divisors) +end + + +@doc raw""" + topological_intersection_numbers_among_nontrivial_ci_curves(m::AbstractFTheoryModel) + +The topological intersection numbers among the non-trivial Ci curves are used +frequently. This method returns those intersection numbers in the form of a matrix. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> n_rows(topological_intersection_numbers_among_nontrivial_ci_curves(qsm_model)) +19 + +julia> n_columns(topological_intersection_numbers_among_nontrivial_ci_curves(qsm_model)) +19 +``` +""" +function topological_intersection_numbers_among_nontrivial_ci_curves(m::AbstractFTheoryModel) + @req has_attribute(m, :intersection_number_among_nontrivial_ci_cj) "Topological intersection numbers among non-trivial Ci curves not known for this model" + return get_attribute(m, :intersection_number_among_nontrivial_ci_cj) +end + + +### (4.4) Attributes regarding the dual graph + + +@doc raw""" + dual_graph(m::AbstractFTheoryModel) + +This method returns the dual graph of the QSM model in question. +Note that no labels are (currently) attached to the vertices/nodes or edges. +To understand/read this graph correctly, please use the methods listed below. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> dual_graph(qsm_model) +Undirected graph with 21 nodes and the following edges: +(5, 1)(6, 5)(7, 6)(8, 7)(9, 4)(9, 8)(10, 1)(11, 4)(12, 3)(12, 10)(13, 3)(13, 11)(14, 1)(15, 4)(16, 3)(17, 3)(18, 2)(18, 14)(19, 2)(19, 15)(20, 2)(20, 16)(21, 2)(21, 17) +``` +""" +function dual_graph(m::AbstractFTheoryModel) + @req has_attribute(m, :dual_graph) "Dual graph not known for this model" + return get_attribute(m, :dual_graph) +end + + +@doc raw""" + components_of_dual_graph(m::AbstractFTheoryModel) + +This method returns a vector with labels for each node/vertex of the dual graph of the QSM +model in question. Those labels allow to understand the geometric origin of the node/vertex. + +Specifically, recall that those nodes are associated to the Ci-curves, which are in turn +given by Ci = V(xi, s). xi is a homogenous coordinate of the 3-dimensional toric base space +B3 of the QSM in question, and s is a generic section of the anticanonical bundle of B3. + +Only non-trivial Ci = V(xi, s) correspond to vertices/nodes of the dual graph. + +If Ci = V(xi, s) is irreducible and corresponds to the k-th component, then the label "Ci" +appears at position k of the vector returned by this method. However, if Ci = V(xi, s) is +reducible, then we introduce the labels Ci-0, Ci-1, Ci-2 etc. for those irreducible +components of Ci. If Ci-0 corresponds to the k-th components of the dual graph, +then the label "Ci-0" appears at position k of the vector returned by this method. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> components_of_dual_graph(qsm_model) +21-element Vector{String}: + "C0" + "C1" + "C2" + "C3" + "C4" + "C5" + "C6" + "C7" + "C8" + "C9" + ⋮ + "C16" + "C17" + "C21" + "C24-0" + "C24-1" + "C25" + "C27" + "C28-0" + "C28-1" +``` +""" +function components_of_dual_graph(m::AbstractFTheoryModel) + @req has_attribute(m, :components_of_dual_graph) "Components of dual graph not known for this model" + return get_attribute(m, :components_of_dual_graph) +end + + +@doc raw""" + degrees_of_kbar_restrictions_to_components_of_dual_graph(m::AbstractFTheoryModel) + +The anticanonical bundle of the toric 3-dimensional base space of the F-theory QSM in +question can be restricted to the (geometric counterparts of the) nodes/vertices of +the dual graph. The result is a line bundle for each node/vertex. This method returns +a vector with the degrees of these line bundles. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> degrees_of_kbar_restrictions_to_components_of_dual_graph(qsm_model)["C28-1"] +0 +``` +""" +function degrees_of_kbar_restrictions_to_components_of_dual_graph(m::AbstractFTheoryModel) + @req has_attribute(m, :degree_of_Kbar_of_tv_restricted_to_components_of_dual_graph) "Degree of Kbar restricted to components of dual graph not known for this model" + return get_attribute(m, :degree_of_Kbar_of_tv_restricted_to_components_of_dual_graph) +end + + +@doc raw""" + genera_of_components_of_dual_graph(m::AbstractFTheoryModel) + +This methods returns a vector with the genera of the (geometric +counterparts of the) nodes/vertices of the dual graph. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> genera_of_components_of_dual_graph(qsm_model)["C28-1"] +0 +``` +""" +function genera_of_components_of_dual_graph(m::AbstractFTheoryModel) + @req has_attribute(m, :genus_of_components_of_dual_graph) "Genera of components of dual graph not known for this model" + return get_attribute(m, :genus_of_components_of_dual_graph) +end + + +### (4.5) Attributes regarding the simplified dual graph + + +@doc raw""" + simplified dual_graph(m::AbstractFTheoryModel) + +This method returns the simplified dual graph of the QSM model in question. +Note that no labels are (currently) attached to the vertices/nodes or edges. +To understand/read this graph correctly, please use the methods listed below. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> simplified_dual_graph(qsm_model) +Undirected graph with 4 nodes and the following edges: +(2, 1)(3, 1)(3, 2)(4, 1)(4, 2)(4, 3) +``` +""" +function simplified_dual_graph(m::AbstractFTheoryModel) + @req has_attribute(m, :simplified_dual_graph) "Simplified dual graph not known for this model" + return get_attribute(m, :simplified_dual_graph) +end + + +@doc raw""" + components_of_simplified_dual_graph(m::AbstractFTheoryModel) + +This method returns a vector with labels for each node/vertex of the simplified dual graph. +Otherwise, works identical to `components_of_dual_graph(m::AbstractFTheoryModel)`. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> components_of_simplified_dual_graph(qsm_model) +4-element Vector{String}: + "C0" + "C1" + "C2" + "C3" +``` +""" +function components_of_simplified_dual_graph(m::AbstractFTheoryModel) + @req has_attribute(m, :components_of_simplified_dual_graph) "Components of simplified dual graph not known for this model" + return get_attribute(m, :components_of_simplified_dual_graph) +end + + +@doc raw""" + degrees_of_kbar_restrictions_to_components_of_simplified_dual_graph(m::AbstractFTheoryModel) + +Same as `degrees_of_kbar_restrictions_to_components_of_dual_graph(m::AbstractFTheoryModel)`, +but for the simplified dual graph. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> degrees_of_kbar_restrictions_to_components_of_simplified_dual_graph(qsm_model)["C2"] +2 +``` +""" +function degrees_of_kbar_restrictions_to_components_of_simplified_dual_graph(m::AbstractFTheoryModel) + @req has_attribute(m, :degree_of_Kbar_of_tv_restricted_to_components_of_simplified_dual_graph) "Degree of Kbar restricted to components of simplified dual graph not known for this model" + return get_attribute(m, :degree_of_Kbar_of_tv_restricted_to_components_of_simplified_dual_graph) +end + + +@doc raw""" + genera_of_components_of_simplified_dual_graph(m::AbstractFTheoryModel) + +This methods returns a vector with the genera of the (geometric +counterparts of the) nodes/vertices of the dual graph. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> genera_of_components_of_simplified_dual_graph(qsm_model)["C2"] +0 +``` +""" +function genera_of_components_of_simplified_dual_graph(m::AbstractFTheoryModel) + @req has_attribute(m, :genus_of_components_of_simplified_dual_graph) "Genera of components of simplified dual graph not known for this model" + return get_attribute(m, :genus_of_components_of_simplified_dual_graph) +end diff --git a/experimental/FTheoryTools/src/LiteratureModels/constructors.jl b/experimental/FTheoryTools/src/LiteratureModels/constructors.jl index 91c8b80eab70..7c01443900ac 100644 --- a/experimental/FTheoryTools/src/LiteratureModels/constructors.jl +++ b/experimental/FTheoryTools/src/LiteratureModels/constructors.jl @@ -1,97 +1,3 @@ -####################################################### -# Struct for Quadrillion F-theory Standard Model (QSM) model, i.e. QSM-Model or for short QSMModel. - -struct QSMModel - # Information about the polytope underlying the F-theory QSM. - vertices::Vector{Vector{QQFieldElem}} - poly_index::Int - - # We build toric 3-fold from triangulating the lattice points in said polytope. - # Oftentimes, there are a lot of such triangulations (up to 10^15 for the case at hand), which we cannot - # hope to enumerate in a reasonable time in a computer. The following gives us metadata, to gauge how hard - # this triangulation task is. First, the boolean triang_quick tells if we can hope to enumerate all - # triangulations in a reasonable time. This in turn is linked to the question if we can find - # fine regular triangulations of all facets, the difficulty of which scales primarily with the number of - # lattice points. Hence, we also provide the maximal number of lattice points in a facet of the polytope in question - # in the integer max_lattice_pts_in_facet. On top of this, an estimate for the total number of triangulations - # is provided by the big integer estimated_number_oftriangulations. This estimate is exact if triang_quick = true. - triang_quick::Bool - max_lattice_pts_in_facet::Int - estimated_number_of_triangulations::Int - - # We select one of the many triangulations, construct a 3d toric base B3 and thereby the hypersurface model in question, - # that is then the key object of study of this F-theory construction. - hs_model::HypersurfaceModel - - # As per usual, topological data of this geometry is important. Key is the triple intersection number of the - # anticanonical divisor of the 3-dimensional toric base, as well as its Hodge numbers. - Kbar3::Int - h11::Int - h12::Int - h13::Int - h22::Int - - # Recall that B3 is 3-dimensional toric variety. Let s in H^0(B3, Kbar_B3), then V(s) is a K3-surface. - # Moreover, let xi the coordinates of the Cox ring of B3. Then V(xi) is a divisor in B3. - # Furthermore, Ci = V(xi) cap V(s) is a divisor in the K3-surface V(s). We study these curves Ci in large detail. - # Here is some information about these curves: - genus_ci::Dict{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}, Int} - degree_of_Kbar_of_tv_restricted_to_ci::Dict{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}, Int} - intersection_number_among_ci_cj::Matrix{Int} - index_facet_interior_divisors::Vector{Int} - intersection_number_among_nontrivial_ci_cj::Matrix{Int} - - # The collection of the Ci form a nodal curve. To every nodal curve one can associate a (dual) graph. In this graph, - # every irreducible component of the nodal curve becomes a node/vertex of the dual graph, and every - # nodal singularity of the nodal curve turns into an edge of the dual graph. Here this is rather simple. - # Every Ci above is an irreducible component of the nodal curve in question and the topological intersection numbers - # among the Ci tell us how many nodal singularities link the Ci. Hence, we construct the dual graph as follows: - # 1. View the Ci as nodes of an undirected graph G. - # 2. If the top. intersection number of Ci and Cj is zero, there is no edge between the nodes of G corresponding to Ci and Cj. - # 3. If the top. intersection number of Ci and Cj is n (> 0), then there are n edges between the nodes of G corresponding to Ci and Cj. - # The following lists the information about this dual graph. - # Currently, we cannot label the nodes/vertices of a OSCAR graph. However, it is important to remember what vertex/node in the - # dual graph corresponds to which geometric locus V(xi, s). Therefore, we keep the labels that link the node of the OSCAR graph - # to the geometric loci V(xi, s) in the vector components_of_dual_graph::Vector{String}. At least for now. - # Should it ever be possible (favorable?) to directly attach these labels to the graph, one can remove components_of_dual_graph. - dual_graph::Graph{Undirected} - components_of_dual_graph::Vector{String} - degree_of_Kbar_of_tv_restricted_to_components_of_dual_graph::Dict{String, Int64} - genus_of_components_of_dual_graph::Dict{String, Int64} - - # In our research, we conduct certain combinatoric computations based on this graph, the data in - # degree_of_Kbar_of_tv_restricted_to_components_of_dual_graph, genus_of_components_of_dual_graph and a bit more meta data - # that is not currently included (yet). These computations are hard. It turns out, that one can replace the graph with another - # graph, so that the computations are easier (a.k.a. the runtimes are a lot shorter). In a nutshell, this means to remove - # a lot of nodes, and adjust the edges accordingly. Let me not go into more details here. A full description can e.g. be found in - # https://arxiv.org/abs/2104.08297 and the follow-up papers thereof. Here we collect the information of said simplified graph, - # by mirroring the strategy for the above dual graph. - simplified_dual_graph::Graph{Undirected} - components_of_simplified_dual_graph::Vector{String} - degree_of_Kbar_of_tv_restricted_to_components_of_simplified_dual_graph::Dict{String, Int64} - genus_of_components_of_simplified_dual_graph::Dict{String, Int64} - -end - - -function _parse_rational(str::String) - if occursin("/", str) - # If the string contains a '/', parse as a rational number - parts = split(str, '/') - if length(parts) != 2 - throw(ArgumentError("Invalid rational number format")) - end - numerator = parse(Int, parts[1]) - denominator = parse(Int, parts[2]) - return QQ(numerator//denominator) - else - # If the string doesn't contain a '/', parse as a whole number - return QQ(parse(Int, str)) - end -end - - - ####################################################### # 1. User interface for literature models ####################################################### @@ -218,73 +124,6 @@ Hypersurface model over a concrete base julia> hypersurface_equation_parametrization(h2) b*w*v^2 - c0*u^4 - c1*u^3*v - c2*u^2*v^2 - c3*u*v^3 + w^2 ``` -A yet more special instance of literature model are the F-theory QSMs. Those consist of 708 families of geometries, -each of which is obtained from triangulations of polytopes in the 3-dimensional Kreuzer-Skarke list. In particular, -for each of these 708 families, a lot of information is known. Still, those geometries are also somewhat involved. -Let us demonstrate this on the F-theory QSM based on the 4th polytope in the 3-dimensional Kreuzer-Skarke list. -We can create and study this model as follows (TODO: currently under development): -```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) -julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)); - -julia> model = qsm_model.hs_model -Hypersurface model over a concrete base - -julia> cox_ring(base_space(model)) -Multivariate polynomial ring in 29 variables over QQ graded by - x1 -> [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x2 -> [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x3 -> [0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x4 -> [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x5 -> [0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x6 -> [0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x7 -> [0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x8 -> [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x9 -> [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x10 -> [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x11 -> [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x12 -> [0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0] - x13 -> [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0] - x14 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0] - x15 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0] - x16 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0] - x17 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0] - x18 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] - x19 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] - x20 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0] - x21 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0] - x22 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0] - x23 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0] - x24 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0] - x25 -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0] - x26 -> [1 4 0 1 2 3 1 2 3 4 0 1 1 1 1 1 1 1 1 4 0 2 3 4 4 5] - x27 -> [3 2 2 0 -1 -1 1 0 0 1 1 2 0 1 -1 0 -2 -1 -3 -2 -2 1 1 -1 0 0] - x28 -> [-2 -4 -1 -1 -1 -2 -1 -2 -3 -4 -1 -2 -2 -2 -1 -1 0 0 1 -2 1 -2 -3 -3 -3 -4] - x29 -> [0 -1 0 -1 -1 -1 0 -1 -1 -1 0 0 0 0 0 0 0 0 0 -1 0 -1 -1 -1 -1 -1] - -julia> qsm_model.Kbar3 -6 - -julia> qsm_model.triang_quick -true - -julia> qsm_model.estimated_number_of_triangulations -212533333333 - -julia> qsm_model.dual_graph -Undirected graph with 21 nodes and the following edges: -(5, 1)(6, 5)(7, 6)(8, 7)(9, 4)(9, 8)(10, 1)(11, 4)(12, 3)(12, 10)(13, 3)(13, 11)(14, 1)(15, 4)(16, 3)(17, 3)(18, 2)(18, 14)(19, 2)(19, 15)(20, 2)(20, 16)(21, 2)(21, 17) - -julia> qsm_model.components_of_simplified_dual_graph -4-element Vector{String}: - "C0" - "C1" - "C2" - "C3" - -julia> qsm_model.simplified_dual_graph -Undirected graph with 4 nodes and the following edges: -(2, 1)(3, 1)(3, 2)(4, 1)(4, 2)(4, 3) -``` """ function literature_model(; doi::String="", arxiv_id::String="", version::String="", equation::String="", type::String="", model_parameters::Dict{String,<:Any} = Dict{String,Any}(), base_space::FTheorySpace = affine_space(NormalToricVariety, 0), model_sections::Dict{String, <:Any} = Dict{String,Any}(), defining_classes::Dict{String, <:Any} = Dict{String,Any}(), completeness_check::Bool = true) model_dict = _find_model(doi, arxiv_id, version, equation, type) @@ -321,20 +160,48 @@ function literature_model(model_dict::Dict{String, Any}; model_parameters::Dict{ # (2) The QSM need special treatment... if model_dict["arxiv_data"]["id"] == "1903.00009" - # Remember how we identified this model + # Read in the QSM-model form the database model_dict["literature_identifier"] = "1903.00009" k = model_parameters["k"] qsmd_path = artifact"QSMDB" qsm_model = load(joinpath(qsmd_path, "$k.mrdi")) - # TODO: Antony, please notice that the serialization of hs_model (as well as Tate and Weierstrass_model) involves a - # a hack to serialize a dicts. Maybe this can be fixed in this PR? Maybe even must? - # TODO: Also notice, that the serialization of hs_model will forget all of the meta_data that is set by the command - # _set_all_attributes(hs_model, model_dict, model_parameters) - # So also this needs addressing? + # Create the hypersurface model and set meta data attributes + model = qsm_model.hs_model + _set_all_attributes(model, model_dict, model_parameters) + + # Set specialized attributes regarding the polytope + set_attribute!(model, :vertices, qsm_model.vertices) + set_attribute!(model, :poly_index, qsm_model.poly_index) + set_attribute!(model, :triang_quick, qsm_model.triang_quick) + set_attribute!(model, :max_lattice_pts_in_facet, qsm_model.max_lattice_pts_in_facet) + set_attribute!(model, :estimated_number_of_triangulations, qsm_model.estimated_number_of_triangulations) + + # Set specialized attributes regarding the general geometry of the base space + set_attribute!(model, :Kbar3, qsm_model.Kbar3) + set_attribute!(model, :h11, qsm_model.h11) + set_attribute!(model, :h12, qsm_model.h12) + set_attribute!(model, :h13, qsm_model.h13) + set_attribute!(model, :h22, qsm_model.h22) + + # Set specialized attributes regarding the root bundle counting + set_attribute!(model, :genus_ci, qsm_model.genus_ci) + set_attribute!(model, :degree_of_Kbar_of_tv_restricted_to_ci, qsm_model.degree_of_Kbar_of_tv_restricted_to_ci) + set_attribute!(model, :intersection_number_among_ci_cj, qsm_model.intersection_number_among_ci_cj) + set_attribute!(model, :index_facet_interior_divisors, qsm_model.index_facet_interior_divisors) + set_attribute!(model, :intersection_number_among_nontrivial_ci_cj, qsm_model.intersection_number_among_nontrivial_ci_cj) + set_attribute!(model, :dual_graph, qsm_model.dual_graph) + set_attribute!(model, :components_of_dual_graph, qsm_model.components_of_dual_graph) + set_attribute!(model, :degree_of_Kbar_of_tv_restricted_to_components_of_dual_graph, qsm_model.degree_of_Kbar_of_tv_restricted_to_components_of_dual_graph) + set_attribute!(model, :genus_of_components_of_dual_graph, qsm_model.genus_of_components_of_dual_graph) + set_attribute!(model, :simplified_dual_graph, qsm_model.simplified_dual_graph) + set_attribute!(model, :components_of_simplified_dual_graph, qsm_model.components_of_simplified_dual_graph) + set_attribute!(model, :degree_of_Kbar_of_tv_restricted_to_components_of_simplified_dual_graph, qsm_model.degree_of_Kbar_of_tv_restricted_to_components_of_simplified_dual_graph) + set_attribute!(model, :genus_of_components_of_simplified_dual_graph, qsm_model.genus_of_components_of_simplified_dual_graph) + + # Finally, return the QSM model + return model - # Finally, return the QSMModel in question... - return qsm_model end diff --git a/experimental/FTheoryTools/src/exports.jl b/experimental/FTheoryTools/src/exports.jl index 0bf8cccb3a78..2dbc6acebf13 100644 --- a/experimental/FTheoryTools/src/exports.jl +++ b/experimental/FTheoryTools/src/exports.jl @@ -4,6 +4,7 @@ export CompleteIntersectionModel export FamilyOfSpaces export GlobalTateModel export HypersurfaceModel +export QSMModel export WeierstrassModel export _blowup_global export _blowup_global_sequence @@ -35,15 +36,25 @@ export base_space export blow_up export calabi_yau_hypersurface export classes_of_model_sections +export components_of_dual_graph +export components_of_simplified_dual_graph export coordinate_ring export defining_classes export defining_section_parametrization +export degrees_of_kbar_restrictions_to_ci_curves +export degrees_of_kbar_restrictions_to_components_of_dual_graph +export degrees_of_kbar_restrictions_to_components_of_simplified_dual_graph export discriminant export display_all_literature_models +export dual_graph +export estimated_number_of_triangulations export explicit_model_sections export family_of_spaces export fiber_ambient_space export gauge_algebra +export genera_of_ci_curves +export genera_of_components_of_dual_graph +export genera_of_components_of_simplified_dual_graph export generating_sections export global_gauge_quotients export global_tate_model @@ -77,6 +88,7 @@ export has_paper_authors export has_paper_buzzwords export has_paper_description export has_paper_title +export has_quick_triangulation export has_related_literature_models export has_resolution_generating_sections export has_resolution_zero_sections @@ -85,9 +97,14 @@ export has_weighted_resolution_generating_sections export has_weighted_resolution_zero_sections export has_weighted_resolutions export has_zero_section +export hodge_h11 +export hodge_h12 +export hodge_h13 +export hodge_h22 export hypersurface_equation export hypersurface_equation_parametrization export hypersurface_model +export indices_of_trivial_ci_curves export irrelevant_ideal export is_base_space_fully_specified export is_partially_resolved @@ -100,16 +117,18 @@ export journal_pages export journal_report_numbers export journal_volume export journal_year +export kbar3 export literature_identifier export literature_model +export max_lattice_pts_in_facet export model_description export model_parameters export paper_authors export paper_buzzwords export paper_description export paper_title +export polytope_index export put_over_concrete_base -export QSMModel export related_literature_models export resolution_generating_sections export resolution_zero_sections @@ -154,6 +173,7 @@ export set_weighted_resolution_generating_sections export set_weighted_resolution_zero_sections export set_weighted_resolutions export set_zero_section +export simplified_dual_graph export singular_loci export su5_tate_model_over_arbitrary_3d_base export su5_weierstrass_model_over_arbitrary_3d_base @@ -164,6 +184,8 @@ export tate_section_a2 export tate_section_a3 export tate_section_a4 export tate_section_a6 +export topological_intersection_numbers_among_ci_curves +export topological_intersection_numbers_among_nontrivial_ci_curves export tune export weierstrass_ideal_sheaf export weierstrass_model diff --git a/experimental/FTheoryTools/src/types.jl b/experimental/FTheoryTools/src/types.jl index 87465edb3cac..788d19d937cf 100644 --- a/experimental/FTheoryTools/src/types.jl +++ b/experimental/FTheoryTools/src/types.jl @@ -143,3 +143,97 @@ end end end + + +############################################################################## +# 3 Struct for Quadrillion F-theory Standard Models when read in from database +############################################################################## + +struct QSMModel + # Information about the polytope underlying the F-theory QSM. + vertices::Vector{Vector{QQFieldElem}} + poly_index::Int + + # We build toric 3-fold from triangulating the lattice points in said polytope. + # Oftentimes, there are a lot of such triangulations (up to 10^15 for the case at hand), which we cannot + # hope to enumerate in a reasonable time in a computer. The following gives us metadata, to gauge how hard + # this triangulation task is. First, the boolean triang_quick tells if we can hope to enumerate all + # triangulations in a reasonable time. This in turn is linked to the question if we can find + # fine regular triangulations of all facets, the difficulty of which scales primarily with the number of + # lattice points. Hence, we also provide the maximal number of lattice points in a facet of the polytope in question + # in the integer max_lattice_pts_in_facet. On top of this, an estimate for the total number of triangulations + # is provided by the big integer estimated_number_oftriangulations. This estimate is exact if triang_quick = true. + triang_quick::Bool + max_lattice_pts_in_facet::Int + estimated_number_of_triangulations::Int + + # We select one of the many triangulations, construct a 3d toric base B3 and thereby the hypersurface model in question, + # that is then the key object of study of this F-theory construction. + hs_model::HypersurfaceModel + + # As per usual, topological data of this geometry is important. Key is the triple intersection number of the + # anticanonical divisor of the 3-dimensional toric base, as well as its Hodge numbers. + Kbar3::Int + h11::Int + h12::Int + h13::Int + h22::Int + + # Recall that B3 is 3-dimensional toric variety. Let s in H^0(B3, Kbar_B3), then V(s) is a K3-surface. + # Moreover, let xi the coordinates of the Cox ring of B3. Then V(xi) is a divisor in B3. + # Furthermore, Ci = V(xi) cap V(s) is a divisor in the K3-surface V(s). We study these curves Ci in large detail. + # Here is some information about these curves: + genus_ci::Dict{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}, Int} + degree_of_Kbar_of_tv_restricted_to_ci::Dict{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}, Int} + intersection_number_among_ci_cj::Matrix{Int} + index_facet_interior_divisors::Vector{Int} + intersection_number_among_nontrivial_ci_cj::Matrix{Int} + + # The collection of the Ci form a nodal curve. To every nodal curve one can associate a (dual) graph. In this graph, + # every irreducible component of the nodal curve becomes a node/vertex of the dual graph, and every + # nodal singularity of the nodal curve turns into an edge of the dual graph. Here this is rather simple. + # Every Ci above is an irreducible component of the nodal curve in question and the topological intersection numbers + # among the Ci tell us how many nodal singularities link the Ci. Hence, we construct the dual graph as follows: + # 1. View the Ci as nodes of an undirected graph G. + # 2. If the top. intersection number of Ci and Cj is zero, there is no edge between the nodes of G corresponding to Ci and Cj. + # 3. If the top. intersection number of Ci and Cj is n (> 0), then there are n edges between the nodes of G corresponding to Ci and Cj. + # The following lists the information about this dual graph. + # Currently, we cannot label the nodes/vertices of a OSCAR graph. However, it is important to remember what vertex/node in the + # dual graph corresponds to which geometric locus V(xi, s). Therefore, we keep the labels that link the node of the OSCAR graph + # to the geometric loci V(xi, s) in the vector components_of_dual_graph::Vector{String}. At least for now. + # Should it ever be possible (favorable?) to directly attach these labels to the graph, one can remove components_of_dual_graph. + dual_graph::Graph{Undirected} + components_of_dual_graph::Vector{String} + degree_of_Kbar_of_tv_restricted_to_components_of_dual_graph::Dict{String, Int64} + genus_of_components_of_dual_graph::Dict{String, Int64} + + # In our research, we conduct certain combinatoric computations based on this graph, the data in + # degree_of_Kbar_of_tv_restricted_to_components_of_dual_graph, genus_of_components_of_dual_graph and a bit more meta data + # that is not currently included (yet). These computations are hard. It turns out, that one can replace the graph with another + # graph, so that the computations are easier (a.k.a. the runtimes are a lot shorter). In a nutshell, this means to remove + # a lot of nodes, and adjust the edges accordingly. Let me not go into more details here. A full description can e.g. be found in + # https://arxiv.org/abs/2104.08297 and the follow-up papers thereof. Here we collect the information of said simplified graph, + # by mirroring the strategy for the above dual graph. + simplified_dual_graph::Graph{Undirected} + components_of_simplified_dual_graph::Vector{String} + degree_of_Kbar_of_tv_restricted_to_components_of_simplified_dual_graph::Dict{String, Int64} + genus_of_components_of_simplified_dual_graph::Dict{String, Int64} + +end + + +function _parse_rational(str::String) + if occursin("/", str) + # If the string contains a '/', parse as a rational number + parts = split(str, '/') + if length(parts) != 2 + throw(ArgumentError("Invalid rational number format")) + end + numerator = parse(Int, parts[1]) + denominator = parse(Int, parts[2]) + return QQ(numerator//denominator) + else + # If the string doesn't contain a '/', parse as a whole number + return QQ(parse(Int, str)) + end +end From 43cb3650bdd0fd4011a6c50b8fe9aa18abc6b88f Mon Sep 17 00:00:00 2001 From: Martin Bies Date: Wed, 19 Jun 2024 00:05:17 +0200 Subject: [PATCH 08/12] [FTheoryTools] Remove unused method (cherry picked from commit 1c7d9d52173bdc625f491fce6e7d1ced894a4233) --- experimental/FTheoryTools/src/types.jl | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/experimental/FTheoryTools/src/types.jl b/experimental/FTheoryTools/src/types.jl index 788d19d937cf..1926e9c2a007 100644 --- a/experimental/FTheoryTools/src/types.jl +++ b/experimental/FTheoryTools/src/types.jl @@ -220,20 +220,3 @@ struct QSMModel genus_of_components_of_simplified_dual_graph::Dict{String, Int64} end - - -function _parse_rational(str::String) - if occursin("/", str) - # If the string contains a '/', parse as a rational number - parts = split(str, '/') - if length(parts) != 2 - throw(ArgumentError("Invalid rational number format")) - end - numerator = parse(Int, parts[1]) - denominator = parse(Int, parts[2]) - return QQ(numerator//denominator) - else - # If the string doesn't contain a '/', parse as a whole number - return QQ(parse(Int, str)) - end -end From 0e1cc8c5f7e90def40dbbe400fac4b123d4c7427 Mon Sep 17 00:00:00 2001 From: Matthias Zach <85350711+HechtiDerLachs@users.noreply.github.com> Date: Thu, 20 Jun 2024 21:32:11 +0200 Subject: [PATCH 09/12] Some more fixes for the fibration hopping. (#3877) * Some fixes in the production of ideal sheaves. * give the compiler a hint in order to avoid an infinite recursion --------- Co-authored-by: Simon Brandhorst (cherry picked from commit 58abe477838e5c6984a0299da33b6b0e5a2b5244) --- experimental/Schemes/src/IdealSheaves.jl | 4 ++-- src/Rings/MPolyQuo.jl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/experimental/Schemes/src/IdealSheaves.jl b/experimental/Schemes/src/IdealSheaves.jl index c6dd35a3f872..edc1e9a42912 100644 --- a/experimental/Schemes/src/IdealSheaves.jl +++ b/experimental/Schemes/src/IdealSheaves.jl @@ -1583,7 +1583,7 @@ function produce_object(F::PrimeIdealSheafFromChart, U2::AbsAffineScheme) function complexity(X1::AbsAffineScheme) init = maximum(total_degree.(lifted_numerator.(gens(F(X1)))); init=0) - glue = default_covering(X)[V, X1] + glue = default_covering(X)[X1, V2] if glue isa SimpleGluing || (glue isa LazyGluing && is_computed(glue)) return init end @@ -1598,7 +1598,7 @@ function produce_object(F::PrimeIdealSheafFromChart, U2::AbsAffineScheme) glue = default_covering(X)[W, V2] f, g = gluing_morphisms(glue) if glue isa SimpleGluing || (glue isa LazyGluing && first(gluing_domains(glue)) isa PrincipalOpenSubset) - complement_equation(codomain(g)) in F(W) && continue # We know the ideal is prime. No need to saturate! + complement_equation(codomain(g)) in F(W) && return ideal(OO(U2), one(OO(U2))) # We know the ideal is prime. No need to saturate! I2 = F(codomain(g)) I = pullback(g)(I2) I = ideal(OO(V2), lifted_numerator.(gens(I))) diff --git a/src/Rings/MPolyQuo.jl b/src/Rings/MPolyQuo.jl index 99e481b90e69..1d30360bec89 100644 --- a/src/Rings/MPolyQuo.jl +++ b/src/Rings/MPolyQuo.jl @@ -654,7 +654,7 @@ function ideal(A::MPolyQuoRing{T}, V::Vector{MPolyQuoRingElem{T}}) where T <: MP return MPolyQuoIdeal(A, ideal(base_ring(A), map(p->p.f, V))) end -ideal(R::MPolyQuoRing, V::Vector) = ideal(R, R.(V)) +ideal(R::MPolyQuoRing, V::Vector) = ideal(R, elem_type(R)[R(x) for x in V]) function ideal(A::MPolyQuoRing{T}, x::T) where T <: MPolyRingElem From 52177f7ae9a18ce8bd05e575c53a64920500700d Mon Sep 17 00:00:00 2001 From: Benjamin Lorenz Date: Thu, 20 Jun 2024 23:10:52 +0200 Subject: [PATCH 10/12] Version 1.1.0 --- Project.toml | 2 +- README.md | 7 +++---- gap/OscarInterface/PackageInfo.g | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Project.toml b/Project.toml index b5d760bcfeb1..129042a8a2db 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Oscar" uuid = "f1435218-dba5-11e9-1e4d-f1a5fab5fc13" authors = ["The OSCAR Team "] -version = "1.1.0-DEV" +version = "1.1.0" [deps] AbstractAlgebra = "c3fe647b-3220-5bb0-a1ea-a7954cac585d" diff --git a/README.md b/README.md index 08b868b19bdf..b92a67549254 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,7 @@ julia> using Oscar / _ \ / ___| / ___| / \ | _ \ | Combining ANTIC, GAP, Polymake, Singular | | | |\___ \| | / _ \ | |_) | | Type "?Oscar" for more information | |_| | ___) | |___ / ___ \| _ < | Manual: https://docs.oscar-system.org - \___/ |____/ \____/_/ \_\_| \_\ | Version 1.1.0-DEV - + \___/ |____/ \____/_/ \_\_| \_\ | Version 1.1.0 julia> k, a = quadratic_field(-5) (Imaginary quadratic field defined by x^2 + 5, sqrt(-5)) @@ -120,7 +119,7 @@ pm::Array > If you have used OSCAR in the preparation of a paper please cite it as described below: [OSCAR] - OSCAR -- Open Source Computer Algebra Research system, Version 1.0.0, + OSCAR -- Open Source Computer Algebra Research system, Version 1.1.0, The OSCAR Team, 2024. (https://www.oscar-system.org) [OSCAR-book] Wolfram Decker, Christian Eder, Claus Fieker, Max Horn, Michael Joswig, eds. @@ -133,7 +132,7 @@ If you are using BibTeX, you can use the following BibTeX entries: key = {OSCAR}, organization = {The OSCAR Team}, title = {OSCAR -- Open Source Computer Algebra Research system, - Version 1.0.0}, + Version 1.1.0}, year = {2024}, url = {https://www.oscar-system.org}, } diff --git a/gap/OscarInterface/PackageInfo.g b/gap/OscarInterface/PackageInfo.g index 15e69fd884be..add18476cf3d 100644 --- a/gap/OscarInterface/PackageInfo.g +++ b/gap/OscarInterface/PackageInfo.g @@ -10,8 +10,8 @@ SetPackageInfo( rec( PackageName := "OscarInterface", Subtitle := "GAP interface to OSCAR", -Version := "1.1.0-DEV", -Date := "16/02/2024", # dd/mm/yyyy format +Version := "1.1.0", +Date := "20/06/2024", # dd/mm/yyyy format License := "GPL-2.0-or-later", Persons := [ From 0267b927888d14d727b5c74edc3c9013026fd138 Mon Sep 17 00:00:00 2001 From: Benjamin Lorenz Date: Wed, 19 Jun 2024 11:46:08 +0200 Subject: [PATCH 11/12] Serialization: change upgrade message to `debug` (cherry picked from commit ce0485216815f23b19909a19d52fca959d7715a5) --- src/Serialization/Upgrades/main.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Serialization/Upgrades/main.jl b/src/Serialization/Upgrades/main.jl index 79b07d303396..0bdc9ef5ab64 100644 --- a/src/Serialization/Upgrades/main.jl +++ b/src/Serialization/Upgrades/main.jl @@ -115,8 +115,8 @@ function upgrade(format_version::VersionNumber, dict::Dict) if format_version < script_version # TODO: use a macro from Hecke that will allow user to suppress # such a message - @info("upgrading serialized data....", - maxlog=1) + @debug("upgrading serialized data....", + maxlog=1) upgrade_state = UpgradeState() # upgrading large files needs a work around since the new load From 7a96c95203710c2aea9b887a4b46fbce4b8689fb Mon Sep 17 00:00:00 2001 From: Benjamin Lorenz Date: Wed, 19 Jun 2024 11:49:10 +0200 Subject: [PATCH 12/12] remove upgrade info message from doctests (cherry picked from commit 0311a7f8616c6d3fbcc063ec1237f8632c5dd130) --- .../Surfaces/AdjunctionProcess/AdjunctionProcess.jl | 5 ----- .../Surfaces/ParaRatSurfaces/ParametrizationSurfaces.jl | 1 - 2 files changed, 6 deletions(-) diff --git a/src/AlgebraicGeometry/Surfaces/AdjunctionProcess/AdjunctionProcess.jl b/src/AlgebraicGeometry/Surfaces/AdjunctionProcess/AdjunctionProcess.jl index 9f7b4b88c227..c958dc22efd2 100644 --- a/src/AlgebraicGeometry/Surfaces/AdjunctionProcess/AdjunctionProcess.jl +++ b/src/AlgebraicGeometry/Surfaces/AdjunctionProcess/AdjunctionProcess.jl @@ -54,7 +54,6 @@ with a general linear subspace of $\mathbb P^n$ of dimension $c+1$. # Examples ```jldoctest julia> X = bordiga() -[ Info: upgrading serialized data.... Projective variety in projective 4-space over GF(31991) with coordinates [x, y, z, u, v] defined by ideal with 4 generators @@ -95,7 +94,6 @@ Return `true` if `X` is linearly normal, and `false` otherwise. # Examples ```jldoctest julia> X = bordiga() -[ Info: upgrading serialized data.... Projective variety in projective 4-space over GF(31991) with coordinates [x, y, z, u, v] defined by ideal with 4 generators @@ -181,7 +179,6 @@ julia> degrees_of_generators(Omega) ```jldoctest julia> X = bordiga() -[ Info: upgrading serialized data.... Projective variety in projective 4-space over GF(31991) with coordinates [x, y, z, u, v] defined by ideal with 4 generators @@ -246,7 +243,6 @@ which are obtained by blowing down the exceptional $(-1)$-lines on $X^{(i)}$. # Examples ```jldoctest julia> X = bordiga() -[ Info: upgrading serialized data.... Projective variety in projective 4-space over GF(31991) with coordinates [x, y, z, u, v] defined by ideal with 4 generators @@ -284,7 +280,6 @@ julia> degree(L[3][1]) ``` julia> X = rational_d9_pi7(); -[ Info: upgrading serialized data.... julia> L = adjunction_process(X); diff --git a/src/AlgebraicGeometry/Surfaces/ParaRatSurfaces/ParametrizationSurfaces.jl b/src/AlgebraicGeometry/Surfaces/ParaRatSurfaces/ParametrizationSurfaces.jl index 98dd1123d24c..76d087f1883f 100644 --- a/src/AlgebraicGeometry/Surfaces/ParaRatSurfaces/ParametrizationSurfaces.jl +++ b/src/AlgebraicGeometry/Surfaces/ParaRatSurfaces/ParametrizationSurfaces.jl @@ -22,7 +22,6 @@ Given a smooth rational surface `X` which is linearly normal in the given embedd # Examples ```jldoctest julia> X = bordiga() -[ Info: upgrading serialized data.... Projective variety in projective 4-space over GF(31991) with coordinates [x, y, z, u, v] defined by ideal with 4 generators