plum-umd / adapton.ocaml

(Nominal) Adapton in OCaml
50 stars 5 forks source link

Mergesort output is not uniformly articulated #19

Closed matthewhammer closed 9 years ago

matthewhammer commented 9 years ago

We'd like it if mergesort, when given uniformly named and articulated input, will produce uniformly named and articulated output. Further, we'd like it if it roughly preserved whatever distribution of naming and articulation is found in the input.

As it stands, it doesn't work for uniform (fine-grained) names and articulation points. Instead, the initial output of the sort is articulated, and the later parts are not.

To reproduce this behavior, do this:

make test
./experiments.native --experiment Rope_mergesort_name --n 100 --debug-flags --num-changes 0 --gran 1

You'll see this (notice the two really long lines, and how they look different):

You requested experiment: Rope_mergesort_name
0: Initial input:   3533; Name; Art => 4775; Name; Art => 501; Name; Art => 10234; Name; Art => 993; Name; Art => 1831; Name; Art => 7019; Name; Art => 11501; Name; Art => 8734; Name; Art => 6024; Name; Art => 10877; Name; Art => 12727; Name; Art => 9533; Name; Art => 114; Name; Art => 11543; Name; Art => 1845; Name; Art => 4721; Name; Art => 12024; Name; Art => 7059; Name; Art => 3792; Name; Art => 3891; Name; Art => 1748; Name; Art => 1994; Name; Art => 10018; Name; Art => 1021; Name; Art => 8450; Name; Art => 8017; Name; Art => 5413; Name; Art => 822; Name; Art => 12154; Name; Art => 5458; Name; Art => 5066; Name; Art => 6334; Name; Art => 3422; Name; Art => 9038; Name; Art => 11594; Name; Art => 3886; Name; Art => 3405; Name; Art => 7184; Name; Art => 1633; Name; Art => 9918; Name; Art => 1418; Name; Art => 2839; Name; Art => 6015; Name; Art => 1232; Name; Art => 11994; Name; Art => 5231; Name; Art => 4348; Name; Art => 9346; Name; Art => 4160; Name; Art => 2971; Name; Art => 8243; Name; Art => 2175; Name; Art => 2680; Name; Art => 5082; Name; Art => 12294; Name; Art => 11256; Name; Art => 10881; Name; Art => 2230; Name; Art => 3209; Name; Art => 11747; Name; Art => 4612; Name; Art => 5325; Name; Art => 7097; Name; Art => 9948; Name; Art => 10464; Name; Art => 10928; Name; Art => 4519; Name; Art => 11711; Name; Art => 550; Name; Art => 9410; Name; Art => 1401; Name; Art => 3681; Name; Art => 3918; Name; Art => 1828; Name; Art => 9498; Name; Art => 12361; Name; Art => 12122; Name; Art => 4940; Name; Art => 1517; Name; Art => 9998; Name; Art => 10956; Name; Art => 4195; Name; Art => 11448; Name; Art => 1438; Name; Art => 1879; Name; Art => 12535; Name; Art => 12038; Name; Art => 6273; Name; Art => 12408; Name; Art => 657; Name; Art => 394; Name; Art => 5522; Name; Art => 7668; Name; Art => 5003; Name; Art => 9562; Name; Art => 10536; Name; Art => 12754; Name; Art => 4190; Name; Art => 5552; Name; Art => Nil

0: Initial output:  Name; 114; Art => Name; 394; Art => Name; 501; Art => Name; 550; Art => Name; 657; Art => Name; 822; Art => Name; 993; Art => 1021; Name; 1232; Art => Name; 1401; Art => 1418; Name; 1438; Art => Name; 1517; Art => 1633; Name; 1748; Art => Name; 1828; Art => 1831; 1845; 1879; 1994; Name; 2175; Art => 2230; 2680; 2839; Name; 2971; Art => 3209; 3405; Name; 3422; Art => 3533; 3681; 3792; Name; 3886; Art => 3891; 3918; 4160; Name; 4190; Art => 4195; Name; 4348; Art => 4519; 4612; 4721; 4775; 4940; Name; 5003; Art => 5066; 5082; 5231; 5325; 5413; 5458; 5522; Name; 5552; Art => 6015; 6024; 6273; 6334; 7019; 7059; 7097; 7184; 7668; 8017; 8243; 8450; 8734; 9038; 9346; 9410; 9498; 9533; 9562; 9918; 9948; 9998; 10018; 10234; 10464; 10536; 10877; 10881; 10928; 10956; 11256; 11448; 11501; 11543; 11594; 11711; 11747; 11994; 12024; 12038; 12122; 12154; 12294; 12361; 12408; 12535; 12727; 12754; Nil

----------------------------------------------------------------------------------
0:Rope_mergesort_name: Initial run: time:0.0040s (unit cost 663)
0:Rope_mergesort_name: Initial run: {dirty:0; clean:0; eval:475; create:475; tables:2}
--------------------
0:Rope_mergesort_name: No changes requested; Skipping interaction.

Kyle says: "You'll notice that the order changes from Cons-Name-Art to Name-Cons-Art. That's because of what I wrote in list_merge. I have no idea why I did it, and should probably change it back."

It's not yet clear to me if this discrepancy is related to this issue, or just some other (more minor) one.

matthewhammer commented 9 years ago

I've looked at the code a little. After first looking at list_to_rope_mergesort as a whole, I started to look at something simpler, using @kyleheadley's new feature to check for uniform output articulation.

I decided to study list_of_rope $$ rope_of_list in isolation. In particular, I wanted to ensure that this composition preserves the uniformity of names and articulations. There was already an experiment written for this test (Rope_iter_name) so I ran it with the debugging flags:

./_build/Source/test/experiments.native --experiment Rope_iter_name --n 100 --debug-flags --num-changes 0
You requested experiment: Rope_iter_name
0: Initial input:   3533; Name; Art => 4775; Name; Art => 501; Name; Art => 10234; Name; Art => 993; Name; Art => 1831; Name; Art => 7019; Name; Art => 11501; Name; Art => 8734; Name; Art => 6024; Name; Art => 10877; Name; Art => 12727; Name; Art => 9533; Name; Art => 114; Name; Art => 11543; Name; Art => 1845; Name; Art => 4721; Name; Art => 12024; Name; Art => 7059; Name; Art => 3792; Name; Art => 3891; Name; Art => 1748; Name; Art => 1994; Name; Art => 10018; Name; Art => 1021; Name; Art => 8450; Name; Art => 8017; Name; Art => 5413; Name; Art => 822; Name; Art => 12154; Name; Art => 5458; Name; Art => 5066; Name; Art => 6334; Name; Art => 3422; Name; Art => 9038; Name; Art => 11594; Name; Art => 3886; Name; Art => 3405; Name; Art => 7184; Name; Art => 1633; Name; Art => 9918; Name; Art => 1418; Name; Art => 2839; Name; Art => 6015; Name; Art => 1232; Name; Art => 11994; Name; Art => 5231; Name; Art => 4348; Name; Art => 9346; Name; Art => 4160; Name; Art => 2971; Name; Art => 8243; Name; Art => 2175; Name; Art => 2680; Name; Art => 5082; Name; Art => 12294; Name; Art => 11256; Name; Art => 10881; Name; Art => 2230; Name; Art => 3209; Name; Art => 11747; Name; Art => 4612; Name; Art => 5325; Name; Art => 7097; Name; Art => 9948; Name; Art => 10464; Name; Art => 10928; Name; Art => 4519; Name; Art => 11711; Name; Art => 550; Name; Art => 9410; Name; Art => 1401; Name; Art => 3681; Name; Art => 3918; Name; Art => 1828; Name; Art => 9498; Name; Art => 12361; Name; Art => 12122; Name; Art => 4940; Name; Art => 1517; Name; Art => 9998; Name; Art => 10956; Name; Art => 4195; Name; Art => 11448; Name; Art => 1438; Name; Art => 1879; Name; Art => 12535; Name; Art => 12038; Name; Art => 6273; Name; Art => 12408; Name; Art => 657; Name; Art => 394; Name; Art => 5522; Name; Art => 7668; Name; Art => 5003; Name; Art => 9562; Name; Art => 10536; Name; Art => 12754; Name; Art => 4190; Name; Art => 5552; Name; Art => Nil

