use oxilean_kernel::{BinderInfo, Declaration, Environment, Expr, Level, Name};
use super::types::{
ControlSystem, Functional, IsoperimetricProblem, SobolevSpace, Symmetry,
WassersteinGradientFlow,
};
pub fn fundamental_lemma_of_variational_calculus() -> &'static str {
"If f : [a,b] -> R is continuous and integral_{a}^{b} f(x) eta(x) dx = 0 \
for all smooth eta with eta(a) = eta(b) = 0, then f = 0 on [a,b]."
}
pub fn hamiltons_principle_statement() -> &'static str {
"The actual trajectory of a mechanical system between times t0 and t1 is the one \
for which the action S[q] = integral_{t0}^{t1} L(q, q-dot, t) dt is stationary, \
i.e., delta S = 0 for all variations vanishing at the endpoints."
}
pub fn noether_theorem_statement() -> &'static str {
"Every differentiable symmetry of the action of a physical system with conservative forces \
corresponds to a conservation law. Specifically, if the action is invariant under a \
one-parameter family of transformations, there exists a corresponding conserved current \
whose charge is constant along solutions of the equations of motion."
}
pub fn conservation_laws() -> Vec<(&'static str, &'static str)> {
vec![
("time translation invariance", "conservation of energy"),
(
"spatial translation invariance",
"conservation of linear momentum",
),
("rotational invariance", "conservation of angular momentum"),
(
"Lorentz boost invariance",
"conservation of centre-of-mass motion",
),
("U(1) gauge invariance", "conservation of electric charge"),
("SU(3) colour symmetry", "conservation of colour charge"),
]
}
pub fn direct_method_in_calculus_of_variations() -> &'static str {
"If a functional F : X -> R union {+inf} on a reflexive Banach space X is \
coercive (F(u) -> +inf as ||u|| -> inf) and weakly lower semicontinuous, \
then F attains its infimum on X. The infimum is achieved by taking any \
minimizing sequence, extracting a weakly convergent subsequence, and using \
weak lower semicontinuity."
}
pub fn pontryagin_maximum_principle() -> &'static str {
"Let (x*, u*) be an optimal state-control pair for the problem \
min_u integral_{t0}^{t1} L(x,u,t) dt subject to dx/dt = f(x,u,t). \
Then there exists an adjoint variable p(t) such that: \
(1) dp/dt = -∂H/∂x along (x*, u*, p); \
(2) u*(t) minimizes H(x*(t), u, p(t), t) over all admissible u at each t; \
(3) H(x*(t), u*(t), p(t), t) is constant in t when L, f are time-independent."
}
pub fn gamma_convergence_compactness_theorem() -> &'static str {
"Every sequence of functionals F_n : X -> R union {+inf} on a separable metric space X \
has a Gamma-convergent subsequence (Gamma-compactness). Moreover, if F_n Gamma-converges \
to F and x_n are quasi-minimizers of F_n with x_n -> x, then x minimizes F and \
F_n(x_n) -> F(x) (fundamental theorem of Gamma-convergence)."
}
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 pi_ty(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_ty(BinderInfo::Default, "_", a, b)
}
pub fn bvar(n: u32) -> Expr {
Expr::BVar(n)
}
pub fn pi(bi: BinderInfo, name: &str, dom: Expr, body: Expr) -> Expr {
pi_ty(bi, name, dom, body)
}
pub fn int_ty() -> Expr {
cst("Int")
}
pub fn nat_ty() -> Expr {
cst("Nat")
}
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 pair_ty(a: Expr, b: Expr) -> Expr {
app2(cst("Prod"), a, b)
}
pub fn euler_lagrange_op_ty() -> Expr {
arrow(
arrow(real_ty(), arrow(real_ty(), arrow(real_ty(), real_ty()))),
arrow(arrow(real_ty(), real_ty()), prop()),
)
}
pub fn second_variation_positive_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("Extremal"), prop()))
}
pub fn jacobi_condition_ty() -> Expr {
arrow(cst("Extremal"), bool_ty())
}
pub fn conjugate_point_ty() -> Expr {
arrow(cst("Extremal"), arrow(real_ty(), prop()))
}
pub fn legendre_condition_ty() -> Expr {
arrow(cst("Lagrangian"), arrow(cst("Extremal"), prop()))
}
pub fn strong_legendre_condition_ty() -> Expr {
arrow(cst("Lagrangian"), arrow(cst("Extremal"), prop()))
}
pub fn weierstrass_condition_ty() -> Expr {
arrow(
cst("Lagrangian"),
arrow(cst("Extremal"), arrow(real_ty(), prop())),
)
}
pub fn weak_local_minimum_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("Extremal"), prop()))
}
pub fn strong_local_minimum_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("Extremal"), prop()))
}
pub fn isoperimetric_constraint_ty() -> Expr {
arrow(arrow(real_ty(), real_ty()), arrow(real_ty(), prop()))
}
pub fn lagrange_multiplier_inf_dim_ty() -> Expr {
arrow(
cst("Functional"),
arrow(cst("Functional"), arrow(real_ty(), prop())),
)
}
pub fn isoperimetric_solution_ty() -> Expr {
arrow(
cst("IsoperimetricProblem"),
arrow(arrow(real_ty(), real_ty()), prop()),
)
}
pub fn costate_ty() -> Expr {
arrow(
cst("ControlSystem"),
arrow(arrow(real_ty(), real_ty()), prop()),
)
}
pub fn pontryagin_hamiltonian_ty() -> Expr {
arrow(
cst("ControlSystem"),
arrow(real_ty(), arrow(real_ty(), arrow(real_ty(), real_ty()))),
)
}
pub fn optimal_control_ty() -> Expr {
arrow(
cst("ControlSystem"),
arrow(arrow(real_ty(), real_ty()), prop()),
)
}
pub fn transversality_condition_ty() -> Expr {
arrow(cst("ControlSystem"), arrow(real_ty(), prop()))
}
pub fn hamilton_jacobi_equation_ty() -> Expr {
arrow(arrow(real_ty(), arrow(real_ty(), real_ty())), prop())
}
pub fn hjb_value_function_ty() -> Expr {
arrow(
cst("ControlSystem"),
arrow(arrow(real_ty(), arrow(real_ty(), real_ty())), prop()),
)
}
pub fn verification_theorem_ty() -> Expr {
arrow(cst("ControlSystem"), prop())
}
pub fn characteristic_method_ty() -> Expr {
arrow(arrow(real_ty(), arrow(real_ty(), real_ty())), prop())
}
pub fn geodesic_variational_problem_ty() -> Expr {
arrow(cst("Metric"), arrow(arrow(real_ty(), real_ty()), prop()))
}
pub fn geodesic_completeness_ty() -> Expr {
arrow(cst("Metric"), prop())
}
pub fn plateau_problem_ty() -> Expr {
arrow(
cst("Curve"),
arrow(arrow(real_ty(), arrow(real_ty(), real_ty())), prop()),
)
}
pub fn plateau_solution_douglas_ty() -> Expr {
arrow(cst("Curve"), prop())
}
pub fn bernstein_theorem_ty() -> Expr {
arrow(arrow(real_ty(), arrow(real_ty(), real_ty())), prop())
}
pub fn willmore_functional_ty() -> Expr {
arrow(cst("Surface"), real_ty())
}
pub fn willmore_inequality_ty() -> Expr {
arrow(cst("Surface"), prop())
}
pub fn mean_curvature_flow_ty() -> Expr {
arrow(cst("Surface"), arrow(real_ty(), cst("Surface")))
}
pub fn quasiconvex_envelope_ty() -> Expr {
arrow(arrow(real_ty(), real_ty()), arrow(real_ty(), real_ty()))
}
pub fn relaxed_functional_ty() -> Expr {
arrow(cst("Functional"), cst("Functional"))
}
pub fn gamma_convergence_ty() -> Expr {
arrow(
arrow(nat_ty(), cst("Functional")),
arrow(cst("Functional"), prop()),
)
}
pub fn gamma_limit_unique_ty() -> Expr {
arrow(arrow(nat_ty(), cst("Functional")), prop())
}
pub fn fundamental_theorem_gamma_convergence_ty() -> Expr {
arrow(
arrow(nat_ty(), cst("Functional")),
arrow(cst("Functional"), prop()),
)
}
pub fn epsilon_transition_layer_ty() -> Expr {
arrow(real_ty(), cst("Functional"))
}
pub fn wasserstein_distance_ty() -> Expr {
arrow(
arrow(real_ty(), real_ty()),
arrow(arrow(real_ty(), real_ty()), real_ty()),
)
}
pub fn optimal_transport_map_ty() -> Expr {
arrow(
arrow(real_ty(), real_ty()),
arrow(
arrow(real_ty(), real_ty()),
arrow(arrow(real_ty(), real_ty()), prop()),
),
)
}
pub fn brenier_theorem_ty() -> Expr {
arrow(
arrow(real_ty(), real_ty()),
arrow(arrow(real_ty(), real_ty()), prop()),
)
}
pub fn monge_ampere_equation_ty() -> Expr {
arrow(
arrow(real_ty(), real_ty()),
arrow(arrow(real_ty(), real_ty()), prop()),
)
}
pub fn kantorovich_duality_ty() -> Expr {
arrow(
arrow(real_ty(), real_ty()),
arrow(arrow(real_ty(), real_ty()), arrow(real_ty(), prop())),
)
}
pub fn wasserstein_gradient_flow_ty() -> Expr {
arrow(
cst("Functional"),
arrow(arrow(real_ty(), arrow(real_ty(), real_ty())), prop()),
)
}
pub fn jko_scheme_ty() -> Expr {
arrow(
cst("Functional"),
arrow(
real_ty(),
arrow(arrow(nat_ty(), arrow(real_ty(), real_ty())), prop()),
),
)
}
pub fn continuity_equation_ty() -> Expr {
arrow(arrow(real_ty(), arrow(real_ty(), real_ty())), prop())
}
pub fn build_variational_calculus_env(env: &mut Environment) -> Result<(), String> {
let axioms: &[(&str, Expr)] = &[
("EulerLagrangeOp", euler_lagrange_op_ty()),
("SecondVariationPositive", second_variation_positive_ty()),
("JacobiCondition", jacobi_condition_ty()),
("ConjugatePoint", conjugate_point_ty()),
("LegendreCondition", legendre_condition_ty()),
("StrongLegendreCondition", strong_legendre_condition_ty()),
("WeierstrassCondition", weierstrass_condition_ty()),
("WeakLocalMinimum", weak_local_minimum_ty()),
("StrongLocalMinimum", strong_local_minimum_ty()),
("IsoperimetricConstraint", isoperimetric_constraint_ty()),
("LagrangeMultiplierInfDim", lagrange_multiplier_inf_dim_ty()),
("IsoperimetricSolution", isoperimetric_solution_ty()),
("Costate", costate_ty()),
("PontryaginHamiltonian", pontryagin_hamiltonian_ty()),
("OptimalControl", optimal_control_ty()),
("TransversalityCondition", transversality_condition_ty()),
("HamiltonJacobiEquation", hamilton_jacobi_equation_ty()),
("HJBValueFunction", hjb_value_function_ty()),
("VerificationTheorem", verification_theorem_ty()),
("CharacteristicMethod", characteristic_method_ty()),
(
"GeodesicVariationalProblem",
geodesic_variational_problem_ty(),
),
("GeodesicCompleteness", geodesic_completeness_ty()),
("PlateauProblem", plateau_problem_ty()),
("PlateauSolutionDouglas", plateau_solution_douglas_ty()),
("BernsteinTheorem", bernstein_theorem_ty()),
("WillimoreFunctional", willmore_functional_ty()),
("WillmoreInequality", willmore_inequality_ty()),
("MeanCurvatureFlow", mean_curvature_flow_ty()),
("QuasiconvexEnvelope", quasiconvex_envelope_ty()),
("RelaxedFunctional", relaxed_functional_ty()),
("GammaConvergence", gamma_convergence_ty()),
("GammaLimitUnique", gamma_limit_unique_ty()),
(
"FundamentalTheoremGammaConvergence",
fundamental_theorem_gamma_convergence_ty(),
),
("EpsilonTransitionLayer", epsilon_transition_layer_ty()),
("WassersteinDistance", wasserstein_distance_ty()),
("OptimalTransportMap", optimal_transport_map_ty()),
("BrenierTheorem", brenier_theorem_ty()),
("MongeAmpereEquation", monge_ampere_equation_ty()),
("KantorovichDuality", kantorovich_duality_ty()),
("WassersteinGradientFlow", wasserstein_gradient_flow_ty()),
("JKOScheme", jko_scheme_ty()),
("ContinuityEquation", continuity_equation_ty()),
];
for (name, ty) in axioms {
env.add(Declaration::Axiom {
name: Name::str(*name),
univ_params: vec![],
ty: ty.clone(),
})
.map_err(|e| format!("Failed to add '{}': {:?}", name, e))?;
}
Ok(())
}
pub fn weierstrass_excess_statement() -> &'static str {
"An extremal q* provides a strong local minimum of J[q] = ∫ L(q, q', t) dt \
if and only if the Weierstrass excess function \
E(t, q, p, p*) = L(t,q,p) - L(t,q,p*) - (p-p*) L_{p*}(t,q,p*) ≥ 0 \
for all admissible (t, q) and all slopes p."
}
pub fn pontryagin_maximum_principle_full() -> &'static str {
"Let (x*, u*) be an optimal pair for min_u ∫ L(x,u,t) dt s.t. ẋ = f(x,u,t). \
Then there exists an adjoint p(t) and H(x,u,p,t) = L + p·f such that: \
(1) ṗ = -∂H/∂x, (2) H(x*(t), u*(t), p(t), t) = min_u H(x*(t), u, p(t), t), \
(3) H is constant if L, f do not depend on t, (4) transversality conditions hold."
}
pub fn brenier_theorem_statement() -> &'static str {
"Let μ and ν be probability measures on R^n, with μ absolutely continuous. \
Then the optimal L²-transport map T: R^n → R^n (minimising ∫|x-Tx|² dμ) \
exists uniquely, is the μ-a.e. gradient of a convex function φ: T = ∇φ, \
and φ satisfies the Monge-Ampère equation det(D²φ) = dμ/dν(∇φ)."
}
pub fn jko_theorem_statement() -> &'static str {
"Let F: P_2(R^n) → R be a λ-geodesically convex functional on the space of \
probability measures with finite second moment, equipped with the W_2 metric. \
Then the JKO minimising movement scheme ρ^{k+1} = argmin_ρ { F(ρ) + W_2²(ρ^k,ρ)/(2τ) } \
converges as τ → 0 to the gradient flow ∂_t ρ = div(ρ ∇(δF/δρ))."
}
pub fn vc_ext_euler_lagrange_pde_ty() -> Expr {
arrow(arrow(real_ty(), real_ty()), prop())
}
pub fn vc_ext_dirichlet_principle_ty() -> Expr {
pi(
BinderInfo::Default,
"W",
cst("SobolevSpace"),
arrow(cst("Functional"), prop()),
)
}
pub fn vc_ext_dirichlet_energy_ty() -> Expr {
arrow(arrow(real_ty(), real_ty()), real_ty())
}
pub fn vc_ext_harmonic_map_ty() -> Expr {
pi(
BinderInfo::Default,
"M",
cst("Manifold"),
pi(
BinderInfo::Default,
"N",
cst("Manifold"),
arrow(arrow(real_ty(), real_ty()), prop()),
),
)
}
pub fn vc_ext_biharmonic_map_ty() -> Expr {
pi(
BinderInfo::Default,
"M",
cst("Manifold"),
pi(
BinderInfo::Default,
"N",
cst("Manifold"),
arrow(arrow(real_ty(), real_ty()), prop()),
),
)
}
pub fn vc_ext_noether_current_pde_ty() -> Expr {
pi(
BinderInfo::Default,
"L",
cst("Lagrangian"),
pi(
BinderInfo::Default,
"sym",
cst("Symmetry"),
arrow(arrow(real_ty(), real_ty()), prop()),
),
)
}
pub fn vc_ext_conservation_law_pde_ty() -> Expr {
arrow(arrow(real_ty(), real_ty()), prop())
}
pub fn vc_ext_energy_momentum_tensor_ty() -> Expr {
pi(
BinderInfo::Default,
"L",
cst("Lagrangian"),
arrow(arrow(real_ty(), arrow(real_ty(), real_ty())), prop()),
)
}
pub fn vc_ext_yang_mills_functional_ty() -> Expr {
arrow(cst("Connection"), real_ty())
}
pub fn vc_ext_yang_mills_equation_ty() -> Expr {
arrow(cst("Connection"), prop())
}
pub fn vc_ext_anti_self_dual_connection_ty() -> Expr {
arrow(cst("Connection"), prop())
}
pub fn vc_ext_donaldson_invariant_ty() -> Expr {
pi(
BinderInfo::Default,
"M",
cst("Manifold"),
arrow(int_ty(), arrow(nat_ty(), int_ty())),
)
}
pub fn vc_ext_palais_smale_condition_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("SobolevSpace"), prop()))
}
pub fn vc_ext_mountain_pass_theorem_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("SobolevSpace"), prop()))
}
pub fn vc_ext_mountain_pass_level_ty() -> Expr {
arrow(cst("Functional"), real_ty())
}
pub fn vc_ext_saddle_point_theorem_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("SobolevSpace"), prop()))
}
pub fn vc_ext_linking_geometry_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("SobolevSpace"), prop()))
}
pub fn vc_ext_lyusternik_schnirelmann_category_ty() -> Expr {
arrow(cst("Manifold"), nat_ty())
}
pub fn vc_ext_ljusternik_schnirelmann_theorem_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("Manifold"), prop()))
}
pub fn vc_ext_cup_length_lower_bound_ty() -> Expr {
arrow(cst("Manifold"), arrow(nat_ty(), prop()))
}
pub fn vc_ext_morse_index_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("Extremal"), nat_ty()))
}
pub fn vc_ext_morse_inequality_weak_ty() -> Expr {
pi(
BinderInfo::Default,
"F",
cst("Functional"),
pi(
BinderInfo::Default,
"M",
cst("Manifold"),
arrow(nat_ty(), prop()),
),
)
}
pub fn vc_ext_morse_inequality_strong_ty() -> Expr {
pi(
BinderInfo::Default,
"F",
cst("Functional"),
pi(
BinderInfo::Default,
"M",
cst("Manifold"),
arrow(nat_ty(), prop()),
),
)
}
pub fn vc_ext_morse_complex_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("Manifold"), type0()))
}
pub fn vc_ext_floer_complex_ty() -> Expr {
arrow(cst("Functional"), arrow(cst("Manifold"), type0()))
}
pub fn vc_ext_gradient_flow_equation_ty() -> Expr {
pi(
BinderInfo::Default,
"F",
cst("Functional"),
pi(
BinderInfo::Default,
"M",
cst("Manifold"),
arrow(arrow(real_ty(), real_ty()), prop()),
),
)
}
pub fn vc_ext_ekeland_variational_principle_ty() -> Expr {
pi(
BinderInfo::Default,
"F",
cst("Functional"),
pi(
BinderInfo::Default,
"X",
cst("SobolevSpace"),
arrow(real_ty(), prop()),
),
)
}
pub fn vc_ext_approximate_minimiser_ty() -> Expr {
pi(
BinderInfo::Default,
"F",
cst("Functional"),
pi(
BinderInfo::Default,
"X",
cst("SobolevSpace"),
arrow(real_ty(), arrow(real_ty(), prop())),
),
)
}
pub fn vc_ext_isoperimetric_inequality_ty() -> Expr {
arrow(real_ty(), arrow(real_ty(), prop()))
}
pub fn vc_ext_constrained_euler_lagrange_ty() -> Expr {
pi(
BinderInfo::Default,
"F",
cst("Functional"),
pi(
BinderInfo::Default,
"G",
cst("Functional"),
arrow(real_ty(), prop()),
),
)
}
pub fn vc_ext_duality_gap_ty() -> Expr {
pi(
BinderInfo::Default,
"F",
cst("Functional"),
pi(
BinderInfo::Default,
"G",
cst("Functional"),
arrow(real_ty(), prop()),
),
)
}
pub fn vc_ext_geodesic_flow_ty() -> Expr {
pi(
BinderInfo::Default,
"M",
cst("Manifold"),
arrow(real_ty(), arrow(arrow(real_ty(), real_ty()), prop())),
)
}
pub fn vc_ext_cut_locus_ty() -> Expr {
pi(
BinderInfo::Default,
"M",
cst("Manifold"),
arrow(real_ty(), arrow(real_ty(), prop())),
)
}
pub fn vc_ext_index_form_bilinear_ty() -> Expr {
pi(
BinderInfo::Default,
"M",
cst("Manifold"),
arrow(
arrow(real_ty(), real_ty()),
arrow(arrow(real_ty(), real_ty()), real_ty()),
),
)
}
pub fn vc_ext_stable_minimal_surface_ty() -> Expr {
arrow(cst("Surface"), prop())
}
pub fn vc_ext_schoen_yau_positive_mass_ty() -> Expr {
arrow(cst("Manifold"), prop())
}
pub fn register_variational_calculus_extended(env: &mut Environment) -> Result<(), String> {
let base_types: &[(&str, fn() -> Expr)] = &[
("Manifold", || type0()),
("Connection", || type0()),
("Surface", || type0()),
("Lagrangian", || type0()),
("Symmetry", || type0()),
("Extremal", || type0()),
("SobolevSpace", || type0()),
];
for (name, mk_ty) in base_types {
let ty = mk_ty();
env.add(Declaration::Axiom {
name: Name::str(*name),
univ_params: vec![],
ty,
})
.ok();
}
let axioms: &[(&str, fn() -> Expr)] = &[
("EulerLagrangePDE", vc_ext_euler_lagrange_pde_ty),
("DirichletPrinciple", vc_ext_dirichlet_principle_ty),
("DirichletEnergy", vc_ext_dirichlet_energy_ty),
("HarmonicMap", vc_ext_harmonic_map_ty),
("BiharmonicMap", vc_ext_biharmonic_map_ty),
("NoetherCurrentPDE", vc_ext_noether_current_pde_ty),
("ConservationLawPDE", vc_ext_conservation_law_pde_ty),
("EnergyMomentumTensor", vc_ext_energy_momentum_tensor_ty),
("YangMillsFunctional", vc_ext_yang_mills_functional_ty),
("YangMillsEquation", vc_ext_yang_mills_equation_ty),
(
"AntiSelfDualConnection",
vc_ext_anti_self_dual_connection_ty,
),
("DonaldsonInvariant", vc_ext_donaldson_invariant_ty),
("PalaisSmaleCondition", vc_ext_palais_smale_condition_ty),
("MountainPassTheorem", vc_ext_mountain_pass_theorem_ty),
("MountainPassLevel", vc_ext_mountain_pass_level_ty),
("SaddlePointTheorem", vc_ext_saddle_point_theorem_ty),
("LinkingGeometry", vc_ext_linking_geometry_ty),
(
"LyusternikSchnirelmannCategory",
vc_ext_lyusternik_schnirelmann_category_ty,
),
(
"LjusternikSchnirelmannTheorem",
vc_ext_ljusternik_schnirelmann_theorem_ty,
),
("CupLengthLowerBound", vc_ext_cup_length_lower_bound_ty),
("MorseIndex", vc_ext_morse_index_ty),
("MorseInequalityWeak", vc_ext_morse_inequality_weak_ty),
("MorseInequalityStrong", vc_ext_morse_inequality_strong_ty),
("MorseComplex", vc_ext_morse_complex_ty),
("FloerComplex", vc_ext_floer_complex_ty),
("GradientFlowEquation", vc_ext_gradient_flow_equation_ty),
(
"EkelandVariationalPrinciple",
vc_ext_ekeland_variational_principle_ty,
),
("ApproximateMinimiser", vc_ext_approximate_minimiser_ty),
(
"IsoperimetricInequality",
vc_ext_isoperimetric_inequality_ty,
),
(
"ConstrainedEulerLagrange",
vc_ext_constrained_euler_lagrange_ty,
),
("DualityGap", vc_ext_duality_gap_ty),
("GeodesicFlow", vc_ext_geodesic_flow_ty),
("CutLocus", vc_ext_cut_locus_ty),
("IndexFormBilinear", vc_ext_index_form_bilinear_ty),
("StableMinimalSurface", vc_ext_stable_minimal_surface_ty),
(
"SchoenYauPositiveMassTheorem",
vc_ext_schoen_yau_positive_mass_ty,
),
];
for (name, mk_ty) in axioms {
let ty = mk_ty();
env.add(Declaration::Axiom {
name: Name::str(*name),
univ_params: vec![],
ty,
})
.map_err(|e| format!("Failed to add '{}': {:?}", name, e))?;
}
Ok(())
}
pub fn vc_ext_standard_noether_correspondences() -> Vec<(&'static str, &'static str)> {
vec![
("time translation", "energy E = ∫ T^{00} d³x"),
("space translation in x_i", "momentum P_i = ∫ T^{0i} d³x"),
("rotation in x_i-x_j plane", "angular momentum L_{ij}"),
("U(1) global phase", "electric charge Q = ∫ J^0 d³x"),
("scale invariance (conformal)", "dilatation current D^μ"),
("special conformal", "conformal current K^μ_ν"),
]
}