use oxilean_kernel::{BinderInfo, Declaration, Environment, Expr, Level, Name};
use super::types::{
AbelianVariety, AbsoluteHeight, AutomorphicRepresentation, BerkovichSpace, CanonicalModel,
ChowGroup, DualAbelianVariety, EllipticCurve, FaltingsThm, GaloisRepresentation,
HeightFunction, Isogeny, LanglandsCorrespondence, LogarithmicHeight,
NearlyOrdinaryRepresentation, NeronModel, NorthcottProperty, PolarizedAbelianVariety,
ShimuraDatum, ShimuraVariety, TateModule, TolimaniConjecture, TorsionPoint,
};
pub fn app(f: Expr, a: Expr) -> Expr {
Expr::App(Box::new(f), Box::new(a))
}
pub fn app2(f: Expr, a: Expr, b: Expr) -> Expr {
app(app(f, a), b)
}
pub fn app3(f: Expr, a: Expr, b: Expr, c: Expr) -> Expr {
app(app2(f, a, b), c)
}
pub fn cst(s: &str) -> Expr {
Expr::Const(Name::str(s), vec![])
}
pub fn prop() -> Expr {
Expr::Sort(Level::zero())
}
pub fn type0() -> Expr {
Expr::Sort(Level::succ(Level::zero()))
}
pub fn type1() -> Expr {
Expr::Sort(Level::succ(Level::succ(Level::zero())))
}
pub fn pi(bi: BinderInfo, name: &str, dom: Expr, body: Expr) -> Expr {
Expr::Pi(bi, Name::str(name), Box::new(dom), Box::new(body))
}
pub fn arrow(a: Expr, b: Expr) -> Expr {
pi(BinderInfo::Default, "_", a, b)
}
pub fn bvar(n: u32) -> Expr {
Expr::BVar(n)
}
pub fn nat_ty() -> Expr {
cst("Nat")
}
pub fn int_ty() -> Expr {
cst("Int")
}
pub fn real_ty() -> Expr {
cst("Real")
}
pub fn bool_ty() -> Expr {
cst("Bool")
}
pub fn list_ty(elem: Expr) -> Expr {
app(cst("List"), elem)
}
pub fn abelian_variety_ty() -> Expr {
arrow(cst("Field"), arrow(nat_ty(), type0()))
}
pub fn polarized_abelian_variety_ty() -> Expr {
arrow(cst("Field"), arrow(nat_ty(), type0()))
}
pub fn tate_module_ty() -> Expr {
arrow(
cst("AbelianVarietyObj"),
arrow(cst("Prime"), cst("ZpModule")),
)
}
pub fn dual_abelian_variety_ty() -> Expr {
arrow(cst("AbelianVarietyObj"), cst("AbelianVarietyObj"))
}
pub fn poincare_reducibility_ty() -> Expr {
pi(
BinderInfo::Default,
"A",
cst("AbelianVarietyObj"),
app2(
cst("Exists"),
list_ty(cst("AbelianVarietyObj")),
app2(cst("IsogenousToProduct"), bvar(1), bvar(0)),
),
)
}
pub fn tate_module_rank_ty() -> Expr {
pi(
BinderInfo::Default,
"A",
cst("AbelianVarietyObj"),
pi(
BinderInfo::Default,
"p",
cst("Prime"),
app2(
cst("NatEq"),
app(
cst("ZpModuleRank"),
app2(cst("TateModule"), bvar(1), bvar(0)),
),
app(cst("NatMul2"), app(cst("AbelianVarietyDim"), bvar(1))),
),
),
)
}
pub fn isogeny_theorem_ty() -> Expr {
pi(
BinderInfo::Default,
"A",
cst("AbelianVarietyObj"),
pi(
BinderInfo::Default,
"B",
cst("AbelianVarietyObj"),
pi(
BinderInfo::Default,
"ell",
cst("Prime"),
arrow(
cst("IsFiniteField"),
app2(
cst("Iso"),
app3(cst("HomTensor"), bvar(2), bvar(1), bvar(0)),
app3(cst("TateModuleHom"), bvar(2), bvar(1), bvar(0)),
),
),
),
),
)
}
pub fn elliptic_curve_ty() -> Expr {
arrow(cst("Field"), type0())
}
pub fn isogeny_ty() -> Expr {
arrow(
cst("EllipticCurveObj"),
arrow(cst("EllipticCurveObj"), type0()),
)
}
pub fn torsion_point_ty() -> Expr {
arrow(cst("EllipticCurveObj"), arrow(nat_ty(), type0()))
}
pub fn height_function_ty() -> Expr {
arrow(
cst("EllipticCurveObj"),
arrow(cst("EllipticPointObj"), real_ty()),
)
}
pub fn mordell_weil_ty() -> Expr {
pi(
BinderInfo::Default,
"E",
cst("EllipticCurveObj"),
pi(
BinderInfo::Default,
"K",
cst("NumberField"),
app(
cst("IsFinitelyGenerated"),
app2(cst("EllipticPoints"), bvar(1), bvar(0)),
),
),
)
}
pub fn torsion_structure_ty() -> Expr {
pi(
BinderInfo::Default,
"E",
cst("EllipticCurveObj"),
pi(
BinderInfo::Default,
"n",
nat_ty(),
arrow(
cst("IsAlgClosedChar0"),
app2(
cst("Iso"),
app2(cst("TorsionPoint"), bvar(1), bvar(0)),
app2(
cst("DirectSum"),
app(cst("ZMod"), bvar(1)),
app(cst("ZMod"), bvar(1)),
),
),
),
),
)
}
pub fn weil_pairing_ty() -> Expr {
pi(
BinderInfo::Default,
"E",
cst("EllipticCurveObj"),
pi(
BinderInfo::Default,
"n",
nat_ty(),
arrow(
app2(
cst("ProductGroup"),
app2(cst("TorsionPoint"), bvar(1), bvar(0)),
app2(cst("TorsionPoint"), app(cst("DualEC"), bvar(1)), bvar(0)),
),
app(cst("RootsUnityGroup"), bvar(0)),
),
),
)
}
pub fn bsd_conjecture_ty() -> Expr {
pi(
BinderInfo::Default,
"E",
cst("EllipticCurveObj"),
app2(
cst("NatEq"),
app(cst("LFunctionOrder"), bvar(0)),
app(cst("MordellWeilRank"), bvar(0)),
),
)
}
pub fn shimura_datum_ty() -> Expr {
arrow(
cst("ReductiveGroup"),
arrow(cst("HermitianDomain"), type0()),
)
}
pub fn shimura_variety_ty() -> Expr {
arrow(
cst("ShimuraDatumObj"),
arrow(cst("CompactOpenSubgroup"), type0()),
)
}
pub fn canonical_model_ty() -> Expr {
arrow(
cst("ShimuraVarietyObj"),
arrow(cst("ReflexField"), cst("AlgebraicVariety")),
)
}
pub fn andre_oort_conjecture_ty() -> Expr {
pi(
BinderInfo::Default,
"Sh",
cst("ShimuraVarietyObj"),
pi(
BinderInfo::Default,
"Z",
app(cst("IrreducibleSubvariety"), bvar(0)),
arrow(
app2(cst("IsZariskiClosureSpecialPoints"), bvar(1), bvar(0)),
app2(cst("IsSpecialSubvariety"), bvar(1), bvar(0)),
),
),
)
}
pub fn shimura_reciprocity_ty() -> Expr {
pi(
BinderInfo::Default,
"Sh",
cst("ShimuraVarietyObj"),
pi(
BinderInfo::Default,
"x",
app(cst("SpecialPoint"), bvar(0)),
app2(
cst("PointEq"),
app2(cst("FrobeniusAction"), bvar(1), bvar(0)),
app(cst("ReflexNormOf"), bvar(0)),
),
),
)
}
pub fn galois_representation_ty() -> Expr {
arrow(
cst("GaloisGroup"),
arrow(nat_ty(), arrow(cst("Ring"), type0())),
)
}
pub fn nearly_ordinary_representation_ty() -> Expr {
arrow(cst("GaloisGroup"), arrow(cst("Prime"), type0()))
}
pub fn automorphic_representation_ty() -> Expr {
arrow(cst("ReductiveGroup"), type0())
}
pub fn langlands_correspondence_ty() -> Expr {
arrow(
cst("GaloisRepresentationObj"),
arrow(cst("AutomorphicRepresentationObj"), prop()),
)
}
pub fn local_langlands_gl_n_ty() -> Expr {
pi(
BinderInfo::Default,
"K",
cst("LocalField"),
pi(
BinderInfo::Default,
"n",
nat_ty(),
app2(
cst("Bijection"),
app2(cst("GaloisReps"), bvar(1), bvar(0)),
app(cst("AutomorphicReps"), app2(cst("GL"), bvar(0), bvar(1))),
),
),
)
}
pub fn global_langlands_ty() -> Expr {
pi(
BinderInfo::Default,
"pi_rep",
cst("AutomorphicRepresentationObj"),
app2(
cst("Exists"),
cst("GaloisRepresentationObj"),
app2(cst("IsAssociated"), bvar(0), bvar(1)),
),
)
}
pub fn sato_tate_ty() -> Expr {
pi(
BinderInfo::Default,
"E",
cst("EllipticCurveObj"),
arrow(
app(cst("IsNonCM"), bvar(0)),
app(cst("SatoTateEquidistributed"), bvar(0)),
),
)
}
pub fn absolute_height_ty() -> Expr {
arrow(cst("ProjectivePoint"), real_ty())
}
pub fn logarithmic_height_ty() -> Expr {
arrow(cst("ProjectivePoint"), real_ty())
}
pub fn northcott_property_ty() -> Expr {
arrow(type0(), prop())
}
pub fn faltings_thm_ty() -> Expr {
arrow(cst("AlgebraicCurve"), prop())
}
pub fn northcott_projective_ty() -> Expr {
pi(
BinderInfo::Default,
"n",
nat_ty(),
pi(
BinderInfo::Default,
"B",
real_ty(),
app(
cst("IsFinite"),
app2(cst("ProjectivePointsBoundedHeight"), bvar(1), bvar(0)),
),
),
)
}
pub fn faltings_mordell_ty() -> Expr {
pi(
BinderInfo::Default,
"C",
cst("AlgebraicCurve"),
pi(
BinderInfo::Default,
"K",
cst("NumberField"),
arrow(
app(cst("GeqTwo"), app(cst("CurveGenus"), bvar(1))),
app(
cst("IsFinite"),
app2(cst("RationalPoints"), bvar(1), bvar(0)),
),
),
),
)
}
pub fn neron_tate_parallelogram_ty() -> Expr {
pi(
BinderInfo::Default,
"E",
cst("EllipticCurveObj"),
pi(
BinderInfo::Default,
"P",
cst("EllipticPointObj"),
pi(
BinderInfo::Default,
"Q",
cst("EllipticPointObj"),
app2(
cst("RealEq"),
app2(
cst("Real.add"),
app(
cst("NeronTateHeight"),
app3(cst("EllipticAdd"), bvar(2), bvar(1), bvar(0)),
),
app(
cst("NeronTateHeight"),
app3(cst("EllipticSub"), bvar(2), bvar(1), bvar(0)),
),
),
app2(
cst("Real.add"),
app2(
cst("Real.mul"),
cst("Two"),
app(cst("NeronTateHeight"), bvar(1)),
),
app2(
cst("Real.mul"),
cst("Two"),
app(cst("NeronTateHeight"), bvar(0)),
),
),
),
),
),
)
}
pub fn perfectoid_space_ty() -> Expr {
type0()
}
pub fn diamond_ty() -> Expr {
arrow(cst("PerfectoidSpaceObj"), type0())
}
pub fn v_stack_ty() -> Expr {
arrow(cst("Site"), type0())
}
pub fn tilting_equivalence_ty() -> Expr {
pi(
BinderInfo::Default,
"X",
cst("PerfectoidSpaceObj"),
arrow(
app(cst("IsPerfectoid"), bvar(0)),
app2(
cst("IsEquiv"),
app(cst("TiltFunctor"), bvar(0)),
app(cst("TiltedSpace"), bvar(0)),
),
),
)
}
pub fn prismatic_cohomology_ty() -> Expr {
arrow(cst("Scheme"), arrow(cst("Prism"), cst("AbelianGroup")))
}
pub fn prismatic_comparison_ty() -> Expr {
pi(
BinderInfo::Default,
"X",
cst("Scheme"),
pi(
BinderInfo::Default,
"A",
cst("Prism"),
arrow(
app2(cst("PrismaticSpec"), bvar(1), bvar(0)),
app2(cst("CohomologyComparisonTriangle"), bvar(1), bvar(0)),
),
),
)
}
pub fn syntomic_cohomology_ty() -> Expr {
arrow(cst("Scheme"), arrow(nat_ty(), cst("AbelianGroup")))
}
pub fn fontaine_theory_ty() -> Expr {
arrow(
cst("PAdicField"),
arrow(cst("GaloisRepresentationObj"), cst("HodgeTateDecomp")),
)
}
pub fn fontaine_de_rham_comparison_ty() -> Expr {
pi(
BinderInfo::Default,
"K",
cst("PAdicField"),
pi(
BinderInfo::Default,
"V",
cst("GaloisRepresentationObj"),
arrow(
app(cst("IsDeRham"), bvar(0)),
app2(
cst("Iso"),
app(cst("TensorCdR"), app(cst("DdRModule"), bvar(0))),
app(cst("TensorCdR"), bvar(0)),
),
),
),
)
}
pub fn condensed_set_ty() -> Expr {
type0()
}
pub fn solid_abelian_group_ty() -> Expr {
arrow(cst("CondensedAbelianGroupObj"), prop())
}
pub fn liquid_vector_space_ty() -> Expr {
arrow(real_ty(), arrow(cst("CondensedVectorSpaceObj"), prop()))
}
pub fn analytic_ring_structure_ty() -> Expr {
pi(
BinderInfo::Default,
"G",
cst("CondensedAbelianGroupObj"),
arrow(
app(cst("IsSolid"), bvar(0)),
app(cst("ExistsAnalyticRingStr"), bvar(0)),
),
)
}
pub fn liquid_tensor_exact_ty() -> Expr {
pi(
BinderInfo::Default,
"p",
real_ty(),
pi(
BinderInfo::Default,
"V",
cst("CondensedVectorSpaceObj"),
pi(
BinderInfo::Default,
"W",
cst("CondensedVectorSpaceObj"),
arrow(
app2(cst("IsPLiquid"), bvar(2), bvar(1)),
app(
cst("IsExact"),
app3(cst("LiquidTensor"), bvar(2), bvar(1), bvar(0)),
),
),
),
),
)
}
pub fn motivic_cohomology_ty() -> Expr {
arrow(
cst("Scheme"),
arrow(int_ty(), arrow(int_ty(), cst("AbelianGroup"))),
)
}
pub fn mixed_motive_ty() -> Expr {
arrow(cst("NumberField"), type0())
}
pub fn slice_filtration_ty() -> Expr {
arrow(cst("MotiveObj"), arrow(nat_ty(), cst("MotiveObj")))
}
pub fn a1_homotopy_type_ty() -> Expr {
arrow(cst("Scheme"), cst("A1SpaceObj"))
}
pub fn motivic_chow_comparison_ty() -> Expr {
pi(
BinderInfo::Default,
"X",
cst("Scheme"),
pi(
BinderInfo::Default,
"n",
nat_ty(),
app2(
cst("Iso"),
app3(cst("MotivicCohomologyGrp"), bvar(1), bvar(0), bvar(0)),
app2(cst("ChowGroup"), bvar(1), bvar(0)),
),
),
)
}
pub fn beilinson_lichtenbaum_ty() -> Expr {
pi(
BinderInfo::Default,
"X",
cst("Scheme"),
pi(
BinderInfo::Default,
"n",
nat_ty(),
app2(cst("BeilinsonLichtenbaumIso"), bvar(1), bvar(0)),
),
)
}
pub fn voevodsky_cancellation_ty() -> Expr {
pi(
BinderInfo::Default,
"M",
cst("MotiveObj"),
pi(
BinderInfo::Default,
"N",
cst("MotiveObj"),
arrow(
app2(
cst("Iso"),
app(cst("TwistedMotive"), bvar(1)),
app(cst("TwistedMotive"), bvar(0)),
),
app2(cst("Iso"), bvar(1), bvar(0)),
),
),
)
}
pub fn berkovich_space_ty() -> Expr {
arrow(cst("AffinoidAlgebra"), type0())
}
pub fn affinoid_algebra_ty() -> Expr {
arrow(cst("NonArchField"), type0())
}
pub fn adic_space_ty() -> Expr {
arrow(cst("HuberRing"), type0())
}
pub fn rigid_analytic_space_ty() -> Expr {
arrow(cst("NonArchField"), type0())
}
pub fn rigid_gaga_ty() -> Expr {
pi(
BinderInfo::Default,
"X",
cst("ProjectiveScheme"),
pi(
BinderInfo::Default,
"K",
cst("NonArchField"),
app2(
cst("Equiv"),
app(cst("AlgCohSheaves"), bvar(1)),
app(
cst("AnCohSheaves"),
app2(cst("Analytify"), bvar(1), bvar(0)),
),
),
),
)
}
pub fn berkovich_skeleton_retract_ty() -> Expr {
pi(
BinderInfo::Default,
"X",
cst("BerkovichSpaceObj"),
app2(
cst("Exists"),
app(cst("Skeleton"), bvar(0)),
app2(cst("IsDeformRetract"), bvar(1), bvar(0)),
),
)
}
pub fn pro_etale_topos_ty() -> Expr {
arrow(cst("Scheme"), cst("Topos"))
}
pub fn pro_etale_comparison_ty() -> Expr {
pi(
BinderInfo::Default,
"X",
cst("Scheme"),
pi(
BinderInfo::Default,
"ell",
cst("Prime"),
app2(
cst("Iso"),
app2(cst("ProEtCohomology"), bvar(1), bvar(0)),
app2(cst("EtCohomology"), bvar(1), bvar(0)),
),
),
)
}
pub fn log_scheme_ty() -> Expr {
arrow(cst("Scheme"), arrow(cst("LogStructure"), type0()))
}
pub fn log_etale_cohomology_ty() -> Expr {
arrow(cst("LogSchemeObj"), arrow(nat_ty(), cst("AbelianGroup")))
}
pub fn log_crystalline_cohomology_ty() -> Expr {
arrow(cst("LogSchemeObj"), arrow(cst("Ring"), cst("AbelianGroup")))
}
pub fn neron_model_ty() -> Expr {
arrow(
cst("AbelianVarietyObj"),
arrow(cst("DVRing"), cst("GroupScheme")),
)
}
pub fn neron_mapping_property_ty() -> Expr {
pi(
BinderInfo::Default,
"A",
cst("AbelianVarietyObj"),
pi(
BinderInfo::Default,
"R",
cst("DVRing"),
pi(
BinderInfo::Default,
"S",
cst("SmoothSchemeObj"),
pi(
BinderInfo::Default,
"f",
app2(cst("RationalMap"), bvar(0), bvar(2)),
app2(
cst("UniqueExtension"),
app2(cst("NeronModel"), bvar(3), bvar(2)),
bvar(0),
),
),
),
),
)
}
pub fn semi_stable_reduction_ty() -> Expr {
pi(
BinderInfo::Default,
"A",
cst("AbelianVarietyObj"),
pi(
BinderInfo::Default,
"K",
cst("NumberField"),
app2(
cst("Exists"),
cst("NumberField"),
app(
cst("IsSemiStable"),
app2(cst("BaseChange"), bvar(1), bvar(0)),
),
),
),
)
}
pub fn faltings_height_ty() -> Expr {
arrow(cst("AbelianVarietyObj"), real_ty())
}
pub fn northcott_faltings_height_ty() -> Expr {
pi(
BinderInfo::Default,
"g",
nat_ty(),
pi(
BinderInfo::Default,
"K",
cst("NumberField"),
pi(
BinderInfo::Default,
"B",
real_ty(),
app(
cst("IsFinite"),
app3(cst("PPAVBoundedFaltingsHeight"), bvar(2), bvar(1), bvar(0)),
),
),
),
)
}
pub fn crystalline_cohomology_ty() -> Expr {
arrow(cst("Scheme"), arrow(cst("Ring"), cst("AbelianGroup")))
}
pub fn crystalline_de_rham_iso_ty() -> Expr {
pi(
BinderInfo::Default,
"X",
cst("SmoothProperScheme"),
pi(
BinderInfo::Default,
"k",
cst("PerfectField"),
app2(cst("CrystallineDeRhamIso"), bvar(1), bvar(0)),
),
)
}
pub fn build_env(env: &mut Environment) {
let base_types: &[(&str, Expr)] = &[
("Field", type0()),
("NumberField", type0()),
("LocalField", type0()),
("FiniteField", type0()),
("Ring", type0()),
("Prime", nat_ty()),
("Real", type0()),
("AlgebraicVariety", type0()),
("AlgebraicCurve", type0()),
("ProjectivePoint", type0()),
("EllipticPointObj", type0()),
("AbelianVarietyObj", type0()),
("EllipticCurveObj", type0()),
("ShimuraDatumObj", type0()),
("ShimuraVarietyObj", type0()),
("GaloisRepresentationObj", type0()),
("AutomorphicRepresentationObj", type0()),
("ReductiveGroup", type0()),
("HermitianDomain", type0()),
("CompactOpenSubgroup", type0()),
("ReflexField", type0()),
("GaloisGroup", type0()),
("ZpModule", type0()),
(
"TateModule",
arrow(
cst("AbelianVarietyObj"),
arrow(cst("Prime"), cst("ZpModule")),
),
),
(
"DualAbelianVariety",
arrow(cst("AbelianVarietyObj"), cst("AbelianVarietyObj")),
),
(
"AbelianVarietyDim",
arrow(cst("AbelianVarietyObj"), nat_ty()),
),
("ZpModuleRank", arrow(cst("ZpModule"), nat_ty())),
("NatMul2", arrow(nat_ty(), nat_ty())),
("NatEq", arrow(nat_ty(), arrow(nat_ty(), prop()))),
("Iso", arrow(type0(), arrow(type0(), prop()))),
("And", arrow(prop(), arrow(prop(), prop()))),
("Exists", arrow(type0(), arrow(type0(), prop()))),
("IsFinitelyGenerated", arrow(type0(), prop())),
("IsFinite", arrow(type0(), prop())),
(
"IsogenyMap",
arrow(
cst("EllipticCurveObj"),
arrow(cst("EllipticCurveObj"), type0()),
),
),
(
"TorsionPoint",
arrow(cst("EllipticCurveObj"), arrow(nat_ty(), type0())),
),
(
"EllipticPoints",
arrow(cst("EllipticCurveObj"), arrow(cst("NumberField"), type0())),
),
(
"IsogenousToProduct",
arrow(
cst("AbelianVarietyObj"),
arrow(list_ty(cst("AbelianVarietyObj")), prop()),
),
),
(
"HomTensor",
arrow(
cst("AbelianVarietyObj"),
arrow(cst("AbelianVarietyObj"), arrow(cst("Prime"), type0())),
),
),
(
"TateModuleHom",
arrow(
cst("AbelianVarietyObj"),
arrow(cst("AbelianVarietyObj"), arrow(cst("Prime"), type0())),
),
),
("IsFiniteField", prop()),
("ZMod", arrow(nat_ty(), type0())),
("DirectSum", arrow(type0(), arrow(type0(), type0()))),
("IsAlgClosedChar0", prop()),
(
"DualEC",
arrow(cst("EllipticCurveObj"), cst("EllipticCurveObj")),
),
("ProductGroup", arrow(type0(), arrow(type0(), type0()))),
("RootsUnityGroup", arrow(nat_ty(), type0())),
("LFunctionOrder", arrow(cst("EllipticCurveObj"), nat_ty())),
("MordellWeilRank", arrow(cst("EllipticCurveObj"), nat_ty())),
("Bijection", arrow(type0(), arrow(type0(), prop()))),
("GL", arrow(nat_ty(), arrow(cst("LocalField"), type0()))),
(
"GaloisReps",
arrow(cst("LocalField"), arrow(nat_ty(), type0())),
),
("AutomorphicReps", arrow(type0(), type0())),
(
"IsAssociated",
arrow(
cst("GaloisRepresentationObj"),
arrow(cst("AutomorphicRepresentationObj"), prop()),
),
),
("IsNonCM", arrow(cst("EllipticCurveObj"), prop())),
(
"SatoTateEquidistributed",
arrow(cst("EllipticCurveObj"), prop()),
),
(
"IrreducibleSubvariety",
arrow(cst("ShimuraVarietyObj"), type0()),
),
(
"IsZariskiClosureSpecialPoints",
arrow(cst("ShimuraVarietyObj"), arrow(type0(), prop())),
),
(
"IsSpecialSubvariety",
arrow(cst("ShimuraVarietyObj"), arrow(type0(), prop())),
),
("SpecialPoint", arrow(cst("ShimuraVarietyObj"), type0())),
("PointEq", arrow(type0(), arrow(type0(), prop()))),
(
"FrobeniusAction",
arrow(cst("ShimuraVarietyObj"), arrow(type0(), type0())),
),
("ReflexNormOf", arrow(type0(), type0())),
(
"ProjectivePointsBoundedHeight",
arrow(nat_ty(), arrow(real_ty(), type0())),
),
("CurveGenus", arrow(cst("AlgebraicCurve"), nat_ty())),
("GeqTwo", arrow(nat_ty(), prop())),
(
"RationalPoints",
arrow(cst("AlgebraicCurve"), arrow(cst("NumberField"), type0())),
),
("NeronTateHeight", arrow(cst("EllipticPointObj"), real_ty())),
("RealEq", arrow(real_ty(), arrow(real_ty(), prop()))),
("Real.add", arrow(real_ty(), arrow(real_ty(), real_ty()))),
("Real.mul", arrow(real_ty(), arrow(real_ty(), real_ty()))),
("Two", real_ty()),
(
"EllipticAdd",
arrow(
cst("EllipticCurveObj"),
arrow(
cst("EllipticPointObj"),
arrow(cst("EllipticPointObj"), cst("EllipticPointObj")),
),
),
),
(
"EllipticSub",
arrow(
cst("EllipticCurveObj"),
arrow(
cst("EllipticPointObj"),
arrow(cst("EllipticPointObj"), cst("EllipticPointObj")),
),
),
),
("Spec", arrow(cst("Field"), type0())),
(
"LongExactSeq",
arrow(type0(), arrow(type0(), arrow(type0(), prop()))),
),
("PerfectoidSpaceObj", type0()),
("Prism", type0()),
("PAdicField", type0()),
("AbelianGroup", type0()),
("HodgeTateDecomp", type0()),
("Site", type0()),
("IsPerfectoid", arrow(cst("PerfectoidSpaceObj"), prop())),
("TiltFunctor", arrow(cst("PerfectoidSpaceObj"), type0())),
("TiltedSpace", arrow(cst("PerfectoidSpaceObj"), type0())),
("IsEquiv", arrow(type0(), arrow(type0(), prop()))),
(
"PrismaticSpec",
arrow(cst("Scheme"), arrow(cst("Prism"), prop())),
),
(
"CohomologyComparisonTriangle",
arrow(cst("Scheme"), arrow(cst("Prism"), prop())),
),
("IsDeRham", arrow(cst("GaloisRepresentationObj"), prop())),
("TensorCdR", arrow(type0(), type0())),
("DdRModule", arrow(cst("GaloisRepresentationObj"), type0())),
("CondensedAbelianGroupObj", type0()),
("CondensedVectorSpaceObj", type0()),
("IsSolid", arrow(cst("CondensedAbelianGroupObj"), prop())),
(
"ExistsAnalyticRingStr",
arrow(cst("CondensedAbelianGroupObj"), prop()),
),
(
"IsPLiquid",
arrow(real_ty(), arrow(cst("CondensedVectorSpaceObj"), prop())),
),
("IsExact", arrow(type0(), prop())),
(
"LiquidTensor",
arrow(
real_ty(),
arrow(
cst("CondensedVectorSpaceObj"),
arrow(cst("CondensedVectorSpaceObj"), type0()),
),
),
),
("Scheme", type0()),
("MotiveObj", type0()),
("A1SpaceObj", type0()),
(
"MotivicCohomologyGrp",
arrow(
cst("Scheme"),
arrow(nat_ty(), arrow(nat_ty(), cst("AbelianGroup"))),
),
),
("ChowGroup", arrow(cst("Scheme"), arrow(nat_ty(), type0()))),
(
"BeilinsonLichtenbaumIso",
arrow(cst("Scheme"), arrow(nat_ty(), prop())),
),
("TwistedMotive", arrow(cst("MotiveObj"), cst("MotiveObj"))),
("AffinoidAlgebra", type0()),
("NonArchField", type0()),
("HuberRing", type0()),
("Topos", type0()),
("ProjectiveScheme", type0()),
("BerkovichSpaceObj", type0()),
("AlgCohSheaves", arrow(cst("ProjectiveScheme"), type0())),
("AnCohSheaves", arrow(type0(), type0())),
(
"Analytify",
arrow(cst("ProjectiveScheme"), arrow(cst("NonArchField"), type0())),
),
("Equiv", arrow(type0(), arrow(type0(), prop()))),
("Skeleton", arrow(cst("BerkovichSpaceObj"), type0())),
(
"IsDeformRetract",
arrow(cst("BerkovichSpaceObj"), arrow(type0(), prop())),
),
(
"ProEtCohomology",
arrow(cst("Scheme"), arrow(cst("Prime"), type0())),
),
(
"EtCohomology",
arrow(cst("Scheme"), arrow(cst("Prime"), type0())),
),
("LogStructure", type0()),
("LogSchemeObj", type0()),
("DVRing", type0()),
("GroupScheme", type0()),
("SmoothSchemeObj", type0()),
("SmoothProperScheme", type0()),
("PerfectField", type0()),
(
"RationalMap",
arrow(
cst("SmoothSchemeObj"),
arrow(cst("AbelianVarietyObj"), type0()),
),
),
(
"UniqueExtension",
arrow(cst("GroupScheme"), arrow(type0(), prop())),
),
(
"NeronModel",
arrow(
cst("AbelianVarietyObj"),
arrow(cst("DVRing"), cst("GroupScheme")),
),
),
("IsSemiStable", arrow(type0(), prop())),
(
"BaseChange",
arrow(cst("AbelianVarietyObj"), arrow(cst("NumberField"), type0())),
),
(
"PPAVBoundedFaltingsHeight",
arrow(
nat_ty(),
arrow(cst("NumberField"), arrow(real_ty(), type0())),
),
),
(
"CrystallineDeRhamIso",
arrow(
cst("SmoothProperScheme"),
arrow(cst("PerfectField"), prop()),
),
),
];
for (name, ty) in base_types {
env.add(Declaration::Axiom {
name: Name::str(*name),
univ_params: vec![],
ty: ty.clone(),
})
.ok();
}
let type_axioms: &[(&str, fn() -> Expr)] = &[
("AbelianVarietyType", abelian_variety_ty),
("PolarizedAbelianVarietyType", polarized_abelian_variety_ty),
("TateModuleType", tate_module_ty),
("DualAbelianVarietyType", dual_abelian_variety_ty),
("EllipticCurveType", elliptic_curve_ty),
("IsogenyType", isogeny_ty),
("TorsionPointType", torsion_point_ty),
("HeightFunctionType", height_function_ty),
("ShimuraDatumType", shimura_datum_ty),
("ShimuraVarietyType", shimura_variety_ty),
("CanonicalModelType", canonical_model_ty),
("GaloisRepresentationType", galois_representation_ty),
("NearlyOrdinaryRepType", nearly_ordinary_representation_ty),
(
"AutomorphicRepresentationType",
automorphic_representation_ty,
),
("LanglandsCorrespondenceType", langlands_correspondence_ty),
("AbsoluteHeightType", absolute_height_ty),
("LogarithmicHeightType", logarithmic_height_ty),
("NorthcottPropertyType", northcott_property_ty),
("FaltingsThmType", faltings_thm_ty),
("PerfectoidSpaceType", perfectoid_space_ty),
("DiamondType", diamond_ty),
("VStackType", v_stack_ty),
("PrismaticCohomologyType", prismatic_cohomology_ty),
("SyntomicCohomologyType", syntomic_cohomology_ty),
("FontaineTheoryType", fontaine_theory_ty),
("CondensedSetType", condensed_set_ty),
("SolidAbelianGroupType", solid_abelian_group_ty),
("LiquidVectorSpaceType", liquid_vector_space_ty),
("MotivicCohomologyType", motivic_cohomology_ty),
("MixedMotiveType", mixed_motive_ty),
("SliceFiltrationType", slice_filtration_ty),
("A1HomotopyTypeType", a1_homotopy_type_ty),
("BerkovichSpaceType", berkovich_space_ty),
("AffinoidAlgebraType", affinoid_algebra_ty),
("AdicSpaceType", adic_space_ty),
("RigidAnalyticSpaceType", rigid_analytic_space_ty),
("ProEtaleToposType", pro_etale_topos_ty),
("LogSchemeType", log_scheme_ty),
("LogEtaleCohomologyType", log_etale_cohomology_ty),
(
"LogCrystallineCohomologyType",
log_crystalline_cohomology_ty,
),
("NeronModelType", neron_model_ty),
("FaltingsHeightType", faltings_height_ty),
("CrystallineCohomologyType", crystalline_cohomology_ty),
];
for (name, mk_ty) in type_axioms {
env.add(Declaration::Axiom {
name: Name::str(*name),
univ_params: vec![],
ty: mk_ty(),
})
.ok();
}
let theorem_axioms: &[(&str, fn() -> Expr)] = &[
("poincare_reducibility", poincare_reducibility_ty),
("tate_module_rank", tate_module_rank_ty),
("isogeny_theorem", isogeny_theorem_ty),
("mordell_weil", mordell_weil_ty),
("torsion_structure", torsion_structure_ty),
("weil_pairing", weil_pairing_ty),
("bsd_conjecture", bsd_conjecture_ty),
("andre_oort_conjecture", andre_oort_conjecture_ty),
("shimura_reciprocity", shimura_reciprocity_ty),
("local_langlands_gl_n", local_langlands_gl_n_ty),
("global_langlands", global_langlands_ty),
("sato_tate", sato_tate_ty),
("northcott_projective", northcott_projective_ty),
("faltings_mordell", faltings_mordell_ty),
("neron_tate_parallelogram", neron_tate_parallelogram_ty),
("tilting_equivalence", tilting_equivalence_ty),
("prismatic_comparison", prismatic_comparison_ty),
(
"fontaine_de_rham_comparison",
fontaine_de_rham_comparison_ty,
),
("analytic_ring_structure", analytic_ring_structure_ty),
("liquid_tensor_exact", liquid_tensor_exact_ty),
("motivic_chow_comparison", motivic_chow_comparison_ty),
("beilinson_lichtenbaum", beilinson_lichtenbaum_ty),
("voevodsky_cancellation", voevodsky_cancellation_ty),
("rigid_gaga", rigid_gaga_ty),
("berkovich_skeleton_retract", berkovich_skeleton_retract_ty),
("pro_etale_comparison", pro_etale_comparison_ty),
("neron_mapping_property", neron_mapping_property_ty),
("semi_stable_reduction", semi_stable_reduction_ty),
("northcott_faltings_height", northcott_faltings_height_ty),
("crystalline_de_rham_iso", crystalline_de_rham_iso_ty),
];
for (name, mk_ty) in theorem_axioms {
env.add(Declaration::Axiom {
name: Name::str(*name),
univ_params: vec![],
ty: mk_ty(),
})
.ok();
}
}
pub fn weierstrass_discriminant(a: i64, b: i64) -> i64 {
-16 * (4 * a.pow(3) + 27 * b.pow(2))
}
pub fn j_invariant(a: i64, b: i64) -> Option<f64> {
let delta = weierstrass_discriminant(a, b);
if delta == 0 {
return None;
}
Some(-1728.0 * (4.0 * a as f64).powi(3) / (delta as f64))
}
pub fn hasse_bound(q: u64) -> (i64, i64) {
let two_sqrt_q = 2.0 * (q as f64).sqrt();
let center = (q as i64) + 1;
(center - two_sqrt_q as i64, center + two_sqrt_q as i64)
}
pub fn rank_lower_bound_2descent(_a: i64, _b: i64) -> usize {
0
}