0: Initial output:  Name; Art => 3533; Name; Art => 4775; Name; Art => 501; Name; Art => 10234; Name; Art => 993; Name; Art => 1831; Name; Art => 7019; Name; Art => 11501; Name; Art => 8734; Name; Art => 6024; Name; Art => 10877; Name; Art => 12727; Name; Art => 9533; Name; Art => 114; Name; Art => 11543; Name; Art => 1845; Name; Art => 4721; Name; Art => 12024; Name; Art => 7059; Name; Art => 3792; Name; Art => 3891; Name; Art => 1748; Name; Art => 1994; Name; Art => 10018; Name; Art => 1021; Name; Art => 8450; Name; Art => 8017; Name; Art => 5413; Name; Art => 822; Name; Art => 12154; Name; Art => 5458; Name; Art => 5066; Name; Art => 6334; Name; Art => 3422; Name; Art => 9038; Name; Art => 11594; Name; Art => 3886; Name; Art => 3405; Name; Art => 7184; Name; Art => 1633; Name; Art => 9918; Name; Art => 1418; Name; Art => 2839; Name; Art => 6015; Name; Art => 1232; Name; Art => 11994; Name; Art => 5231; Name; Art => 4348; Name; Art => 9346; Name; Art => 4160; Name; Art => 2971; Name; Art => 8243; Name; Art => 2175; Name; Art => 2680; Name; Art => 5082; Name; Art => 12294; Name; Art => 11256; Name; Art => 10881; Name; Art => 2230; Name; Art => 3209; Name; Art => 11747; Name; Art => 4612; Name; Art => 5325; Name; Art => 7097; Name; Art => 9948; Name; Art => 10464; Name; Art => 10928; Name; Art => 4519; Name; Art => 11711; Name; Art => 550; Name; Art => 9410; Name; Art => 1401; Name; Art => 3681; Name; Art => 3918; Name; Art => 1828; Name; Art => 9498; Name; Art => 12361; Name; Art => 12122; Name; Art => 4940; Name; Art => 1517; Name; Art => 9998; Name; Art => 10956; Name; Art => 4195; Name; Art => 11448; Name; Art => 1438; Name; Art => 1879; Name; Art => 12535; Name; Art => 12038; Name; Art => 6273; Name; Art => 12408; Name; Art => 657; Name; Art => 394; Name; Art => 5522; Name; Art => 7668; Name; Art => 5003; Name; Art => 9562; Name; Art => 10536; Name; Art => 12754; Name; Art => 4190; Name; Art => 5552; Nil

----------------------------------------------------------------------------------
0:Rope_iter_name: Initial run:  time:0.0033s (unit cost 0)
0:Rope_iter_name: Initial run:  {dirty:0; clean:0; eval:301; create:301; tables:0}
--------------------
0:Rope_iter_name: No changes requested; Skipping interaction.

As we can see, the output is articulated in (nearly) the same uniform manner as the input. The only difference is that the list begins with a Name and Art, rather than ending with one around the final Nil case. Despite this, the articulations are spaced uniformly, as in the input. Furthermore, this works out even though the code for rope_of_list and list_of_rope shuffles around Names and Arts and data elements into and out of the intermediate tree structure.

What does this mean for rope_mergesort? We can view rope_mergesort as a simpler variation on list_of_rope where we don't perform the logic of the list_merge steps.

Since I've confirmed that this simpler composition works, I suggest that something is going wrong in the list_merge logic, or how it's interacting with the other steps. That seems like the next natural place to focus. If possible, it'd be nice to run list_merge on two small random input lists, in isolation.

matthewhammer commented 9 years ago

Last commit seems to fix the problem for n=100. More experimentation is warranted. I have a bunch of unanswered questions right now. Here's the main one:

