Skip to content

Commit

Permalink
Cf work in progress (oscar-system#2682)
Browse files Browse the repository at this point in the history
* fix some issues with the idel stuff

* add simplify option to solve

* improve Complex and Symbolic version

* slightly more correct reduction code

* make simplify also work in QQ

* add all_extensions and friends

* re-write orbit

* typo

* replace FreeModule -> FPModule to allow more cases

some work...

* typo: default argument written badly

* deal with GrpAbFinGen vs FreeModule better

* allow more general FPModules

* try to support FunField in solve... rel ext is missing

* support fixex_field(, PermGroup) fur FunField

here the precision is a tuple of ints: padic prec and
 power series prec...

* aatempt to imporove the Qt case...

not yet complete, rel ext are missing

* natural_character (brauer_character)

* add sub-G-module and make hom_base more useful

* "ray-residue-ring": units of O/I in one step

* towards solve / Q(t)

* trensor product, natural_module and minor

* add tests for Brueckner

* trivia and tests

* fix examples

* first working version of H^3

* add generic differntial - no use yet

* actually define q...

* Add comment for test

* minimal changes to get it to work (again, partly)

* make Martin happy: monomials_of_degree

* add/ fix extension_field

* revert the bad commits

* Update experimental/GModule/Cohomology.jl

Co-authored-by: Max Horn <[email protected]>

* Update Cohomology.jl

* Update Cohomology.jl

---------

Co-authored-by: Tommy Hofmann <[email protected]>
Co-authored-by: Max Horn <[email protected]>
  • Loading branch information
3 people authored Aug 16, 2023
1 parent 4690df2 commit 8c97283
Show file tree
Hide file tree
Showing 8 changed files with 806 additions and 204 deletions.
39 changes: 25 additions & 14 deletions experimental/GModule/Brueckner.jl
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ function reps(K, G::Oscar.GAPGroup)
if order(G) == 1
F = free_module(K, 1)
h = hom(F, F, [F[1]])
return [gmodule(F, G, typeof(h)[])]
return [gmodule(F, G, typeof(h)[h for i = gens(G)])]
end

pcgs = GAP.Globals.Pcgs(G.X)
Expand Down Expand Up @@ -293,7 +293,7 @@ function Oscar.cokernel(h::Map)
return quo(codomain(h), image(h)[1])
end

function Base.iterate(M::Union{Generic.FreeModule{T}, Generic.Submodule{T}}) where T <: FinFieldElem
function Base.iterate(M::AbstractAlgebra.FPModule{T}) where T <: FinFieldElem
k = base_ring(M)
if dim(M) == 0
return zero(M), iterate([1])
Expand All @@ -303,26 +303,32 @@ function Base.iterate(M::Union{Generic.FreeModule{T}, Generic.Submodule{T}}) whe
return M(elem_type(k)[f[1][i] for i=1:dim(M)]), (f[2], p)
end

function Base.iterate(::Union{Generic.FreeModule{fqPolyRepFieldElem}, Generic.Submodule{fqPolyRepFieldElem}}, ::Tuple{Int64, Int64})
function Base.iterate(::AbstractAlgebra.FPModule{fqPolyRepFieldElem}, ::Tuple{Int64, Int64})
return nothing
end

function Base.iterate(M::Union{Generic.FreeModule{T}, Generic.Submodule{T}}, st::Tuple{<:Tuple, <:Base.Iterators.ProductIterator}) where T <: FinFieldElem
function Base.iterate(M::AbstractAlgebra.FPModule{T}, st::Tuple{<:Tuple, <:Base.Iterators.ProductIterator}) where T <: FinFieldElem
n = iterate(st[2], st[1])
if n === nothing
return n
end
return M(elem_type(base_ring(M))[n[1][i] for i=1:dim(M)]), (n[2], st[2])
end

function Base.length(M::Union{Generic.FreeModule{T}, Generic.Submodule{T}}) where T <: FinFieldElem
function Base.length(M::AbstractAlgebra.FPModule{T}) where T <: FinFieldElem
return Int(order(base_ring(M))^dim(M))
end

function Base.eltype(M::Union{Generic.FreeModule{T}, Generic.Submodule{T}}) where T <: FinFieldElem
function Base.eltype(M::AbstractAlgebra.FPModule{T}) where T <: FinFieldElem
return elem_type(M)
end

function Oscar.dim(M::AbstractAlgebra.Generic.DirectSumModule{<:FieldElem})
return sum(dim(x) for x = M.m)
end

Oscar.is_finite(M::AbstractAlgebra.FPModule{<:FinFieldElem}) = true

"""
mp: G ->> Q
C a F_p[Q]-module
Expand Down Expand Up @@ -389,27 +395,30 @@ function lift(C::GModule, mp::Map)
#projection of G. They are not all surjective. However, lets try:
k, mk = kernel(s)
allG = []
z = get_attribute(C, :H_two)[1]
z = get_attribute(C, :H_two)[1] #tail (H2) -> cochain

seen = Set{Tuple{elem_type(D), elem_type(codomain(mH2))}}()
#TODO: the projection maps seem to be rather slow - in particular
# as they SHOULD be trivial...
for x = k
epi = pDE[1](mk(x)) #the map
chn = pDE[2](mk(x)) #the tail data
if (epi,mH2(chn)) in seen
chn = mH2(pDE[2](mk(x))) #the tail data
if (epi,chn) in seen
continue
else
push!(seen, (epi, mH2(chn)))
push!(seen, (epi, chn))
end
#TODO: not all "chn" yield distinct groups - the factoring by the
# co-boundaries is missing
# not all "epi" are epi, ie. surjective. The part of the thm
# is missing...
# (Thm 15, part b & c) (and the weird lemma)
@hassert :BruecknerSQ 2 all(x->all(y->sc(x, y)(chn) == last_c(x, y), gens(N)), gens(N))
# @hassert :BruecknerSQ 2 all(x->all(y->sc(x, y)(chn) == last_c(x, y), gens(N)), gens(N))


@hassert :BruecknerSQ 2 preimage(z, z(chn)) == chn
GG, GGinj, GGpro, GMtoGG = Oscar.GrpCoh.extension(PcGroup, z(chn))
@assert is_surjective(GGpro)
if get_assert_level(:BruecknerSQ) > 1
_GG, _ = Oscar.GrpCoh.extension(z(chn))
@assert is_isomorphic(GG, _GG)
Expand All @@ -432,13 +441,15 @@ function lift(C::GModule, mp::Map)
return d
end
l= [GMtoGG(reduce(gen(G, i)), pro[i](epi)) for i=1:ngens(G)]
# @show map(order, l), order(prod(l))
# @show map(order, gens(G)), order(prod(gens(G)))

h = hom(G, GG, gens(G), [GMtoGG(reduce(gen(G, i)), pro[i](epi)) for i=1:ngens(G)])
h = hom(G, GG, gens(G), l)
if !is_surjective(h)
@show :darn
# @show :darn
continue
else
@show :bingo
# @show :bingo
end
push!(allG, h)
end
Expand Down
Loading

0 comments on commit 8c97283

Please sign in to comment.