Corollary 2.5: two elements whose translates of a set are disjoint and stay inside it generate a free subsemigroup
ProvedRosenblatt.injective_lift_of_forall_mul_mem_of_forall_mul_neLet be a group, let , and let be a nonempty subset such that
- — for every , both and ; and
- and are disjoint — for all , .
Then and generate a free subsemigroup: distinct words in two letters take distinct values when the letters are read as and .
The conclusion, precisely. Let be the free monoid on two letters — all finite words,
including the empty one, under concatenation — and let send a word
to the product of the corresponding elements, multiplied left to right
in the order the letters occur, with the empty word sent to . Only positive words occur: no
letter stands for an inverse and no cancellation is performed. The assertion is that is
injective. Since the empty word is included, this says in particular that no nonempty positive
word in and equals , and it gives
with injective — the published predicate
Chou.HasFreeSubsemigroupOfRankTwo — for the group . It does not assert anything about
inverses, so it is not a statement about a free subgroup.
What the hypotheses force. They are not vacuous, and they are satisfiable: one witness is the group of permutations of with , and the set of values of nonempty positive words. Two consequences are worth naming because they show the hypotheses are strong. Taking in the disjointness condition forces . And the two conditions together force , hence , to be infinite: a finite would have to contain the two disjoint sets and , each of the same size as . So every instance with finite is vacuous.
The nonemptiness of is a genuine hypothesis and is not recorded in the declaration's name; without it the disjointness condition holds trivially for any and the conclusion fails.
import Mathlib
namespace Rosenblatt
theorem injective_lift_of_forall_mul_mem_of_forall_mul_ne {G : Type*} [Group G] (a b : G)
(A : Set G) (hA : A.Nonempty)
(hmem : ∀ x ∈ A, a * x ∈ A ∧ b * x ∈ A)
(hne : ∀ x ∈ A, ∀ y ∈ A, a * x ≠ b * y) :
Function.Injective (FreeMonoid.lift ![a, b]) := by
sorry
end Rosenblatt