import Mathlibnamespace OAIuniverse u vnoncomputable sectionopen scoped BigOperatorsopen Filternamespace Thorpabbrev Position (d : ℕ) := Fin d → Boolabbrev State (d : ℕ) := Equiv.Perm (Position d)def Coins : ℕ → Type | 0 => Unit | d + 1 => Position d → Boolinstance coinsFintype (d : ℕ) : Fintype (Coins d) := by cases d <;> simp only [Coins] <;> infer_instanceinstance coinsInhabited (d : ℕ) : Inhabited (Coins d) := by cases d <;> simp only [Coins] <;> infer_instancedef pairSwitch (d : ℕ) (c : Position d → Bool) : Equiv.Perm (Bool × Position d) where toFun p := (p.1 ^^ c p.2, p.2) invFun p := (p.1 ^^ c p.2, p.2) left_inv p := by rcases p with ⟨b, s⟩ cases b <;> cases h : c s <;> simp [h] right_inv p := by rcases p with ⟨b, s⟩ cases b <;> cases h : c s <;> simp [h]def rotate (d : ℕ) : State d := Equiv.piCongrLeft (fun _ : Fin d => Bool) (finRotate d).symmdef step : (d : ℕ) → Coins d → State d | 0, _ => Equiv.refl _ | d + 1, c => (((Fin.consEquiv (fun _ : Fin (d + 1) => Bool)).symm.trans (pairSwitch d c)).trans (Fin.consEquiv (fun _ : Fin (d + 1) => Bool))).trans (rotate (d + 1))abbrev History (d t : ℕ) := Fin t → Coins ddef run (d t : ℕ) (ω : History d t) : State d := ((List.ofFn fun i : Fin t => step d (ω i)).reverse).proddef fairMass {Ω : Type u} {α : Type v} [Fintype Ω] (f : Ω → α) (a : α) : ℝ := by classical exact (∑ ω : Ω, if f ω = a then (1 : ℝ) else 0) / Fintype.card Ωdef law (d t : ℕ) : State d → ℝ := fairMass (run d t)def uniform (d : ℕ) (_ : State d) : ℝ := 1 / Fintype.card (State d)def tv {α : Type u} [Fintype α] (μ ν : α → ℝ) : ℝ := (1 / 2 : ℝ) * ∑ a : α, |μ a - ν a|def distance (d t : ℕ) : ℝ := tv (law d t) (uniform d)def lawFrom (d t : ℕ) (g₀ : State d) : State d → ℝ := fairMass (fun ω : History d t => run d t ω * g₀)abbrev LabelList (d k : ℕ) := Fin k ↪ Position ddef coordinateRun (d t : ℕ) (ω : History d t) : State d := (rotate d)⁻¹ ^ t * run d t ωdef images {d k : ℕ} (t : ℕ) (start : State d) (labels : LabelList d k) (ω : History d t) : LabelList d k := labels.trans ((coordinateRun d t ω * start).toEmbedding)def listTV {d k : ℕ} (t : ℕ) (start : State d) (labels : LabelList d k) : ℝ := tv (fairMass (images t start labels)) (fun _ => 1 / Fintype.card (LabelList d k))def mixingTime (d : ℕ) : ℕ := sInf {t : ℕ | distance d t ≤ 1 / 4}end Thorpnamespace ThorpNine.Harmonicnamespace Thorpopen scoped BigOperatorsopen Filterabbrev Card (d : ℕ) := Fin d → Booldef switchFun {d : ℕ} (ξ : Card d → Bool) (x : Card (d + 1)) : Card (d + 1) := Fin.cons (Bool.xor (x 0) (ξ (Fin.tail x))) (Fin.tail x)theorem switchFun_involutive {d : ℕ} (ξ : Card d → Bool) : Function.Involutive (switchFun ξ) := by intro x funext i refine Fin.cases ?_ (fun j => ?_) i · simp only [switchFun, Fin.cons_zero, Fin.tail_cons] cases x 0 <;> cases ξ (Fin.tail x) <;> rfl · simp [switchFun, Fin.tail]def pairSwitch {d : ℕ} (ξ : Card d → Bool) : Equiv.Perm (Card (d + 1)) := { toFun := switchFun ξ invFun := switchFun ξ left_inv := switchFun_involutive ξ right_inv := switchFun_involutive ξ }end Thorpnamespace Thorprun_cmd do Lean.modifyEnv fun env => Lean.Meta.auxLemmasExt.setState env {} let matcherCache := Lean.mkIdent (Lean.mkPrivateNameCore `Lean.Meta.Match.Match `Lean.Meta.Match.matcherExt) Lean.Elab.Command.elabCommand (← `(command| run_cmd Lean.modifyEnv fun env => Lean.EnvExtension.setState $matcherCache env {}))open scoped BigOperators Classicaldef Coins : ℕ → Type | 0 => Unit | d + 1 => Card d → Boolinstance (d : ℕ) : Fintype (Coins d) := by cases d <;> dsimp [Coins] <;> infer_instanceinstance (d : ℕ) : Nonempty (Coins d) := by cases d <;> dsimp [Coins] <;> infer_instancedef rotate (d : ℕ) : Equiv.Perm (Card d) where toFun x i := x (finRotate d i) invFun x i := x ((finRotate d).symm i) left_inv x := by funext i; simp only [Equiv.apply_symm_apply] right_inv x := by funext i; simp only [Equiv.symm_apply_apply]def step : (d : ℕ) → Coins d → Equiv.Perm (Card d) | 0, _ => 1 | d + 1, ξ => rotate (d + 1) * pairSwitch ξdef run (d : ℕ) : (t : ℕ) → (Fin t → Coins d) → Equiv.Perm (Card d) | 0, _ => 1 | t + 1, ω => step d (ω (Fin.last t)) * run d t (fun i => ω i.castSucc)noncomputable def law (d t : ℕ) (g : Equiv.Perm (Card d)) : ℝ := (Fintype.card {ω : Fin t → Coins d // run d t ω = g} : ℝ) / (Fintype.card (Fin t → Coins d) : ℝ)lemma card_positions (d : ℕ) : Fintype.card (Card d) = 2 ^ d := by simp [Card]end Thorpnamespace Thorp.Spechtopen scoped BigOperators Classicalabbrev Cell (μ : YoungDiagram) := {x : ℕ × ℕ // x ∈ μ.cells}def row {μ : YoungDiagram} (x : Cell μ) : ℕ := x.1.1def col {μ : YoungDiagram} (x : Cell μ) : ℕ := x.1.2lemma row_lt_colLen {μ : YoungDiagram} (x : Cell μ) : row x < μ.colLen (col x) := YoungDiagram.mem_iff_lt_colLen.mp x.2noncomputable def rowIndex {μ : YoungDiagram} (x : Cell μ) : Fin (μ.colLen 0) := ⟨row x, (row_lt_colLen x).trans_le (μ.colLen_anti 0 (col x) (Nat.zero_le _))⟩abbrev Tabloid (μ : YoungDiagram) := {f : Cell μ → Fin (μ.colLen 0) // ∃ p : Equiv.Perm (Cell μ), f = rowIndex ∘ p}noncomputable instance (μ : YoungDiagram) : Fintype (Tabloid μ) := Fintype.ofFinite _noncomputable def baseTabloid (μ : YoungDiagram) : Tabloid μ := ⟨rowIndex, 1, rfl⟩noncomputable def tabloidAct {μ : YoungDiagram} (p : Equiv.Perm (Cell μ)) : Equiv.Perm (Tabloid μ) where toFun f := ⟨fun x => f.1 (p⁻¹ x), by obtain ⟨q,hq⟩ := f.2 refine ⟨q*p⁻¹, ?_⟩ funext x simp only [hq,Function.comp_apply,Equiv.Perm.mul_apply]⟩ invFun f := ⟨fun x => f.1 (p x), by obtain ⟨q,hq⟩ := f.2 refine ⟨q*p, ?_⟩ funext x simp only [hq,Function.comp_apply,Equiv.Perm.mul_apply]⟩ left_inv f := by apply Subtype.ext; funext x; simp right_inv f := by apply Subtype.ext; funext x; simp@[simp] lemma tabloidAct_apply {μ : YoungDiagram} (p : Equiv.Perm (Cell μ)) (f : Tabloid μ) (x : Cell μ) : (tabloidAct p f).1 x = f.1 (p⁻¹ x) := rfl@[simp] lemma tabloidAct_one (μ : YoungDiagram) : tabloidAct (1 : Equiv.Perm (Cell μ)) = 1 := by ext f x rfl@[simp] lemma tabloidAct_mul {μ : YoungDiagram} (p q : Equiv.Perm (Cell μ)) : tabloidAct (p*q) = tabloidAct p * tabloidAct q := by ext f x simp only [tabloidAct_apply, mul_inv_rev,Equiv.Perm.mul_apply]noncomputable def tabloidRep (μ : YoungDiagram) : Representation ℂ (Equiv.Perm (Cell μ)) (Tabloid μ → ℂ) where toFun p := { toFun := fun v f => v (tabloidAct p⁻¹ f) map_add' := by intros; rfl map_smul' := by intros; rfl } map_one' := by ext v f; simp map_mul' p q := by ext v f simp only [mul_inv_rev,tabloidAct_mul,Equiv.Perm.mul_apply] rflnoncomputable def delta {μ : YoungDiagram} (f : Tabloid μ) : Tabloid μ → ℂ := fun g => if g=f then 1 else 0noncomputable def colGroup (μ : YoungDiagram) : Subgroup (Equiv.Perm (Cell μ)) where carrier := {p | ∀ x, col (p x) = col x} one_mem' := by intro x; rfl mul_mem' := by intro p q hp hq x; exact (hp (q x)).trans (hq x) inv_mem' := by intro p hp x; simpa using (hp (p⁻¹ x)).symmnoncomputable def permSign {α : Type*} [Fintype α] [DecidableEq α] (p : Equiv.Perm α) : ℂ := ((Equiv.Perm.sign p : ℤ) : ℂ)sectionvariable {α V : Type*} [Fintype α] [DecidableEq α] [AddCommGroup V] [Module ℂ V]noncomputable def alternator (C : Subgroup (Equiv.Perm α)) (ρ : Representation ℂ (Equiv.Perm α) V) : Module.End ℂ V := by classical exact ∑ c : C, permSign (c : Equiv.Perm α) • ρ cendnoncomputable def polytabloid (μ : YoungDiagram) : Tabloid μ → ℂ := alternator (colGroup μ) (tabloidRep μ) (delta (baseTabloid μ))noncomputable def space (μ : YoungDiagram) : Submodule ℂ (Tabloid μ → ℂ) := Submodule.span ℂ (Set.range (fun p : Equiv.Perm (Cell μ) => tabloidRep μ p (polytabloid μ)))lemma orbit_mem_space (μ : YoungDiagram) (p : Equiv.Perm (Cell μ)) : tabloidRep μ p (polytabloid μ) ∈ space μ := Submodule.subset_span ⟨p,rfl⟩lemma action_mem_space (μ : YoungDiagram) (p : Equiv.Perm (Cell μ)) (v : Tabloid μ → ℂ) (hv : v ∈ space μ) : tabloidRep μ p v ∈ space μ := by induction hv using Submodule.span_induction with | mem v hv => obtain ⟨q,rfl⟩ := hv change ((tabloidRep μ p)*(tabloidRep μ q)) (polytabloid μ) ∈ space μ rw [←map_mul] exact orbit_mem_space μ (p*q) | zero => simp | add v w hv hw ihv ihw => simpa using (space μ).add_mem ihv ihw | smul a v hv ih => simpa using (space μ).smul_mem a ihnoncomputable def subrepresentation (μ : YoungDiagram) : Subrepresentation (tabloidRep μ) := ⟨space μ, fun p v hv => action_mem_space μ p v hv⟩noncomputable def representation (μ : YoungDiagram) : Representation ℂ (Equiv.Perm (Cell μ)) (space μ) := (subrepresentation μ).toRepresentationend Thorp.Spechtnamespace Thorp.PermutationHilbertopen scoped BigOperators ComplexConjugate Classicalopen Complexvariable {X : Type*} [Fintype X]abbrev H (X : Type*) [Fintype X] := EuclideanSpace ℂ Xend Thorp.PermutationHilbertnamespace Thorp.Spechtopen scoped BigOperators Classicalnoncomputable def hilbertEquiv (μ : YoungDiagram) : (Tabloid μ → ℂ) ≃ₗ[ℂ] PermutationHilbert.H (Tabloid μ) := (WithLp.linearEquiv 2 ℂ (Tabloid μ → ℂ)).symmnoncomputable def hilbertSpace (μ : YoungDiagram) : Submodule ℂ (PermutationHilbert.H (Tabloid μ)) := (space μ).map (hilbertEquiv μ).toLinearMapend Thorp.Spechtnamespace Thorp.UnitaryFinitesectionopen scoped BigOperators ComplexConjugate Classicalvariable {G : Type*} [Group G] [Fintype G]variable {V : Type*} [NormedAddCommGroup V] [InnerProductSpace ℂ V] [FiniteDimensional ℂ V]noncomputable def continuousRepresentation (ρ : Representation ℂ G V) : G →* (V →L[ℂ] V) where toFun g := (ρ g).toContinuousLinearMap map_one' := by ext v; simp map_mul' g h := by ext v; simpendopen scoped BigOperators Classicalvariable {G : Type*} [Group G] [Fintype G]variable {V : Type*} [NormedAddCommGroup V] [InnerProductSpace ℂ V] [FiniteDimensional ℂ V]variable {Ω Ξ : Type*} [Fintype Ω] [Fintype Ξ]noncomputable def sampleOperator (ρ : Representation ℂ G V) (P : Ω → G) : V →L[ℂ] V := (Fintype.card Ω:ℂ)⁻¹ • ∑ ω,continuousRepresentation ρ (P ω)end Thorp.UnitaryFinitenamespace Thorp.Spechtopen scoped BigOperators Classicalnoncomputable def spaceHilbertEquiv (μ : YoungDiagram) : space μ ≃ₗ[ℂ] hilbertSpace μ := (hilbertEquiv μ).submoduleMap (space μ)noncomputable def unitaryRepresentation (μ : YoungDiagram) : Representation ℂ (Equiv.Perm (Cell μ)) (hilbertSpace μ) := ((spaceHilbertEquiv μ).conjAlgEquiv ℂ).toMonoidHom.comp (representation μ)variable {α ι : Type*} [Fintype α] [Fintype ι]noncomputable def relabelledUnitary (μ : YoungDiagram) (e : α ≃ Cell μ) : Representation ℂ (Equiv.Perm α) (hilbertSpace μ) := (unitaryRepresentation μ).comp e.permCongrHom.toMonoidHomend Thorp.Spechtnamespace Thorp.Spechtopen scoped BigOperators Classical@[simp] lemma card_cell (μ : YoungDiagram) : Fintype.card (Cell μ) = μ.card := by simp [Cell, YoungDiagram.card]noncomputable def cellRowsEquiv (μ : YoungDiagram) : Cell μ ≃ (i : Fin (μ.colLen 0)) × Fin (μ.rowLen i) where toFun x := ⟨rowIndex x,⟨col x,YoungDiagram.mem_iff_lt_rowLen.mp x.2⟩⟩ invFun p := ⟨(p.1,p.2),YoungDiagram.mem_iff_lt_rowLen.mpr p.2.2⟩ left_inv x := by apply Subtype.ext; rfl right_inv p := by rcases p with ⟨⟨i,hi⟩,⟨j,hj⟩⟩; rfllemma card_eq_sum_rowLen (μ : YoungDiagram) : μ.card = ∑ i : Fin (μ.colLen 0), μ.rowLen i := by rw [←card_cell,Fintype.card_congr (cellRowsEquiv μ),Fintype.card_sigma] simp only [Fintype.card_fin]lemma sum_rowLens (μ : YoungDiagram) : μ.rowLens.sum = μ.card := by rw [card_eq_sum_rowLen,YoungDiagram.rowLens] rw [Fin.sum_univ_eq_sum_range] have hh (n : ℕ) : (List.map μ.rowLen (List.range n)).sum = ∑ i ∈ Finset.range n, μ.rowLen i := by induction n with | zero => simp | succ n ih => simp [List.range_succ,List.map_append,Finset.sum_range_succ,ih] exact hh _noncomputable def diagramPartition (μ : YoungDiagram) : Nat.Partition μ.card where parts := μ.rowLens parts_pos := fun {i} hi => μ.pos_of_mem_rowLens i (by simpa using hi) parts_sum := by simpnoncomputable def partitionDiagram {N : ℕ} (p : Nat.Partition N) : YoungDiagram := YoungDiagram.ofRowLens (p.parts.sort (· ≥ ·)) (Multiset.pairwise_sort _ _).sortedGElemma partitionDiagram_rowLens {N : ℕ} (p : Nat.Partition N) : (partitionDiagram p).rowLens = p.parts.sort (· ≥ ·) := by apply YoungDiagram.rowLens_ofRowLens_eq_self intro x hx exact p.parts_pos ((Multiset.mem_sort _).mp hx)lemma partitionDiagram_card {N : ℕ} (p : Nat.Partition N) : (partitionDiagram p).card = N := by rw [←sum_rowLens,partitionDiagram_rowLens] change (↑(p.parts.sort (· ≥ ·)) : Multiset ℕ).sum = N rw [Multiset.sort_eq,p.parts_sum]lemma partitionDiagram_diagramPartition (μ : YoungDiagram) : partitionDiagram (diagramPartition μ) = μ := by apply YoungDiagram.equivListRowLens.injective apply Subtype.ext change (partitionDiagram (diagramPartition μ)).rowLens = μ.rowLens rw [partitionDiagram_rowLens] change (↑μ.rowLens : Multiset ℕ).sort (· ≥ ·) = μ.rowLens rw [Multiset.coe_sort,List.mergeSort_eq_self _ μ.rowLens_sorted.pairwise]abbrev Shapes (N : ℕ) := {μ : YoungDiagram // μ.card = N}noncomputable def shapePartitionEquiv (N : ℕ) : Shapes N ≃ Nat.Partition N where toFun μ := { parts := μ.1.rowLens parts_pos := fun {i} hi => μ.1.pos_of_mem_rowLens i (by simpa using hi) parts_sum := by simpa using (sum_rowLens μ.1).trans μ.2 } invFun p := ⟨partitionDiagram p,partitionDiagram_card p⟩ left_inv μ := by apply Subtype.ext obtain ⟨μ,rfl⟩ := μ exact partitionDiagram_diagramPartition μ right_inv p := by apply Nat.Partition.ext change ((partitionDiagram p).rowLens : Multiset ℕ) = p.parts rw [partitionDiagram_rowLens,Multiset.sort_eq]noncomputable instance (N : ℕ) : Fintype (Shapes N) := Fintype.ofEquiv _ (shapePartitionEquiv N).symmnoncomputable def labels {N : ℕ} (μ : Shapes N) : Cell μ.1 ≃ Fin N := (Fintype.equivFin (Cell μ.1)).trans (finCongr ((card_cell μ.1).trans μ.2))noncomputable def cardLabels (d : ℕ) (μ : Shapes (2^d)) : Card d ≃ Cell μ.1 := ((Fintype.equivFin (Card d)).trans (finCongr (card_positions d))).trans (labels μ).symmnoncomputable def cardRepresentation (d : ℕ) (μ : Shapes (2^d)) : Representation ℂ (Equiv.Perm (Card d)) (hilbertSpace μ.1) := relabelledUnitary μ.1 (cardLabels d μ)end Thorp.Spechtnamespace Thorp.LowPlanesrun_cmd Lean.modifyEnv fun env => Lean.Meta.auxLemmasExt.setState env {}open scoped BigOperators Classicalopen Specht UnitaryFinitenoncomputable local instance hsNorm (μ : YoungDiagram) : NormedAddCommGroup (hilbertSpace μ) := inferInstancenoncomputable local instance hsInner (μ : YoungDiagram) : InnerProductSpace ℂ (hilbertSpace μ) := inferInstancenoncomputable local instance hsFinite (μ : YoungDiagram) : FiniteDimensional ℂ (hilbertSpace μ) := inferInstancenoncomputable def Q (d : ℕ) (μ : Shapes (2^d)) : hilbertSpace μ.1 →L[ℂ] hilbertSpace μ.1 := sampleOperator (V := hilbertSpace μ.1) (cardRepresentation d μ) (run d d)noncomputable def absoluteTrace {V : Type*} [NormedAddCommGroup V] [InnerProductSpace ℂ V] [FiniteDimensional ℂ V] (A : V →L[ℂ] V) (P : ℝ) : ℝ := (LinearMap.trace ℂ V (CFC.rpow (CFC.sqrt (star A * A)) P).toLinearMap).renoncomputable def regularTrace (d : ℕ) (P : ℝ) : ℝ := ∑ μ : Shapes (2^d), (Module.finrank ℂ (hilbertSpace μ.1) : ℝ) * absoluteTrace (V := hilbertSpace μ.1) (Q d μ) Pnoncomputable def sweepDistance (d v : ℕ) (σ : Equiv.Perm (Card d)) : ℝ := (1/2:ℝ) * ∑ g : Equiv.Perm (Card d), |law d (v*d) (g*σ⁻¹) - 1/(Nat.factorial (2^d):ℝ)|end Thorp.LowPlanesend ThorpNine.Harmonicnamespace ThorpNine.Harmonic.Thorp.LowPlanesrun_cmd Lean.modifyEnv fun env => Lean.Meta.auxLemmasExt.setState env {}open scoped BigOperatorsopen Specht UnitaryFiniteattribute [local instance] hsNorm hsInner hsFinitedef weightedMoment (d r : ℕ) (μ : Shapes (2 ^ d)) : ℝ := (Module.finrank ℂ (hilbertSpace μ.1) : ℝ) * (LinearMap.trace ℂ (hilbertSpace μ.1) ((star (Q d μ) * Q d μ) ^ r).toLinearMap).rerun_cmd Lean.modifyEnv fun env => Lean.Meta.auxLemmasExt.setState env {}def signedEntropy (α β : YoungDiagram) : ℝ := (∑ x : Cell α, Real.log ((α.card + β.card : ℕ) / (α.rowLen (row x) : ℝ))) + (∑ x : Cell β, Real.log ((α.card + β.card : ℕ) / (β.rowLen (row x) : ℝ)))def budgetCoefficient (a : ℝ) (d : ℕ) : ℝ := a * (1 - 1 / (2 * Real.sqrt d))def remainderBudget (κ : ℝ) (d l : ℕ) : ℝ := if l = 0 then 0 else max 0 (budgetCoefficient κ d * l * Real.log (2 ^ d : ℝ) - l * Real.log ((2 ^ d : ℝ) / l))def logWeightedMoment (d r : ℕ) (μ : Shapes (2 ^ d)) : EReal := (ENNReal.ofReal (weightedMoment d r μ)).logrun_cmd Lean.modifyEnv fun env => Lean.Meta.auxLemmasExt.setState env {}def densityL2Squared (d t : ℕ) : ℝ := (Nat.factorial (2 ^ d) : ℝ) * ∑ g : Equiv.Perm (Card d), (law d t g - 1 / (Nat.factorial (2 ^ d) : ℝ)) ^ 2def densityL2SquaredFrom (d t : ℕ) (σ : Equiv.Perm (Card d)) : ℝ := (Nat.factorial (2 ^ d) : ℝ) * ∑ g : Equiv.Perm (Card d), (law d t (g * σ⁻¹) - 1 / (Nat.factorial (2 ^ d) : ℝ)) ^ 2end ThorpNine.Harmonic.Thorp.LowPlanesrun_cmd Lean.modifyEnv fun env => Lean.Meta.auxLemmasExt.setState env {}namespace ThorpResultsopen ThorpNine.Harmonic.Thorpopen ThorpNine.Harmonic.Thorp.Spechtopen ThorpNine.Harmonic.Thorp.LowPlanesattribute [local instance] hsNorm hsInner hsFinitedef FrameMain : Prop := ∀ ε : ℝ, 0 < ε → ∀ᶠ d : ℕ in atTop, ∀ start : _root_.OAI.Thorp.State d, _root_.OAI.Thorp.tv (_root_.OAI.Thorp.lawFrom d (32800 * d) start) (_root_.OAI.Thorp.uniform d) < εdef InformationMain : Prop := (∀ ε : ℝ, 0 < ε → ∀ᶠ d : ℕ in atTop, ∀ k : ℕ, 8 * k ≤ 7 * 2 ^ d → ∀ (start : _root_.OAI.Thorp.State d) (labels : _root_.OAI.Thorp.LabelList d k), _root_.OAI.Thorp.listTV (256 * d) start labels < ε) ∧ (∀ᶠ d : ℕ in atTop, ∀ k : ℕ, 16 * k ≤ 15 * 2 ^ d → ∀ (start : _root_.OAI.Thorp.State d) (labels : _root_.OAI.Thorp.LabelList d k), _root_.OAI.Thorp.listTV (1024 * d) start labels ≤ Real.rpow ((2 : ℝ) ^ d) (-(3 : ℝ) / 2)) ∧ (Tendsto (fun d : ℕ => _root_.OAI.Thorp.distance d (2048 * d)) atTop (nhds 0) ∧ ∀ (d : ℕ) (start : _root_.OAI.Thorp.State d), _root_.OAI.Thorp.tv (_root_.OAI.Thorp.lawFrom d (2048 * d) start) (_root_.OAI.Thorp.uniform d) = _root_.OAI.Thorp.distance d (2048 * d))def SpectrumMain : Prop := ∃ p : ℝ, 0 < p ∧ ∀ d : ℕ, 1 ≤ d → regularTrace d (2 * p) ≤ 1 + 1 / 16 ∧ ∀ M : ℕ, p ≤ M → ∀ σ : Equiv.Perm (Card d), sweepDistance d M σ ≤ 1 / 8def SignedMain : Prop := ∀ η κ : ℝ, 0 < η → ∃ r : ℕ, 1 ≤ r ∧ ∀ d : ℕ, 1 ≤ d → ∀ (μ : Shapes (2 ^ d)) (α β γ : YoungDiagram), α.card + β.card + γ.card = 2 ^ d → logWeightedMoment d r μ ≤ ((budgetCoefficient η d * signedEntropy α β + remainderBudget κ d γ.card : ℝ) : EReal)def DegreeSavingMain : Prop := ∃ r : ℕ, Even r ∧ 2 ≤ r ∧ ∃ η : ℝ, 0 < η ∧ ∀ d (μ : Shapes (2 ^ d)), (Module.finrank ℂ (hilbertSpace μ.1) : ℝ) * (LinearMap.trace ℂ (hilbertSpace μ.1) ((Q d μ * star (Q d μ)) ^ r).toLinearMap).re ≤ (Module.finrank ℂ (hilbertSpace μ.1) : ℝ) ^ (1 - η)def FullDensityMain : Prop := ∃ v : ℕ, 1 ≤ v ∧ ∀ ε : ℝ, 0 < ε → ∀ᶠ d : ℕ in atTop, ∀ σ : Equiv.Perm (Card d), densityL2SquaredFrom d (v * d) σ < εdef ForwardMixingMain : Prop := ∃ v : ℕ, 1 ≤ v ∧ ∀ ε : ℝ, 0 < ε → ∀ᶠ d : ℕ in atTop, ∀ σ : Equiv.Perm (Card d), sweepDistance d v σ < εdef OptimalOrderMain : Prop := Asymptotics.IsTheta atTop (fun d : ℕ => (_root_.OAI.Thorp.mixingTime d : ℝ)) (fun d : ℕ => Real.log (2 ^ d : ℝ))end ThorpResultsnamespace ThorpResultstheorem remaining_main : FrameMain ∧ InformationMain ∧ SpectrumMain ∧ SignedMain ∧ DegreeSavingMain ∧ FullDensityMain ∧ ForwardMixingMain ∧ OptimalOrderMain := by sorryend ThorpResultsendend OAI