Graph isomorphism and Arthur–Merlin proofs
DefinitionDirected graph isomorphism as a decision problem#✓fully proved
The decision problem accepts a bitstring \(x\) exactly when \(x\) decodes, under the canonical bitstring encoding, to a triple \((n, E_1, E_2)\) of a natural number \(n\) and two lists \(E_1\) and \(E_2\) of pairs of natural numbers for which there is a bijection \(f\) of \(\{0, \dots, n - 1\}\) such that for all \(a, b < n\), \((a, b) \in E_1\) if and only if \((f(a), f(b)) \in E_2\). Bitstrings that do not decode to such a triple are rejected.
Pairs in \(E_1\) or \(E_2\) with an entry at least \(n\) play no role.
noncomputable def graphIsoDec :
MetaMathlibExt.ComplexityTheory.DecisionProblem := fun x =>
match MetaMathlibExt.BitstringEncoding.bitDecode
(α := ℕ × List (ℕ × ℕ) × List (ℕ × ℕ)) x with
| some i => decide (∃ f : Fin i.1 → Fin i.1, Function.Bijective f ∧
∀ a b : Fin i.1,
((a.val, b.val) ∈ i.2.1 ↔ ((f a).val, (f b).val) ∈ i.2.2))
| none => false
abbrev DecisionProblem := List Bool → Bool
MathlibExt/Computability/Complexity.lean:170
def bitDecode [BitstringEncoding α] (l : List Bool) : Option α := toEncoding.decode l
MathlibExt/Computability/Complexity.lean:58
Uses 9 · Used by 1
TheoremGraph isomorphism is in NP and coAM#●ready to prove
The directed graph isomorphism decision problem belongs to NP and to coAM.
public theorem_wanted graph_iso_in_np_coam :
graphIsoDec ∈ MetaMathlibExt.ComplexityTheory.NP ∧ graphIsoDec ∈ coAM
noncomputable def graphIsoDec :
MetaMathlibExt.ComplexityTheory.DecisionProblem := fun x =>
match MetaMathlibExt.BitstringEncoding.bitDecode
(α := ℕ × List (ℕ × ℕ) × List (ℕ × ℕ)) x with
| some i => decide (∃ f : Fin i.1 → Fin i.1, Function.Bijective f ∧
∀ a b : Fin i.1,
((a.val, b.val) ∈ i.2.1 ↔ ((f a).val, (f b).val) ∈ i.2.2))
| none => false
WantedExt/Complexity/KeyTheorems/GIInNPCoAMWanted.lean:44
def NP : DecisionComplexityClass :=
{ L | ∃ (p : Polynomial ℕ), ∃ R : (List Bool × List Bool) → Bool,
IsPolyTime R ∧
∀ x, L x ↔ ∃ w : List Bool, w.length ≤ p.eval x.length ∧ R (x, w) }
MathlibExt/Computability/Complexity.lean:200
def coAM : DecisionComplexityClass := {L | Lᶜ ∈ AM}
CSLibExt/Computability/Complexity/Classes.lean:341
Sources
- O. Goldreich, "On the complexity of graph isomorphism" and the Goldreich-Micali-Wigderson interactive proof for graph non- isomorphism; see J. Köbler, U. Schöning, and J. Torán, The Graph Isomorphism Problem: Its Structural Complexity, Birkhäuser, 1993.
Uses 5
DefinitionDirected graph non-isomorphism as a decision problem#✓fully proved
The decision problem accepts a bitstring \(x\) exactly when \(x\) decodes, under the canonical bitstring encoding of triples \((n, E_1, E_2)\) of a natural number and two lists of pairs of natural numbers, to a triple for which there is no bijection \(f\) from \(\{0, \ldots, n - 1\}\) to itself such that, for all \(a, b < n\), \((a, b) \in E_1\) if and only if \((f(a), f(b)) \in E_2\). Bitstrings that do not decode are rejected.
Pairs in \(E_1\) or \(E_2\) with an entry at least \(n\) play no role, so \(E_1\) and \(E_2\) are read as directed graphs on the vertex set \(\{0, \ldots, n - 1\}\).
noncomputable def graphNonIsoDec :
MetaMathlibExt.ComplexityTheory.DecisionProblem := fun x =>
match MetaMathlibExt.BitstringEncoding.bitDecode
(α := ℕ × List (ℕ × ℕ) × List (ℕ × ℕ)) x with
| some i => decide (¬ ∃ f : Fin i.1 → Fin i.1, Function.Bijective f ∧
∀ a b : Fin i.1,
((a.val, b.val) ∈ i.2.1 ↔ ((f a).val, (f b).val) ∈ i.2.2))
| none => false
abbrev DecisionProblem := List Bool → Bool
MathlibExt/Computability/Complexity.lean:170
def bitDecode [BitstringEncoding α] (l : List Bool) : Option α := toEncoding.decode l
MathlibExt/Computability/Complexity.lean:58
Uses 9 · Used by 1
TheoremGraph non-isomorphism is in AM#●ready to prove
The directed graph non-isomorphism decision problem belongs to the class \(\mathsf{AM}\) of decision problems decided by Arthur–Merlin protocols.
public theorem_wanted graph_noniso_in_am :
graphNonIsoDec ∈ AM
noncomputable def graphNonIsoDec :
MetaMathlibExt.ComplexityTheory.DecisionProblem := fun x =>
match MetaMathlibExt.BitstringEncoding.bitDecode
(α := ℕ × List (ℕ × ℕ) × List (ℕ × ℕ)) x with
| some i => decide (¬ ∃ f : Fin i.1 → Fin i.1, Function.Bijective f ∧
∀ a b : Fin i.1,
((a.val, b.val) ∈ i.2.1 ↔ ((f a).val, (f b).val) ∈ i.2.2))
| none => false
WantedExt/Complexity/KeyTheorems/GNIInAMWanted.lean:45
def AM : DecisionComplexityClass :=
{L | ∃ p q : Polynomial ℕ,
∃ R : List Bool × List Bool × List Bool → Bool, IsPolyTime R ∧
∀ x,
(L x = true →
3 * Set.ncard {r : Fin (p.eval x.length) → Bool |
∃ w : List Bool, w.length ≤ q.eval x.length ∧
R (x, List.ofFn r, w) = true} ≥ 2 * 2 ^ (p.eval x.length)) ∧
(L x = false →
3 * Set.ncard {r : Fin (p.eval x.length) → Bool |
∃ w : List Bool, w.length ≤ q.eval x.length ∧
R (x, List.ofFn r, w) = true} ≤ 2 ^ (p.eval x.length))}
CSLibExt/Computability/Complexity/Classes.lean:327
Sources
- O. Goldreich, S. Micali, and A. Wigderson, "Proofs that yield nothing but their validity, or all languages in NP have zero-knowledge proof systems", Journal of the ACM 38 (1991), 691-729 (FOCS 1986); O. Goldwasser and M. Sipser, "Private coins versus public coins in interactive proof systems", Advances in Computing Research 5 (1989), 73-90.
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.