Fix all sorries

laurent-lost-commits
Shad Amethyst 5 months ago
parent 6a2f4960d7
commit 6b2f21fec8

@ -736,22 +736,18 @@ by
· simp · simp
theorem AlgebraicCentralizerBasis.exists_rigidStabilizer_inv (H : Set G) [Nonempty α]: theorem AlgebraicCentralizerBasis.exists_rigidStabilizer_inv (H : Set G) [Nonempty α]:
∃ S ∈ RegularSupportBasis G α, H ∈ AlgebraicCentralizerBasis G → H = G•[S] := ∃ S,
(H ∈ AlgebraicCentralizerBasis G → S ∈ RegularSupportBasis G α ∧ H = G•[S])
∧ (H ∉ AlgebraicCentralizerBasis G → S = ∅) :=
by by
by_cases H_in_basis?: H ∈ AlgebraicCentralizerBasis G by_cases H_in_basis?: H ∈ AlgebraicCentralizerBasis G
swap swap
{ {
use Set.univ use
constructor constructor
rw [RegularSupportBasis.mem_iff] tauto
constructor intro _
· exact Set.univ_nonempty rfl
· use ∅
unfold RegularSupport.FiniteInter
simp
· intro H_in_basis
exfalso
exact H_in_basis? H_in_basis
} }
have ⟨H_ne_one, ⟨seed, H_eq⟩⟩ := (AlgebraicCentralizerBasis.mem_iff H).mp H_in_basis? have ⟨H_ne_one, ⟨seed, H_eq⟩⟩ := (AlgebraicCentralizerBasis.mem_iff H).mp H_in_basis?
@ -760,15 +756,15 @@ by
use RegularSupport.FiniteInter α seed use RegularSupport.FiniteInter α seed
constructor constructor
· rw [RegularSupportBasis.mem_iff] · intro _
constructor rw [RegularSupportBasis.mem_iff]
repeat' apply And.intro
· rw [<-regularSupportInter_nonEmpty_iff_neBot] · rw [<-regularSupportInter_nonEmpty_iff_neBot]
exact H_ne_one exact H_ne_one
· use seed · use seed
· intro _ · rw [rigidStabilizer_inter_eq_algebraicCentralizerInter]
exact H_eq
rw [rigidStabilizer_inter_eq_algebraicCentralizerInter] · tauto
exact H_eq
theorem AlgebraicCentralizerBasis.mem_of_regularSupportBasis {S : Set α} theorem AlgebraicCentralizerBasis.mem_of_regularSupportBasis {S : Set α}
(S_in_basis : S ∈ RegularSupportBasis G α) : (S_in_basis : S ∈ RegularSupportBasis G α) :
@ -806,8 +802,9 @@ by
apply mem_of_regularSupportBasis S_in_basis apply mem_of_regularSupportBasis S_in_basis
· intro H_in_basis · intro H_in_basis
simp simp
let ⟨S, S_in_rsupp, H_eq⟩ := AlgebraicCentralizerBasis.exists_rigidStabilizer_inv (α := α) H
specialize H_eq H_in_basis let ⟨S, ⟨S_props, _⟩⟩ := AlgebraicCentralizerBasis.exists_rigidStabilizer_inv (α := α) H
let ⟨S_in_basis, H_eq⟩ := S_props H_in_basis
symm at H_eq symm at H_eq
use S use S
@ -818,13 +815,20 @@ theorem rigidStabilizer_inv_eq [Nonempty α] {H : Set G} (H_in_basis : H ∈ Alg
H = G•[rigidStabilizer_inv (α := α) H] := H = G•[rigidStabilizer_inv (α := α) H] :=
by by
have spec := (AlgebraicCentralizerBasis.exists_rigidStabilizer_inv (α := α) H).choose_spec have spec := (AlgebraicCentralizerBasis.exists_rigidStabilizer_inv (α := α) H).choose_spec
exact spec.right H_in_basis exact (spec.left H_in_basis).right
theorem rigidStabilizer_in_basis [Nonempty α] (H : Set G) : theorem rigidStabilizer_inv_in_basis [Nonempty α] (H : Set G) :
rigidStabilizer_inv (α := α) H ∈ RegularSupportBasis G α := H ∈ AlgebraicCentralizerBasis G ↔ rigidStabilizer_inv (α := α) H ∈ RegularSupportBasis G α :=
by by
have spec := (AlgebraicCentralizerBasis.exists_rigidStabilizer_inv (α := α) H).choose_spec have spec := (AlgebraicCentralizerBasis.exists_rigidStabilizer_inv (α := α) H).choose_spec
exact spec.left constructor
· intro H_in_basis
exact (spec.left H_in_basis).left
· intro iH_in_basis
by_contra H_notin_basis
unfold rigidStabilizer_inv at iH_in_basis
rw [(spec.right H_notin_basis)] at iH_in_basis
exact RegularSupportBasis.empty_not_mem G α iH_in_basis
theorem rigidStabilizer_inv_eq' [Nonempty α] {S : Set α} (S_in_basis : S ∈ RegularSupportBasis G α) : theorem rigidStabilizer_inv_eq' [Nonempty α] {S : Set α} (S_in_basis : S ∈ RegularSupportBasis G α) :
rigidStabilizer_inv (α := α) (G := G) G•[S] = S := rigidStabilizer_inv (α := α) (G := G) G•[S] = S :=
@ -836,7 +840,7 @@ by
rw [SetLike.coe_set_eq, rigidStabilizer_eq_iff] at eq rw [SetLike.coe_set_eq, rigidStabilizer_eq_iff] at eq
· exact eq.symm · exact eq.symm
· exact RegularSupportBasis.regular S_in_basis · exact RegularSupportBasis.regular S_in_basis
· exact RegularSupportBasis.regular (rigidStabilizer_in_basis _) · exact RegularSupportBasis.regular ((rigidStabilizer_inv_in_basis _).mp GS_in_basis)
variable [Nonempty α] [HasNoIsolatedPoints α] [LocallyDense G α] variable [Nonempty α] [HasNoIsolatedPoints α] [LocallyDense G α]
@ -929,16 +933,57 @@ by
simp at res simp at res
exact res U_in_basis exact res U_in_basis
theorem AlgebraicCentralizerBasis.mem_of_regularSupportBasis_inv {S : Set G}
(S_in_basis : rigidStabilizer_inv (α := α) S ∈ RegularSupportBasis G α) : theorem rigidStabilizer_subset_iff_subset_inv [Nonempty α] {S : Set α} (S_in_basis : S ∈ RegularSupportBasis G α) {T : Set G} (T_in_basis : T ∈ AlgebraicCentralizerBasis G):
S ∈ AlgebraicCentralizerBasis G := (G•[S] : Set G) ⊆ T ↔ S ⊆ rigidStabilizer_inv T :=
by by
let ⟨T, T_in_basis, T_eq⟩ := (RegularSupportBasis.eq_inv_rist_image (G := G) (α := α)).symm ▸ S_in_basis nth_rw 1 [<-RigidStabilizer_rightInv (α := α) T_in_basis]
simp only at T_eq rw [SetLike.coe_subset_coe]
rw [rigidStabilizer_subset_iff (G := G)]
· exact RegularSupportBasis.regular S_in_basis
· apply RegularSupportBasis.regular (G := G)
rw [<-rigidStabilizer_inv_in_basis T]
assumption
-- Note: currently not provable, we need to add another requirement to rigidStabilizer_inv theorem subset_rigidStabilizer_iff_inv_subset [Nonempty α] {S : Set G} (S_in_basis : S ∈ AlgebraicCentralizerBasis G) {T : Set α} (T_in_basis : T ∈ RegularSupportBasis G α):
S ⊆ (G•[T] : Set G) ↔ rigidStabilizer_inv S ⊆ T :=
by
nth_rw 1 [<-RigidStabilizer_rightInv (α := α) S_in_basis]
rw [SetLike.coe_subset_coe]
rw [rigidStabilizer_subset_iff (G := G)]
· apply RegularSupportBasis.regular (G := G)
rw [<-rigidStabilizer_inv_in_basis S]
assumption
· exact RegularSupportBasis.regular T_in_basis
sorry theorem rigidStabilizer_inv_smulImage [Nonempty α] {S : Set G} (S_in_basis : S ∈ AlgebraicCentralizerBasis G) (h : G) :
h •'' rigidStabilizer_inv S = rigidStabilizer_inv (α := α) ((fun g => h * g * h⁻¹) '' S) :=
by
rw [smulImage_inv]
rw [<-rigidStabilizer_eq_iff (G := G)]
swap
{
apply RegularSupportBasis.regular (G := G)
rw [<-rigidStabilizer_inv_in_basis S]
exact S_in_basis
}
swap
{
rw [<-smulImage_regular]
apply RegularSupportBasis.regular (G := G)
rw [<-rigidStabilizer_inv_in_basis]
apply AlgebraicCentralizerBasis.conj_mem
assumption
}
rw [<-SetLike.coe_set_eq]
rw [<-rigidStabilizer_conj_image_eq]
repeat rw [RigidStabilizer_rightInv]
· rw [Set.image_image]
group
simp
· apply AlgebraicCentralizerBasis.conj_mem
assumption
· assumption
end RegularSupport end RegularSupport
@ -1919,9 +1964,10 @@ by
simp simp
rw [<-filter_of.mem_inv U_in_basis] rw [<-filter_of.mem_inv U_in_basis]
exact U_in_filter exact U_in_filter
exact rigidStabilizer_in_basis U rw [<-rigidStabilizer_inv_in_basis]
· intro ⟨iU_in_filter, iU_in_basis⟩ assumption
have U_in_basis := AlgebraicCentralizerBasis.mem_of_regularSupportBasis_inv iU_in_basis · intro ⟨iU_in_filter, U_in_basis⟩
rw [<-rigidStabilizer_inv_in_basis] at U_in_basis
constructor constructor
· simp · simp
rw [filter_of.mem_inv U_in_basis] rw [filter_of.mem_inv U_in_basis]
@ -1931,22 +1977,21 @@ by
theorem IsRubinFilterOf.subsets_ss_orbit {A : UltrafilterInBasis (RegularSupportBasis G α)} theorem IsRubinFilterOf.subsets_ss_orbit {A : UltrafilterInBasis (RegularSupportBasis G α)}
{B : UltrafilterInBasis (AlgebraicCentralizerBasis G)} {B : UltrafilterInBasis (AlgebraicCentralizerBasis G)}
(filter_of : IsRubinFilterOf A B) (filter_of : IsRubinFilterOf A B)
{V : Set α} (V_in_basis : V ∈ RegularSupportBasis G α) {V : Set α} -- (V_in_basis : V ∈ RegularSupportBasis G α)
{W : Set α} (W_in_basis : W ∈ RegularSupportBasis G α) : {W : Set α} (W_in_basis : W ∈ RegularSupportBasis G α) :
RSuppSubsets G W ⊆ RSuppOrbit A G•[V] ↔ AlgebraicSubsets (G•[W]) ⊆ AlgebraicOrbit B.filter G•[V] := RSuppSubsets G W ⊆ RSuppOrbit A G•[V] ↔ AlgebraicSubsets (G•[W]) ⊆ AlgebraicOrbit B.filter G•[V] :=
by by
have dec_eq : DecidableEq G := Classical.typeDecidableEq _
constructor constructor
· intro rsupp_ss · intro rsupp_ss
unfold AlgebraicSubsets AlgebraicOrbit unfold AlgebraicSubsets AlgebraicOrbit
intro U ⟨U_in_basis, U_ss_GW⟩ intro U ⟨U_in_basis, U_ss_GW⟩
let U' := rigidStabilizer_inv (α := α) U let U' := rigidStabilizer_inv (α := α) U
have U'_in_basis : U' ∈ RegularSupportBasis G α := rigidStabilizer_in_basis U have U'_in_basis : U' ∈ RegularSupportBasis G α := (rigidStabilizer_inv_in_basis U).mp U_in_basis
have U'_ss_W : U' ⊆ W := by have U'_ss_W : U' ⊆ W := by
rw [rigidStabilizer_subset_iff (G := G) (RegularSupportBasis.regular U'_in_basis) (RegularSupportBasis.regular W_in_basis)] rw [subset_rigidStabilizer_iff_inv_subset U_in_basis W_in_basis] at U_ss_GW
unfold_let exact U_ss_GW
rw [<-SetLike.coe_subset_coe]
rw [RigidStabilizer_rightInv (G := G) (α := α) U_in_basis]
assumption
let ⟨g, g_in_GV, ⟨W, W_in_A, gW_eq_U⟩⟩ := rsupp_ss ⟨U'_in_basis, U'_ss_W⟩ let ⟨g, g_in_GV, ⟨W, W_in_A, gW_eq_U⟩⟩ := rsupp_ss ⟨U'_in_basis, U'_ss_W⟩
use g use g
constructor constructor
@ -1955,8 +2000,6 @@ by
exact g_in_GV exact g_in_GV
} }
have dec_eq : DecidableEq G := Classical.typeDecidableEq _
have W_in_basis : W ∈ RegularSupportBasis G α := by have W_in_basis : W ∈ RegularSupportBasis G α := by
rw [smulImage_inv] at gW_eq_U rw [smulImage_inv] at gW_eq_U
rw [gW_eq_U] rw [gW_eq_U]
@ -1970,7 +2013,33 @@ by
rw [rigidStabilizer_conj_image_eq, gW_eq_U] rw [rigidStabilizer_conj_image_eq, gW_eq_U]
unfold_let unfold_let
exact RigidStabilizer_rightInv U_in_basis exact RigidStabilizer_rightInv U_in_basis
sorry · intro algsupp_ss
unfold RSuppSubsets RSuppOrbit
simp
intro U U_in_basis U_ss_W
let U' := (G•[U] : Set G)
have U'_in_basis : U' ∈ AlgebraicCentralizerBasis G :=
AlgebraicCentralizerBasis.mem_of_regularSupportBasis U_in_basis
have U'_ss_GW : U' ⊆ G•[W] := by
rw [SetLike.coe_subset_coe]
rw [<-rigidStabilizer_subset_iff]
· assumption
· exact RegularSupportBasis.regular U_in_basis
· exact RegularSupportBasis.regular W_in_basis
let ⟨g, g_in_GV, ⟨X, X_in_inter, X_eq⟩⟩ := algsupp_ss ⟨U'_in_basis, U'_ss_GW⟩
have X_in_basis := X_in_inter.right
rw [filter_of.mem_inter_inv] at X_in_inter
simp at g_in_GV
use g
refine ⟨g_in_GV, ⟨rigidStabilizer_inv X, X_in_inter.left, ?giX_eq_U⟩⟩
apply (And.right) at X_in_inter
rw [rigidStabilizer_inv_smulImage X_in_basis, X_eq]
unfold_let
rw [RigidStabilizer_leftInv U_in_basis]
def RubinFilter.from (F : UltrafilterInBasis (RegularSupportBasis G α)) (F_converges : ∃ p : α, F ≤ nhds p) : RubinFilter G where def RubinFilter.from (F : UltrafilterInBasis (RegularSupportBasis G α)) (F_converges : ∃ p : α, F ≤ nhds p) : RubinFilter G where
filter := (F.map_basis filter := (F.map_basis
@ -1999,7 +2068,8 @@ def RubinFilter.from (F : UltrafilterInBasis (RegularSupportBasis G α)) (F_conv
} }
rw [<-Subgroup.coe_top, <-rigidStabilizer_univ (α := α) (G := G)] rw [<-Subgroup.coe_top, <-rigidStabilizer_univ (α := α) (G := G)]
rw [<-(RubinFilter.from_isRubinFilterOf' F).subsets_ss_orbit (RegularSupportBasis.univ_mem G α) W_in_basis] -- (RegularSupportBasis.univ_mem G α)
rw [<-(RubinFilter.from_isRubinFilterOf' F).subsets_ss_orbit W_in_basis]
assumption assumption

@ -17,7 +17,38 @@ import Rubin.LocallyDense
namespace Rubin namespace Rubin
structure AlgebraicallyDisjointElem {G : Type _} [Group G] (f g h : G) := variable {G : Type _} [Group G]
theorem Commute.conj (f g h : G) : Commute (f * g * f⁻¹) h ↔ Commute g (f⁻¹ * h * f) := by
suffices ∀ (f g h : G), Commute (f * g * f⁻¹) h → Commute g (f⁻¹ * h * f) by
constructor
· apply this
· intro cg
symm
nth_rw 1 [<-inv_inv f]
apply this
symm
rw [inv_inv]
exact cg
intro f g h fgf_h_comm
unfold Commute SemiconjBy at *
rw [<-mul_assoc, <-mul_assoc]
rw [<-mul_assoc, <-mul_assoc] at fgf_h_comm
have gfh_eq : g * f⁻¹ * h = f⁻¹ * h * f * g * f⁻¹ := by
repeat rw [mul_assoc f⁻¹]
rw [<-fgf_h_comm]
group
rw [gfh_eq]
group
theorem Commute.conj' (f g h : G) : Commute (f⁻¹ * g * f) h ↔ Commute g (f * h * f⁻¹) := by
nth_rw 2 [<-inv_inv f]
nth_rw 3 [<-inv_inv f]
apply Commute.conj
structure AlgebraicallyDisjointElem (f g h : G) :=
non_commute: ¬Commute f h non_commute: ¬Commute f h
fst : G fst : G
snd : G snd : G
@ -28,16 +59,47 @@ structure AlgebraicallyDisjointElem {G : Type _} [Group G] (f g h : G) :=
namespace AlgebraicallyDisjointElem namespace AlgebraicallyDisjointElem
def comm_elem {G : Type _} [Group G] {f g h : G} (disj_elem : AlgebraicallyDisjointElem f g h) : G := def comm_elem {f g h : G} (disj_elem : AlgebraicallyDisjointElem f g h) : G :=
⁅disj_elem.fst, ⁅disj_elem.snd, h⁆⁆ ⁅disj_elem.fst, ⁅disj_elem.snd, h⁆⁆
@[simp] @[simp]
theorem comm_elem_eq {G : Type _} [Group G] {f g h : G} (disj_elem : AlgebraicallyDisjointElem f g h) : theorem comm_elem_eq {f g h : G} (disj_elem : AlgebraicallyDisjointElem f g h) :
disj_elem.comm_elem = ⁅disj_elem.fst, ⁅disj_elem.snd, h⁆⁆ := disj_elem.comm_elem = ⁅disj_elem.fst, ⁅disj_elem.snd, h⁆⁆ :=
by by
unfold comm_elem unfold comm_elem
simp simp
lemma comm_elem_conj (f g h i : G) :
⁅i * f * i⁻¹, ⁅i * g * i⁻¹, i * h * i⁻¹⁆⁆ = i * ⁅f, ⁅g, h⁆⁆ * i⁻¹ := by group
theorem conj {f g h : G} (disj_elem : AlgebraicallyDisjointElem f g h) (i : G): AlgebraicallyDisjointElem (i * f * i⁻¹) (i * g * i⁻¹) (i * h * i⁻¹) where
non_commute := by
rw [Commute.conj]
group
exact disj_elem.non_commute
fst := i * disj_elem.fst * i⁻¹
snd := i * disj_elem.snd * i⁻¹
fst_commute := by
rw [Commute.conj]
group
exact disj_elem.fst_commute
snd_commute := by
rw [Commute.conj]
group
exact disj_elem.snd_commute
comm_elem_nontrivial := by
intro eq_one
apply disj_elem.comm_elem_nontrivial
rw [comm_elem_conj, <-mul_right_inv i] at eq_one
apply mul_right_cancel at eq_one
nth_rw 2 [<-mul_one i] at eq_one
apply mul_left_cancel at eq_one
exact eq_one
comm_elem_commute := by
rw [comm_elem_conj, Commute.conj]
rw [(by group : i⁻¹ * (i * g * i⁻¹) * i = g)]
exact disj_elem.comm_elem_commute
end AlgebraicallyDisjointElem end AlgebraicallyDisjointElem
-- Also known as `η_G(f)`. -- Also known as `η_G(f)`.
@ -117,6 +179,16 @@ noncomputable instance coeFnAlgebraicallyDisjoint : CoeFun
instance coeAlgebraicallyDisjoint : Coe (AlgebraicallyDisjoint f g) (IsAlgebraicallyDisjoint f g) where instance coeAlgebraicallyDisjoint : Coe (AlgebraicallyDisjoint f g) (IsAlgebraicallyDisjoint f g) where
coe := mk coe := mk
theorem conj (is_alg_disj : IsAlgebraicallyDisjoint f g) (h : G) :
IsAlgebraicallyDisjoint (h * f * h⁻¹) (h * g * h⁻¹) :=
by
apply elim at is_alg_disj
apply mk
intro i nc
rw [Commute.conj] at nc
rw [(by group : i = h * (h⁻¹ * i * h) * h⁻¹)]
exact (is_alg_disj (h⁻¹ * i * h) nc).conj h
end IsAlgebraicallyDisjoint end IsAlgebraicallyDisjoint
-- TODO: find a better home for these lemmas -- TODO: find a better home for these lemmas
@ -357,8 +429,24 @@ by
simp simp
simp only [gxg12_eq] simp only [gxg12_eq]
ext x ext x
sorry simp
-- unfold IsAlgebraicallyDisjoint constructor
· intro ⟨y, y_disj, x_eq⟩
use g * y * g⁻¹
rw [<-gxg12_eq]
refine ⟨?disj, x_eq⟩
exact y_disj.conj g
· intro ⟨y, y_disj, x_eq⟩
use g⁻¹ * y * g
constructor
· rw [(by group : f = g⁻¹ * (g * f * g⁻¹) * g⁻¹⁻¹)]
nth_rw 6 [<-inv_inv g]
exact y_disj.conj g⁻¹
· nth_rw 3 [<-inv_inv g]
simp only [conj_pow]
group
group at x_eq
exact x_eq
@[simp] @[simp]
@ -424,6 +512,61 @@ theorem AlgebraicCentralizerBasis.empty_not_mem : ∅ ∉ AlgebraicCentralizerBa
rw [<-Set.nonempty_iff_ne_empty] rw [<-Set.nonempty_iff_ne_empty]
exact Subgroup.coe_nonempty _ exact Subgroup.coe_nonempty _
theorem AlgebraicCentralizerBasis.to_subgroup {S : Set G} (S_in_basis : S ∈ AlgebraicCentralizerBasis G):
∃ S' : Subgroup G, S = S' :=
by
rw [mem_iff] at S_in_basis
let ⟨_, ⟨seed, S_eq⟩⟩ := S_in_basis
use AlgebraicCentralizerInter seed
theorem Set.image_equiv_eq {α β : Type _} (S : Set α) (T : Set β) (f : α ≃ β) :
f '' S = T ↔ S = f.symm '' T :=
by
constructor
· intro fS_eq_T
ext x
rw [<-fS_eq_T]
simp
· intro S_eq_fT
ext x
rw [S_eq_fT]
simp
theorem AlgebraicCentralizerBasis.conj_mem {S : Set G} (S_in_basis : S ∈ AlgebraicCentralizerBasis G)
(h : G) : (fun g => h * g * h⁻¹) '' S ∈ AlgebraicCentralizerBasis G :=
by
let ⟨S', S_eq⟩ := to_subgroup S_in_basis
rw [S_eq]
rw [S_eq, subgroup_mem_iff] at S_in_basis
rw [mem_iff]
have conj_eq : (fun g => h * g * h⁻¹) = (MulAut.conj h).toEquiv := by
ext x
simp
constructor
· rw [conj_eq]
rw [ne_eq, Set.image_equiv_eq]
simp
rw [<-Subgroup.coe_bot, SetLike.coe_set_eq]
exact S_in_basis.left
· let ⟨seed, S'_eq⟩ := S_in_basis.right
have dec_eq : DecidableEq G := Classical.typeDecidableEq _
use Finset.image (fun g => h * g * h⁻¹) seed
rw [S'_eq]
unfold AlgebraicCentralizerInter
ext g
rw [conj_eq]
rw [Set.mem_image_equiv]
simp
conv => {
rhs
intro
intro
rw [<-SetLike.mem_coe, <-AlgebraicCentralizer.conj, conj_eq, Set.mem_image_equiv]
}
end AlgebraicCentralizer end AlgebraicCentralizer
end Rubin end Rubin

Loading…
Cancel
Save