-
Notifications
You must be signed in to change notification settings - Fork 126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
experimental: Gröbner Walk #3821
Merged
Merged
Changes from all commits
Commits
Show all changes
184 commits
Select commit
Hold shift + click to select a range
8089589
Move Gröbner walk to experimental
ooinaruhugh 9e31ce2
Phase out global infoLevel
ooinaruhugh 86ad34b
Reformat docstring
ooinaruhugh cd6df31
Add GroebnerWalk as rudimentary experimental package
ooinaruhugh fa20268
Fix identation in docstring
ooinaruhugh a5c6eca
Fix doctest
ooinaruhugh b1166bd
Add problematic example that does not work (for now)
ooinaruhugh 931ccdb
Rename verbosity_scope for this module
ooinaruhugh 4272841
Change to getter
ooinaruhugh 5822ed5
Phase out `global infoLevel`
ooinaruhugh 795b1d4
Reduce redundant docstrings
ooinaruhugh a65b60b
Replace manual computation of maximum
ooinaruhugh 6dfc46f
Add verbosity scope for `groebner_walk`
ooinaruhugh c5b7eee
Rework `initials` into `initial_form`
ooinaruhugh 1c1eabb
Simplify `standard_step`
ooinaruhugh 1374f3f
Reduce amount of Matrix<->MonomialOrdering conversions
ooinaruhugh 7eec7d8
added lift comment
fpnowell 30ad7e7
commented lift, interreduce and next_weight
fpnowell d524c8f
Add some exports
ooinaruhugh 41ec234
Renaming
ooinaruhugh ee7195a
Add toy example
ooinaruhugh bca3691
Resolved questions
ooinaruhugh a7d0e08
added comments, examples and facet_preorder
fpnowell e0e164f
added folder new_generic_walk
fpnowell ddfeaf2
removed old dependencies
fpnowell b7a4db2
Make this thing standalone
ooinaruhugh f649eda
Change order of `groebner_walk` arguments to most likely to be set by…
ooinaruhugh c721bbd
Remove unused argument
ooinaruhugh 149a4c0
Remove a `while true` loop
ooinaruhugh 0b7bc5d
Import some stuff from OSCAR
ooinaruhugh 119f367
Enable debug print
ooinaruhugh 5458d20
Cleanup generic and perturbed walks
ooinaruhugh f871064
Add README.md
ooinaruhugh 0a07f83
Move some Standard walk procedures to own file
ooinaruhugh 6d5a136
Rename `difference_lead_tail` to `bounding_vectors`
ooinaruhugh bdba49b
Don't compute lead_exp twice(?)
ooinaruhugh b97b5b0
Move perturbed_walk
ooinaruhugh a2fe385
Move to `perturbed_walk.jl`
ooinaruhugh 476f332
removed new_generic_walk, added markedGB generic walk
fpnowell dac4725
Remove `infoLevel`
ooinaruhugh 939918f
Merge branch 'main' of github.com:ooinaruhugh/GroebnerWalk.jl
fpnowell a3c9829
Merge branch 'main' of github.com:ooinaruhugh/GroebnerWalk.jl
fpnowell 383aee5
cleaning up
fpnowell c792aff
Clean up
fpnowell ebeebcc
Add a docstring
fpnowell 43f0f93
Clean up
fpnowell 89f39ec
Separate the files
ooinaruhugh 536c237
Polish words
ooinaruhugh 32b73ae
Add simple benchmark
ooinaruhugh 99e87e4
Fix typo
ooinaruhugh 895300d
Move agk4
ooinaruhugh e934701
Change benchmark
ooinaruhugh 0ce1333
Cleanup
ooinaruhugh 8586ab0
clean up: commented out new "divide"
fpnowell 4f2b3b2
cleaning up, made lift_generic lighter
fpnowell d3fed20
Merge branch 'main'
fpnowell 4b5c41e
Add LICENSE and README
ooinaruhugh 8aa0cac
Clean up the benchmark code
ooinaruhugh b9bd2ff
Rename `markedGB` to `MarkedGröbnerBasis`
ooinaruhugh 6d1e051
Cleanup
ooinaruhugh b8c2c61
Rename `markedGB` to `MarkedGroebnerBasis`
ooinaruhugh 3a8adcb
Avoid unnecessary copies in `facet_initials`
ooinaruhugh bbe04e6
Change order of arguments in example
ooinaruhugh 0cd5107
Speed up generic_walk!!
ooinaruhugh cdd99c0
Document code
ooinaruhugh d178fe3
Cleanup examples
ooinaruhugh 9a1add4
Fix difference_lead_tail for good
ooinaruhugh b3e414c
Scale down difference_lead_tail vectors and get rid of the zero issue
ooinaruhugh f80ac77
Add debug output
ooinaruhugh d97564b
Touch `convert_bounding_vector`
ooinaruhugh 2bd0827
Expect vector of polynomials in final step of `groebner_walk`
ooinaruhugh ae6597c
Return only the gens, not an entire Gröbner basis
ooinaruhugh eed5734
Rename `interreduce_walk` to `autoreduce`
ooinaruhugh c7353d8
Return `gens(G)`
ooinaruhugh 628921c
Add examples
fpnowell 00feffe
Push intermediate benchmarking results
ooinaruhugh 73f188f
Add the benchmarks
ooinaruhugh 7c78d04
Add some benchmarks
ooinaruhugh 235c2dc
Move benchmarks
ooinaruhugh 90ae694
Move examples around
ooinaruhugh 5c5d01f
Edit README.md
ooinaruhugh e4c5ef9
Clean up examples
ooinaruhugh 41dfa19
Fix typo
ooinaruhugh d106deb
Clean up exports
ooinaruhugh 9881171
Clean up benchmarks
ooinaruhugh fa49ac6
Change `_normal_form` to use `MPolyBuildCtx`
ooinaruhugh 070a8c8
Remove unnecessary if condition
ooinaruhugh 6ab19dc
Add docstrings
ooinaruhugh 3fbd844
Clean up
ooinaruhugh 3237404
Add DOI to README.md
ooinaruhugh 6430447
Add DOI to README.md
ooinaruhugh e5709d6
Bump version number
ooinaruhugh 735c024
Change default perturbation degree to n
ooinaruhugh b1b033e
Fix perturbed walk, it actually perturbs now
ooinaruhugh 534dc01
Change some argument types
ooinaruhugh 4dfe318
Autoreduce returns a Groebner basis
ooinaruhugh 7512437
Add some diagnostics printing to standard_walk
ooinaruhugh 06712c8
Add perturbed_walk to benchmarks
ooinaruhugh 4ffb2e4
Add diagnostic printing to generic_walk
ooinaruhugh 8058a40
Add diagnostic printing to perturbed_walk
ooinaruhugh 73e7cda
Remove redundant assignment
ooinaruhugh 2adc1d3
Rename walk.jl to common.jl and clean up
ooinaruhugh 2b34cbc
Clean up
ooinaruhugh df70101
Add comments for missing docstrings
ooinaruhugh 3cd62f2
Bump to v1.0.1
ooinaruhugh aedf209
Remove redundant `exponent_vectors` function
ooinaruhugh fb4e777
Update docstrings
ooinaruhugh 81ac28a
Make some iterations more readable
ooinaruhugh 999418f
Remove old large tests
ooinaruhugh 2c23b61
added standard walk tests
fpnowell 8af2707
Fix errors from CI
ooinaruhugh 4770760
Remove redundant runtests
ooinaruhugh 916216f
Move definitions into testset
ooinaruhugh 35bc3ff
Update experimental/GroebnerWalk/src/GroebnerWalk.jl
ooinaruhugh 921cfca
Update experimental/GroebnerWalk/benchmark/agk.jl
ooinaruhugh 21d1d27
Update experimental/GroebnerWalk/benchmark/cyclic.jl
ooinaruhugh 0b70da0
Add newlines to end of file
ooinaruhugh 5ea1f23
Add Manifest.toml for reproducibility of examples and benchmarks
ooinaruhugh 7ddee42
Add 'experimental/GroebnerWalk/' from commit '5ea1f2321bd128cadc5e6e9…
ooinaruhugh 950a1f9
Remove standalone Julia package files
ooinaruhugh d12ab9e
Remove standalone Julia package files
ooinaruhugh c8e6625
Move weight_ordering
ooinaruhugh 0de61a3
Move weight_ordering
ooinaruhugh b13af3f
Change parameter type for weight_ordering to `<:IntegerUnion`
ooinaruhugh 91e1ce1
Update common.jl
ooinaruhugh f4e192f
Update common.jl
ooinaruhugh 0add3aa
Preliminary version of documentation
ooinaruhugh 32c61e0
Preliminary version of documentation
ooinaruhugh 5f0d7a6
Add citations
ooinaruhugh 29c76c5
Add citations
ooinaruhugh e1ffd64
Update doctests
ooinaruhugh d622ad2
Update doctests
ooinaruhugh fc2a7dc
Rename is_same_groebner_cone
ooinaruhugh 96e4a4d
Rename is_same_groebner_cone
ooinaruhugh 654d999
Fix docstring
ooinaruhugh 652d437
Fix docstring
ooinaruhugh 890971f
Export groebner_walk from experimental module
ooinaruhugh ac2216a
Export groebner_walk from experimental module
ooinaruhugh c1afb3c
Make use of TropicalGeometry/groebner_lift
ooinaruhugh 9a7ed94
Make use of TropicalGeometry/groebner_lift
ooinaruhugh 191382f
Update generic_walk.jl
ooinaruhugh 4c4556c
Update generic_walk.jl
ooinaruhugh b4b483f
Update generic_walk.jl
ooinaruhugh 2377132
Update generic_walk.jl
ooinaruhugh 26b3c3b
Add citations
ooinaruhugh 571aa9d
Add citations
ooinaruhugh 43010c7
Update generic_walk.jl
ooinaruhugh b141a8f
Update generic_walk.jl
ooinaruhugh 239ad7b
Update markedGB.jl
ooinaruhugh 394b200
Update markedGB.jl
ooinaruhugh fbd690b
Separate a statement
ooinaruhugh e6a5e83
Separate a statement
ooinaruhugh afcbbee
Remove 'using GroebnerWalk'
ooinaruhugh a628121
Remove 'using GroebnerWalk'
ooinaruhugh 112be07
Add tests for generic_walk
ooinaruhugh f5a5558
Add tests for generic_walk
ooinaruhugh 777e6d8
Modify benchmarks
ooinaruhugh d18672f
Modify benchmarks
ooinaruhugh 66d0891
Move benchmark polynomial systems
ooinaruhugh 2630f6c
Move benchmark polynomial systems
ooinaruhugh 354ea0a
Remove thesisexamples
ooinaruhugh 29b1ad4
Remove thesisexamples
ooinaruhugh 014397a
Expose newell_patch
ooinaruhugh 197d895
Expose newell_patch
ooinaruhugh 396a30c
Update GroebnerWalk/README.md
ooinaruhugh 0c0d5c6
Update GroebnerWalk/README.md
ooinaruhugh 63889f5
Update README.md
ooinaruhugh 6607667
Update README.md
ooinaruhugh 4bf43f1
Update example to use exported ideal
ooinaruhugh 32ae296
Update example to use exported ideal
ooinaruhugh bc596e2
Add newline at end of file
ooinaruhugh fd45cc0
Add newline at end of file
ooinaruhugh 9f62667
Properly export newell_patch_with_orderings
ooinaruhugh 37832b3
Properly export newell_patch_with_orderings
ooinaruhugh 3ade7a5
Add documentation
ooinaruhugh 5b81d11
Add documentation
ooinaruhugh 6f4cfff
Better input sanitation
ooinaruhugh 0428526
Better input sanitation
ooinaruhugh e7c1bb6
Add type parameter to MarkedGroebnerBasis
ooinaruhugh 43234ef
Merge commit 'e7c1bb607d5f18cf87e81af12007d327aa840fc0' into kf/gwalk
ooinaruhugh 2465ebe
Add missing type parameter for MarkedGroebnerBasis
ooinaruhugh 074f160
Clean up benchmarks
ooinaruhugh e462768
Add documentation for a special ideal
ooinaruhugh c4d9d68
Fix missing docstring
ooinaruhugh File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# Gröbner walk | ||
|
||
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.11065978.svg)](https://doi.org/10.5281/zenodo.11065978) | ||
|
||
`GroebnerWalk` provides implementations of Gröbner walk algorithms | ||
for computing Gröbner bases over fields on top of Oscar.jl. | ||
|
||
## Usage | ||
|
||
This module provides the function `groebner_walk` as interface to the algorithms. | ||
The following example demonstrates the usage. First, we define the ideal Oscar.jl. | ||
```julia | ||
using Oscar | ||
|
||
R, (x,y) = QQ[:x, :y] # define ring ... | ||
I = ideal([y^4+ x^3-x^2+x,x^4]) # ... and ideal | ||
``` | ||
Then, we can pass the ideal to `groebner_walk` to calculate the Gröbner basis. | ||
|
||
By default, `groebner_walk` starts with a Gröbner basis with respect to the default ordering on `R` | ||
and converts this into a Gröbner basis with respect to the lexicographic ordering on `R`. | ||
This is what the following code block accomplishes. | ||
```julia | ||
using Oscar | ||
|
||
groebner_walk(I) # compute the Groebner basis | ||
``` | ||
If one wants to specify `target` and `start` orderings explicitly, above function call needs to be written as follows. | ||
```julia | ||
groebner_walk(I, lex(R), default_ordering(R)) # compute the Groebner basis | ||
``` | ||
|
||
Additionally, there are certain special ideals provided that are used for benchmarking | ||
of this module. | ||
|
||
## Status | ||
At the moment, the standard walk by Collart, Kalkbrener and Mall (1997) and the generic walk by Fukuda et al. (2007) are implemented. | ||
|
||
## Contacts | ||
The library is maintained by Kamillo Ferry (kafe (at) kafe (dot) dev) and Francesco Nowell (francesconowell (at) gmail (dot) com). | ||
|
||
## Acknowledgement | ||
The current implementation is based on an implementation by Jordi Welp. We thank him for | ||
laying the groundwork for this package. | ||
|
||
## References | ||
- Collart, S., M. Kalkbrener, and D. Mall. ‘Converting Bases with the Gröbner Walk’. Journal of Symbolic Computation 24, no. 3–4 (September 1997): 465–69. https://doi.org/10.1006/jsco.1996.0145. | ||
- Fukuda, K., A. N. Jensen, N. Lauritzen, and R. Thomas. ‘The Generic Gröbner Walk’. Journal of Symbolic Computation 42, no. 3 (1 March 2007): 298–312. https://doi.org/10.1016/j.jsc.2006.09.004. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
using Oscar | ||
|
||
function agk4(k::Field) | ||
R, (x,y,z,u,v) = polynomial_ring(k, ["x","y","z","u","v"]) | ||
|
||
o1 = weight_ordering([1,1,1,0,0], degrevlex(R)) | ||
o2 = weight_ordering([0,0,0,1,1], degrevlex(R)) | ||
|
||
F = [ | ||
u + u^2 - 2*v - 2*u^2*v + 2*u*v^2 - x, | ||
-6*u + 2*v + v^2 - 5*v^3 + 2*u*v^2 - 4*u^2*v^2 - y, | ||
-2 + 2*u^2 + 6*v - 3*u^2*v^2 - z | ||
] | ||
|
||
return ideal(F), o2, o1 | ||
end | ||
|
ooinaruhugh marked this conversation as resolved.
Show resolved
Hide resolved
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
using Oscar | ||
|
||
include("cyclic.jl") | ||
include("katsura.jl") | ||
include("agk.jl") | ||
include("tran3.3.jl") | ||
|
||
function benchmark( | ||
io, | ||
name::String, | ||
I::Ideal, | ||
target::MonomialOrdering, | ||
start::MonomialOrdering | ||
) | ||
print(io, name, ","); flush(io) | ||
t = @elapsed groebner_walk($I, $target, $start; algorithm=:standard) | ||
print(io, t, ","); flush(io) | ||
t = @elapsed groebner_walk($I, $target, $start; algorithm=:generic) | ||
print(io, t, ","); flush(io) | ||
t = @elapsed groebner_walk($I, $target, $start; algorithm=:perturbed) | ||
print(io, t, ","); flush(io) | ||
t = @elapsed groebner_basis($I; ordering=$target) | ||
println(io, t); flush(io) | ||
end | ||
|
||
function print_header(io) | ||
print(io, "name,standard_walk,generic_walk,perturbed_walk,buchberger\n") | ||
end | ||
|
||
p = 11863279 | ||
Fp = GF(p) | ||
open("results.csv", "a") do io | ||
R, (x, y) = QQ[:x, :y] | ||
I = ideal([y^4 + x^3 - x^2 + x, x^4]) | ||
benchmark(io, "simple", I, lex(R), default_ordering(R)) | ||
|
||
benchmark(io, "cyclic5-QQ", cyclic5(QQ)...) | ||
benchmark(io, "cyclic5-Fp", cyclic5(Fp)...) | ||
|
||
benchmark(io, "cyclic6-QQ", cyclic6(QQ)...) | ||
benchmark(io, "cyclic6-Fp", cyclic6(Fp)...) | ||
|
||
I = katsura(6) | ||
R = base_ring(I) | ||
benchmark(io, "katsura6-QQ", I, lex(R), default_ordering(R)) | ||
|
||
Ip = map(gens(I)) do f | ||
change_coefficient_ring(Fp, f) | ||
end |> ideal | ||
Rp = base_ring(Ip) | ||
benchmark(io, "katsura6-Fp", Ip, lex(Rp), default_ordering(Rp)) | ||
|
||
benchmark(io, "cyclic7-QQ", cyclic7(QQ)...) | ||
benchmark(io, "cyclic7-Fp", cyclic7(Fp)...) | ||
|
||
benchmark(io, "agk4-QQ", agk4(QQ)...) | ||
benchmark(io, "agk4-Fp", agk4(Fp)...) | ||
|
||
benchmark(io, "tran3.3-QQ", tran33(QQ)...) | ||
benchmark(io, "tran3.3-Fp", tran33(Fp)...) | ||
|
||
benchmark(io, "newellp1-QQ", Oscar.newell_patch_with_orderings(QQ)...) | ||
benchmark(io, "newellp1-Fp", Oscar.newell_patch_with_orderings(Fp)...) | ||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
using Oscar | ||
|
||
function cyclic5(k::Field=QQ) | ||
R, (a,b,c,d,x) = k[:a,:b,:c,:d,:x] | ||
F = [ | ||
a + b + c + d + x, | ||
a*b + b*c + c*d + d*x + x*a, | ||
a*b*c + b*c*d + c*d*x + d*x*a + x*a*b, | ||
a*b*c*d + b*c*d*x + c*d*x*a + d*x*a*b + x*a*b*c, | ||
a*b*c*d*x - 1 | ||
] | ||
|
||
return ideal(F), lex(R), default_ordering(R) | ||
end | ||
|
||
function cyclic6(k::Field=QQ) | ||
R, (z0,z1,z2,z3,z4,z5) = k[:z0,:z1,:z2,:z3,:z4,:z5] | ||
F = [ | ||
z0 + z1 + z2 + z3 + z4 + z5, | ||
z0*z1 + z1*z2 + z2*z3 + z3*z4 + z4*z5 + z5*z0, | ||
z0*z1*z2 + z1*z2*z3 + z2*z3*z4 + z3*z4*z5 + z4*z5*z0 + z5*z0*z1, | ||
z0*z1*z2*z3 + z1*z2*z3*z4 + z2*z3*z4*z5 + z3*z4*z5*z0 + z4*z5*z0*z1 | ||
+ z5*z0*z1*z2, | ||
z0*z1*z2*z3*z4 + z1*z2*z3*z4*z5 + z2*z3*z4*z5*z0 + z3*z4*z5*z0*z1 | ||
+ z4*z5*z0*z1*z2 + z5*z0*z1*z2*z3, | ||
z0*z1*z2*z3*z4*z5 - 1 | ||
] | ||
|
||
return ideal(F), lex(R), default_ordering(R) | ||
end | ||
|
||
function cyclic7(k::Field=QQ) | ||
R, (z0, z1, z2, z3, z4, z5, z6) = QQ[:z0, :z1, :z2, :z3, :z4, :z5, :z6] | ||
F = [ | ||
z0 + z1 + z2 + z3 + z4 + z5 + z6, | ||
z0 * z1 + z1 * z2 + z2 * z3 + z3 * z4 + z4 * z5 + z5 * z6 + z6 * z0, | ||
z0 * z1 * z2 + z1 * z2 * z3 + z2 * z3 * z4 + z3 * z4 * z5 + z4 * z5 * z6 + z5 * z6 * z0 + z6 * z0 * z1, | ||
z0 * z1 * z2 * z3 + z1 * z2 * z3 * z4 + z2 * z3 * z4 * z5 + z3 * z4 * z5 * z6 + z4 * z5 * z6 * z0 | ||
+ z5 * z6 * z0 * z1 + z6 * z0 * z1 * z2, | ||
z0 * z1 * z2 * z3 * z4 + z1 * z2 * z3 * z4 * z5 + z2 * z3 * z4 * z5 * z6 + z3 * z4 * z5 * z6 * z0 | ||
+ z4 * z5 * z6 * z0 * z1 + z5 * z6 * z0 * z1 * z2 + z6 * z0 * z1 * z2 * z3, | ||
z0 * z1 * z2 * z3 * z4 * z5 + z1 * z2 * z3 * z4 * z5 * z6 + z2 * z3 * z4 * z5 * z6 * z0 + z3 * z4 * z5 * z6 * z0 * z1 | ||
+ z4 * z5 * z6 * z0 * z1 * z2 + z5 * z6 * z0 * z1 * z2 * z3 + z6 * z0 * z1 * z2 * z3 * z4, | ||
z0 * z1 * z2 * z3 * z4 * z5 * z6 - 1 | ||
] | ||
|
||
return ideal(F), lex(R), default_ordering(R) | ||
end | ||
|
||
function cyclic8(k::Field=QQ) | ||
R, (z0, z1, z2, z3, z4, z5, z6, z7) = k[:z0, :z1, :z2, :z3, :z4, :z5, :z6, :z7] | ||
|
||
F = [ | ||
z0 + z1 + z2 + z3 + z4 + z5 + z6 + z7, | ||
|
||
z0*z1 + z1*z2 + z2*z3 + z3*z4 + z4*z5 + z5*z6 + z6*z7 + z7*z0, | ||
|
||
z0*z1*z2 + z1*z2*z3 + z2*z3*z4 + z3*z4*z5 + z4*z5*z6 + z5*z6*z7 | ||
+ z6*z7*z0 + z7*z0*z1, | ||
|
||
z0*z1*z2*z3 + z1*z2*z3*z4 + z2*z3*z4*z5 + z3*z4*z5*z6 + z4*z5*z6*z7 | ||
+ z5*z6*z7*z0 + z6*z7*z0*z1 + z7*z0*z1*z2, | ||
|
||
z0*z1*z2*z3*z4 + z1*z2*z3*z4*z5 + z2*z3*z4*z5*z6 + z3*z4*z5*z6*z7 | ||
+ z4*z5*z6*z7*z0 + z5*z6*z7*z0*z1 + z6*z7*z0*z1*z2 + z7*z0*z1*z2*z3, | ||
|
||
z0*z1*z2*z3*z4*z5 + z1*z2*z3*z4*z5*z6 + z2*z3*z4*z5*z6*z7 + z3*z4*z5*z6*z7*z0 | ||
+ z4*z5*z6*z7*z0*z1 + z5*z6*z7*z0*z1*z2 + z6*z7*z0*z1*z2*z3 + z7*z0*z1*z2*z3*z4, | ||
|
||
z0*z1*z2*z3*z4*z5*z6 + z1*z2*z3*z4*z5*z6*z7 + z2*z3*z4*z5*z6*z7*z0 | ||
+ z3*z4*z5*z6*z7*z0*z1 + z4*z5*z6*z7*z0*z1*z2 + z5*z6*z7*z0*z1*z2*z3 | ||
+ z6*z7*z0*z1*z2*z3*z4 + z7*z0*z1*z2*z3*z4*z5, | ||
|
||
z0*z1*z2*z3*z4*z5*z6*z7 - 1 | ||
] | ||
|
||
return ideal(F), lex(R), default_ordering(R) | ||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
using Oscar | ||
|
||
function tran33(k::Field) | ||
R, (x,y,z) = k[:x,:y,:z] | ||
|
||
F = [16 + 3*x^3+16*x^2*z+14*x^2*y^3, 6+y^3*z+17*x^2*z^2+7*x*y^2*z^2+13*x^3*z^2] | ||
|
||
return ideal(F), lex(R), default_ordering(R) | ||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
[ | ||
"Gröbner walk" => [ | ||
"introduction.md", | ||
"special-ideals.md" | ||
] | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
```@meta | ||
CurrentModule = Oscar | ||
``` | ||
|
||
# Usage | ||
|
||
The Gröbner walk is an approach to reduce the computational complexity of Gröbner basis computations as proposed by [AGK97](@cite). | ||
These incarnations of the Gröbner walk refer to a family of algorithms that perform a reverse local search on the cones of the Gröbner fan. | ||
Then, a Gröbner basis is calculated for each encountered cone while reusing the generators obtained from the previous cone. | ||
|
||
The implemented algorithms may be accessed using the following function. | ||
|
||
```@docs | ||
groebner_walk( | ||
I::MPolyIdeal, | ||
target::MonomialOrdering = lex(base_ring(I)), | ||
start::MonomialOrdering = default_ordering(base_ring(I)); | ||
perturbation_degree = ngens(base_ring(I)), | ||
algorithm::Symbol = :standard | ||
) | ||
``` | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
```@meta | ||
CurrentModule = Oscar | ||
``` | ||
|
||
# Special ideals used for benchmarking | ||
|
||
We bundle a couple of special ideals useful for benchmarking of the Gröbner walk. | ||
|
||
```@docs | ||
newell_patch(k::Union{QQField, QQBarFieldElem}, n::Int=1) | ||
newell_patch(k::Field, n::Int=1) | ||
``` | ||
|
||
```@docs | ||
newell_patch_with_orderings(k::Field, n::Int=1) | ||
``` |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Concerning this benchmark and the others below: There is
src/Rings/special_ideals.jl
in which someone already has added thekatsura-n
examples. Maybe we can add your benchmarks there and remove these different files, I assume your benchmarks are also of interest to other developers/users.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I started adding the ideals to a
special-ideals.jl
in the experimental module. I will add the others with references, as soon as this is done I will move this tosrc/Rings/special_ideals.jl
(in a future PR)