A definable function is constant or strictly monotone on a subinterval
ProvedMonotonicity_Theorem.exists_monotone_subintervalLet be an o-minimal structure over a dense linear order without endpoints , let be a definable function of one variable, and let be such that the open interval is contained in the domain .
Claim. There are with such that is constant on , or strictly increasing on , or strictly decreasing on :
This is the local core of the Monotonicity Theorem. The usual argument has two halves. First, either some fibre has nonempty interior inside — and then is constant on a subinterval — or every fibre is finite; in the latter case the image of is infinite, hence contains an interval, and taking the least preimage of each value yields a definable injection, so is injective on a subinterval. Second, an injective definable function on an interval is strictly monotone on some subinterval: for each the definable sets and partition a one-sided neighbourhood, so by o-minimality is locally strictly increasing or locally strictly decreasing to the right of every point, and one of the two behaviours persists on a whole subinterval.
Note that no hypothesis of infinitude of is needed beyond , which already forces to be infinite, and that the conclusion is exactly what is required to produce a good window around every point of .
import Definitions.Def_Monotonicity_Theorem_Window_Loci
theorem Monotonicity_Theorem.exists_monotone_subinterval {R : Type} (D : DenseLinearOrderNoEndpoints R)
(M : OMinimalStructure D) {I B : Set (Power R 1)} (f : DefinableFunction M I B)
(u v : R) (huv : D.lt u v)
(hsub : (openInterval D (Endpoint.finite u) (Endpoint.finite v)).Subset I) :
exists u1 v1 : R, D.lt u1 v1 /\
(openInterval D (Endpoint.finite u1) (Endpoint.finite v1)).Subset
(openInterval D (Endpoint.finite u) (Endpoint.finite v)) /\
(ConstOnInterval f u1 v1 \/ IncOnInterval f u1 v1 \/ DecOnInterval f u1 v1) := by sorry