1616
1717// === Example JSON helpers ===
1818// Load canonical example databases generated by `make examples`.
19- # let rule-db = json (" examples/generated/rules.json" )
20- # let model-db = json (" examples/generated/models.json" )
21-
22- # let load-example (source , target ) = {
23- let matches = rule-db . rules . filter (r => r . source . problem == source and r . target . problem == target )
19+ # let example-db = json (" examples/generated/examples.json" )
20+
21+ # let load-example (source , target , source-variant : none , target-variant : none ) = {
22+ let matches = example-db . rules . filter (r =>
23+ r . source . problem == source and
24+ r . target . problem == target and
25+ (source-variant == none or r . source . variant == source-variant ) and
26+ (target-variant == none or r . target . variant == target-variant )
27+ )
2428 if matches . len () == 1 {
2529 matches . at (0 )
2630 } else if matches . len () == 0 {
3034 }
3135}
3236
33- # let load-model-example (name ) = {
34- let matches = model-db . models . filter (m => m . problem == name )
37+ # let load-model-example (name , variant : none ) = {
38+ let matches = example-db . models . filter (m =>
39+ m . problem == name and
40+ (variant == none or m . variant == variant )
41+ )
3542 if matches . len () == 1 {
3643 matches . at (0 )
3744 } else if matches . len () == 0 {
275282# let reduction-rule (
276283 source , target ,
277284 example : false ,
285+ example-source-variant : none ,
286+ example-target-variant : none ,
278287 example-caption : none ,
279288 extra : none ,
280289 theorem-body , proof-body ,
301310 proof [# proof-body ]
302311
303312 if example {
304- let data = load-example (source , target )
313+ let data = load-example (
314+ source ,
315+ target ,
316+ source-variant : example-source-variant ,
317+ target-variant : example-target-variant ,
318+ )
305319 pad (left : 1.5em , reduction-example (data , caption : example-caption )[# extra ])
306320 }
307321}
@@ -376,8 +390,8 @@ The gray schema table shows the JSON field names used in the library's data stru
376390In all graph problems below, $ G = (V, E)$ denotes an undirected graph with $ |V| = n$ vertices and $ |E|$ edges.
377391
378392# {
379- // MIS has two entries in models .json; select the unit-weight variant
380- let x = model-db . models . filter ( m => m . problem == " MaximumIndependentSet" and m . variant . at ( " weight " , default : "" ) == " One" ). at ( 0 )
393+ // MIS has two entries in examples .json; select the unit-weight variant
394+ let x = load- model-example ( " MaximumIndependentSet" , variant : ( graph : " SimpleGraph " , weight : " One" ))
381395 let nv = graph-num-vertices (x . instance )
382396 let ne = graph-num-edges (x . instance )
383397 // Pick optimal[2] = {v1, v3, v5, v9} to match figure
@@ -2772,17 +2786,26 @@ The following table shows concrete variable overhead for example instances, gene
27722786# let example-files = (
27732787 (source : " MaximumIndependentSet" , target : " MinimumVertexCover" ),
27742788 (source : " MinimumVertexCover" , target : " MaximumIndependentSet" ),
2775- (source : " MaximumIndependentSet" , target : " MaximumSetPacking" ),
2789+ (
2790+ source : " MaximumIndependentSet" ,
2791+ target : " MaximumSetPacking" ,
2792+ source-variant : (graph : " SimpleGraph" , weight : " One" ),
2793+ target-variant : (weight : " One" ),
2794+ ),
27762795 (source : " MaximumMatching" , target : " MaximumSetPacking" ),
27772796 (source : " MinimumVertexCover" , target : " MinimumSetCovering" ),
27782797 (source : " MaxCut" , target : " SpinGlass" ),
27792798 (source : " SpinGlass" , target : " MaxCut" ),
27802799 (source : " SpinGlass" , target : " QUBO" ),
27812800 (source : " QUBO" , target : " SpinGlass" ),
2782- (source : " MaximumIndependentSet" , target : " QUBO" ),
27832801 (source : " KColoring" , target : " QUBO" ),
27842802 (source : " MaximumSetPacking" , target : " QUBO" ),
2785- (source : " KSatisfiability" , target : " QUBO" ),
2803+ (
2804+ source : " KSatisfiability" ,
2805+ target : " QUBO" ,
2806+ source-variant : (k : " K3" ),
2807+ target-variant : (weight : " f64" ),
2808+ ),
27862809 (source : " ILP" , target : " QUBO" ),
27872810 (source : " Satisfiability" , target : " MaximumIndependentSet" ),
27882811 (source : " Satisfiability" , target : " KColoring" ),
@@ -2801,7 +2824,12 @@ The following table shows concrete variable overhead for example instances, gene
28012824)
28022825
28032826# let examples = example-files . map (entry => {
2804- let d = load-example (entry . source , entry . target )
2827+ let d = load-example (
2828+ entry . source ,
2829+ entry . target ,
2830+ source-variant : entry . at (" source-variant" , default : none ),
2831+ target-variant : entry . at (" target-variant" , default : none ),
2832+ )
28052833 (name : example-name (entry . source , entry . target ), data : d )
28062834})
28072835
0 commit comments