Closed fingolfin closed 4 years ago
It's this assertion that is triggered: https://github.com/JuliaLang/julia/blob/6cd329c371c1db3d9876bc337e82e274e50420e8/base/compiler/typelimits.jl#L23 (And then it errors because it can't format it's message, which is unfortunate, because it makes it a bit harder to pinpoint the problem.)
The situation that leads to the assertion being triggered is this:
julia> t = Tuple{typeof(Hecke.ideal), Hecke.NfRelOrd{T, S, U}, U, U, S, S, Bool} where U where S<:(Hecke.NfRelOrdIdl{T, S, U} where U where S where T) where T
Tuple{typeof(ideal),Hecke.NfRelOrd{T,S,U},U,U,S,S,Bool} where U where S<:(Hecke.NfRelOrdIdl{T,S,U} where U where S where T) where T
julia> compare = Tuple{typeof(Hecke.ideal), Hecke.NfRelOrd{T, S, U}, U, U, S, S, Bool} where U where S where T
Tuple{typeof(ideal),Hecke.NfRelOrd{T,S,U},U,U,S,S,Bool} where U where S where T
julia> source = Core.svec() # more complicated in reality, but irrelevant
svec()
julia> r = Core.Compiler._limit_type_size(t, compare, source, 1, 8)
Tuple{typeof(ideal),Hecke.NfRelOrd,U,U,Hecke.NfRelOrdIdl,Hecke.NfRelOrdIdl,Bool} where U
julia> t <: r
false
The problem here is that U
is subject to the diagonal rule in r
, but it isn't in t
.
[The issue] was fixed "by accident" (?) on the Julia master branch by PR #30623
I believe you meant #36200.
I'm not certain if this is fixable without #24614
In this case, Tuple{typeof(ideal),Hecke.NfRelOrd,U1,U2,Hecke.NfRelOrdIdl,Hecke.NfRelOrdIdl,Bool} where U1 where U2
would be a valid answer, I guess. We probably could try to figure out whether any variable is subject to the diagonal rule in the result but not in the input and then do this kind of replacement. But that seams finicky and somewhat expensive.
In the meantime, maybe we could replace the assertion with some fallback that widens even more aggressively.
I had a similar type error as the one reported here. For me, it was solved by switching from Julia 1.5.3 to 1.6.
We have run into an error in the Julia type inference (see https://github.com/oscar-system/Oscar.jl/issues/104 for the original issue, for which we since implemented a workaround in https://github.com/oscar-system/Oscar.jl/pull/110). The issue happens in Julia 1.4.2 and also 1.5, but was fixed "by accident" (?) on the Julia master branch by PR #36200
To reproduce this, install
Oscar
but in a revision before the fix. So:Then there are several ways to trigger an issue. For example, this input
results in this:
and then
Or run the full test suite: