Prove2Me
Navigate
DiscoverFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Thompson's group FFF on the unit interval and on the line

Definition
CannonFloydParry

by dbenbenn · Sep 15, 2026 · Mathlib 0df444a (Lean v4.33.1)

dynamical-systemsgroup-theorypiecewise-linearthompsons-group

Thompson's group FFF and the objects section 4 of Cannon-Floyd-Parry is about.

A real number is dyadic when it has the form m/2km/2^{k}m/2k with m∈Zm \in \mathbb{Z}m∈Z and k∈Nk \in \mathbb{N}k∈N. The source uses “dyadic rational numbers” without a defining sentence.

p. 216: “Let FFF be the set of piecewise linear homeomorphisms from the closed unit interval [0,1][0, 1][0,1] to itself that are differentiable except at finitely many dyadic rational numbers and such that on intervals of differentiability the derivatives are powers of 2.” p. 217: “Thus FFF is a subgroup of the group of all homeomorphisms from [0,1][0, 1][0,1] to [0,1][0, 1][0,1]. This group FFF is Thompson's group FFF.” Here IsThompson f says that fff is an order isomorphism of [0,1][0,1][0,1] for which there is a finite set BBB of dyadic reals such that on every closed subinterval whose interior misses BBB, fff is affine with slope an integer power of 222. The intercept of each affine piece is an arbitrary real: that the intercepts are in fact dyadic is a theorem, obtained by induction along the breakpoints from f(0)=0f(0)=0f(0)=0, and it is deliberately not part of the definition. Phrasing piecewise linearity on closed subintervals rather than on neighborhoods follows the source's formula f(x)=aix+bif(x) = a_i x + b_if(x)=ai​x+bi​ for xi−1≤x≤xix_{i-1} \le x \le x_ixi−1​≤x≤xi​ (p. 217), and it is what makes the affine formula available at the breakpoints themselves. F is the subgroup generated by the maps satisfying IsThompson, so the definition carries no proof obligation; that these maps already form a group is the mission's closure theorem.

Modeling an element as an order isomorphism builds in orientation preservation, which the source instead derives from the positivity of the derivatives; the two descriptions pick out the same set of maps.

A companion predicate places the same data on the whole real line: an order isomorphism of R\mathbb{R}R that is the identity outside [0,1][0,1][0,1] and satisfies the same piecewise condition. Extension by the identity off [0,1][0,1][0,1] and restriction to [0,1][0,1][0,1] are mutually inverse group isomorphisms between the two models (a fact no statement of the mission records), and the line model is the one that meets Brin and Squier's group of piecewise-linear homeomorphisms of the line.

Also defined: an element is trivial near 000 if it fixes every point of some [0,ε)[0,\varepsilon)[0,ε) and trivial near 111 if it fixes every point of some (1−ε,1](1-\varepsilon,1](1−ε,1]; and the support of an element is the set of points of [0,1][0,1][0,1] it moves. The source gives neither a defining sentence: it speaks of elements “trivial in neighborhoods of 000 and 111” (p. 228, Theorem 4.1) and of “functions with support in [a,b][a, b][a,b]” (p. 230, Lemma 4.4).

p. 217 (Example 1.1): “Two functions in FFF are the functions AAA and BBB defined below.”

