Skip to content

Commit 6d3e833

Browse files
committed
partial progress towards recovering char poly
1 parent 81e6242 commit 6d3e833

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed

src/CharPolyFrob.jl

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
"""
2+
prec_vec(polygon, relative_precision)
3+
4+
returns the vector by adding the height of the Hodge polygon and appropriate relative precision for each position
5+
6+
INPUTS:
7+
* "polygon" -- A SlopesPolygon struct describing a polygon whose values describe the
8+
divisibility of the roots.
9+
* "relative_precision" -- list, list of relative precisions, can be computed by "calculate_relative_precision"
10+
"""
11+
function prec_vec(polygon, relative_precision)
12+
vals = Int.(polygon.values)
13+
hodge_numbers = polygon.slopelengths
14+
prec_vec = reverse(vals)
15+
i = 1
16+
num_term = 1
17+
for j in 1:length(hodge_numbers)
18+
num_term = num_term + hodge_numbers[j]
19+
while i < num_term
20+
prec_vec[i] = prec_vec[i] + relative_precision[j]
21+
i = i + 1
22+
end
23+
end
24+
prec_vec[length(prec_vec)] = prec_vec[length(prec_vec)] + relative_precision[length(hodge_numbers)]
25+
26+
return prec_vec
27+
end
28+
29+
"""
30+
sign_fe(n, d, prec_vec, cp_coeffs)
31+
32+
returns the sign of the functional equation. The sign is always 1 if the dimension of the hypersurface is odd.
33+
34+
INPUTS:
35+
* "n" -- integer, dimension of the ambient projective space
36+
* "d" -- integer, degree of characteristic polygon = dimension of cohomology group
37+
* "prec_vec" -- list, prec_vec[i] = maximum p-adic valuation of the i-th coefficient of the Frobenius char poly?
38+
* "cp_coeffs" -- list, cp_coeffs[i] = i-th coefficient of the Frobenius char poly, which a priori may be incorrect
39+
"""
40+
function sign_fe(n, d, prec_vec, cp_coeffs)
41+
sign = 1
42+
dimension = n-1 # dimension of hypersurface = motivic weight = n-1
43+
if dimension % 2 == 0
44+
for i in 1:Int(floor(d/2))
45+
# NOTE-TO-SELF: check if the symmetric index is d-i or d+1-i
46+
p_power = p^(min(prec_vec[i], prec_vec[d-i]+((d-2*i)*dimension)//2))
47+
if (mod(cp[i], p_power) != 0) && (mod(cp[d-i], p_pwer) != 0)
48+
if 0 == mod(cp[i] + cp[d-i] * p^(((d-2*i)*dimension)//2), p_power)
49+
sign = -1
50+
else
51+
sign = 1
52+
@assert 0 == mod(cp[i] - cp[d-i] * p^(((d-2*i)*dimension)//2), p_power)
53+
end
54+
end
55+
end
56+
end
57+
58+
return sign
59+
end
60+
61+
"""
62+
apply_symmetry(n, d, p, prec_vec, cp_coeffs, mod, sign)
63+
64+
Update the coefficients in the Frobenius characteristic polynomial using symmetry in the coefficients coming from
65+
the Weil conjecture/Poincare duality
66+
67+
INPUTS:
68+
* "n" -- integer, dimension of the ambient projective space
69+
* "d" -- integer, degree of characteristic polygon = dimension of cohomology group
70+
* "p" -- integer, prime number
71+
* "prec_vec" -- list, prec_vec[i] = maximum p-adic valuation of the i-th coefficient of the Frobenius char poly?
72+
* "cp_coeffs" -- list, cp_coeffs[i] = i-th coefficient of the Frobenius char poly, which a priori may be incorrect
73+
* "mod" -- list, mod[i] = p^(prec_vec[i])
74+
* "sign" -- integer, sign of the functional equation
75+
"""
76+
function apply_symmetry(n, d, p, prec_vec, cp_coeffs, mod, sign)
77+
dimension = n-1
78+
for i in 1:(div(Pdeg, 2) + 1)
79+
k = ((d-2*i) * dimension)//2
80+
if prec_vec[i] >= prec_vec[d-i] + k
81+
prec_vec[d-i] = prec_vec[i] - k
82+
mod[d-i] = p^(prec_vec[d-i])
83+
cp_coeffs[d-i] = (sign * cp_coeffs[i])//p^k # ?
84+
cp_coeffs[d-i] = mod(cp_coeffs[d-i], mod[d-i])
85+
else
86+
prec_vec[i] = prec[d-i] + k
87+
mod[i] = p^(prec_vec[i])
88+
cp_coeffs[i] = sign * cp_coeffs[d-i] * p^k
89+
cp_coeffs[i] = mod(cp_coeffs[i], mod[i])
90+
end
91+
end
92+
93+
return cp_coeffs
94+
end

src/DeRham.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ include("ControlledReduction.jl")
2020
include("Frobenius.jl")
2121
include("FinalReduction.jl")
2222

23+
include("SlopesPolygon.jl")
24+
include("CharPolyFrob.jl")
25+
2326

2427
include("ZetaFunction.jl")
2528

0 commit comments

Comments
 (0)