structure
UniqueGames.UniqueGame
(V : Type u_1)
(W : Type u_2)
[DecidableEq V]
[DecidableEq W]
(k : ℕ)
:
Type (max u_1 u_2)
- constraint : V → W → Equiv.Perm (Fin k)
- left_degree : ℕ
- right_degree : ℕ
Instances For
def
UniqueGames.edgeSatisfied
{V : Type u_1}
{W : Type u_2}
[DecidableEq V]
[DecidableEq W]
{k : ℕ}
(game : UniqueGame V W k)
(labeling : Labeling V W k)
(v : V)
(w : W)
:
Instances For
@[implicit_reducible]
instance
UniqueGames.instDecidableEdgeSatisfied
{V : Type u_1}
{W : Type u_2}
[DecidableEq V]
[DecidableEq W]
{k : ℕ}
(game : UniqueGame V W k)
(labeling : Labeling V W k)
(v : V)
(w : W)
:
Decidable (edgeSatisfied game labeling v w)
def
UniqueGames.numSatisfiedEdges
{V : Type u_1}
{W : Type u_2}
{k : ℕ}
[DecidableEq V]
[DecidableEq W]
(game : UniqueGame V W k)
(labeling : Labeling V W k)
:
Instances For
def
UniqueGames.numEdges
{V : Type u_1}
{W : Type u_2}
[DecidableEq V]
[DecidableEq W]
{k : ℕ}
(game : UniqueGame V W k)
:
Instances For
noncomputable def
UniqueGames.fractionSatisfied
{V : Type u_1}
{W : Type u_2}
{k : ℕ}
[DecidableEq V]
[DecidableEq W]
(game : UniqueGame V W k)
(labeling : Labeling V W k)
:
Instances For
noncomputable def
UniqueGames.value
{V : Type u_1}
{W : Type u_2}
{k : ℕ}
[DecidableEq V]
[DecidableEq W]
(game : UniqueGame V W k)
:
Instances For
opaque
UniqueGames.IsPolyTimeUniqueGameReduction
{numV numW : ℕ → ℕ}
{k : ℕ}
:
((m : ℕ) → PCP.BinaryString m → UniqueGame (Fin (numV m)) (Fin (numW m)) k) → Prop
def
UniqueGames.NonBipartiteUniqueGame.edgesWithin
{X : Type u_1}
[DecidableEq X]
{k : ℕ}
(game : NonBipartiteUniqueGame X k)
(X' : Finset X)
:
Instances For
def
UniqueGames.NonBipartiteUniqueGame.edgeSatisfiedBy
{X : Type u_1}
[DecidableEq X]
{k : ℕ}
(game : NonBipartiteUniqueGame X k)
(A : X → Fin k)
(e : X × X)
:
Instances For
@[implicit_reducible]
instance
UniqueGames.instDecidableEdgeSatisfiedBy
{X : Type u_1}
[DecidableEq X]
{k : ℕ}
(game : NonBipartiteUniqueGame X k)
(A : X → Fin k)
(e : X × X)
:
Decidable (game.edgeSatisfiedBy A e)
noncomputable def
UniqueGames.NonBipartiteUniqueGame.fractionSatisfiedWithin
{X : Type u_1}
[DecidableEq X]
{k : ℕ}
(game : NonBipartiteUniqueGame X k)
(X' : Finset X)
(A : X → Fin k)
:
Instances For
def
UniqueGames.NonBipartiteUniqueGame.edgeTSatisfiedBy
{X : Type u_1}
[DecidableEq X]
{k : ℕ}
(game : NonBipartiteUniqueGame X k)
(A : X → Finset (Fin k))
(e : X × X)
:
Instances For
@[implicit_reducible]
instance
UniqueGames.instDecidableEdgeTSatisfiedBy
{X : Type u_1}
[DecidableEq X]
{k : ℕ}
(game : NonBipartiteUniqueGame X k)
(A : X → Finset (Fin k))
(e : X × X)
:
Decidable (game.edgeTSatisfiedBy A e)
noncomputable def
UniqueGames.NonBipartiteUniqueGame.fractionTSatisfiedWithin
{X : Type u_1}
[DecidableEq X]
{k : ℕ}
(game : NonBipartiteUniqueGame X k)
(X' : Finset X)
(A : X → Finset (Fin k))
:
Instances For
def
UniqueGames.StrongUGC_YES
{X : Type u_1}
[DecidableEq X]
[Fintype X]
{k : ℕ}
(game : NonBipartiteUniqueGame X k)
(ε : ℝ)
:
Instances For
def
UniqueGames.StrongUGC_NO
{X : Type u_1}
[DecidableEq X]
[Fintype X]
{k : ℕ}
(game : NonBipartiteUniqueGame X k)
(ε : ℝ)
(t : ℕ)
:
Instances For
opaque
UniqueGames.IsPolyTimeNonBipartiteUGReduction
{numX : ℕ → ℕ}
{k : ℕ}
:
((m : ℕ) → PCP.BinaryString m → NonBipartiteUniqueGame (Fin (numX m)) k) → Prop
def
UniqueGames.LabelCover.edgeSatisfied
{V : Type u_2}
{W : Type u_3}
{k l : ℕ}
(game : LabelCover V W k l)
(labeling : Labeling V W k l)
(v : V)
(w : W)
:
Instances For
@[implicit_reducible]
instance
UniqueGames.instDecidableEdgeSatisfied_1
{V : Type u_2}
{W : Type u_3}
{k l : ℕ}
(game : LabelCover V W k l)
(labeling : LabelCover.Labeling V W k l)
(v : V)
(w : W)
:
Decidable (game.edgeSatisfied labeling v w)
def
UniqueGames.LabelCover.numSatisfiedEdges
{V : Type u_2}
{W : Type u_3}
{k l : ℕ}
[DecidableEq V]
[DecidableEq W]
(game : LabelCover V W k l)
(labeling : Labeling V W k l)
:
Instances For
noncomputable def
UniqueGames.LabelCover.fractionSatisfied
{V : Type u_2}
{W : Type u_3}
{k l : ℕ}
[DecidableEq V]
[DecidableEq W]
(game : LabelCover V W k l)
(labeling : Labeling V W k l)
:
Instances For
noncomputable def
UniqueGames.LabelCover.value
{V : Type u_2}
{W : Type u_3}
{k l : ℕ}
[DecidableEq V]
[DecidableEq W]
(game : LabelCover V W k l)
:
Instances For
def
UniqueGames.LabelCover.IsUnique
{V : Type u_2}
{W : Type u_3}
{k l : ℕ}
(game : LabelCover V W k l)
:
Instances For
theorem
UniqueGames.fractionSatisfied_le_one
{V : Type u_2}
{W : Type u_3}
[DecidableEq V]
[DecidableEq W]
{k : ℕ}
(game : UniqueGame V W k)
(labeling : Labeling V W k)
:
theorem
UniqueGames.bddAbove_fractionSatisfied
{V : Type u_2}
{W : Type u_3}
[DecidableEq V]
[DecidableEq W]
{k : ℕ}
(game : UniqueGame V W k)
:
BddAbove (Set.range fun (labeling : Labeling V W k) => fractionSatisfied game labeling)
theorem
UniqueGames.fractionSatisfied_le_value
{V : Type u_2}
{W : Type u_3}
[DecidableEq V]
[DecidableEq W]
{k : ℕ}
(game : UniqueGame V W k)
(labeling : Labeling V W k)
:
theorem
UniqueGames.fractionSatisfied_le_of_value_le
{V : Type u_2}
{W : Type u_3}
[DecidableEq V]
[DecidableEq W]
{k : ℕ}
(game : UniqueGame V W k)
(δ : ℝ)
(hval : value game ≤ δ)
(labeling : Labeling V W k)
:
theorem
uniqueGamesConjecture
(ε δ : ℝ)
:
ε > 0 → δ > 0 → ∃ (k : ℕ), UniqueGames.IsNPHardGapUniqueGame k (1 - ε) δ
def
MaxCut.numCutEdges
{V : Type u_1}
[Fintype V]
[DecidableEq V]
(G : MaxCutInstance V)
(f : V → Bool)
:
Instances For
noncomputable def
MaxCut.cutFraction
{V : Type u_1}
[Fintype V]
[DecidableEq V]
(G : MaxCutInstance V)
(f : V → Bool)
:
Instances For
Instances For
def
MaxCut.IsPolyTimeMaxCutInstanceReduction
{numVerts : ℕ → ℕ}
:
((m : ℕ) → PCP.BinaryString m → MaxCutInstance (Fin (numVerts m))) → Prop
Instances For
opaque
IsPolyTimeLongCodeReduction
{numV numW k numVerts : ℕ}
:
(UniqueGames.UniqueGame (Fin numV) (Fin numW) k → MaxCut.MaxCutInstance (Fin numVerts)) → Prop
theorem
isPolyTimeMaxCutReduction_of_compose
{numV numW : ℕ → ℕ}
{k : ℕ}
{numVerts : ℕ → ℕ}
(ugReduce : (m : ℕ) → PCP.BinaryString m → UniqueGames.UniqueGame (Fin (numV m)) (Fin (numW m)) k)
(mcReduce : (m : ℕ) → UniqueGames.UniqueGame (Fin (numV m)) (Fin (numW m)) k → MaxCut.MaxCutInstance (Fin (numVerts m)))
(hUG : UniqueGames.IsPolyTimeUniqueGameReduction ugReduce)
(hMC : ∀ (m : ℕ), IsPolyTimeLongCodeReduction (mcReduce m))
:
PCP.IsPolynomial numVerts ∧ MaxCut.IsPolyTimeMaxCutInstanceReduction fun (m : ℕ) (x : PCP.BinaryString m) => mcReduce m (ugReduce m x)
noncomputable def
longCodeReduce
(_ρ : ℝ)
(k numV numW : ℕ)
:
UniqueGames.UniqueGame (Fin numV) (Fin numW) k → MaxCut.MaxCutInstance (Fin (Fintype.card (Fin numV × (Fin k → Bool))))
Instances For
theorem
longCode_completeness
(ρ : ℝ)
(hρ_pos : 0 < ρ)
(hρ_lt : ρ < 1)
(k numV numW : ℕ)
(δ : ℝ)
(hδ_pos : 0 < δ)
(hδ_lt : δ < 1)
(game : UniqueGames.UniqueGame (Fin numV) (Fin numW) k)
(hgame : UniqueGames.value game ≥ 1 - δ)
:
theorem
high_influence_gives_good_labeling
(k numV numW : ℕ)
(δ : ℝ)
(hδ_pos : 0 < δ)
(hδ_lt : δ < 1)
(game : UniqueGames.UniqueGame (Fin numV) (Fin numW) k)
(f : Fin numV × (Fin k → Bool) → Bool)
(v : Fin numV)
(i : Fin k)
(h_high_inf :
1 / 2 ^ k * ∑ x : Fin k → Bool,
((if f (v, x) = true then 1 else -1) - if f (v, Function.update x i !x i) = true then 1 else -1) ^ 2 / 4 > δ)
:
∃ (lab : UniqueGames.Labeling (Fin numV) (Fin numW) k), UniqueGames.fractionSatisfied game lab > δ
theorem
longCode_soundness
(ρ : ℝ)
(hρ_pos : 0 < ρ)
(hρ_lt : ρ < 1)
(k numV numW : ℕ)
(δ : ℝ)
(hδ_pos : 0 < δ)
(hδ_lt : δ < 1)
(game : UniqueGames.UniqueGame (Fin numV) (Fin numW) k)
(hgame : UniqueGames.value game ≤ δ)
:
theorem
longCodeReduce_isPolyTime
(ρ : ℝ)
(k numV numW : ℕ)
:
IsPolyTimeLongCodeReduction (longCodeReduce ρ k numV numW)
theorem
longCode_construction_exists
(ρ : ℝ)
(hρ_pos : 0 < ρ)
(hρ_lt : ρ < 1)
(k numV numW : ℕ)
(δ : ℝ)
(hδ_pos : 0 < δ)
(hδ_lt : δ < 1)
:
∃ (numVerts : ℕ) (reduce : UniqueGames.UniqueGame (Fin numV) (Fin numW) k → MaxCut.MaxCutInstance (Fin numVerts)),
IsPolyTimeLongCodeReduction reduce ∧ (∀ (game : UniqueGames.UniqueGame (Fin numV) (Fin numW) k),
UniqueGames.value game ≥ 1 - δ → MaxCut.value (reduce game) ≥ (1 - δ) * (1 + ρ) / 2) ∧ ∀ (game : UniqueGames.UniqueGame (Fin numV) (Fin numW) k),
UniqueGames.value game ≤ δ → MaxCut.value (reduce game) ≤ (1 + maxBalancedNoiseStab ρ δ k) / 2
theorem
longCodeTest_bounds
(ρ : ℝ)
(hρ_pos : 0 < ρ)
(hρ_lt : ρ < 1)
(ε : ℝ)
(hε : ε > 0)
:
∃ δ₀ > 0,
∀ (δ : ℝ),
0 < δ →
δ ≤ δ₀ →
δ < 1 →
∀ (k numV numW : ℕ),
∃ (numVerts : ℕ) (reduce :
UniqueGames.UniqueGame (Fin numV) (Fin numW) k → MaxCut.MaxCutInstance (Fin numVerts)),
IsPolyTimeLongCodeReduction reduce ∧ (∀ (game : UniqueGames.UniqueGame (Fin numV) (Fin numW) k),
UniqueGames.value game ≥ 1 - δ → MaxCut.value (reduce game) ≥ (1 - δ) * (1 + ρ) / 2) ∧ ∀ (game : UniqueGames.UniqueGame (Fin numV) (Fin numW) k),
UniqueGames.value game ≤ δ → MaxCut.value (reduce game) ≤ 1 - 1 / Real.pi * Real.arccos ρ + ε
theorem
longCodeReduction_maxcut
(ρ : ℝ)
(hρ_pos : 0 < ρ)
(hρ_lt : ρ < 1)
(ε : ℝ)
(hε : ε > 0)
:
∃ δ > 0,
∀ (k numV numW : ℕ),
∃ (numVerts : ℕ) (reduce : UniqueGames.UniqueGame (Fin numV) (Fin numW) k → MaxCut.MaxCutInstance (Fin numVerts)),
IsPolyTimeLongCodeReduction reduce ∧ (∀ (game : UniqueGames.UniqueGame (Fin numV) (Fin numW) k),
UniqueGames.value game ≥ 1 - δ → MaxCut.value (reduce game) ≥ 1 / 2 + ρ / 2 - ε) ∧ ∀ (game : UniqueGames.UniqueGame (Fin numV) (Fin numW) k),
UniqueGames.value game ≤ δ → MaxCut.value (reduce game) ≤ 1 - 1 / Real.pi * Real.arccos ρ + ε
theorem
ug_hardness_maxcut_of_ugc
(hUGC : ∀ (ε δ : ℝ), ε > 0 → δ > 0 → ∃ (k : ℕ), UniqueGames.IsNPHardGapUniqueGame k (1 - ε) δ)
(ε : ℝ)
:
ε > 0 → MaxCut.IsNPHardGapMaxCut (1 - ε) (MaxCut.goemansWilliamsonConstant + ε)