A(x)={x2,0≤x≤12x−14,12≤x≤342x−1,34≤x≤1B(x)={x,0≤x≤12x2+14,12≤x≤34x−18,34≤x≤782x−1,78≤x≤1A(x) = \begin{cases} \frac{x}{2}, & 0 \le x \le \frac{1}{2} \\ x - \frac{1}{4}, & \frac{1}{2} \le x \le \frac{3}{4} \\ 2x - 1, & \frac{3}{4} \le x \le 1 \end{cases} \qquad B(x) = \begin{cases} x, & 0 \le x \le \frac{1}{2} \\ \frac{x}{2} + \frac{1}{4}, & \frac{1}{2} \le x \le \frac{3}{4} \\ x - \frac{1}{8}, & \frac{3}{4} \le x \le \frac{7}{8} \\ 2x - 1, & \frac{7}{8} \le x \le 1 \end{cases}A(x)=⎩⎨⎧​2x​,x−41​,2x−1,​0≤x≤21​21​≤x≤43​43​≤x≤1​B(x)=⎩⎨⎧​x,2x​+41​,x−81​,2x−1,​0≤x≤21​21​≤x≤43​43​≤x≤87​87​≤x≤1​

These two functions are constructed explicitly, so that FFF is provably not the trivial group.

Definition code
import Mathlib

namespace CannonFloydParry

/-! ### Dyadic rationals -/

/-- A dyadic rational: `m / 2 ^ k`. -/
def IsDyadic (x : ℝ) : Prop := ∃ (m : ℤ) (k : ℕ), x = (m : ℝ) / 2 ^ k

/-- The condition, on an order isomorphism `f` of `ℝ`, that defines the line realisation of
Thompson's group: `f` fixes every point of `(-∞, 0]` and every point of `[1, ∞)`, and is
piecewise linear with finitely many breakpoints, all breakpoints dyadic and every slope an
integer power of two.

This is a predicate on a single map, not a group; the group is `Fline` below.

Note the two fixing conditions are stated on the *closed* rays, so they also pin `f 0 = 0` and
`f 1 = 1`; that is load-bearing, and stronger than "the identity off `[0,1]`".  No continuity of
`f` is assumed or used — `≃o` carries an order isomorphism, not a homeomorphism — and nothing in
this file uses the topology of `ℝ` either.

Nothing is required of the intercepts: they are unconstrained reals here.  That they are in fact
dyadic is derived, by induction along the breakpoints, but that derivation is not in this file:
it happens inside the proof of the mission's closure theorem.  Following the source it must not
be assumed.

The piecewise-linearity is phrased as "affine on every closed interval whose interior avoids
the breakpoint set `B`", which is the usual textbook reading of *piecewise* linear and, unlike a
local formulation, pins the affine formula down **at** the breakpoints as well. -/
def IsThompsonLine (f : ℝ ≃o ℝ) : Prop :=
  (∀ x ≤ (0 : ℝ), f x = x) ∧ (∀ x, (1 : ℝ) ≤ x → f x = x) ∧
  ∃ B : Finset ℝ, (∀ b ∈ B, IsDyadic b) ∧
    ∀ x y : ℝ, x < y → Set.Ioo x y ∩ (B : Set ℝ) = ∅ →
      ∃ (n : ℤ) (c : ℝ), ∀ z ∈ Set.Icc x y, f z = 2 ^ n * z + c

/-- The unit interval, as a type: the coercion to a type of `Set.Icc (0 : ℝ) 1`, carrying the
order it inherits from `ℝ`.

This is the same set as Mathlib's `unitInterval`; at this revision both are `abbrev`s, hence
reducible, so lemmas stated about `unitInterval` apply to `UI` without transport.  That
convenience depends on `unitInterval` remaining an `abbrev`.

Two further naming hazards for anyone importing this file: `extend` collides with
`Function.extend` and `restrict` with `Set.restrict`, so a file that also opens those
namespaces must qualify; and `F` is a name many developments bind as a variable. -/
abbrev UI : Type := Set.Icc (0 : ℝ) 1

/-- The condition, on an order isomorphism `f` of `[0,1]`, that Cannon–Floyd–Parry's §1 places
on the elements of Thompson's group: `f` is piecewise linear with finitely many breakpoints, all
breakpoints dyadic and every slope an integer power of two.

This is a predicate on a single map, not a group; the group is `F` below.

The intercepts are unconstrained reals, and nothing in this file states that they are dyadic.
That they are is derived inside the proof of the mission's closure theorem, which is a
submission rather than anything published here. -/
def IsThompson (f : UI ≃o UI) : Prop :=
  ∃ B : Finset ℝ, (∀ b ∈ B, IsDyadic b) ∧
    ∀ x y : UI, (x : ℝ) < (y : ℝ) → Set.Ioo (x : ℝ) (y : ℝ) ∩ (B : Set ℝ) = ∅ →
      ∃ (n : ℤ) (c : ℝ),
        ∀ z : UI, (z : ℝ) ∈ Set.Icc (x : ℝ) (y : ℝ) → (f z : ℝ) = 2 ^ n * (z : ℝ) + c

/-- Extension by the identity off `[0,1]`, at the level of bare functions. -/
noncomputable def extendFun (f : UI → UI) (x : ℝ) : ℝ :=
  if h : x ∈ Set.Icc (0 : ℝ) 1 then (f ⟨x, h⟩ : ℝ) else x

lemma extendFun_of_mem (f : UI → UI) {x : ℝ} (h : x ∈ Set.Icc (0:ℝ) 1) :
    extendFun f x = (f ⟨x, h⟩ : ℝ) := dif_pos h

lemma extendFun_of_notMem (f : UI → UI) {x : ℝ} (h : x ∉ Set.Icc (0:ℝ) 1) :
    extendFun f x = x := dif_neg h

lemma extendFun_monotone (f : UI ≃o UI) : Monotone (extendFun f) := by
  intro a b hab
  by_cases ha : a ∈ Set.Icc (0:ℝ) 1 <;> by_cases hb : b ∈ Set.Icc (0:ℝ) 1
  · rw [extendFun_of_mem f ha, extendFun_of_mem f hb]
    exact (OrderIso.le_iff_le f).mpr hab
  · -- `a ∈ [0,1]`, `b ∉ [0,1]`, so `b > 1`
    rw [extendFun_of_mem f ha, extendFun_of_notMem f hb]
    have hb1 : (1:ℝ) < b := by
      rcases not_and_or.mp hb with h | h
      · exact absurd (le_trans ha.1 hab) h
      · exact lt_of_not_ge h
    exact le_of_lt (lt_of_le_of_lt (f ⟨a, ha⟩).2.2 hb1)
  · -- `a ∉ [0,1]`, `b ∈ [0,1]`, so `a < 0`
    rw [extendFun_of_notMem f ha, extendFun_of_mem f hb]
    have ha0 : a < (0:ℝ) := by
      rcases not_and_or.mp ha with h | h
      · exact lt_of_not_ge h
      · exact absurd (le_trans hab hb.2) h
    exact le_of_lt (lt_of_lt_of_le ha0 (f ⟨b, hb⟩).2.1)
  · rw [extendFun_of_notMem f ha, extendFun_of_notMem f hb]; exact hab

lemma extendFun_left_inv (f : UI ≃o UI) (x : ℝ) :
    extendFun f.symm (extendFun f x) = x := by
  by_cases h : x ∈ Set.Icc (0:ℝ) 1
  · rw [extendFun_of_mem f h, extendFun_of_mem f.symm (f ⟨x, h⟩).2]
    have : (⟨(f ⟨x, h⟩ : ℝ), (f ⟨x, h⟩).2⟩ : UI) = f ⟨x, h⟩ := rfl
    rw [this, f.symm_apply_apply]
  · rw [extendFun_of_notMem f h, extendFun_of_notMem f.symm h]

/-- Extension by the identity, as an order isomorphism of the line. -/
noncomputable def extend (f : UI ≃o UI) : ℝ ≃o ℝ where
  toFun := extendFun f
  invFun := extendFun f.symm
  left_inv := extendFun_left_inv f
  right_inv := fun x => by simpa using extendFun_left_inv f.symm x
  map_rel_iff' := by
    intro a b
    refine ⟨fun h => ?_, fun h => extendFun_monotone f h⟩
    have h' : extendFun f a ≤ extendFun f b := h
    have := extendFun_monotone f.symm h'
    rwa [extendFun_left_inv f a, extendFun_left_inv f b] at this

@[simp] lemma extend_apply (f : UI ≃o UI) (x : ℝ) : extend f x = extendFun f x := rfl

/-- Restriction to `[0,1]` of an order isomorphism of `ℝ` that fixes every point of
`(-∞, 0]` and every point of `[1, ∞)`.  Those closed rays, rather than the complement of
`[0,1]`, are what the hypotheses ask for: they also pin `L 0 = 0` and `L 1 = 1`, which is what
makes the restriction land in `[0,1]`. -/
noncomputable def restrict (L : ℝ ≃o ℝ) (hlo : ∀ x ≤ (0:ℝ), L x = x)
    (hhi : ∀ x, (1:ℝ) ≤ x → L x = x) : UI ≃o UI := by
  have h0 : L 0 = 0 := hlo 0 le_rfl
  have h1 : L 1 = 1 := hhi 1 le_rfl
  have hs0 : L.symm 0 = 0 := by rw [L.symm_apply_eq, h0]
  have hs1 : L.symm 1 = 1 := by rw [L.symm_apply_eq, h1]
  refine
    { toFun := fun z => ⟨L z, ?_, ?_⟩
      invFun := fun z => ⟨L.symm z, ?_, ?_⟩
      left_inv := ?_, right_inv := ?_, map_rel_iff' := ?_ }
  · have hx : L 0 ≤ L (z : ℝ) := (OrderIso.le_iff_le L).mpr z.2.1
    rwa [h0] at hx
  · have hx : L (z : ℝ) ≤ L 1 := (OrderIso.le_iff_le L).mpr z.2.2
    rwa [h1] at hx
  · have hx : L.symm 0 ≤ L.symm (z : ℝ) := (OrderIso.le_iff_le L.symm).mpr z.2.1
    rwa [hs0] at hx
  · have hx : L.symm (z : ℝ) ≤ L.symm 1 := (OrderIso.le_iff_le L.symm).mpr z.2.2
    rwa [hs1] at hx
  · intro z; ext; simp
  · intro z; ext; simp
  · intro a b; exact (OrderIso.le_iff_le L)

@[simp] lemma restrict_coe (L : ℝ ≃o ℝ) (hlo : ∀ x ≤ (0:ℝ), L x = x)
    (hhi : ∀ x, (1:ℝ) ≤ x → L x = x) (z : UI) :
    ((restrict L hlo hhi z : UI) : ℝ) = L (z : ℝ) := rfl

lemma zero_mem_UI : (0:ℝ) ∈ Set.Icc (0:ℝ) 1 := by constructor <;> norm_num

lemma one_mem_UI : (1:ℝ) ∈ Set.Icc (0:ℝ) 1 := by constructor <;> norm_num

/-- `f` is **trivial in a neighborhood of `0`**: it fixes every point of `[0, ε)` for some
`ε > 0`.  This is the condition appearing in Cannon–Floyd–Parry's Theorem 4.1. -/
def TrivialNearZero (f : UI ≃o UI) : Prop :=
  ∃ ε > (0:ℝ), ∀ z : UI, (z : ℝ) < ε → (f z : ℝ) = (z : ℝ)

/-- `f` is **trivial in a neighborhood of `1`**: for some `ε > 0` it fixes every point of
`(1 - ε, 1]`. -/
def TrivialNearOne (f : UI ≃o UI) : Prop :=
  ∃ ε > (0:ℝ), ∀ z : UI, (1:ℝ) - ε < (z : ℝ) → (f z : ℝ) = (z : ℝ)

/-- The **support** of `f`, as a subset of the line: the set of points of `[0,1]` it moves.

No closure is taken — this is the bare moved-point set, matching the convention of
Brin–Squier's same-named `BrinSquier.supp` for the line.  Nothing in this file consumes it: it
exists for a separate theorem of this mission, which asks for containment in a closed
interval.  Beware that in dynamics "support" often means the closure of this set, and that
`BrinSquier.supp` has the same name and the same result type `Set ℝ`, so a file that opens both
namespaces must qualify. -/
def supp (f : UI ≃o UI) : Set ℝ := {t : ℝ | ∃ z : UI, (z : ℝ) = t ∧ (f z : ℝ) ≠ t}

/-- Gluing two strictly monotone pieces that agree at the seam. -/
lemma strictMono_glue {f g : ℝ → ℝ} {c : ℝ}
    (hf : StrictMonoOn f (Set.Iic c)) (hg : StrictMonoOn g (Set.Ici c)) (hfg : f c = g c) :
    StrictMono (fun x => if x ≤ c then f x else g x) := by
  intro x y hxy
  by_cases hx : x ≤ c <;> by_cases hy : y ≤ c <;> simp only [hx, hy, if_true, if_false]
  · exact hf hx hy hxy
  · have h1 : f x ≤ f c := by
      rcases eq_or_lt_of_le hx with h | h
      · rw [h]
      · exact le_of_lt (hf hx (Set.mem_Iic.mpr le_rfl) h)
    have h2 : g c < g y := hg (Set.mem_Ici.mpr le_rfl) (le_of_lt (lt_of_not_ge hy)) (lt_of_not_ge hy)
    rw [hfg] at h1; linarith
  · exact absurd (lt_of_lt_of_le hxy hy) (not_lt.mpr (le_of_lt (lt_of_not_ge hx)))
  · exact hg (le_of_lt (lt_of_not_ge hx)) (le_of_lt (lt_of_not_ge hy)) hxy

/-- `A` on `[3/4, ∞)`, extended by the identity past `1`. -/
noncomputable def aFun3 : ℝ → ℝ := fun x => if x ≤ 1 then 2 * x - 1 else x

noncomputable def aFun2 : ℝ → ℝ := fun x => if x ≤ 3/4 then x - 1/4 else aFun3 x

noncomputable def aFun1 : ℝ → ℝ := fun x => if x ≤ 1/2 then x / 2 else aFun2 x

/-- Cannon–Floyd–Parry's `A`: `x/2` on `[0,1/2]`, `x - 1/4` on `[1/2,3/4]`, `2x - 1` on
`[3/4,1]`, the identity outside `[0,1]`. -/
noncomputable def aFun : ℝ → ℝ := fun x => if x ≤ 0 then x else aFun1 x

lemma strictMono_aFun3 : StrictMono aFun3 := by
  refine strictMono_glue (c := 1) (fun a _ b _ h => by linarith) (fun a _ b _ h => h) ?_
  norm_num

lemma strictMono_aFun2 : StrictMono aFun2 := by
  refine strictMono_glue (c := 3/4) (fun a _ b _ h => by linarith)
    (fun a _ b _ h => strictMono_aFun3 h) ?_
  simp [aFun3]; norm_num

lemma strictMono_aFun1 : StrictMono aFun1 := by
  refine strictMono_glue (c := 1/2) (fun a _ b _ h => by linarith)
    (fun a _ b _ h => strictMono_aFun2 h) ?_
  simp [aFun2]; norm_num

lemma strictMono_aFun : StrictMono aFun := by
  refine strictMono_glue (c := 0) (fun a _ b _ h => h)
    (fun a _ b _ h => strictMono_aFun1 h) ?_
  simp [aFun1, aFun2, aFun3]

/-- A right inverse for `aFun`, used only to get surjectivity: `aFun_aInv` proves
`aFun (aInv y) = y`, and nothing here proves the other composite. -/
noncomputable def aInv : ℝ → ℝ := fun y =>
  if y ≤ 0 then y
  else if y ≤ 1/4 then 2 * y
  else if y ≤ 1/2 then y + 1/4
  else if y ≤ 1 then (y + 1) / 2
  else y

lemma aFun_aInv (y : ℝ) : aFun (aInv y) = y := by
  unfold aFun aFun1 aFun2 aFun3 aInv
  split_ifs <;> linarith

lemma surjective_aFun : Function.Surjective aFun := fun y => ⟨aInv y, aFun_aInv y⟩

/-- `A` as an order isomorphism of the line. -/
noncomputable def lineA : ℝ ≃o ℝ :=
  StrictMono.orderIsoOfSurjective aFun strictMono_aFun surjective_aFun

@[simp] lemma lineA_apply (x : ℝ) : lineA x = aFun x := rfl

lemma aFun_of_le_zero {z : ℝ} (h : z ≤ 0) : aFun z = z := by
  unfold aFun aFun1 aFun2 aFun3; split_ifs <;> linarith

lemma aFun_of_mem1 {z : ℝ} (h0 : 0 ≤ z) (h1 : z ≤ 1/2) : aFun z = z / 2 := by
  unfold aFun aFun1 aFun2 aFun3; split_ifs <;> linarith

lemma aFun_of_mem2 {z : ℝ} (h0 : 1/2 ≤ z) (h1 : z ≤ 3/4) : aFun z = z - 1/4 := by
  unfold aFun aFun1 aFun2 aFun3; split_ifs <;> linarith

lemma aFun_of_mem3 {z : ℝ} (h0 : 3/4 ≤ z) (h1 : z ≤ 1) : aFun z = 2 * z - 1 := by
  unfold aFun aFun1 aFun2 aFun3; split_ifs <;> linarith

lemma aFun_of_one_le {z : ℝ} (h : 1 ≤ z) : aFun z = z := by
  unfold aFun aFun1 aFun2 aFun3; split_ifs <;> linarith

lemma lineA_of_le_zero : ∀ x ≤ (0:ℝ), lineA x = x := fun x hx => aFun_of_le_zero hx

lemma lineA_of_one_le : ∀ x, (1:ℝ) ≤ x → lineA x = x := fun x hx => aFun_of_one_le hx

/-- Cannon–Floyd–Parry's `A` of Example 1.1, as an element of the unit-interval model:
`x/2` on `[0,1/2]`, `x - 1/4` on `[1/2,3/4]` and `2x - 1` on `[3/4,1]`.

The name records that this is one of the two maps the source singles out, not that it
generates anything: that `A` and `B` generate `F` is Corollary 2.6, which is a milestone of
this mission and is not proved here. -/
noncomputable def mapA : UI ≃o UI := restrict lineA lineA_of_le_zero lineA_of_one_le

lemma half_mem_UI : (1/2 : ℝ) ∈ Set.Icc (0:ℝ) 1 := by constructor <;> norm_num

noncomputable def bFun3 : ℝ → ℝ := fun x => if x ≤ 1 then 2 * x - 1 else x

noncomputable def bFun2 : ℝ → ℝ := fun x => if x ≤ 7/8 then x - 1/8 else bFun3 x

noncomputable def bFun1 : ℝ → ℝ := fun x => if x ≤ 3/4 then x / 2 + 1/4 else bFun2 x

/-- Cannon–Floyd–Parry's `B`: the identity on `[0,1/2]`, `x/2 + 1/4` on `[1/2,3/4]`,
`x - 1/8` on `[3/4,7/8]`, `2x - 1` on `[7/8,1]`, and the identity outside `[0,1]`. -/
noncomputable def bFun : ℝ → ℝ := fun x => if x ≤ 1/2 then x else bFun1 x

lemma strictMono_bFun3 : StrictMono bFun3 := by
  refine strictMono_glue (c := 1) (fun a _ b _ h => by linarith) (fun a _ b _ h => h) ?_
  norm_num

lemma strictMono_bFun2 : StrictMono bFun2 := by
  refine strictMono_glue (c := 7/8) (fun a _ b _ h => by linarith)
    (fun a _ b _ h => strictMono_bFun3 h) ?_
  simp [bFun3]; norm_num

lemma strictMono_bFun1 : StrictMono bFun1 := by
  refine strictMono_glue (c := 3/4) (fun a _ b _ h => by linarith)
    (fun a _ b _ h => strictMono_bFun2 h) ?_
  simp [bFun2]; norm_num

lemma strictMono_bFun : StrictMono bFun := by
  refine strictMono_glue (c := 1/2) (fun a _ b _ h => h)
    (fun a _ b _ h => strictMono_bFun1 h) ?_
  simp [bFun1]; norm_num

/-- A right inverse for `bFun`, used only to get surjectivity, as `aInv` is for `aFun`. -/
noncomputable def bInv : ℝ → ℝ := fun y =>
  if y ≤ 1/2 then y
  else if y ≤ 5/8 then 2 * y - 1/2
  else if y ≤ 3/4 then y + 1/8
  else if y ≤ 1 then (y + 1) / 2
  else y

lemma bFun_bInv (y : ℝ) : bFun (bInv y) = y := by
  unfold bFun bFun1 bFun2 bFun3 bInv
  split_ifs <;> linarith

noncomputable def lineB : ℝ ≃o ℝ :=
  StrictMono.orderIsoOfSurjective bFun strictMono_bFun (fun y => ⟨bInv y, bFun_bInv y⟩)

@[simp] lemma lineB_apply (x : ℝ) : lineB x = bFun x := rfl

lemma bFun_of_le_half {z : ℝ} (h : z ≤ 1/2) : bFun z = z := by
  unfold bFun bFun1 bFun2 bFun3; split_ifs <;> linarith

lemma bFun_of_mem1 {z : ℝ} (h0 : 1/2 ≤ z) (h1 : z ≤ 3/4) : bFun z = z / 2 + 1/4 := by
  unfold bFun bFun1 bFun2 bFun3; split_ifs <;> linarith

lemma bFun_of_mem2 {z : ℝ} (h0 : 3/4 ≤ z) (h1 : z ≤ 7/8) : bFun z = z - 1/8 := by
  unfold bFun bFun1 bFun2 bFun3; split_ifs <;> linarith

lemma bFun_of_mem3 {z : ℝ} (h0 : 7/8 ≤ z) (h1 : z ≤ 1) : bFun z = 2 * z - 1 := by
  unfold bFun bFun1 bFun2 bFun3; split_ifs <;> linarith

lemma bFun_of_one_le {z : ℝ} (h : 1 ≤ z) : bFun z = z := by
  unfold bFun bFun1 bFun2 bFun3; split_ifs <;> linarith

lemma lineB_of_le_zero : ∀ x ≤ (0:ℝ), lineB x = x := fun x hx => bFun_of_le_half (by linarith)

lemma lineB_of_one_le : ∀ x, (1:ℝ) ≤ x → lineB x = x := fun x hx => bFun_of_one_le hx

/-- Cannon–Floyd–Parry's `B` of Example 1.1, as an element of the unit-interval model:
the identity on `[0,1/2]`, `x/2 + 1/4` on `[1/2,3/4]`, `x - 1/8` on `[3/4,7/8]` and `2x - 1`
on `[7/8,1]`.  As with `mapA`, the name does not claim that it generates anything. -/
noncomputable def mapB : UI ≃o UI := restrict lineB lineB_of_le_zero lineB_of_one_le

/-! ### The two groups

Each is the subgroup **generated by** the maps satisfying the corresponding condition. Nothing
is claimed here about that set already being closed under composition and inverses — that is
Cannon–Floyd–Parry's result on p. 217, and it is stated as a theorem of this mission rather
than assumed as part of the construction. -/

/-- Thompson's group `F`: the subgroup of order isomorphisms of `[0,1]` generated by the
piecewise-linear maps with dyadic breakpoints and power-of-two slopes. -/
def F : Subgroup (UI ≃o UI) := Subgroup.closure {f | IsThompson f}

/-- The line realisation of Thompson's group: the subgroup of order isomorphisms of `ℝ`
generated by the maps satisfying `IsThompsonLine`. -/
def Fline : Subgroup (ℝ ≃o ℝ) := Subgroup.closure {f | IsThompsonLine f}

/-- Membership in the generating set implies membership in `F`.  The converse is the content
of the closure theorem, and is not available here. -/
theorem mem_F_of_isThompson {f : UI ≃o UI} (hf : IsThompson f) : f ∈ F :=
  Subgroup.subset_closure hf

theorem mem_Fline_of_isThompsonLine {f : ℝ ≃o ℝ} (hf : IsThompsonLine f) : f ∈ Fline :=
  Subgroup.subset_closure hf

end CannonFloydParry
Source
Cannon, J. W., Floyd, W. J., Parry, W. R., Introductory notes on Richard Thompson's groups, L'Enseignement Mathematique (2) 42 (1996) 215-256, https://doi.org/10.5169/seals-87877, section 1 pp. 216-217 (definition of F and Example 1.1)
Read-back

What the Lean code literally says, in plain math · claude-opus-5

Read-back: a bundle of definitions

This file introduces no theorems about the objects listed below; it introduces the objects themselves. What follows is, for each one, exactly what it says of its argument.

Standing conventions used throughout

The real line. R\mathbb{R}R carries its usual linear order.

The unit interval as a type. Write

I  =  [0,1]  =  {x∈R  :  0≤x≤1},I \;=\; [0,1] \;=\; \{x \in \mathbb{R} \;:\; 0 \le x \le 1\},I=[0,1]={x∈R:0≤x≤1},

and regard III as a type whose elements are pairs consisting of a real number xxx together with a proof that 0≤x≤10 \le x \le 10≤x≤1. Two such elements are compared by comparing the underlying real numbers: z≤wz \le wz≤w in III means exactly z≤wz \le wz≤w in R\mathbb{R}R. So III is the closed interval [0,1][0,1][0,1] with the order inherited from R\mathbb{R}R, and it is the same set as the standard unit interval of the ambient library. Whenever an element of III appears in a formula about real numbers below, it is the underlying real number that is meant.

Order isomorphism. For linearly ordered sets XXX and YYY, an order isomorphism f:X→Yf : X \to Yf:X→Y is a bijection such that

f(a)≤f(b)  ⟺  a≤bfor all a,b∈X.f(a) \le f(b) \iff a \le b \qquad\text{for all } a, b \in X .f(a)≤f(b)⟺a≤bfor all a,b∈X.

This is the whole of the data: a bijection together with that two-sided equivalence. In particular no continuity, differentiability or piecewise structure is part of the notion, and nothing is postulated about fff beyond bijectivity and that equivalence. (For X=Y=RX = Y = \mathbb{R}X=Y=R continuity and strict monotonicity are nevertheless automatic consequences of the definition, not extra hypotheses; the same holds for X=Y=[0,1]X = Y = [0,1]X=Y=[0,1]. This is a consequence, not something the definitions below say.) I write f−1f^{-1}f−1 for the inverse order isomorphism.

The group of order isomorphisms. The order isomorphisms of a fixed linearly ordered set XXX onto itself form a group: the product f⋅gf \cdot gf⋅g is the composite x↦f(g(x))x \mapsto f(g(x))x↦f(g(x)), the identity element is the identity map, and the inverse is the inverse map. Two such groups occur below: the order isomorphisms of R\mathbb{R}R, and the order isomorphisms of [0,1][0,1][0,1].

Powers of two. Two different powers of 222 occur. In the dyadic-rational definition the exponent is a natural number k≥0k \ge 0k≥0 and 2k∈{1,2,4,8,… }2^k \in \{1, 2, 4, 8, \dots\}2k∈{1,2,4,8,…}. In the slope conditions the exponent is an integer nnn, possibly negative, and 2n2^n2n is the corresponding integer power of the real number 222; every such 2n2^n2n is strictly positive, and nnn may be 000, giving slope 111.

Finite breakpoint sets. A "finite set BBB of reals" below means a finite set in the strict sense — a listable, duplicate-free finite collection. It is allowed to be empty.


1. Dyadic rationals

For a real number xxx, the condition "xxx is dyadic" says:

there exist an integer mmm and a natural number kkk such that x=m/2kx = m / 2^{k}x=m/2k.

Both mmm and kkk are existentially quantified inside the condition; k≥0k \ge 0k≥0, so only non-negative powers of 222 appear in the denominator, and mmm may be negative or zero. Taking k=0k = 0k=0 shows every integer satisfies the condition, and m=0m = 0m=0 shows 000 does. So the condition holds of exactly the dyadic rationals m/2km/2^{k}m/2k, and it is a condition on an arbitrary real number (not on a number already known to be rational).


2. The line model: "fff is a Thompson map of the line"

Let fff be an order isomorphism of R\mathbb{R}R onto itself. The condition "fff is a Thompson map of the line" is the conjunction of three clauses:

(i) for every real xxx with x≤0x \le 0x≤0,   f(x)=x\;f(x) = xf(x)=x;

(ii) for every real xxx with 1≤x1 \le x1≤x,   f(x)=x\;f(x) = xf(x)=x;

(iii) there exists a finite set B⊆RB \subseteq \mathbb{R}B⊆R such that

  • (iii-a) every element b∈Bb \in Bb∈B is dyadic in the sense of §1, and
  • (iii-b) for all real numbers x,yx, yx,y with x<yx < yx<y and
(x,y)∩B=∅,(x,y) \cap B = \varnothing ,(x,y)∩B=∅,
there exist an integer $n$ and a real number $c$ such that
f(z)  =  2nz+cfor every z∈[x,y].f(z) \;=\; 2^{n} z + c \qquad \text{for every } z \in [x,y].f(z)=2nz+cfor every z∈[x,y].

Points to note about what this does and does not say.

The fixing clauses are on the closed rays. Clause (i) is stated for x≤0x \le 0x≤0, not x<0x < 0x<0, and clause (ii) for 1≤x1 \le x1≤x, not 1<x1 < x1<x. Instantiating them at x=0x = 0x=0 and x=1x = 1x=1 gives f(0)=0f(0) = 0f(0)=0 and f(1)=1f(1) = 1f(1)=1 as part of the condition.

The avoidance hypothesis is on the open interval, the conclusion on the closed one. The hypothesis in (iii-b) is that the open interval (x,y)(x,y)(x,y) misses BBB; the endpoints xxx and yyy may themselves lie in BBB. The conclusion asserts the single affine formula f(z)=2nz+cf(z) = 2^{n}z + cf(z)=2nz+c on the closed interval [x,y][x,y][x,y], endpoints included. So at a point of BBB that is an endpoint of two such intervals, the two affine formulas are each asserted to hold at that point.

The quantification over x,yx, yx,y is over all of R\mathbb{R}R. Nothing confines xxx and yyy to [0,1][0,1][0,1]; they range over all reals with x<yx < yx<y, so intervals straddling 000, or lying entirely to the left of 000, or containing [0,1][0,1][0,1], are all included.

The slope and intercept may depend on the interval. The integer nnn and the real ccc are quantified inside the "for all x,yx,yx,y", so different intervals may receive different nnn and ccc; only the finite set BBB is chosen once and for all.

The slope is an integer power of two, hence strictly positive. Slope 000 and negative slopes are excluded; slopes 12,14,…\tfrac12, \tfrac14, \dots21​,41​,… are permitted, since nnn may be negative.

The intercept is an unconstrained real number. The condition places no requirement on ccc — not dyadicity, not rationality. Nothing in this file asserts that ccc must be dyadic.

BBB is not pinned down as "the breakpoints". The condition only asks for some finite dyadic set with property (iii-b). It does not say that fff actually fails to be affine at any point of BBB, nor that BBB is minimal, nor that B⊆[0,1]B \subseteq [0,1]B⊆[0,1]. Any finite dyadic superset of a working BBB works as well.

The empty BBB is allowed, and forces the identity. If one takes B=∅B = \varnothingB=∅ the avoidance hypothesis is satisfied by every pair x<yx < yx<y, so (iii-b) then requires fff to be given by one affine formula on every closed interval, hence globally affine; together with clause (i) that forces fff to be the identity map. So the witness BBB can be empty only for f=idf = \mathrm{id}f=id.


3. The interval model: "fff is a Thompson map of [0,1][0,1][0,1]"

Let fff be an order isomorphism of [0,1][0,1][0,1] onto itself. The condition "fff is a Thompson map of [0,1][0,1][0,1]" says:

there exists a finite set B⊆RB \subseteq \mathbb{R}B⊆R such that every b∈Bb \in Bb∈B is dyadic, and such that for all x,y∈[0,1]x, y \in [0,1]x,y∈[0,1] with x<yx < yx<y and (x,y)∩B=∅(x,y) \cap B = \varnothing(x,y)∩B=∅, there exist an integer nnn and a real number ccc with

f(z)=2nz+cfor every z∈[0,1] with x≤z≤y.f(z) = 2^{n} z + c \qquad \text{for every } z \in [0,1] \text{ with } x \le z \le y .f(z)=2nz+cfor every z∈[0,1] with x≤z≤y.

Here xxx, yyy and zzz are elements of the type III, and the inequalities x<yx < yx<y, x≤z≤yx \le z \le yx≤z≤y and the equation are all read among the underlying real numbers; f(z)f(z)f(z) is likewise read as the real number underlying the value.

Points to note.

There is no fixing clause. Unlike §2, this condition has no analogue of clauses (i) and (ii). None is stated. (That f(0)=0f(0) = 0f(0)=0 and f(1)=1f(1) = 1f(1)=1 holds anyway for every order isomorphism of [0,1][0,1][0,1], since such a map must carry the least element to the least element and the greatest to the greatest, is a consequence of the ambient notion and not something this condition says.)

Everything said in §2 about BBB, about the open-versus-closed intervals, about the interval-dependence of nnn and ccc, about the positivity of 2n2^{n}2n, and about the intercept ccc being an unconstrained real, applies verbatim here. In particular the condition places no dyadicity requirement on ccc, and this file states nothing to that effect for this model.

BBB is a finite set of reals, not of points of [0,1][0,1][0,1]. It may contain points outside [0,1][0,1][0,1]; those simply never obstruct the avoidance hypothesis, since (x,y)⊆[0,1](x,y) \subseteq [0,1](x,y)⊆[0,1].

The affine conclusion is asserted only at points of [0,1][0,1][0,1]. The variable zzz ranges over III, so the formula is claimed at the points of [x,y][x,y][x,y] — which, since x,y∈[0,1]x,y \in [0,1]x,y∈[0,1], is all of [x,y][x,y][x,y] anyway.

The empty BBB is again allowed and again forces the identity, by the argument of §2 applied on [0,1][0,1][0,1]: a single affine formula on all of [0,1][0,1][0,1] with f(0)=0f(0)=0f(0)=0 and f(1)=1f(1)=1f(1)=1 is the identity.


4. Extension by the identity, at the level of bare maps

Given any function fff from III to III — no monotonicity, injectivity or surjectivity is required of it — and given a real number xxx, the extension of fff evaluated at xxx is the real number

f~(x)  =  {f(x)if 0≤x≤1,xotherwise.\widetilde{f}(x) \;=\; \begin{cases} f(x) & \text{if } 0 \le x \le 1,\\[2pt] x & \text{otherwise.}\end{cases}f​(x)={f(x)x​if 0≤x≤1,otherwise.​

This is a total function R→R\mathbb{R} \to \mathbb{R}R→R, defined by cases on whether xxx lies in [0,1][0,1][0,1]; on [0,1][0,1][0,1] its value is the real number underlying f(x)f(x)f(x), and off [0,1][0,1][0,1] it is xxx itself. The case distinction is made using the decidability of the membership x∈[0,1]x \in [0,1]x∈[0,1] supplied by classical logic, so the definition is not an algorithm.


5. Extension by the identity, as an order isomorphism of the line

Given an order isomorphism fff of [0,1][0,1][0,1], the extension of fff is the order isomorphism of R\mathbb{R}R whose

  • forward map is f~\widetilde{f}f​ of §4 applied to the underlying function of fff, and
  • inverse map is  ⋅ ~\widetilde{\,\cdot\,}⋅ of §4 applied to the underlying function of f−1f^{-1}f−1.

Concretely it is the map

x  ⟼  {f(x)0≤x≤1,xotherwise,x \;\longmapsto\; \begin{cases} f(x) & 0 \le x \le 1,\\ x & \text{otherwise,}\end{cases}x⟼{f(x)x​0≤x≤1,otherwise,​

packaged together with proofs that this map is a bijection of R\mathbb{R}R with the stated inverse and that a≤b  ⟺  f~(a)≤f~(b)a \le b \iff \widetilde{f}(a) \le \widetilde{f}(b)a≤b⟺f​(a)≤f​(b). Those three facts are established as part of the construction — they are the content the packaging carries — and the resulting object is by construction an element of the group of order isomorphisms of R\mathbb{R}R. It is recorded separately that the value of the extension at a real number xxx is literally f~(x)\widetilde{f}(x)f​(x).


6. Restriction to [0,1][0,1][0,1]

This construction takes three arguments:

  1. an order isomorphism LLL of R\mathbb{R}R onto itself;
  2. a proof that L(x)=xL(x) = xL(x)=x for every real xxx with x≤0x \le 0x≤0;
  3. a proof that L(x)=xL(x) = xL(x)=x for every real xxx with 1≤x1 \le x1≤x.

Both hypotheses are on the closed rays, and both are required: the construction is not defined for an LLL lacking them. From them, instantiated at x=0x = 0x=0 and x=1x = 1x=1, one gets L(0)=0L(0) = 0L(0)=0 and L(1)=1L(1) = 1L(1)=1, and hence also L−1(0)=0L^{-1}(0) = 0L−1(0)=0 and L−1(1)=1L^{-1}(1) = 1L−1(1)=1.

The result is the order isomorphism of [0,1][0,1][0,1] onto itself given by

z  ⟼  L(z),with inverse z  ⟼  L−1(z).z \;\longmapsto\; L(z), \qquad \text{with inverse } \quad z \;\longmapsto\; L^{-1}(z).z⟼L(z),with inverse z⟼L−1(z).

That both of these land in [0,1][0,1][0,1] — i.e. that 0≤L(z)≤10 \le L(z) \le 10≤L(z)≤1 and 0≤L−1(z)≤10 \le L^{-1}(z) \le 10≤L−1(z)≤1 whenever 0≤z≤10 \le z \le 10≤z≤1 — is established in the course of the construction, from L(0)=0L(0) = 0L(0)=0, L(1)=1L(1) = 1L(1)=1 and the order-preservation of LLL and L−1L^{-1}L−1; so are the two inverse identities and the equivalence z≤w  ⟺  L(z)≤L(w)z \le w \iff L(z) \le L(w)z≤w⟺L(z)≤L(w).

It is recorded separately that the underlying real number of the value of the restriction at z∈[0,1]z \in [0,1]z∈[0,1] is literally L(z)L(z)L(z).

Only L(0)=0L(0) = 0L(0)=0 and L(1)=1L(1) = 1L(1)=1 are actually used; the two hypotheses as stated are stronger than that, and the construction's value does not otherwise depend on them.


7. The group FFF (interval model)

FFF is defined to be

F  =  ⟨ { f  :  f is a Thompson map of [0,1] } ⟩,F \;=\; \big\langle\, \{\, f \;:\; f \text{ is a Thompson map of } [0,1] \,\} \,\big\rangle ,F=⟨{f:f is a Thompson map of [0,1]}⟩,

the subgroup generated by the set of all order isomorphisms of [0,1][0,1][0,1] satisfying the condition of §3. Precisely: it is the intersection of all subgroups of the group of order isomorphisms of [0,1][0,1][0,1] that contain that set — equivalently, the set of all finite products g1±1g2±1⋯gr±1g_1^{\pm 1} g_2^{\pm 1} \cdots g_r^{\pm 1}g1±1​g2±1​⋯gr±1​ with r≥0r \ge 0r≥0 and each gig_igi​ satisfying the condition of §3, the empty product being the identity map.

What is thereby asserted about the set S={ f:f is a Thompson map of [0,1] }S = \{\, f : f \text{ is a Thompson map of } [0,1] \,\}S={f:f is a Thompson map of [0,1]}:

  • that FFF is a subgroup of the group of order isomorphisms of [0,1][0,1][0,1] — closed under composition and inverses, and containing the identity;
  • that S⊆FS \subseteq FS⊆F, i.e. every map satisfying the condition of §3 is a member of FFF. This is recorded explicitly as a statement in its own right.

What is not thereby asserted:

  • not that SSS is itself closed under composition, or under inverses, or that it contains the identity map;
  • not that SSS is a subgroup;
  • not that F=SF = SF=S, i.e. not that every member of FFF satisfies the condition of §3. The definition leaves open that FFF is strictly larger than SSS. The converse inclusion F⊆SF \subseteq SF⊆S is not stated anywhere in this file.

So "a member of FFF" is, on the strength of this file alone, a strictly weaker predicate than "satisfies the condition of §3" (weaker in the sense of being implied by it, with the reverse implication unproved here).


8. The group of the line model

FlineF_{\text{line}}Fline​ is defined in exactly the same way, one level up:

Fline  =  ⟨ { f  :  f is a Thompson map of the line } ⟩,F_{\text{line}} \;=\; \big\langle\, \{\, f \;:\; f \text{ is a Thompson map of the line} \,\} \,\big\rangle ,Fline​=⟨{f:f is a Thompson map of the line}⟩,

the subgroup of the group of order isomorphisms of R\mathbb{R}R generated by the set of all order isomorphisms of R\mathbb{R}R satisfying the three-clause condition of §2 — i.e. the intersection of all subgroups of that group containing that set, equivalently all finite products of such maps and their inverses.

Everything said in §7 about what is and is not asserted applies here word for word, with §3 replaced by §2. In particular it is asserted that every map satisfying the condition of §2 is a member of FlineF_{\text{line}}Fline​ (this is recorded explicitly), and it is not asserted that the set of such maps is closed under composition or inverses, nor that every member of FlineF_{\text{line}}Fline​ satisfies the condition of §2.


9. Triviality near 000

For an order isomorphism fff of [0,1][0,1][0,1], the condition "fff is trivial near 000" says:

there exists a real number ε\varepsilonε with ε>0\varepsilon > 0ε>0 such that every z∈[0,1]z \in [0,1]z∈[0,1] with z<εz < \varepsilonz<ε satisfies f(z)=zf(z) = zf(z)=z.

So fff fixes every point of [0,ε)∩[0,1][0,\varepsilon) \cap [0,1][0,ε)∩[0,1] pointwise, the inequality being the strict one z<εz < \varepsilonz<ε.

Notes. The quantifier on ε\varepsilonε is ∃\exists∃, and ε\varepsilonε is not required to be at most 111; a witness ε>1\varepsilon > 1ε>1 is permitted, and such a witness would make the condition say that f(z)=zf(z) = zf(z)=z for every z∈[0,1]z \in [0,1]z∈[0,1], i.e. that fff is the identity. The condition is satisfied by the identity map (any ε\varepsilonε works), so it is not vacuous. The point z=0z = 0z=0 always satisfies z<εz < \varepsilonz<ε, so f(0)=0f(0) = 0f(0)=0 is among the assertions (though it holds for every order isomorphism of [0,1][0,1][0,1] anyway).


10. Triviality near 111

For an order isomorphism fff of [0,1][0,1][0,1], the condition "fff is trivial near 111" says:

there exists a real number ε\varepsilonε with ε>0\varepsilon > 0ε>0 such that every z∈[0,1]z \in [0,1]z∈[0,1] with 1−ε<z1 - \varepsilon < z1−ε<z satisfies f(z)=zf(z) = zf(z)=z.

So fff fixes every point of (1−ε,1]∩[0,1](1-\varepsilon, 1] \cap [0,1](1−ε,1]∩[0,1] pointwise. The inequality 1−ε<z1 - \varepsilon < z1−ε<z is strict, and the endpoint z=1z = 1z=1 is included (it always satisfies the inequality), so f(1)=1f(1) = 1f(1)=1 is among the assertions.

As in §9, ε\varepsilonε is not bounded above; a witness ε>1\varepsilon > 1ε>1 is permitted, and would force fff to be the identity on all of [0,1][0,1][0,1]. The identity map satisfies the condition.


11. The support of a map of [0,1][0,1][0,1]

For an order isomorphism fff of [0,1][0,1][0,1], the support of fff is defined as a subset of R\mathbb{R}R, namely

supp⁡f  =  { t∈R  :  ∃ z∈[0,1] with z=t and f(z)≠t }.\operatorname{supp} f \;=\; \{\, t \in \mathbb{R} \;:\; \exists\, z \in [0,1] \text{ with } z = t \text{ and } f(z) \ne t \,\} .suppf={t∈R:∃z∈[0,1] with z=t and f(z)=t}.

Because a point of [0,1][0,1][0,1] is determined by the real number underlying it, the existential is witnessed by at most one zzz, and the set is therefore exactly

supp⁡f  =  { t∈[0,1]  :  f(t)≠t },\operatorname{supp} f \;=\; \{\, t \in [0,1] \;:\; f(t) \ne t \,\},suppf={t∈[0,1]:f(t)=t},

the set of points of [0,1][0,1][0,1] that fff moves. It is a subset of [0,1][0,1][0,1]: a real number outside [0,1][0,1][0,1] never belongs to it, whatever fff does.

No closure is taken. This is the bare moved-point set, not its topological closure. It is empty precisely when fff is the identity map, and it does not contain 000 or 111 (those are fixed by every order isomorphism of [0,1][0,1][0,1]).


12. The map AAA

AAA is defined as the restriction (§6) to [0,1][0,1][0,1] of a particular order isomorphism α\alphaα of R\mathbb{R}R. That α\alphaα is defined by a nest of case distinctions; computing them out, the value of α\alphaα at a real number xxx is:

α(x)  =  {xx≤0,12x0<x≤12,x−1412<x≤34,2x−134<x≤1,x1<x.\alpha(x) \;=\; \begin{cases} x & x \le 0,\\[2pt] \tfrac{1}{2}x & 0 < x \le \tfrac12,\\[2pt] x - \tfrac14 & \tfrac12 < x \le \tfrac34,\\[2pt] 2x - 1 & \tfrac34 < x \le 1,\\[2pt] x & 1 < x . \end{cases}α(x)=⎩⎨⎧​x21​xx−41​2x−1x​x≤0,0<x≤21​,21​<x≤43​,43​<x≤1,1<x.​

The formulas agree at the four cut points, so the same function may equivalently be described on closed pieces: α\alphaα is the identity on (−∞,0](-\infty, 0](−∞,0], equals 12x\tfrac12 x21​x on [0,12][0,\tfrac12][0,21​], equals x−14x - \tfrac14x−41​ on [12,34][\tfrac12, \tfrac34][21​,43​], equals 2x−12x-12x−1 on [34,1][\tfrac34, 1][43​,1], and is the identity on [1,∞)[1,\infty)[1,∞). (Check: at x=0x=0x=0 both give 000; at x=12x = \tfrac12x=21​ both give 14\tfrac1441​; at x=34x = \tfrac34x=43​ both give 12\tfrac1221​; at x=1x=1x=1 both give 111.) It is established that α\alphaα is strictly increasing and surjective, hence an order isomorphism of R\mathbb{R}R, and that it fixes every point of (−∞,0](-\infty,0](−∞,0] and every point of [1,∞)[1,\infty)[1,∞) — which is what licenses the restriction of §6.

Therefore AAA is the order isomorphism of [0,1][0,1][0,1] onto itself given by

A(z)  =  {12z0≤z≤12,z−1412≤z≤34,2z−134≤z≤1.A(z) \;=\; \begin{cases} \tfrac12 z & 0 \le z \le \tfrac12,\\[2pt] z - \tfrac14 & \tfrac12 \le z \le \tfrac34,\\[2pt] 2z - 1 & \tfrac34 \le z \le 1 . \end{cases}A(z)=⎩⎨⎧​21​zz−41​2z−1​0≤z≤21​,21​≤z≤43​,43​≤z≤1.​

Its breakpoints are 12\tfrac1221​ and 34\tfrac3443​; its three slopes are 12\tfrac1221​, 111 and 222; and A(0)=0A(0) = 0A(0)=0, A(12)=14A(\tfrac12) = \tfrac14A(21​)=41​, A(34)=12A(\tfrac34) = \tfrac12A(43​)=21​, A(1)=1A(1) = 1A(1)=1. Sample interior values: A(14)=18A(\tfrac14) = \tfrac18A(41​)=81​, A(58)=38A(\tfrac58) = \tfrac38A(85​)=83​, A(78)=34A(\tfrac78) = \tfrac34A(87​)=43​. Its inverse is the restriction of α−1\alpha^{-1}α−1.

AAA is introduced as an element of the group of all order isomorphisms of [0,1][0,1][0,1]. Nothing in this file asserts that AAA satisfies the condition of §3, nor that AAA belongs to the group FFF of §7, nor that AAA together with the map of §13 generates anything.


13. The map BBB

BBB is likewise the restriction (§6) to [0,1][0,1][0,1] of a particular order isomorphism β\betaβ of R\mathbb{R}R, whose value at a real number xxx, with the case distinctions computed out, is:

β(x)  =  {xx≤12,12x+1412<x≤34,x−1834<x≤78,2x−178<x≤1,x1<x.\beta(x) \;=\; \begin{cases} x & x \le \tfrac12,\\[2pt] \tfrac12 x + \tfrac14 & \tfrac12 < x \le \tfrac34,\\[2pt] x - \tfrac18 & \tfrac34 < x \le \tfrac78,\\[2pt] 2x - 1 & \tfrac78 < x \le 1,\\[2pt] x & 1 < x . \end{cases}β(x)=⎩⎨⎧​x21​x+41​x−81​2x−1x​x≤21​,21​<x≤43​,43​<x≤87​,87​<x≤1,1<x.​

Note that the first clause is x≤12x \le \tfrac12x≤21​, so β\betaβ is the identity on the whole ray (−∞,12](-\infty, \tfrac12](−∞,21​] — in particular on all of (−∞,0](-\infty, 0](−∞,0], which is how the left-hand hypothesis of §6 is met. Again the formulas agree at the cut points (12↦12\tfrac12 \mapsto \tfrac1221​↦21​; 34↦58\tfrac34 \mapsto \tfrac5843​↦85​; 78↦34\tfrac78 \mapsto \tfrac3487​↦43​; 1↦11 \mapsto 11↦1), so β\betaβ may equivalently be described on closed pieces: the identity on (−∞,12](-\infty, \tfrac12](−∞,21​], 12x+14\tfrac12 x + \tfrac1421​x+41​ on [12,34][\tfrac12, \tfrac34][21​,43​], x−18x - \tfrac18x−81​ on [34,78][\tfrac34, \tfrac78][43​,87​], 2x−12x-12x−1 on [78,1][\tfrac78, 1][87​,1], the identity on [1,∞)[1,\infty)[1,∞). It is established that β\betaβ is strictly increasing and surjective, hence an order isomorphism of R\mathbb{R}R, and that it fixes (−∞,0](-\infty, 0](−∞,0] and [1,∞)[1,\infty)[1,∞) pointwise.

Therefore BBB is the order isomorphism of [0,1][0,1][0,1] onto itself given by

B(z)  =  {z0≤z≤12,12z+1412≤z≤34,z−1834≤z≤78,2z−178≤z≤1.B(z) \;=\; \begin{cases} z & 0 \le z \le \tfrac12,\\[2pt] \tfrac12 z + \tfrac14 & \tfrac12 \le z \le \tfrac34,\\[2pt] z - \tfrac18 & \tfrac34 \le z \le \tfrac78,\\[2pt] 2z - 1 & \tfrac78 \le z \le 1 . \end{cases}B(z)=⎩⎨⎧​z21​z+41​z−81​2z−1​0≤z≤21​,21​≤z≤43​,43​≤z≤87​,87​≤z≤1.​

So BBB is the identity on [0,12][0,\tfrac12][0,21​] and moves only points of (12,1)(\tfrac12, 1)(21​,1). Its breakpoints are 12\tfrac1221​, 34\tfrac3443​, 78\tfrac7887​; its four slopes are 111, 12\tfrac1221​, 111 and 222; and B(12)=12B(\tfrac12) = \tfrac12B(21​)=21​, B(34)=58B(\tfrac34) = \tfrac58B(43​)=85​, B(78)=34B(\tfrac78) = \tfrac34B(87​)=43​, B(1)=1B(1) = 1B(1)=1. Sample values: B(14)=14B(\tfrac14) = \tfrac14B(41​)=41​, B(58)=916B(\tfrac58) = \tfrac{9}{16}B(85​)=169​, B(1316)=1116B(\tfrac{13}{16}) = \tfrac{11}{16}B(1613​)=1611​, B(1516)=78B(\tfrac{15}{16}) = \tfrac78B(1615​)=87​.

As with AAA, nothing in this file asserts that BBB satisfies the condition of §3, that BBB belongs to FFF, or that AAA and BBB generate anything.

Human review
  • Endorsed by Shuze Chen · Sep 15, 2026

  • Endorsed by dbenbenn · Sep 15, 2026

    Confirmed by the mission captain (proposal self-audit).

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me