Exact computational and theoretical research on lattice point configurations.
Unrestricted closure of the fixed mobile union: exact maximum 360.
All common anchors may be dropped, the complementary child is unrestricted, and any subset of the 501-site union may be selected. A rational physical-line cover proves that none reaches 361. This strictly strengthens the prior zero-/one-/two-anchor results for this one union; it does not bound arbitrary board points or other descendants.
The certificate below covers every union site with nonnegative rational weights. Each weighted line has capacity 2 and each singleton has capacity 1. The exact cost is 360357/1000 = 360.357 < 361, so integrality gives at most 360. The original 360-point parent attains this. The certificate stores 315 line terms and 166 singleton terms; the independent checker verifies all 501 exact cover inequalities, reconstructs canonical line equations, and directly verifies both parent and descendant cleanliness. SciPy was used only to discover weights; no optimizer is used in the checker.
Save the JSON block as mobile_union_cover.json and run the Python block in the same directory. The points and parent/child index sets are embedded, so it needs no unpublished coordinates. Line terms have [[a,b,c],numerator,denominator] with a*x+b*y=c, and singleton terms have [point_index,numerator,denominator]. Coordinates are zero-based.
{"side":200,"points":[[0,63],[0,121],[0,147],[1,81],[1,87],[1,99],[1,100],[2,30],[2,134],[2,175],[2,192],[3,47],[3,81],[3,110],[4,110],[4,147],[4,157],[5,101],[5,152],[5,185],[6,117],[6,131],[6,134],[7,2],[7,130],[7,152],[8,22],[8,63],[8,137],[9,45],[9,89],[10,70],[10,77],[10,118],[11,35],[11,73],[11,145],[11,177],[12,67],[12,84],[13,104],[13,135],[13,136],[13,171],[14,5],[14,59],[14,92],[15,137],[15,141],[15,159],[16,39],[16,165],[17,115],[17,142],[18,79],[18,97],[18,151],[19,64],[19,72],[19,173],[20,102],[20,109],[20,123],[21,90],[21,105],[21,169],[22,35],[22,130],[22,191],[23,57],[23,156],[24,68],[24,70],[24,145],[25,19],[25,31],[25,39],[25,131],[26,19],[26,59],[27,80],[27,111],[27,179],[28,13],[28,16],[28,40],[28,50],[29,104],[29,126],[30,21],[30,116],[30,146],[31,50],[31,58],[32,67],[32,122],[32,163],[32,166],[33,7],[33,32],[33,162],[33,191],[34,116],[34,156],[34,160],[35,177],[35,188],[36,32],[36,87],[37,33],[37,114],[37,141],[38,103],[38,107],[38,157],[38,173],[39,174],[39,183],[39,197],[40,15],[40,43],[40,72],[41,128],[41,156],[42,4],[42,30],[42,121],[43,23],[43,41],[44,108],[44,144],[45,60],[45,190],[46,62],[46,148],[46,184],[47,5],[47,84],[47,196],[48,18],[48,145],[49,75],[50,78],[50,168],[50,171],[51,38],[51,46],[52,0],[52,4],[53,30],[53,79],[53,86],[54,24],[54,48],[55,44],[55,143],[56,55],[56,85],[57,17],[57,107],[57,176],[58,120],[58,168],[59,118],[59,173],[60,71],[60,82],[60,154],[61,130],[62,15],[62,153],[63,7],[63,191],[63,199],[64,13],[64,180],[65,2],[65,6],[65,8],[66,76],[66,83],[67,3],[67,91],[67,187],[68,6],[68,25],[69,7],[69,61],[70,175],[70,189],[71,139],[72,13],[72,100],[72,159],[73,29],[73,188],[74,90],[74,111],[74,134],[75,106],[75,150],[76,6],[76,133],[77,189],[78,42],[78,131],[79,157],[79,181],[80,100],[80,172],[81,59],[81,88],[81,198],[82,6],[82,187],[82,188],[83,34],[83,133],[84,3],[84,17],[84,187],[85,37],[85,143],[85,186],[86,146],[87,163],[87,198],[88,27],[88,92],[89,3],[89,155],[89,190],[90,20],[90,125],[91,44],[91,132],[92,38],[92,185],[93,75],[94,21],[94,44],[94,97],[95,1],[95,29],[96,38],[97,10],[97,20],[97,105],[98,42],[98,98],[98,101],[99,61],[99,72],[99,80],[100,119],[100,127],[101,98],[101,101],[101,186],[102,34],[102,94],[102,179],[103,11],[103,161],[104,70],[104,170],[105,102],[105,178],[106,124],[107,14],[107,161],[108,67],[108,155],[108,191],[109,74],[109,179],[109,192],[110,9],[110,29],[110,72],[110,196],[111,1],[111,172],[112,1],[112,36],[112,166],[113,21],[113,53],[114,56],[114,162],[115,12],[115,182],[116,66],[116,165],[117,77],[117,147],[117,193],[118,1],[118,140],[118,167],[119,10],[119,27],[119,99],[120,18],[121,25],[121,157],[121,185],[122,10],[122,127],[123,66],[123,150],[124,49],[124,75],[124,93],[125,109],[125,195],[126,11],[126,102],[126,170],[127,40],[127,99],[128,60],[128,122],[128,193],[129,10],[129,24],[130,138],[130,192],[131,174],[132,12],[132,108],[133,116],[133,123],[133,171],[134,193],[134,197],[135,19],[135,176],[135,186],[135,187],[136,0],[136,8],[137,46],[137,184],[138,69],[138,73],[139,45],[139,128],[139,196],[140,26],[140,81],[141,9],[141,31],[142,23],[142,182],[143,114],[143,144],[144,21],[144,56],[144,155],[145,147],[145,151],[145,175],[146,113],[146,169],[147,195],[147,199],[148,94],[148,153],[149,28],[149,31],[150,124],[151,54],[151,181],[152,3],[152,192],[152,194],[153,4],[153,51],[153,137],[154,9],[154,139],[154,169],[155,55],[155,91],[156,158],[156,176],[157,35],[157,78],[157,195],[158,2],[158,43],[158,64],[159,5],[159,127],[159,184],[160,16],[160,25],[161,92],[161,96],[162,85],[162,166],[163,33],[163,112],[163,167],[164,11],[164,22],[164,143],[165,83],[165,183],[166,37],[166,167],[167,33],[167,36],[167,51],[168,95],[168,141],[168,149],[168,189],[169,53],[169,178],[170,73],[170,95],[171,20],[171,149],[171,186],[172,88],[172,119],[173,140],[173,180],[174,68],[174,160],[175,54],[175,129],[176,43],[176,142],[177,8],[177,27],[177,116],[177,164],[178,30],[178,39],[178,94],[179,90],[179,97],[180,5],[180,26],[180,135],[181,32],[181,48],[181,120],[182,57],[182,84],[182,135],[182,172],[183,158],[183,160],[184,40],[184,62],[184,163],[185,107],[185,194],[186,28],[186,64],[186,114],[187,115],[187,132],[188,57],[188,126],[188,164],[189,14],[189,122],[189,129],[190,110],[190,154],[191,65],[191,136],[191,177],[192,49],[192,69],[192,197],[193,65],[193,82],[193,162],[194,14],[194,18],[194,47],[195,42],[195,52],[196,58],[196,89],[196,152],[197,7],[197,65],[197,86],[198,112],[198,118],[199,52],[199,103],[199,136],[199,183]],"parent_indices":[0,2,3,4,8,10,11,13,15,16,18,19,20,22,23,24,26,27,29,30,31,32,34,35,38,39,41,43,44,46,47,49,50,52,53,54,56,57,59,60,61,64,65,66,68,69,70,72,73,76,77,78,79,80,81,83,86,87,88,89,91,92,93,96,97,99,100,102,105,106,107,108,109,110,112,113,116,117,119,121,123,124,126,127,128,129,130,131,132,133,134,136,138,139,140,141,143,144,146,147,148,149,151,152,153,154,155,156,157,158,160,162,163,164,165,167,168,169,170,172,173,174,175,176,177,179,180,182,183,185,186,187,188,189,190,192,193,194,195,196,199,200,202,203,204,207,208,209,210,212,213,216,217,219,220,221,222,224,225,226,227,229,231,232,233,234,235,236,237,238,239,241,243,244,246,247,249,250,252,253,254,255,256,257,260,261,263,265,266,267,268,269,270,271,272,274,275,277,280,282,283,284,287,288,289,290,291,292,293,296,297,298,301,302,303,305,307,309,311,313,314,316,318,319,320,321,324,325,326,327,328,329,330,331,332,334,335,336,338,340,341,342,343,344,346,347,349,350,352,353,354,355,356,358,359,361,362,363,364,365,366,368,369,370,371,372,373,374,376,378,379,380,381,383,384,385,386,388,389,391,394,395,396,397,398,399,400,401,403,404,405,406,408,410,411,412,413,416,417,419,420,421,422,424,425,426,427,428,429,430,431,432,433,434,435,436,439,440,442,443,444,446,447,449,450,451,452,456,457,458,460,461,462,463,465,466,468,469,471,472,473,474,476,477,479,480,481,482,484,486,487,488,490,491,492,493,495,496,497,499],"child_indices":[0,1,5,6,7,9,11,12,14,17,19,21,22,23,25,26,28,29,30,32,33,36,37,38,39,40,42,45,48,49,50,51,52,53,54,55,57,58,61,62,63,66,67,69,70,71,72,74,75,78,79,81,82,84,85,87,90,91,92,93,94,95,98,101,103,104,105,106,107,108,111,114,115,116,118,119,120,122,125,126,127,128,129,130,131,132,133,135,137,138,139,140,142,143,145,146,147,148,150,151,152,154,155,156,157,158,159,161,162,164,166,167,169,170,171,173,175,178,179,180,181,182,184,187,188,190,191,193,194,197,198,199,200,201,202,203,205,206,208,209,211,212,214,215,216,217,218,219,221,223,225,226,227,228,230,231,232,233,235,236,238,240,242,245,247,248,249,251,253,254,257,258,259,262,263,264,266,267,268,269,270,272,273,274,276,278,279,281,285,286,287,288,290,291,292,293,294,295,298,299,300,304,306,308,309,310,312,313,314,315,316,317,320,322,323,325,326,328,329,330,332,333,334,335,337,339,340,341,342,343,344,345,347,348,349,350,351,352,353,354,355,356,357,358,360,361,363,364,365,366,367,369,372,373,375,376,377,378,381,382,383,384,385,386,387,388,390,392,393,394,396,398,399,400,401,402,403,406,407,408,409,411,412,414,415,418,419,420,421,422,423,424,426,427,428,429,432,433,434,435,437,438,441,442,443,444,445,447,448,449,453,454,455,456,458,459,460,461,462,464,465,466,467,468,470,472,473,474,475,476,478,479,482,483,485,486,487,488,489,491,493,494,495,496,498,500],"line_terms":[[[0,1,1],1,1],[[0,1,2],207,250],[[0,1,3],553,1000],[[0,1,4],119,200],[[0,1,5],717,1000],[[0,1,6],207,1000],[[0,1,7],397,500],[[0,1,8],967,1000],[[0,1,9],713,1000],[[0,1,10],971,1000],[[0,1,11],301,1000],[[0,1,18],203,500],[[0,1,19],41,250],[[0,1,20],459,1000],[[0,1,21],717,1000],[[0,1,27],97,200],[[0,1,29],359,1000],[[0,1,30],947,1000],[[0,1,31],2,25],[[0,1,32],106,125],[[0,1,33],729,1000],[[0,1,38],143,200],[[0,1,39],107,200],[[0,1,42],151,500],[[0,1,43],7,10],[[0,1,44],301,1000],[[0,1,57],17,1000],[[0,1,59],97,200],[[0,1,64],173,200],[[0,1,65],59,250],[[0,1,70],17,40],[[0,1,72],513,1000],[[0,1,75],52,125],[[0,1,84],41,250],[[0,1,90],87,1000],[[0,1,92],143,500],[[0,1,94],177,500],[[0,1,97],479,1000],[[0,1,101],73,250],[[0,1,107],29,40],[[0,1,110],7,10],[[0,1,114],1,1],[[0,1,116],161,1000],[[0,1,118],433,1000],[[0,1,127],503,1000],[[0,1,136],207,1000],[[0,1,147],187,250],[[0,1,152],207,250],[[0,1,155],717,1000],[[0,1,157],241,500],[[0,1,160],231,1000],[[0,1,163],301,1000],[[0,1,173],11,1000],[[0,1,175],433,1000],[[0,1,184],203,500],[[0,1,186],119,200],[[0,1,188],203,500],[[0,1,189],11,1000],[[0,1,191],729,1000],[[0,1,192],187,250],[[0,1,193],1,1],[[0,1,195],1,1],[[0,1,196],41,1000],[[1,-15,-1510],709,1000],[[1,-14,-2397],189,200],[[1,-13,-1766],253,1000],[[1,-10,-1170],19,200],[[1,-9,-899],413,1000],[[1,-8,-258],53,500],[[1,-7,-609],319,1000],[[1,-7,-500],27,100],[[1,-5,-851],253,1000],[[1,-5,-668],11,1000],[[1,-5,-617],303,500],[[1,-5,-577],203,500],[[1,-4,-248],39,250],[[1,-3,-510],13,200],[[1,-3,-380],1,125],[[1,-2,-278],1,1],[[1,-2,-217],301,1000],[[1,-2,-202],13,1000],[[1,-2,-104],103,1000],[[1,-2,-95],143,500],[[1,-1,-60],31,100],[[1,-1,-44],203,500],[[1,-1,-27],333,1000],[[1,-1,-22],381,1000],[[1,-1,24],19,100],[[1,-1,61],87,200],[[1,-1,116],441,1000],[[1,0,0],253,1000],[[1,0,1],147,250],[[1,0,6],1,1],[[1,0,7],173,1000],[[1,0,8],19,25],[[1,0,11],56,125],[[1,0,13],621,1000],[[1,0,18],23,100],[[1,0,22],34,125],[[1,0,24],143,500],[[1,0,28],43,125],[[1,0,32],7,10],[[1,0,38],69,250],[[1,0,40],23,100],[[1,0,46],527,1000],[[1,0,47],71,250],[[1,0,50],423,500],[[1,0,53],27,500],[[1,0,60],517,1000],[[1,0,63],207,1000],[[1,0,65],17,500],[[1,0,67],9,100],[[1,0,72],1,1],[[1,0,84],56,125],[[1,0,85],203,500],[[1,0,98],191,1000],[[1,0,99],61,125],[[1,0,101],267,1000],[[1,0,102],123,250],[[1,0,108],34,125],[[1,0,110],213,1000],[[1,0,124],61,125],[[1,0,133],153,1000],[[1,0,144],71,250],[[1,0,152],253,1000],[[1,0,153],153,1000],[[1,0,164],607,1000],[[1,0,167],34,125],[[1,0,168],119,200],[[1,0,178],27,500],[[1,0,180],269,1000],[[1,0,181],153,1000],[[1,0,182],103,125],[[1,0,184],7,10],[[1,0,188],431,1000],[[1,0,189],34,125],[[1,0,191],153,200],[[1,0,192],247,250],[[1,0,193],339,1000],[[1,0,194],119,200],[[1,0,199],397,500],[[1,1,138],119,200],[[1,1,152],729,1000],[[1,1,169],143,200],[[1,1,177],71,125],[[1,1,180],143,200],[[1,1,191],67,200],[[1,1,199],97,1000],[[1,1,203],729,1000],[[1,1,218],47,500],[[1,1,222],17,125],[[1,1,250],2,25],[[1,1,283],17,25],[[1,1,285],119,200],[[1,2,199],1,1000],[[1,2,211],207,1000],[[1,2,229],51,1000],[[1,2,342],237,500],[[1,2,365],267,500],[[1,2,433],729,1000],[[1,2,450],197,500],[[1,3,197],79,1000],[[1,3,258],129,250],[[1,4,162],3,100],[[1,4,169],3,100],[[1,5,873],13,1000],[[1,6,1165],7,125],[[1,8,595],11,250],[[1,10,843],83,250],[[1,11,2070],17,250],[[1,12,220],8,125],[[1,16,3081],119,200],[[2,-9,-666],3,25],[[2,-9,-610],31,250],[[2,-5,-605],107,500],[[2,-3,-258],119,200],[[2,-3,125],231,1000],[[2,-3,134],271,500],[[2,-1,-102],301,1000],[[2,-1,-26],27,500],[[2,-1,23],71,250],[[2,1,162],173,1000],[[2,1,197],19,50],[[2,1,238],509,1000],[[2,5,331],81,500],[[2,7,1037],253,1000],[[2,21,767],121,500],[[3,-17,-2757],31,200],[[3,-2,85],207,1000],[[3,-2,202],177,1000],[[3,-1,-63],187,250],[[3,-1,219],251,1000],[[3,1,140],153,1000],[[3,1,314],34,125],[[3,1,482],71,250],[[3,2,560],301,1000],[[3,4,541],459,1000],[[3,5,605],107,200],[[3,5,1397],119,200],[[3,8,580],3,200],[[3,8,872],301,1000],[[3,19,1814],47,500],[[4,-23,-2913],253,1000],[[4,-19,-37],129,250],[[4,-13,-1891],7,125],[[4,-13,-814],31,200],[[4,-3,-293],413,1000],[[4,-3,-231],1,1],[[4,-1,498],203,500],[[4,1,716],17,500],[[4,1,785],161,1000],[[4,3,494],301,1000],[[4,3,942],203,500],[[4,7,873],97,200],[[5,-9,-874],21,25],[[5,-3,-402],117,125],[[5,-2,-104],73,250],[[5,-1,222],119,200],[[5,1,144],837,1000],[[5,3,260],143,1000],[[5,4,649],61,500],[[5,4,1168],301,1000],[[5,6,789],28,125],[[5,7,1984],189,200],[[5,11,2386],631,1000],[[5,23,4657],9,20],[[5,36,3318],7,10],[[6,1,181],391,1000],[[6,1,1178],203,500],[[7,-10,-299],106,125],[[7,-6,1024],67,1000],[[7,-5,65],9,125],[[7,-4,158],203,500],[[7,-4,793],3,100],[[7,-2,-213],13,200],[[7,1,893],139,1000],[[7,1,1018],921,1000],[[7,2,1442],13,1000],[[7,16,671],56,125],[[8,-45,-6437],59,250],[[8,-17,-883],301,1000],[[8,-3,1205],221,1000],[[8,-1,731],27,500],[[9,-64,-10751],203,500],[[9,-26,439],207,1000],[[9,-10,552],397,500],[[9,-5,567],79,200],[[9,7,1362],253,1000],[[10,1,287],19,1000],[[10,23,1617],36,125],[[11,-41,-1742],69,250],[[11,-1,1210],907,1000],[[11,2,337],83,1000],[[11,2,2032],27,125],[[11,4,1177],7,10],[[11,9,1556],69,125],[[11,10,2406],691,1000],[[12,-35,-3484],19,50],[[12,-7,19],119,200],[[12,-1,244],207,250],[[12,7,1101],253,1000],[[12,11,2861],249,500],[[13,-25,-36],297,500],[[13,-18,474],203,500],[[13,-6,631],183,500],[[13,10,3116],37,100],[[14,1,389],233,500],[[14,9,1202],237,500],[[15,-13,-100],143,500],[[15,14,2750],123,500],[[15,14,2768],187,1000],[[16,-23,1174],321,1000],[[16,-11,-959],99,100],[[16,-5,2417],39,200],[[16,59,5149],413,1000],[[17,-14,294],1,40],[[17,-1,114],241,1000],[[17,-1,489],7,125],[[17,3,3354],7,125],[[17,4,2048],69,250],[[17,15,2191],241,1000],[[17,23,2732],173,1000],[[18,11,2146],143,500],[[19,-13,-458],187,250],[[19,2,612],57,250],[[19,2,1863],3,100],[[21,-25,-107],153,1000],[[21,31,5715],253,1000],[[22,9,1501],16,125],[[22,13,1075],413,1000],[[22,17,3515],61,125],[[22,19,4355],34,125],[[23,-47,-4596],153,1000],[[23,-5,-18],21,40],[[23,-5,3662],207,1000],[[23,3,2617],351,1000],[[23,11,1591],143,500],[[25,-23,-1181],321,1000],[[25,8,5630],177,1000],[[27,-40,236],121,500],[[27,-8,-358],143,200],[[27,10,1815],19,25],[[28,23,6822],717,1000],[[31,-9,2302],253,1000],[[31,25,5069],513,1000],[[35,53,9692],13,200],[[38,9,3129],69,250],[[40,21,9709],7,40],[[41,39,10298],217,1000],[[43,-71,1244],207,1000],[[43,-18,-717],119,200],[[48,-5,3007],519,1000],[[49,-36,-721],553,1000],[[77,12,5029],7,50],[[81,-7,5333],1,1]],"singleton_terms":[[19,1,1],[29,119,250],[32,709,1000],[38,1,1],[50,233,500],[52,129,250],[53,7,10],[54,771,1000],[59,391,1000],[69,201,250],[70,1,1],[72,27,200],[78,837,1000],[88,289,500],[92,1,1],[93,167,250],[105,1,1],[106,119,200],[108,1,1],[119,37,125],[123,353,1000],[126,1,1],[127,1,1],[128,1,1],[129,34,125],[130,1,1],[131,241,1000],[132,1,1],[138,47,125],[140,12,25],[143,61,1000],[146,1,1],[147,429,500],[148,203,500],[151,707,1000],[152,1,1],[153,203,500],[154,7,10],[155,87,1000],[156,1,1],[157,621,1000],[158,347,1000],[167,121,250],[168,333,500],[169,199,1000],[170,1,1],[173,397,500],[174,419,1000],[175,1,1],[179,119,200],[182,359,1000],[188,67,250],[194,321,500],[200,1,1],[202,527,1000],[203,99,100],[209,29,40],[212,71,250],[216,1,1],[217,56,125],[219,553,1000],[221,343,1000],[225,621,1000],[227,81,1000],[231,13,20],[232,271,500],[233,729,1000],[235,1,1],[247,127,200],[249,393,500],[254,1,1],[257,221,500],[263,993,1000],[266,341,500],[267,321,1000],[268,31,100],[269,1,1],[270,717,1000],[274,1,1],[277,19,250],[287,1,1],[288,119,200],[290,1,1],[291,1,1],[292,47,500],[293,1,1],[298,23,1000],[309,1,1],[313,357,1000],[314,73,250],[316,281,500],[320,117,125],[325,777,1000],[326,1,1],[329,1,1],[330,811,1000],[335,107,250],[340,1,1],[341,17,500],[342,19,20],[344,207,1000],[347,1,1],[349,1,1],[350,1,1],[353,271,1000],[354,7,125],[356,167,1000],[358,717,1000],[361,37,100],[363,1,1],[364,153,200],[366,1,1],[369,433,1000],[371,103,125],[372,17,25],[376,187,250],[378,106,125],[381,1,1],[383,957,1000],[384,503,1000],[385,157,200],[386,1,1],[388,187,250],[394,53,250],[396,467,500],[398,143,200],[399,1,1],[400,1,1],[401,99,100],[403,1,1],[408,1,1],[411,1,1],[419,17,40],[421,1,1],[422,1,1],[424,173,250],[426,631,1000],[427,23,40],[428,583,1000],[429,1,1],[431,417,1000],[432,1,1],[433,97,1000],[435,1,1],[439,551,1000],[443,457,500],[447,61,250],[449,106,125],[456,33,200],[460,69,250],[461,119,200],[462,1,1],[465,403,500],[466,1,1],[468,57,100],[472,729,1000],[474,1,1],[479,13,1000],[482,331,500],[486,203,500],[487,699,1000],[488,1,1],[491,173,1000],[493,153,200],[495,1,1],[496,56,125]],"exact_cost":"360357/1000","minimum_coverage":"1","rich_lines":974,"parent_sha256":"13ac4822a028f46009c0467573401e8685f2fa5e6ff81547c75da78dc3706d6e","child_sha256":"c866d15f6275b63658767be3a72549775badb04df0bf8bd6b61bf29d5f73ba17","scope":"Every physical no-three subset of this fixed union; all anchors optional; no complementary-child condition."}
from pathlib import Path
from fractions import Fraction
from itertools import combinations
from math import gcd
import json
def line(p,q):
a=q[1]-p[1];b=p[0]-q[0];d=gcd(a,b);a//=d;b//=d
if a<0 or (a==0 and b<0):a=-a;b=-b
return a,b,a*p[0]+b*p[1]
D=json.loads(Path('mobile_union_cover.json').read_text())
pts=[tuple(p) for p in D['points']];assert len(pts)==501 and len(set(pts))==501
cover=[Fraction(0)]*len(pts);cost=Fraction(0)
for (a,b,c),num,den in D['line_terms']:
w=Fraction(num,den);assert w>=0;cost+=2*w
for i,(x,y) in enumerate(pts):
if a*x+b*y==c:cover[i]+=w
for i,num,den in D['singleton_terms']:
w=Fraction(num,den);assert w>=0;cost+=w;cover[i]+=w
assert min(cover)>=1 and cost<Fraction(361)
A={pts[i] for i in D['parent_indices']};B={pts[i] for i in D['child_indices']}
assert len(A)==360 and len(B)==346 and len(A&B)==205 and A|B==set(pts)
for S in [A,B]:
seen=set()
for p,q in combinations(S,2):
l=line(p,q);assert l not in seen;seen.add(l)
# ensure every displayed multi-point line is a genuine canonical line from the union
pair=set(line(p,q) for p,q in combinations(pts,2))
for (a,b,c),_,_ in D['line_terms']:
assert (a,b,c) in pair
print({'points':len(pts),'line_terms':len(D['line_terms']),'singleton_terms':len(D['singleton_terms']),'cost':str(cost),'min_coverage':str(min(cover)),'verified':True})
View discussion