An injective definable function is strictly monotone on a subinterval
ProvedMonotonicity_Theorem.injective_implies_monotone_subintervalLet be an o-minimal structure over a dense linear order without endpoints , let be a definable function of one variable, and let satisfy . Assume is injective on , that is
Claim. There are with on which is strictly increasing or strictly decreasing.
This is the second half of the local core of the Monotonicity Theorem. The proof is again an application of o-minimality to a family of definable subsets of the line. Fix . By injectivity the two definable sets
partition . By o-minimality each of them is a finite union of points and intervals, so exactly one of them contains an interval with left endpoint ; thus is, immediately to the right of every point, either above or below its value at that point. The set of for which the first behaviour occurs is definable, hence it or its complement contains an interval, and on such an interval the local behaviour is uniform. A uniform one-sided comparison on an interval propagates to strict monotonicity on that interval, giving the required .
Formalization note. IncOnInterval and DecOnInterval are the predicates of the mission's window-loci definitions, stated for the points of lying in the interval. The hypothesis records that the interval lies in the domain of .
import Definitions.Def_Monotonicity_Theorem_Window_Loci
theorem Monotonicity_Theorem.injective_implies_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)
(hinj : forall x (hx : I x), openInterval D (Endpoint.finite u) (Endpoint.finite v) x ->
forall y (hy : I y), openInterval D (Endpoint.finite u) (Endpoint.finite v) y ->
f.toFun (Subtype.mk x hx) = f.toFun (Subtype.mk y hy) -> x = y) :
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)) /\
(IncOnInterval f u1 v1 \/ DecOnInterval f u1 v1) := by sorry