In particular, I recommend writing a debugging check that automatically checks that the maximum gap between Name cases in the output is the same as the maximum gap in the input. (perhaps it's also worth checking the same property for Arts too). This is one way to formalize our notion of "granularity preservation". Then, we can script these tests and be more confident about how our code performs.

Once we confirm (by testing) that this always gives a uniformly articulated output, I think we can close this issue and move on to more experiments that go deeper.

matthewhammer commented 9 years ago

Plan: After adding the check proposed above, let's close this issue and move on to these issues, in this order:

kyleheadley commented 9 years ago

The improved merge sort doesn't seem to maintain granularity. For example: ./experiments.native --experiment Rope_mergesort_improved_name --n 1000 --gran 9 --num-changes 0 --debug-flags has an extremely coarse-grained input and an extremely fine-grained output

matthewhammer commented 9 years ago

Rope_mergesort_name

Initial output: Art => Name; 27; Art => Name; 386; Art => 519; Name; 554; Art => Name; 657; Art => Name; 683; Art => 737; 749; 753; 954; 1083; 1140; 1349; 1517; 1573; 1633; 1676; 1754; 1831; 1922; 2145; 2442; 2478; 2596; 2627; 2907; 2971; 3050; 3169; 3572; 3735; 3792; 3996; 4153; 4163; 4195; 4409; 4564; 4593; 4598; 4630; 5048; 5103; 5141; 5190; 5830; 5834; 5938; 6247; 6258; 6306; 6351; 6395; 6435; 6602; 6891; 6974; 6988; 7073; 7107; 7344; 8171; 8213; 8350; 8373; 8777; 8877; 9011; 9101; 9109; 9173; 9251; 9357; 9448; 9533; 9630; 9785; 9992; 10018; 10203; 10257; 10406; 10461; 10653; 10853; 11021; 11060; 11129; 11603; 11890; 11994; 12154; 12182; 12235; 12294; 12357; 12408; 12587; 12668; 12839; 12902; 12943; 13076; 13482; 13510; 13599; 13622; 13688; 13704; 13806; 13821; 13863; 13984; 14039; 14046; 14090; 14201; 14205; 14257; 14347; 14563; 15061; 15152; 15382; 15401; 15429; 15644; 16015; 16298; 16355; 16516; 16580; 16612; 16685; 16718; 16750; 16768; 16865; 16957; 16980; 17007; 17293; 17628; 17644; 17779; 17811; 17863; 17906; 17981; 18213; 18240; 18486; 18487; 18509; 18594; 18815; 19082; 19205; 19222; 19230; 19264; 19438; 19443; 19611; 19667; 19897; 19956; 20076; 20279; 20331; 20447; 20735; 20851; 20957; 20994; 21352; 21427; 21455; 21514; 21525; 21534; 21669; 21699; 21951; 22122; 22331; 22444; 22525; 22585; 22609; 22613; 22788; 23066; 23514; 23681; 23729; 23756; 23836; 24078; 24251; 24392; 24409; 24424; 24462; 24486; 24662; 24735; 24782; 24832; 25002; 25022; 25518; 25528; 25637; 25748; 25822; 25924; 25990; 26250; 26413; 26434; 26699; 26725; 26738; 26832; 27084; 27220; 27255; 27407; 27558; 27807; 27811; 27869; 27979; 28377; 28654; 28769; 28905; 28950; 29059; 29192; 29425; 29540; 29672; 29733; 29921; 30375; 30383; 30630; 30958; 31013; 31030; 31052; 31171; 31176; 31244; 31280; 31296; 31545; 31833; 32100; 32184; 32212; 32382; 32431; 32453; 32541; 32553; 32572; 32659; 32824; 32886; 32917; 33010; 33175; 33233; 33445; 33455; 33817; 33843; 34268; 34891; 35000; 35010; 35020; 35021; 35057; 35162; 35205; 35823; 36212; 36248; 36297; 36314; 36474; 36481; 36551; 36698; 37048; 37205; 37213; 37507; 37531; 37709; 37892; 38026; 38308; 38327; 38549; 38693; 38901; 38950; 39174; 39230; 39662; 39899; 40319; 40321; 40350; 40589; 40806; 40876; 40896; 41116; 41271; 41765; 41907; 42114; 42194; 42291; 42841; 42851; 42874; 43158; 43232; 43343; 43631; 43712; 43725; 43783; 43934; 43949; 44023; 44209; 44217; 44239; 44384; 44437; 44564; 44673; 44715; 45047; 45419; 45475; 45563; 45689; 45843; 46094; 46213; 46340; 46391; 46425; 46426; 46497; 46742; 46847; 46937; 47007; 47042; 47124; 47207; 47222; 47264; 47305; 47437; 47604; 47906; 48190; 48231; 48267; 48313; 48323; 48348; 48747; 48864; 48891; 48895; 48936; 49062; 49286; 49347; 49486; 49690; 49836; 49893; 49901; 49961; 50111; 50117; 50133; 50225; 50355; 50406; 50424; 50438; 50522; 50677; 50822; 51154; 51180; 51434; 52038; 52129; 52226; 52296; 52440; 52609; 52687; 52869; 52948; 53293; 53358; 53486; 53526; 53645; 53825; 53967; 54151; 54180; 54281; 54379; 54409; 54605; 54733; 54796; 54798; 54868; 54870; 54923; 55049; 55238; 55434; 55547; 55548; 55641; 55663; 55909; 55946; 56075; 56085; 56282; 56612; 56736; 56752; 56954; 56982; 56993; 57139; 57141; 57550; 57612; 57929; 58011; 58210; 58282; 58383; 58418; 58636; 58743; 58950; 58982; 59027; 59141; 59172; 59217; 59244; 59371; 59720; 59870; 60094; 60282; 60452; 60533; 60535; 60546; 60553; 60569; 60680; 60705; 60877; 61126; 61157; 61348; 61375; 61480; 61898; 62039; 62090; 62332; 62410; 62487; 62723; 62766; 62797; 63221; 63346; 63552; 63813; 63955; 63970; 64133; 64316; 65166; 65232; 65245; 65252; 65293; 65316; 65713; 66060; 66070; 66204; 66238; 66357; 66391; 66680; 66720; 66727; 66754; 66851; 66946; 67195; 67554; 67681; 67953; 68148; 68190; 68394; 68519; 68543; 68612; 68760; 68806; 69081; 69103; 69378; 69989; 70024; 70172; 70334; 70385; 70391; 70509; 70618; 70633; 70647; 70863; 71105; 71255; 71363; 71365; 71407; 71466; 71489; 71552; 71783; 71882; 71998; 72040; 72450; 72574; 72866; 72891; 73188; 73241; 73345; 73418; 73488; 73720; 74017; 74160; 74246; 74404; 74440; 74693; 74721; 75018; 75079; 75096; 75188; 75464; 75470; 75512; 75728; 75897; 75941; 76156; 76401; 76535; 76710; 76727; 76764; 76832; 76944; 77019; 77200; 77342; 77702; 78263; 78419; 78628; 78645; 78832; 78840; 79022; 79290; 79540; 79540; 79578; 79637; 79795; 80097; 80255; 80286; 80297; 80356; 80390; 80510; 80568; 80644; 81055; 81411; 81435; 81532; 81571; 81606; 81740; 82258; 82283; 82322; 82352; 82353; 82674; 82886; 83014; 83085; 83367; 83376; 83392; 83653; 83816; 83886; 83977; 83981; 83984; 84016; 84157; 84336; 84523; 84767; 84926; 84932; 85007; 85633; 86086; 86281; 86298; 86408; 86594; 86716; 86888; 86907; 87304; 87304; 87315; 87622; 87677; 87692; 88056; 88196; 88281; 88412; 88551; 88566; 88850; 88878; 88938; 89161; 89184; 89216; 89226; 89325; 89598; 89621; 89933; 90002; 90019; 90213; 90243; 90325; 90663; 90720; 90803; 90903; 90938; 91012; 91158; 91227; 91357; 91372; 91430; 91479; 91775; 91830; 92105; 92274; 92350; 92449; 92488; 92512; 92733; 92802; 92884; 93022; 93066; 93244; 93486; 93760; 94235; 94390; 94394; 94488; 94521; 94603; 94661; 94889; 94974; 95116; 95119; 95142; 95214; 95258; 95390; 95610; 95798; 95839; 95918; 95929; 96024; 96245; 96551; 96609; 97160; 97223; 97508; 97626; 97784; 97906; 97931; 97967; 98110; 98115; 98120; 98276; 98362; 98420; 98468; 98770; 98824; 98892; 98977; 99056; 99098; 99112; 99447; 99518; 100005; 100094; 100244; 100254; 100331; 100359; 100376; 100466; 100653; 100657; 100684; 100767; 101143; 101179; 101238; 101527; 101608; 101883; 101893; 101985; 102090; 102129; 102402; 102468; 102727; 102794; 102994; 103002; 103014; 103108; 103231; 103310; 103393; 103453; 103475; 103551; 103699; 103838; 103977; 103978; 104192; 104450; 104550; 104700; 104844; 105101; 105174; 105307; 105358; 105397; 105639; 105851; 105952; 105999; 106066; 106143; 106810; 106947; 107248; 107297; 107484; 107523; 107647; 108129; 108345; 108527; 108620; 108650; 108664; 108750; 108790; 109296; 109531; 109548; 109694; 109752; 110149; 110154; 110331; 110434; 110512; 110548; 110866; 111201; 111216; 111366; 111438; 111485; 111495; 111949; 112260; 112274; 112347; 112398; 112415; 112471; 112804; 112939; 113141; 113194; 113198; 113356; 113425; 113440; 113591; 113611; 113640; 114147; 114154; 114167; 114399; 114566; 114714; 114748; 114752; 115015; 115097; 115162; 115248; 115252; 115314; 115672; 115720; 115829; 116018; 116022; 116088; 116114; 116141; 116566; 116618; 116860; 117194; 117223; 117348; 117582; 117615; 117705; 117719; 117763; 117804; 117880; 117974; 118039; 118221; 118544; 118655; 118698; 118703; 118788; 118833; 119018; 119087; 119131; 119230; 119260; 119282; 119621; 119775; 119828; 119921; 120014; 120096; 120182; 120232; 120266; 120456; 120575; 120735; 120767; 120768; 120924; 120955; 120984; 121270; 121284; 121371; 121498; 121806; 121948; 122155; 122330; 122353; 122636; 122722; 122748; 122868; 122956; 123050; 123084; 123135; 123187; 123555; 123603; 123629; 123832; 124016; 124050; 124080; 124136; 124237; 124486; 124572; 124605; 124674; 124688; 124974; 125222; 125340; 125369; 125434; 125543; 125875; 126128; 126174; 126243; 126372; 126408; 126461; 126517; 126781; 126794; 127033; 127106; Nil

Improved version

I see output that is consistent with your characterization "extremely fine-grained":

0: Initial output:  Art => Name; 27; Art => Name; 386; Art => Name; 519; Art => Name; 554; Art => Name; 657; Art => Name; 683; Art => Name; 737; Art => Name; 749; Art => Name; 753; Art => Name; 954; Art => Name; 1083; Art => Name; 1140; Art => Name; 1349; Art => Name; 1517; Art => 1573; Name; 1633; Art => Name; 1676; Art => Name; 1754; Art => Name; 1831; Art => Name; 1922; Art => 2145; Name; 2442; Art => Name; 2478; Art => Name; 2596; Art => Name; 2627; Art => Name; 2907; Art => Name; 2971; Art => Name; 3050; Art => Name; 3169; Art => Name; 3572; Art => Name; 3735; Art => Name; 3792; Art => Name; 3996; Art => Name; 4153; Art => Name; 4163; Art => Name; 4195; Art => Name; 4409; Art => Name; 4564; Art => Name; 4593; Art => 4598; Name; 4630; Art => Name; 5048; Art => Name; 5103; Art => Name; 5141; Art => Name; 5190; Art => Name; 5830; Art => Name; 5834; Art => Name; 5938; Art => Name; 6247; Art => Name; 6258; Art => Name; 6306; Art => Name; 6351; Art => Name; 6395; Art => Name; 6435; Art => Name; 6602; Art => Name; 6891; Art => Name; 6974; Art => 6988; Name; 7073; Art => Name; 7107; Art => Name; 7344; Art => Name; 8171; Art => Name; 8213; Art => Name; 8350; Art => Name; 8373; Art => Name; 8777; Art => Name; 8877; Art => Name; 9011; Art => Name; 9101; Art => Name; 9109; Art => Name; 9173; Art => Name; 9251; Art => Name; 9357; Art => Name; 9448; Art => Name; 9533; Art => Name; 9630; Art => Name; 9785; Art => Name; 9992; Art => Name; 10018; Art => Name; 10203; Art => Name; 10257; Art => Name; 10406; Art => Name; 10461; Art => Name; 10653; Art => Name; 10853; Art => Name; 11021; Art => Name; 11060; Art => 11129; Name; 11603; Art => Name; 11890; Art => Name; 11994; Art => Name; 12154; Art => Name; 12182; Art => Name; 12235; Art => Name; 12294; Art => Name; 12357; Art => Name; 12408; Art => Name; 12587; Art => Name; 12668; Art => Name; 12839; Art => Name; 12902; Art => 12943; Name; 13076; Art => Name; 13482; Art => Name; 13510; Art => Name; 13599; Art => Name; 13622; Art => Name; 13688; Art => Name; 13704; Art => Name; 13806; Art => Name; 13821; Art => Name; 13863; Art => Name; 13984; Art => Name; 14039; Art => 14046; Name; 14090; Art => Name; 14201; Art => Name; 14205; Art => Name; 14257; Art => Name; 14347; Art => Name; 14563; Art => Name; 15061; Art => Name; 15152; Art => Name; 15382; Art => Name; 15401; Art => Name; 15429; Art => Name; 15644; Art => Name; 16015; Art => Name; 16298; Art => Name; 16355; Art => Name; 16516; Art => Name; 16580; Art => Name; 16612; Art => Name; 16685; Art => Name; 16718; Art => Name; 16750; Art => Name; 16768; Art => Name; 16865; Art => Name; 16957; Art => 16980; Name; 17007; Art => Name; 17293; Art => Name; 17628; Art => Name; 17644; Art => Name; 17779; Art => Name; 17811; Art => Name; 17863; Art => Name; 17906; Art => Name; 17981; Art => Name; 18213; Art => Name; 18240; Art => Name; 18486; Art => Name; 18487; Art => Name; 18509; Art => Name; 18594; Art => Name; 18815; Art => Name; 19082; Art => Name; 19205; Art => Name; 19222; Art => Name; 19230; Art => Name; 19264; Art => Name; 19438; Art => Name; 19443; Art => Name; 19611; Art => Name; 19667; Art => Name; 19897; Art => 19956; Name; 20076; Art => Name; 20279; Art => Name; 20331; Art => Name; 20447; Art => Name; 20735; Art => Name; 20851; Art => Name; 20957; Art => Name; 20994; Art => Name; 21352; Art => Name; 21427; Art => 21455; Name; 21514; Art => Name; 21525; Art => Name; 21534; Art => Name; 21669; Art => Name; 21699; Art => Name; 21951; Art => Name; 22122; Art => Name; 22331; Art => Name; 22444; Art => Name; 22525; Art => Name; 22585; Art => Name; 22609; Art => Name; 22613; Art => Name; 22788; Art => 23066; Name; 23514; Art => Name; 23681; Art => Name; 23729; Art => 23756; Name; 23836; Art => Name; 24078; Art => 24251; Name; 24392; Art => Name; 24409; Art => Name; 24424; Art => 24462; Name; 24486; Art => Name; 24662; Art => Name; 24735; Art => Name; 24782; Art => Name; 24832; Art => Name; 25002; Art => Name; 25022; Art => Name; 25518; Art => Name; 25528; Art => Name; 25637; Art => Name; 25748; Art => Name; 25822; Art => Name; 25924; Art => Name; 25990; Art => Name; 26250; Art => Name; 26413; Art => Name; 26434; Art => Name; 26699; Art => Name; 26725; Art => Name; 26738; Art => Name; 26832; Art => Name; 27084; Art => Name; 27220; Art => Name; 27255; Art => Name; 27407; Art => Name; 27558; Art => Name; 27807; Art => 27811; Name; 27869; Art => Name; 27979; Art => Name; 28377; Art => Name; 28654; Art => Name; 28769; Art => Name; 28905; Art => 28950; Name; 29059; Art => Name; 29192; Art => Name; 29425; Art => Name; 29540; Art => Name; 29672; Art => Name; 29733; Art => Name; 29921; Art => Name; 30375; Art => Name; 30383; Art => Name; 30630; Art => Name; 30958; Art => Name; 31013; Art => Name; 31030; Art => 31052; Name; 31171; Art => Name; 31176; Art => Name; 31244; Art => Name; 31280; Art => Name; 31296; Art => Name; 31545; Art => Name; 31833; Art => Name; 32100; Art => Name; 32184; Art => Name; 32212; Art => Name; 32382; Art => Name; 32431; Art => Name; 32453; Art => Name; 32541; Art => Name; 32553; Art => Name; 32572; Art => Name; 32659; Art => Name; 32824; Art => Name; 32886; Art => Name; 32917; Art => Name; 33010; Art => Name; 33175; Art => Name; 33233; Art => Name; 33445; Art => Name; 33455; Art => Name; 33817; Art => Name; 33843; Art => Name; 34268; Art => Name; 34891; Art => Name; 35000; Art => Name; 35010; Art => Name; 35020; Art => Name; 35021; Art => Name; 35057; Art => Name; 35162; Art => 35205; Name; 35823; Art => Name; 36212; Art => Name; 36248; Art => Name; 36297; Art => Name; 36314; Art => Name; 36474; Art => Name; 36481; Art => Name; 36551; Art => Name; 36698; Art => Name; 37048; Art => Name; 37205; Art => Name; 37213; Art => Name; 37507; Art => Name; 37531; Art => Name; 37709; Art => 37892; Name; 38026; Art => Name; 38308; Art => Name; 38327; Art => Name; 38549; Art => Name; 38693; Art => Name; 38901; Art => Name; 38950; Art => Name; 39174; Art => Name; 39230; Art => Name; 39662; Art => Name; 39899; Art => Name; 40319; Art => Name; 40321; Art => Name; 40350; Art => Name; 40589; Art => Name; 40806; Art => Name; 40876; Art => Name; 40896; Art => Name; 41116; Art => Name; 41271; Art => Name; 41765; Art => Name; 41907; Art => Name; 42114; Art => Name; 42194; Art => Name; 42291; Art => Name; 42841; Art => Name; 42851; Art => Name; 42874; Art => Name; 43158; Art => Name; 43232; Art => Name; 43343; Art => Name; 43631; Art => Name; 43712; Art => Name; 43725; Art => Name; 43783; Art => Name; 43934; Art => 43949; Name; 44023; Art => Name; 44209; Art => Name; 44217; Art => Name; 44239; Art => Name; 44384; Art => Name; 44437; Art => Name; 44564; Art => Name; 44673; Art => Name; 44715; Art => Name; 45047; Art => Name; 45419; Art => 45475; Name; 45563; Art => Name; 45689; Art => Name; 45843; Art => Name; 46094; Art => Name; 46213; Art => Name; 46340; Art => Name; 46391; Art => 46425; Name; 46426; Art => Name; 46497; Art => Name; 46742; Art => Name; 46847; Art => Name; 46937; Art => Name; 47007; Art => 47042; Name; 47124; Art => Name; 47207; Art => Name; 47222; Art => Name; 47264; Art => Name; 47305; Art => Name; 47437; Art => Name; 47604; Art => Name; 47906; Art => Name; 48190; Art => Name; 48231; Art => 48267; Name; 48313; Art => Name; 48323; Art => Name; 48348; Art => Name; 48747; Art => Name; 48864; Art => Name; 48891; Art => Name; 48895; Art => Name; 48936; Art => Name; 49062; Art => Name; 49286; Art => Name; 49347; Art => Name; 49486; Art => Name; 49690; Art => Name; 49836; Art => 49893; Name; 49901; Art => Name; 49961; Art => Name; 50111; Art => Name; 50117; Art => 50133; Name; 50225; Art => Name; 50355; Art => Name; 50406; Art => Name; 50424; Art => Name; 50438; Art => Name; 50522; Art => Name; 50677; Art => Name; 50822; Art => Name; 51154; Art => Name; 51180; Art => Name; 51434; Art => Name; 52038; Art => Name; 52129; Art => Name; 52226; Art => Name; 52296; Art => Name; 52440; Art => Name; 52609; Art => Name; 52687; Art => Name; 52869; Art => Name; 52948; Art => Name; 53293; Art => Name; 53358; Art => Name; 53486; Art => Name; 53526; Art => Name; 53645; Art => Name; 53825; Art => Name; 53967; Art => Name; 54151; Art => 54180; Name; 54281; Art => Name; 54379; Art => Name; 54409; Art => Name; 54605; Art => Name; 54733; Art => Name; 54796; Art => Name; 54798; Art => Name; 54868; Art => 54870; Name; 54923; Art => Name; 55049; Art => Name; 55238; Art => Name; 55434; Art => Name; 55547; Art => Name; 55548; Art => 55641; Name; 55663; Art => Name; 55909; Art => Name; 55946; Art => Name; 56075; Art => Name; 56085; Art => Name; 56282; Art => Name; 56612; Art => Name; 56736; Art => Name; 56752; Art => Name; 56954; Art => Name; 56982; Art => Name; 56993; Art => Name; 57139; Art => Name; 57141; Art => Name; 57550; Art => Name; 57612; Art => Name; 57929; Art => Name; 58011; Art => Name; 58210; Art => Name; 58282; Art => Name; 58383; Art => Name; 58418; Art => Name; 58636; Art => Name; 58743; Art => Name; 58950; Art => Name; 58982; Art => Name; 59027; Art => Name; 59141; Art => Name; 59172; Art => Name; 59217; Art => Name; 59244; Art => Name; 59371; Art => Name; 59720; Art => Name; 59870; Art => Name; 60094; Art => Name; 60282; Art => Name; 60452; Art => Name; 60533; Art => Name; 60535; Art => Name; 60546; Art => Name; 60553; Art => Name; 60569; Art => 60680; Name; 60705; Art => Name; 60877; Art => Name; 61126; Art => Name; 61157; Art => Name; 61348; Art => Name; 61375; Art => Name; 61480; Art => Name; 61898; Art => Name; 62039; Art => Name; 62090; Art => Name; 62332; Art => Name; 62410; Art => Name; 62487; Art => Name; 62723; Art => Name; 62766; Art => Name; 62797; Art => Name; 63221; Art => Name; 63346; Art => Name; 63552; Art => Name; 63813; Art => Name; 63955; Art => Name; 63970; Art => Name; 64133; Art => Name; 64316; Art => 65166; Name; 65232; Art => Name; 65245; Art => Name; 65252; Art => Name; 65293; Art => Name; 65316; Art => Name; 65713; Art => Name; 66060; Art => Name; 66070; Art => Name; 66204; Art => Name; 66238; Art => Name; 66357; Art => Name; 66391; Art => Name; 66680; Art => Name; 66720; Art => Name; 66727; Art => Name; 66754; Art => Name; 66851; Art => Name; 66946; Art => Name; 67195; Art => Name; 67554; Art => Name; 67681; Art => Name; 67953; Art => Name; 68148; Art => Name; 68190; Art => Name; 68394; Art => Name; 68519; Art => Name; 68543; Art => Name; 68612; Art => 68760; Name; 68806; Art => Name; 69081; Art => Name; 69103; Art => Name; 69378; Art => Name; 69989; Art => Name; 70024; Art => Name; 70172; Art => Name; 70334; Art => Name; 70385; Art => Name; 70391; Art => Name; 70509; Art => Name; 70618; Art => Name; 70633; Art => Name; 70647; Art => Name; 70863; Art => Name; 71105; Art => Name; 71255; Art => Name; 71363; Art => Name; 71365; Art => Name; 71407; Art => 71466; Name; 71489; Art => Name; 71552; Art => Name; 71783; Art => Name; 71882; Art => Name; 71998; Art => Name; 72040; Art => Name; 72450; Art => Name; 72574; Art => Name; 72866; Art => Name; 72891; Art => Name; 73188; Art => Name; 73241; Art => Name; 73345; Art => Name; 73418; Art => Name; 73488; Art => Name; 73720; Art => Name; 74017; Art => Name; 74160; Art => 74246; Name; 74404; Art => Name; 74440; Art => Name; 74693; Art => Name; 74721; Art => Name; 75018; Art => 75079; 75096; Name; 75188; Art => Name; 75464; Art => Name; 75470; Art => Name; 75512; Art => Name; 75728; Art => Name; 75897; Art => 75941; Name; 76156; Art => Name; 76401; Art => Name; 76535; Art => Name; 76710; Art => Name; 76727; Art => Name; 76764; Art => Name; 76832; Art => Name; 76944; Art => Name; 77019; Art => Name; 77200; Art => Name; 77342; Art => Name; 77702; Art => Name; 78263; Art => Name; 78419; Art => Name; 78628; Art => Name; 78645; Art => Name; 78832; Art => Name; 78840; Art => Name; 79022; Art => Name; 79290; Art => Name; 79540; Art => Name; 79540; Art => Name; 79578; Art => Name; 79637; Art => Name; 79795; Art => Name; 80097; Art => Name; 80255; Art => Name; 80286; Art => Name; 80297; Art => 80356; Name; 80390; Art => Name; 80510; Art => 80568; Name; 80644; Art => Name; 81055; Art => Name; 81411; Art => Name; 81435; Art => Name; 81532; Art => Name; 81571; Art => Name; 81606; Art => Name; 81740; Art => Name; 82258; Art => Name; 82283; Art => Name; 82322; Art => Name; 82352; Art => Name; 82353; Art => Name; 82674; Art => Name; 82886; Art => Name; 83014; Art => Name; 83085; Art => Name; 83367; Art => Name; 83376; Art => Name; 83392; Art => Name; 83653; Art => Name; 83816; Art => Name; 83886; Art => Name; 83977; Art => Name; 83981; Art => Name; 83984; Art => Name; 84016; Art => Name; 84157; Art => Name; 84336; Art => Name; 84523; Art => Name; 84767; Art => Name; 84926; Art => Name; 84932; Art => 85007; Name; 85633; Art => Name; 86086; Art => Name; 86281; Art => Name; 86298; Art => Name; 86408; Art => Name; 86594; Art => Name; 86716; Art => Name; 86888; Art => Name; 86907; Art => Name; 87304; Art => Name; 87304; Art => Name; 87315; Art => Name; 87622; Art => Name; 87677; Art => Name; 87692; Art => Name; 88056; Art => Name; 88196; Art => Name; 88281; Art => Name; 88412; Art => Name; 88551; Art => Name; 88566; Art => Name; 88850; Art => Name; 88878; Art => Name; 88938; Art => Name; 89161; Art => Name; 89184; Art => Name; 89216; Art => Name; 89226; Art => Name; 89325; Art => Name; 89598; Art => Name; 89621; Art => Name; 89933; Art => Name; 90002; Art => 90019; Name; 90213; Art => Name; 90243; Art => Name; 90325; Art => Name; 90663; Art => Name; 90720; Art => Name; 90803; Art => Name; 90903; Art => Name; 90938; Art => Name; 91012; Art => Name; 91158; Art => Name; 91227; Art => Name; 91357; Art => Name; 91372; Art => Name; 91430; Art => Name; 91479; Art => Name; 91775; Art => Name; 91830; Art => Name; 92105; Art => Name; 92274; Art => Name; 92350; Art => Name; 92449; Art => Name; 92488; Art => Name; 92512; Art => Name; 92733; Art => Name; 92802; Art => Name; 92884; Art => Name; 93022; Art => Name; 93066; Art => Name; 93244; Art => Name; 93486; Art => Name; 93760; Art => Name; 94235; Art => Name; 94390; Art => Name; 94394; Art => Name; 94488; Art => Name; 94521; Art => Name; 94603; Art => Name; 94661; Art => 94889; Name; 94974; Art => Name; 95116; Art => Name; 95119; Art => Name; 95142; Art => Name; 95214; Art => Name; 95258; Art => Name; 95390; Art => Name; 95610; Art => Name; 95798; Art => Name; 95839; Art => Name; 95918; Art => Name; 95929; Art => Name; 96024; Art => Name; 96245; Art => 96551; Name; 96609; Art => Name; 97160; Art => Name; 97223; Art => Name; 97508; Art => Name; 97626; Art => Name; 97784; Art => Name; 97906; Art => 97931; Name; 97967; Art => 98110; 98115; Name; 98120; Art => Name; 98276; Art => Name; 98362; Art => Name; 98420; Art => Name; 98468; Art => Name; 98770; Art => Name; 98824; Art => Name; 98892; Art => Name; 98977; Art => Name; 99056; Art => Name; 99098; Art => Name; 99112; Art => Name; 99447; Art => Name; 99518; Art => Name; 100005; Art => Name; 100094; Art => Name; 100244; Art => Name; 100254; Art => Name; 100331; Art => Name; 100359; Art => Name; 100376; Art => Name; 100466; Art => 100653; 100657; Name; 100684; Art => Name; 100767; Art => Name; 101143; Art => Name; 101179; Art => 101238; Name; 101527; Art => Name; 101608; Art => Name; 101883; Art => Name; 101893; Art => Name; 101985; Art => Name; 102090; Art => Name; 102129; Art => Name; 102402; Art => 102468; Name; 102727; Art => Name; 102794; Art => Name; 102994; Art => Name; 103002; Art => Name; 103014; Art => Name; 103108; Art => Name; 103231; Art => Name; 103310; Art => Name; 103393; Art => Name; 103453; Art => Name; 103475; Art => Name; 103551; Art => Name; 103699; Art => Name; 103838; Art => Name; 103977; Art => Name; 103978; Art => Name; 104192; Art => Name; 104450; Art => Name; 104550; Art => Name; 104700; Art => Name; 104844; Art => Name; 105101; Art => Name; 105174; Art => Name; 105307; Art => 105358; Name; 105397; Art => Name; 105639; Art => Name; 105851; Art => Name; 105952; Art => 105999; Name; 106066; Art => Name; 106143; Art => Name; 106810; Art => Name; 106947; Art => Name; 107248; Art => Name; 107297; Art => Name; 107484; Art => Name; 107523; Art => Name; 107647; Art => Name; 108129; Art => Name; 108345; Art => Name; 108527; Art => Name; 108620; Art => Name; 108650; Art => Name; 108664; Art => 108750; Name; 108790; Art => Name; 109296; Art => Name; 109531; Art => Name; 109548; Art => Name; 109694; Art => Name; 109752; Art => Name; 110149; Art => Name; 110154; Art => Name; 110331; Art => Name; 110434; Art => Name; 110512; Art => Name; 110548; Art => Name; 110866; Art => Name; 111201; Art => Name; 111216; Art => Name; 111366; Art => Name; 111438; Art => Name; 111485; Art => Name; 111495; Art => Name; 111949; Art => Name; 112260; Art => Name; 112274; Art => Name; 112347; Art => Name; 112398; Art => Name; 112415; Art => Name; 112471; Art => Name; 112804; Art => Name; 112939; Art => Name; 113141; Art => Name; 113194; Art => Name; 113198; Art => Name; 113356; Art => Name; 113425; Art => Name; 113440; Art => Name; 113591; Art => Name; 113611; Art => Name; 113640; Art => Name; 114147; Art => Name; 114154; Art => Name; 114167; Art => Name; 114399; Art => Name; 114566; Art => Name; 114714; Art => Name; 114748; Art => Name; 114752; Art => Name; 115015; Art => Name; 115097; Art => Name; 115162; Art => Name; 115248; Art => Name; 115252; Art => Name; 115314; Art => Name; 115672; Art => Name; 115720; Art => Name; 115829; Art => Name; 116018; Art => Name; 116022; Art => Name; 116088; Art => Name; 116114; Art => Name; 116141; Art => Name; 116566; Art => Name; 116618; Art => Name; 116860; Art => Name; 117194; Art => Name; 117223; Art => Name; 117348; Art => Name; 117582; Art => Name; 117615; Art => Name; 117705; Art => Name; 117719; Art => Name; 117763; Art => Name; 117804; Art => Name; 117880; Art => Name; 117974; Art => Name; 118039; Art => Name; 118221; Art => Name; 118544; Art => Name; 118655; Art => Name; 118698; Art => Name; 118703; Art => Name; 118788; Art => Name; 118833; Art => Name; 119018; Art => Name; 119087; Art => Name; 119131; Art => Name; 119230; Art => Name; 119260; Art => Name; 119282; Art => Name; 119621; Art => Name; 119775; Art => Name; 119828; Art => Name; 119921; Art => 120014; Name; 120096; Art => Name; 120182; Art => Name; 120232; Art => Name; 120266; Art => Name; 120456; Art => Name; 120575; Art => Name; 120735; Art => Name; 120767; Art => Name; 120768; Art => Name; 120924; Art => Name; 120955; Art => Name; 120984; Art => Name; 121270; Art => Name; 121284; Art => Name; 121371; Art => Name; 121498; Art => Name; 121806; Art => Name; 121948; Art => Name; 122155; Art => Name; 122330; Art => Name; 122353; Art => Name; 122636; Art => 122722; Name; 122748; Art => Name; 122868; Art => Name; 122956; Art => Name; 123050; Art => Name; 123084; Art => Name; 123135; Art => 123187; Name; 123555; Art => Name; 123603; Art => Name; 123629; Art => Name; 123832; Art => Name; 124016; Art => Name; 124050; Art => Name; 124080; Art => Name; 124136; Art => Name; 124237; Art => Name; 124486; Art => Name; 124572; Art => Name; 124605; Art => Name; 124674; Art => Name; 124688; Art => Name; 124974; Art => Name; 125222; Art => Name; 125340; Art => Name; 125369; Art => Name; 125434; Art => Name; 125543; Art => Name; 125875; Art => Name; 126128; Art => Name; 126174; Art => 126243; Name; 126372; Art => Name; 126408; Art => Name; 126461; Art => Name; 126517; Art => Name; 126781; Art => Name; 126794; Art => Name; 127033; Art => 127106; Nil

Updated variation of "improved"

I just tried a change to the Bin case of mergesort: 7a8a215ec0d3e4a35775f9cd9228e3bd6abee0ab

This looks closer to what seems desirable (fine at the start, coarser later in the list):

Art => Name; 27; Art => Name; 386; Art => 519; Name; 554; Art => Name; 657; Art => Name; 683; Art => 737; Name; 749; Art => 753; Name; 954; Art => 1083; Name; 1140; Art => Name; 1349; Art => 1517; 1573; 1633; 1676; 1754; 1831; Name; 1922; Art => 2145; 2442; 2478; 2596; 2627; 2907; 2971; 3050; 3169; 3572; 3735; 3792; 3996; 4153; Name; 4163; Art => 4195; 4409; Name; 4564; Art => Name; 4593; Art => 4598; 4630; 5048; 5103; 5141; 5190; 5830; 5834; 5938; 6247; 6258; 6306; 6351; 6395; 6435; 6602; 6891; 6974; 6988; 7073; 7107; 7344; 8171; 8213; 8350; 8373; 8777; 8877; 9011; 9101; 9109; 9173; 9251; 9357; 9448; 9533; 9630; 9785; 9992; 10018; 10203; 10257; 10406; 10461; 10653; 10853; 11021; 11060; 11129; 11603; 11890; 11994; 12154; 12182; 12235; 12294; 12357; 12408; 12587; 12668; 12839; 12902; 12943; Name; 13076; Art => 13482; 13510; 13599; 13622; 13688; 13704; 13806; 13821; 13863; 13984; 14039; 14046; 14090; 14201; 14205; 14257; 14347; 14563; 15061; 15152; 15382; 15401; 15429; 15644; 16015; 16298; 16355; 16516; 16580; 16612; 16685; 16718; 16750; 16768; 16865; 16957; 16980; 17007; 17293; 17628; Name; 17644; Art => 17779; 17811; 17863; 17906; 17981; 18213; 18240; 18486; 18487; 18509; 18594; 18815; 19082; 19205; 19222; 19230; 19264; 19438; 19443; 19611; 19667; 19897; 19956; 20076; 20279; 20331; 20447; 20735; 20851; 20957; 20994; 21352; 21427; 21455; 21514; 21525; 21534; 21669; 21699; 21951; 22122; 22331; 22444; 22525; 22585; 22609; Name; 22613; Art => 22788; 23066; 23514; 23681; 23729; 23756; 23836; 24078; 24251; 24392; 24409; 24424; 24462; 24486; 24662; 24735; 24782; 24832; 25002; 25022; 25518; 25528; 25637; 25748; 25822; 25924; 25990; 26250; 26413; 26434; 26699; 26725; 26738; 26832; 27084; 27220; 27255; 27407; 27558; 27807; 27811; 27869; 27979; 28377; 28654; 28769; 28905; 28950; 29059; 29192; 29425; 29540; 29672; 29733; 29921; 30375; 30383; 30630; 30958; 31013; 31030; 31052; 31171; 31176; 31244; 31280; 31296; 31545; 31833; 32100; 32184; 32212; 32382; 32431; 32453; 32541; 32553; 32572; 32659; 32824; 32886; 32917; 33010; 33175; 33233; 33445; 33455; 33817; 33843; 34268; 34891; 35000; 35010; 35020; 35021; 35057; 35162; 35205; 35823; 36212; 36248; 36297; 36314; 36474; 36481; 36551; 36698; 37048; 37205; 37213; 37507; 37531; 37709; 37892; 38026; 38308; 38327; 38549; 38693; 38901; 38950; 39174; 39230; 39662; 39899; 40319; 40321; 40350; 40589; 40806; 40876; 40896; 41116; 41271; 41765; 41907; 42114; 42194; 42291; 42841; 42851; 42874; 43158; 43232; 43343; 43631; 43712; 43725; 43783; 43934; 43949; 44023; 44209; 44217; 44239; 44384; 44437; 44564; 44673; 44715; 45047; 45419; 45475; 45563; 45689; 45843; 46094; 46213; 46340; 46391; 46425; 46426; 46497; 46742; 46847; 46937; 47007; 47042; 47124; 47207; 47222; Name; 47264; Art => 47305; 47437; 47604; Name; 47906; Art => 48190; 48231; 48267; 48313; 48323; 48348; 48747; 48864; 48891; 48895; 48936; 49062; 49286; 49347; 49486; 49690; 49836; 49893; 49901; 49961; 50111; 50117; 50133; 50225; 50355; 50406; 50424; 50438; 50522; 50677; 50822; 51154; 51180; 51434; 52038; 52129; 52226; 52296; 52440; 52609; 52687; 52869; 52948; 53293; 53358; 53486; 53526; 53645; 53825; 53967; 54151; 54180; 54281; 54379; 54409; 54605; 54733; 54796; 54798; 54868; 54870; 54923; 55049; 55238; 55434; 55547; 55548; 55641; 55663; 55909; 55946; 56075; 56085; 56282; 56612; 56736; 56752; 56954; 56982; 56993; 57139; 57141; 57550; 57612; 57929; 58011; 58210; 58282; 58383; 58418; 58636; 58743; 58950; 58982; 59027; 59141; 59172; 59217; 59244; 59371; 59720; 59870; 60094; 60282; 60452; 60533; 60535; 60546; 60553; 60569; 60680; 60705; 60877; 61126; 61157; 61348; 61375; 61480; 61898; 62039; 62090; 62332; 62410; 62487; 62723; 62766; 62797; 63221; 63346; 63552; 63813; 63955; 63970; 64133; Name; 64316; Art => 65166; 65232; 65245; 65252; 65293; 65316; 65713; 66060; 66070; 66204; 66238; 66357; 66391; 66680; 66720; 66727; 66754; 66851; 66946; 67195; 67554; 67681; 67953; 68148; 68190; 68394; 68519; 68543; 68612; 68760; 68806; 69081; 69103; 69378; 69989; 70024; 70172; 70334; 70385; 70391; 70509; 70618; 70633; 70647; 70863; 71105; 71255; 71363; 71365; 71407; 71466; 71489; 71552; 71783; 71882; 71998; 72040; 72450; 72574; 72866; 72891; 73188; 73241; 73345; 73418; 73488; 73720; 74017; 74160; 74246; 74404; 74440; 74693; 74721; 75018; 75079; 75096; 75188; 75464; 75470; 75512; 75728; 75897; 75941; 76156; 76401; 76535; 76710; 76727; 76764; 76832; 76944; 77019; 77200; 77342; 77702; 78263; 78419; 78628; 78645; 78832; 78840; 79022; 79290; 79540; 79540; 79578; 79637; 79795; 80097; 80255; 80286; Name; 80297; Art => 80356; 80390; 80510; 80568; 80644; 81055; 81411; 81435; 81532; 81571; 81606; 81740; 82258; 82283; 82322; 82352; 82353; 82674; 82886; 83014; 83085; 83367; 83376; 83392; 83653; 83816; 83886; 83977; 83981; 83984; 84016; 84157; 84336; 84523; 84767; 84926; 84932; 85007; 85633; 86086; 86281; 86298; 86408; 86594; 86716; 86888; 86907; 87304; 87304; 87315; 87622; 87677; 87692; 88056; 88196; 88281; 88412; 88551; 88566; 88850; 88878; 88938; 89161; 89184; 89216; 89226; 89325; 89598; 89621; 89933; 90002; 90019; 90213; 90243; 90325; 90663; 90720; 90803; 90903; 90938; 91012; 91158; 91227; 91357; 91372; 91430; 91479; 91775; 91830; 92105; 92274; 92350; 92449; 92488; 92512; 92733; 92802; 92884; 93022; 93066; 93244; 93486; 93760; 94235; 94390; 94394; 94488; 94521; 94603; 94661; 94889; 94974; 95116; 95119; 95142; 95214; 95258; 95390; 95610; 95798; 95839; 95918; 95929; 96024; 96245; 96551; 96609; 97160; 97223; 97508; 97626; 97784; 97906; 97931; 97967; 98110; 98115; 98120; 98276; 98362; 98420; 98468; 98770; 98824; 98892; 98977; 99056; 99098; 99112; 99447; 99518; 100005; 100094; 100244; 100254; 100331; 100359; 100376; 100466; 100653; 100657; 100684; 100767; 101143; 101179; 101238; 101527; 101608; 101883; 101893; 101985; 102090; 102129; 102402; 102468; 102727; 102794; 102994; 103002; 103014; 103108; 103231; 103310; 103393; 103453; 103475; 103551; 103699; 103838; 103977; 103978; 104192; 104450; 104550; 104700; 104844; 105101; 105174; 105307; 105358; 105397; 105639; 105851; 105952; 105999; 106066; 106143; 106810; 106947; 107248; 107297; 107484; 107523; 107647; 108129; 108345; 108527; 108620; 108650; 108664; 108750; 108790; 109296; 109531; 109548; 109694; 109752; 110149; 110154; 110331; 110434; 110512; 110548; 110866; 111201; 111216; 111366; 111438; 111485; 111495; 111949; 112260; 112274; 112347; 112398; 112415; 112471; 112804; 112939; 113141; 113194; 113198; 113356; 113425; 113440; 113591; 113611; 113640; 114147; 114154; 114167; 114399; 114566; 114714; 114748; 114752; 115015; 115097; 115162; 115248; 115252; 115314; 115672; 115720; 115829; 116018; 116022; 116088; 116114; 116141; 116566; 116618; 116860; 117194; 117223; 117348; 117582; 117615; 117705; 117719; 117763; 117804; 117880; 117974; 118039; 118221; 118544; 118655; 118698; 118703; 118788; 118833; Name; 119018; Art => 119087; 119131; 119230; 119260; 119282; 119621; 119775; 119828; 119921; 120014; 120096; 120182; 120232; 120266; 120456; 120575; 120735; 120767; 120768; 120924; 120955; 120984; 121270; 121284; 121371; 121498; 121806; 121948; 122155; 122330; 122353; 122636; 122722; 122748; 122868; 122956; 123050; 123084; 123135; 123187; 123555; 123603; 123629; 123832; 124016; 124050; 124080; 124136; 124237; 124486; 124572; 124605; 124674; 124688; 124974; 125222; 125340; 125369; 125434; 125543; 125875; 126128; 126174; 126243; Name; 126372; Art => 126408; 126461; 126517; 126781; 126794; 127033; 127106; Nil
kyleheadley commented 9 years ago

Really, I think we just need to keep the names with their corresponding data items. Since list_merge is going to rearrange things, merge_sort would need to pass the name in the Name case rather than create a nart(this is what list_merge does). I think merge_sort can get by without any narts because list_merge is going to have one for every name.

kyleheadley commented 9 years ago

To update my previous comment: complex functions returning articulated data can't 'get by' without narts, because narts return an articulation point that suspends computation. Without it, even if there's an inner lazy function, the outer function will be fully computed. The inner function doesn't suspend everything, it returns a suspension of it's own computation.

kyleheadley commented 9 years ago

commit de68251937b3a8c28fc0ebfcc692c22c26a50cbf and some later ones solved most of our issues with merge sort uniformity. There has not been a debug check, but composing merge sort with rope_length to get 'median' has the trend we expect to see with uniform articulation.

The problem was that we needed names in the rope's tree structure for it to remain lazy, and we needed names in the output list to be uniformly distributed for composability. Since the rope's data and tree structure are independent, it seemed like we needed more deterministic names for computation than the input or output had.

The solution presented is the realization that it is not Name's that we need more of, butArt's. We use Names as seeds to create newArts, but it is not necessary for efficient computation to reseed. That is, in cases where a data-paired art was needed, we use Name(n,Art(...)), while with tree-paired arts, we used Art(...) and carried the available name as a parameter into a later recursion that needed a data-paired art. UnpairedArts are dissolved on later recursive passes, removing the extra arts from the final output.

I'm closing this issue soon and continuing any conversation in issue #20 which deals with optimizing the median experiment.