Max Cut: the problem #
MAX CUT (Karp 1972): is there a set S of vertices
such that at least k edges have exactly one endpoint in S? Here, as
everywhere in this library, the threshold k is carried by the instance in
the unary representation of DescriptiveComplexity.Numbers.Unary – and,
since a cut can have quadratically many edges, at arity 2: k is the number
of pairs in the marked relation of
FirstOrder.Language.markedArcGraph, the vocabulary introduced for Feedback Arc Set
and reused here unchanged.
The cut itself is read as a set of ordered pairs
(DescriptiveComplexity.CutRel): the pairs (u, v) with u adjacent to v, u
inside S and v outside. On a symmetric adjacency relation this counts
every cut edge exactly once, which is what makes the threshold comparison the
intended one without any division by two.
The problem #
The cut determined by S, as a relation: a is adjacent to b, a lies
inside S and b outside. Reading the cut as a set of ordered pairs of this
shape counts every cut edge of a symmetric adjacency relation once.
Equations
- DescriptiveComplexity.CutRel Adjp S a b = (Adjp a b ∧ S a ∧ ¬S b)
Instances For
Dependency graph
Some cut is at least as large as the number encoded by the Kp-marked
pairs: “some cut has at least k edges”.
Equations
Instances For
Dependency graph
The max-cut property, with the threshold certified by an injection of the marked pairs into the cut – the shape the second-order definition guesses.
Dependency graph
MaxCutOn transports along an equivalence commuting with the two
relations.
Dependency graph
MaxCutOn transports along an equivalence, iff version.
Dependency graph
An arc-marked graph has a cut at least as large as its marked relation. (Finiteness of the universe is part of the property: cardinality thresholds are only meaningful on finite structures.)
Equations
Instances For
Dependency graph
Having a large cut is isomorphism-invariant.
Dependency graph
MAX CUT, as a problem on arc-marked graphs: is there a set of vertices whose cut is at least as large as the marked relation?
Equations
- DescriptiveComplexity.MaxCut = { Holds := fun (A : Type) (inst : FirstOrder.Language.markedArcGraph.Structure A) => DescriptiveComplexity.HasLargeCut A, iso_invariant := ⋯ }