@@ -4,37 +4,61 @@ import Mathlib.GroupTheory.Nilpotent
44import Mathlib.LinearAlgebra.Matrix.SpecialLinearGroup
55import Mathlib.Tactic.Positivity.Finset
66import LeanCamCombi.GrowthInGroups.VerySmallDoubling
7+ import LeanCamCombi.Mathlib.Data.Finset.Basic
78
89open Finset Fintype Group Matrix MulOpposite Real
910open scoped Combinatorics.Additive MatrixGroups Pointwise
1011
1112namespace GrowthInGroups.Lecture1
1213variable {G : Type *} [Group G] [DecidableEq G] {A X : Finset G} {n : ℕ} {K : ℝ}
1314
14- lemma card_pow_lt_card_pow_succ_of_pow_ne_closure (hX : X.Nonempty )
15+ lemma card_pow_lt_card_pow_succ_of_pow_ne_closure (hX : X.Nontrivial )
1516 (hXclosure : (X ^ n : Set G) ≠ Subgroup.closure (X : Set G)) : #(X ^ n) < #(X ^ (n + 1 )) := by
16- refine (hX.card_pow_mono <| Order.le_succ _).lt_of_ne fun h ↦ hXclosure ?_
17+ refine (hX.nonempty. card_pow_mono <| Order.le_succ _).lt_of_ne fun h ↦ hXclosure ?_
1718 dsimp at h
1819 sorry
1920
20- lemma card_pow_strictMonoOn (hX : X.Nonempty) :
21+ @[simp]
22+ lemma Set.biUnion_const {G} (s h : Set G) (hs : s.Nonempty) : ⋃ t ∈ s, h = h := by
23+ have := hs.to_subtype
24+ rw [Set.biUnion_eq_iUnion, Set.iUnion_const]
25+
26+ lemma Set.mul_subgroup_closure {Y : Set G} (hY : Y.Nonempty) : Y * Subgroup.closure Y = Subgroup.closure Y := by
27+ rw [←smul_eq_mul, ← Set.iUnion_smul_set]
28+ suffices ∀ a ∈ Y, a • (Subgroup.closure Y : Set G) = Subgroup.closure Y by simp (config := {contextual := true }) [this, hY]
29+ refine fun a ha ↦ smul_coe_set <| Subgroup.subset_closure ha
30+
31+ lemma Set.mul_subgroup_closure_pow {Y : Set G} (hY : Y.Nonempty) : Y ^ n * Subgroup.closure Y = Subgroup.closure Y := by
32+ induction n
33+ · simp
34+ next k hk => rw [pow_add, pow_one, mul_assoc, Set.mul_subgroup_closure hY, hk]
35+
36+ lemma card_pow_strictMonoOn (hX : X.Nontrivial) :
2137 StrictMonoOn (fun n ↦ #(X ^ n))
2238 {n | (X ^ (n - 1 ) : Set G) ≠ Subgroup.closure (X : Set G)} := by
23- refine strictMonoOn_of_lt_add_one ⟨fun _ _ m hm n ⟨_, hmn⟩ hn ↦ hm ?_⟩ fun n _ hn hn' ↦
24- card_pow_lt_card_pow_succ_of_pow_ne_closure hX hn'
25- sorry
26-
27- lemma card_pow_strictMono (hXclosure : (Subgroup.closure (X : Set G) : Set G).Infinite) :
39+ refine strictMonoOn_of_lt_add_one ⟨?_⟩ fun n _ _ hn ↦
40+ card_pow_lt_card_pow_succ_of_pow_ne_closure hX hn
41+ rintro - - n hn m ⟨-, hmn⟩ hm
42+ apply hn
43+ obtain rfl | hm₀ := m.eq_zero_or_pos
44+ · simp at hm
45+ rw [← hm]
46+ rw [eq_comm, coe_set_eq_one, Subgroup.closure_eq_bot_iff] at hm
47+ cases hX.not_subset_singleton hm
48+ calc (X : Set G) ^ (n - 1 ) = X ^ (n - m) * X ^ (m - 1 ) := by rw [← pow_add]; congr 1 ; omega
49+ _ = Subgroup.closure (X : Set G) := by rw [hm, Set.mul_subgroup_closure_pow hX.nonempty.to_set]
50+
51+ lemma card_pow_strictMono (hXclosure : (Subgroup.closure (X : Set G) : Set G).Infinite) (hX : X.Nontrivial) :
2852 StrictMono fun n ↦ #(X ^ n) := by
29- obtain rfl | hX := X.eq_empty_or_nonempty
30- · simp at hXclosure
3153 have h n : (X ^ (n - 1 ) : Set G) ≠ Subgroup.closure (X : Set G) :=
3254 fun h ↦ by simp [← h, ← coe_pow] at hXclosure
3355 simpa [h] using card_pow_strictMonoOn hX
3456
3557/-- The growth of a generating set in an infinite group is at least linear. -/
36- lemma fact_3_1_1 [Infinite G] (hXgen : Subgroup.closure (X : Set G) = ⊤) : n ≤ #(X ^ n) :=
37- (card_pow_strictMono (by simp [hXgen, Set.infinite_univ])).le_apply
58+ lemma fact_3_1_1 [Infinite G] (hXgen : Subgroup.closure (X : Set G) = ⊤) (hX : X.Nontrivial) : n + 1 ≤ #(X ^ n) := by
59+ induction n
60+ · simp
61+ next k ih => exact ih.trans_lt ((card_pow_strictMono (by simp [hXgen, Set.infinite_univ]) hX) k.lt_succ_self)
3862
3963/-- The growth of a set is at most exponential. -/
4064lemma fact_3_1_2 : #(X ^ n) ≤ #X ^ n := card_pow_le
@@ -86,7 +110,7 @@ lemma theorem_3_9 :
86110 #A ^ (1 + δ) ≤ #(A ^ 3 ) ∨ card SL(n, k) ^ (1 - ε) ≤ #A := sorry
87111
88112open scoped RightActions in
89- lemma fact_3_10 (hA : σₘ[A] ≤ 1 ) :
113+ lemma fact_3_10 (hA : σₘ[A] ≤ 1 ) (hA : A.Nonempty) :
90114 ∃ H : Subgroup G, ∀ a ∈ A, a • (H : Set G) = A ∧ (H : Set G) <• a = A := sorry
91115
92116open scoped Classical RightActions in
0 commit comments