An injective definable function has a uniform germ pattern on a subinterval
ProvedMonotonicity_Theorem.exists_uniform_germ_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 .
Claim. There are with such that, on , has the below-above germ pattern, or has the above-below germ pattern:
This is the germ-theoretic heart of the step "an injective definable function is strictly monotone on a subinterval". The two patterns are defined in the accompanying definitions: below-above says that every point of the interval has a window inside the interval with on and on ; above-below is the mirror image.
Two ingredients are involved. The first is elementary o-minimality: for a definable subset of the line and a point , either contains or misses an interval with endpoint on each side, because is a finite union of points and intervals. Applying this to the definable sets and , whose union covers a punctured neighbourhood of by injectivity, shows that each point of falls into exactly one of four germ classes: below-above, above-below, below-below and above-above. The four classes are definable subsets of the line, so one of them contains a subinterval.
The second ingredient is the exclusion of the two extremal classes. On an interval of the above-above class every point would be a strict local minimum of , and on an interval of the below-below class every point would be a strict local maximum; neither is possible for a definable injective function, and ruling them out is the substantive part of the claim.
Formalization note. Injectivity on is stated pointwise for points of lying in . The two patterns are the predicates UniformBelowAbove and UniformAboveBelow of the accompanying definitions.
import Definitions.Def_Monotonicity_Theorem_Uniform_Germs
theorem Monotonicity_Theorem.exists_uniform_germ_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)) /\
(UniformBelowAbove D f u1 v1 \/ UniformAboveBelow D f u1 v1) := by sorry