% Trealla first-argument indexing: clauses whose first argument contains % a variable can be lost once the predicate is indexed. % % small/2 and big/2 carry IDENTICAL clauses of interest, in the same % order. big/2 also has 600 fillers, and that is the only difference: it % pushes big/2 over INDEX_THRESHOLD (500, in assert_commit(), module.c) % so big/2 gets a skiplist index while small/2 stays a linear chain. The % linear chain is the oracle - whatever it answers is correct. % % Cause: index_cmpkey_() calls a var equal to anything, so the key [_] % compares equal to both [a] and [b] while [a] and [b] differ from each % other. That is not a total order, so no single position in the skiplist % satisfies every query, and the descent walks past the var-bearing node. % % Both list and arity-2 compound first args must be present in the % filler, and the var-bearing clauses must sit after them in the chain. % % The queries are chosen so that no filler clause can match, which keeps % findall/3 order directly comparable - no sorting, ISO only. % % Run: tpl nested_var_bug.pl -g "main,halt" % ---- small/2: stays under the threshold, never indexed (oracle) ---- small([a], ground). small([_], nested_var_tail). small([a|_], nested_var_arg). small([b], other_ground). % ---- big/2: 600 fillers first, then the same four clauses ---- big(f(k0,z), filler). big(f(k1,z), filler). big(f(k2,z), filler). big(f(k3,z), filler). big(f(k4,z), filler). big(f(k5,z), filler). big(f(k6,z), filler). big(f(k7,z), filler). big(f(k8,z), filler). big(f(k9,z), filler). big(f(k10,z), filler). big(f(k11,z), filler). big(f(k12,z), filler). big(f(k13,z), filler). big(f(k14,z), filler). big(f(k15,z), filler). big(f(k16,z), filler). big(f(k17,z), filler). big(f(k18,z), filler). big(f(k19,z), filler). big(f(k20,z), filler). big(f(k21,z), filler). big(f(k22,z), filler). big(f(k23,z), filler). big(f(k24,z), filler). big(f(k25,z), filler). big(f(k26,z), filler). big(f(k27,z), filler). big(f(k28,z), filler). big(f(k29,z), filler). big(f(k30,z), filler). big(f(k31,z), filler). big(f(k32,z), filler). big(f(k33,z), filler). big(f(k34,z), filler). big(f(k35,z), filler). big(f(k36,z), filler). big(f(k37,z), filler). big(f(k38,z), filler). big(f(k39,z), filler). big(f(k40,z), filler). big(f(k41,z), filler). big(f(k42,z), filler). big(f(k43,z), filler). big(f(k44,z), filler). big(f(k45,z), filler). big(f(k46,z), filler). big(f(k47,z), filler). big(f(k48,z), filler). big(f(k49,z), filler). big(f(k50,z), filler). big(f(k51,z), filler). big(f(k52,z), filler). big(f(k53,z), filler). big(f(k54,z), filler). big(f(k55,z), filler). big(f(k56,z), filler). big(f(k57,z), filler). big(f(k58,z), filler). big(f(k59,z), filler). big(f(k60,z), filler). big(f(k61,z), filler). big(f(k62,z), filler). big(f(k63,z), filler). big(f(k64,z), filler). big(f(k65,z), filler). big(f(k66,z), filler). big(f(k67,z), filler). big(f(k68,z), filler). big(f(k69,z), filler). big(f(k70,z), filler). big(f(k71,z), filler). big(f(k72,z), filler). big(f(k73,z), filler). big(f(k74,z), filler). big(f(k75,z), filler). big(f(k76,z), filler). big(f(k77,z), filler). big(f(k78,z), filler). big(f(k79,z), filler). big(f(k80,z), filler). big(f(k81,z), filler). big(f(k82,z), filler). big(f(k83,z), filler). big(f(k84,z), filler). big(f(k85,z), filler). big(f(k86,z), filler). big(f(k87,z), filler). big(f(k88,z), filler). big(f(k89,z), filler). big(f(k90,z), filler). big(f(k91,z), filler). big(f(k92,z), filler). big(f(k93,z), filler). big(f(k94,z), filler). big(f(k95,z), filler). big(f(k96,z), filler). big(f(k97,z), filler). big(f(k98,z), filler). big(f(k99,z), filler). big(f(k100,z), filler). big(f(k101,z), filler). big(f(k102,z), filler). big(f(k103,z), filler). big(f(k104,z), filler). big(f(k105,z), filler). big(f(k106,z), filler). big(f(k107,z), filler). big(f(k108,z), filler). big(f(k109,z), filler). big(f(k110,z), filler). big(f(k111,z), filler). big(f(k112,z), filler). big(f(k113,z), filler). big(f(k114,z), filler). big(f(k115,z), filler). big(f(k116,z), filler). big(f(k117,z), filler). big(f(k118,z), filler). big(f(k119,z), filler). big(f(k120,z), filler). big(f(k121,z), filler). big(f(k122,z), filler). big(f(k123,z), filler). big(f(k124,z), filler). big(f(k125,z), filler). big(f(k126,z), filler). big(f(k127,z), filler). big(f(k128,z), filler). big(f(k129,z), filler). big(f(k130,z), filler). big(f(k131,z), filler). big(f(k132,z), filler). big(f(k133,z), filler). big(f(k134,z), filler). big(f(k135,z), filler). big(f(k136,z), filler). big(f(k137,z), filler). big(f(k138,z), filler). big(f(k139,z), filler). big(f(k140,z), filler). big(f(k141,z), filler). big(f(k142,z), filler). big(f(k143,z), filler). big(f(k144,z), filler). big(f(k145,z), filler). big(f(k146,z), filler). big(f(k147,z), filler). big(f(k148,z), filler). big(f(k149,z), filler). big(f(k150,z), filler). big(f(k151,z), filler). big(f(k152,z), filler). big(f(k153,z), filler). big(f(k154,z), filler). big(f(k155,z), filler). big(f(k156,z), filler). big(f(k157,z), filler). big(f(k158,z), filler). big(f(k159,z), filler). big(f(k160,z), filler). big(f(k161,z), filler). big(f(k162,z), filler). big(f(k163,z), filler). big(f(k164,z), filler). big(f(k165,z), filler). big(f(k166,z), filler). big(f(k167,z), filler). big(f(k168,z), filler). big(f(k169,z), filler). big(f(k170,z), filler). big(f(k171,z), filler). big(f(k172,z), filler). big(f(k173,z), filler). big(f(k174,z), filler). big(f(k175,z), filler). big(f(k176,z), filler). big(f(k177,z), filler). big(f(k178,z), filler). big(f(k179,z), filler). big(f(k180,z), filler). big(f(k181,z), filler). big(f(k182,z), filler). big(f(k183,z), filler). big(f(k184,z), filler). big(f(k185,z), filler). big(f(k186,z), filler). big(f(k187,z), filler). big(f(k188,z), filler). big(f(k189,z), filler). big(f(k190,z), filler). big(f(k191,z), filler). big(f(k192,z), filler). big(f(k193,z), filler). big(f(k194,z), filler). big(f(k195,z), filler). big(f(k196,z), filler). big(f(k197,z), filler). big(f(k198,z), filler). big(f(k199,z), filler). big(f(k200,z), filler). big(f(k201,z), filler). big(f(k202,z), filler). big(f(k203,z), filler). big(f(k204,z), filler). big(f(k205,z), filler). big(f(k206,z), filler). big(f(k207,z), filler). big(f(k208,z), filler). big(f(k209,z), filler). big(f(k210,z), filler). big(f(k211,z), filler). big(f(k212,z), filler). big(f(k213,z), filler). big(f(k214,z), filler). big(f(k215,z), filler). big(f(k216,z), filler). big(f(k217,z), filler). big(f(k218,z), filler). big(f(k219,z), filler). big(f(k220,z), filler). big(f(k221,z), filler). big(f(k222,z), filler). big(f(k223,z), filler). big(f(k224,z), filler). big(f(k225,z), filler). big(f(k226,z), filler). big(f(k227,z), filler). big(f(k228,z), filler). big(f(k229,z), filler). big(f(k230,z), filler). big(f(k231,z), filler). big(f(k232,z), filler). big(f(k233,z), filler). big(f(k234,z), filler). big(f(k235,z), filler). big(f(k236,z), filler). big(f(k237,z), filler). big(f(k238,z), filler). big(f(k239,z), filler). big(f(k240,z), filler). big(f(k241,z), filler). big(f(k242,z), filler). big(f(k243,z), filler). big(f(k244,z), filler). big(f(k245,z), filler). big(f(k246,z), filler). big(f(k247,z), filler). big(f(k248,z), filler). big(f(k249,z), filler). big(f(k250,z), filler). big(f(k251,z), filler). big(f(k252,z), filler). big(f(k253,z), filler). big(f(k254,z), filler). big(f(k255,z), filler). big(f(k256,z), filler). big(f(k257,z), filler). big(f(k258,z), filler). big(f(k259,z), filler). big(f(k260,z), filler). big(f(k261,z), filler). big(f(k262,z), filler). big(f(k263,z), filler). big(f(k264,z), filler). big(f(k265,z), filler). big(f(k266,z), filler). big(f(k267,z), filler). big(f(k268,z), filler). big(f(k269,z), filler). big(f(k270,z), filler). big(f(k271,z), filler). big(f(k272,z), filler). big(f(k273,z), filler). big(f(k274,z), filler). big(f(k275,z), filler). big(f(k276,z), filler). big(f(k277,z), filler). big(f(k278,z), filler). big(f(k279,z), filler). big(f(k280,z), filler). big(f(k281,z), filler). big(f(k282,z), filler). big(f(k283,z), filler). big(f(k284,z), filler). big(f(k285,z), filler). big(f(k286,z), filler). big(f(k287,z), filler). big(f(k288,z), filler). big(f(k289,z), filler). big(f(k290,z), filler). big(f(k291,z), filler). big(f(k292,z), filler). big(f(k293,z), filler). big(f(k294,z), filler). big(f(k295,z), filler). big(f(k296,z), filler). big(f(k297,z), filler). big(f(k298,z), filler). big(f(k299,z), filler). big([q0], filler). big([q1], filler). big([q2], filler). big([q3], filler). big([q4], filler). big([q5], filler). big([q6], filler). big([q7], filler). big([q8], filler). big([q9], filler). big([q10], filler). big([q11], filler). big([q12], filler). big([q13], filler). big([q14], filler). big([q15], filler). big([q16], filler). big([q17], filler). big([q18], filler). big([q19], filler). big([q20], filler). big([q21], filler). big([q22], filler). big([q23], filler). big([q24], filler). big([q25], filler). big([q26], filler). big([q27], filler). big([q28], filler). big([q29], filler). big([q30], filler). big([q31], filler). big([q32], filler). big([q33], filler). big([q34], filler). big([q35], filler). big([q36], filler). big([q37], filler). big([q38], filler). big([q39], filler). big([q40], filler). big([q41], filler). big([q42], filler). big([q43], filler). big([q44], filler). big([q45], filler). big([q46], filler). big([q47], filler). big([q48], filler). big([q49], filler). big([q50], filler). big([q51], filler). big([q52], filler). big([q53], filler). big([q54], filler). big([q55], filler). big([q56], filler). big([q57], filler). big([q58], filler). big([q59], filler). big([q60], filler). big([q61], filler). big([q62], filler). big([q63], filler). big([q64], filler). big([q65], filler). big([q66], filler). big([q67], filler). big([q68], filler). big([q69], filler). big([q70], filler). big([q71], filler). big([q72], filler). big([q73], filler). big([q74], filler). big([q75], filler). big([q76], filler). big([q77], filler). big([q78], filler). big([q79], filler). big([q80], filler). big([q81], filler). big([q82], filler). big([q83], filler). big([q84], filler). big([q85], filler). big([q86], filler). big([q87], filler). big([q88], filler). big([q89], filler). big([q90], filler). big([q91], filler). big([q92], filler). big([q93], filler). big([q94], filler). big([q95], filler). big([q96], filler). big([q97], filler). big([q98], filler). big([q99], filler). big([q100], filler). big([q101], filler). big([q102], filler). big([q103], filler). big([q104], filler). big([q105], filler). big([q106], filler). big([q107], filler). big([q108], filler). big([q109], filler). big([q110], filler). big([q111], filler). big([q112], filler). big([q113], filler). big([q114], filler). big([q115], filler). big([q116], filler). big([q117], filler). big([q118], filler). big([q119], filler). big([q120], filler). big([q121], filler). big([q122], filler). big([q123], filler). big([q124], filler). big([q125], filler). big([q126], filler). big([q127], filler). big([q128], filler). big([q129], filler). big([q130], filler). big([q131], filler). big([q132], filler). big([q133], filler). big([q134], filler). big([q135], filler). big([q136], filler). big([q137], filler). big([q138], filler). big([q139], filler). big([q140], filler). big([q141], filler). big([q142], filler). big([q143], filler). big([q144], filler). big([q145], filler). big([q146], filler). big([q147], filler). big([q148], filler). big([q149], filler). big([q150], filler). big([q151], filler). big([q152], filler). big([q153], filler). big([q154], filler). big([q155], filler). big([q156], filler). big([q157], filler). big([q158], filler). big([q159], filler). big([q160], filler). big([q161], filler). big([q162], filler). big([q163], filler). big([q164], filler). big([q165], filler). big([q166], filler). big([q167], filler). big([q168], filler). big([q169], filler). big([q170], filler). big([q171], filler). big([q172], filler). big([q173], filler). big([q174], filler). big([q175], filler). big([q176], filler). big([q177], filler). big([q178], filler). big([q179], filler). big([q180], filler). big([q181], filler). big([q182], filler). big([q183], filler). big([q184], filler). big([q185], filler). big([q186], filler). big([q187], filler). big([q188], filler). big([q189], filler). big([q190], filler). big([q191], filler). big([q192], filler). big([q193], filler). big([q194], filler). big([q195], filler). big([q196], filler). big([q197], filler). big([q198], filler). big([q199], filler). big([q200], filler). big([q201], filler). big([q202], filler). big([q203], filler). big([q204], filler). big([q205], filler). big([q206], filler). big([q207], filler). big([q208], filler). big([q209], filler). big([q210], filler). big([q211], filler). big([q212], filler). big([q213], filler). big([q214], filler). big([q215], filler). big([q216], filler). big([q217], filler). big([q218], filler). big([q219], filler). big([q220], filler). big([q221], filler). big([q222], filler). big([q223], filler). big([q224], filler). big([q225], filler). big([q226], filler). big([q227], filler). big([q228], filler). big([q229], filler). big([q230], filler). big([q231], filler). big([q232], filler). big([q233], filler). big([q234], filler). big([q235], filler). big([q236], filler). big([q237], filler). big([q238], filler). big([q239], filler). big([q240], filler). big([q241], filler). big([q242], filler). big([q243], filler). big([q244], filler). big([q245], filler). big([q246], filler). big([q247], filler). big([q248], filler). big([q249], filler). big([q250], filler). big([q251], filler). big([q252], filler). big([q253], filler). big([q254], filler). big([q255], filler). big([q256], filler). big([q257], filler). big([q258], filler). big([q259], filler). big([q260], filler). big([q261], filler). big([q262], filler). big([q263], filler). big([q264], filler). big([q265], filler). big([q266], filler). big([q267], filler). big([q268], filler). big([q269], filler). big([q270], filler). big([q271], filler). big([q272], filler). big([q273], filler). big([q274], filler). big([q275], filler). big([q276], filler). big([q277], filler). big([q278], filler). big([q279], filler). big([q280], filler). big([q281], filler). big([q282], filler). big([q283], filler). big([q284], filler). big([q285], filler). big([q286], filler). big([q287], filler). big([q288], filler). big([q289], filler). big([q290], filler). big([q291], filler). big([q292], filler). big([q293], filler). big([q294], filler). big([q295], filler). big([q296], filler). big([q297], filler). big([q298], filler). big([q299], filler). big([a], ground). big([_], nested_var_tail). big([a|_], nested_var_arg). big([b], other_ground). check(Query, Desc) :- findall(X, small(Query,X), Want), findall(X, big(Query,X), Got), ( Want == Got -> write(' ok '), write(Desc), nl, write(' both gave '), write(Got), nl ; write(' FAIL '), write(Desc), nl, write(' unindexed (correct) '), write(Want), nl, write(' indexed '), write(Got), nl ). main :- write('nested-var indexing check'), nl, check([a], 'query [a] - expect [ground,nested_var_tail,nested_var_arg]'), check([b], 'query [b] - expect [nested_var_tail,other_ground]'), check([a,c], 'query [a,c] - expect [nested_var_arg]'), check([z], 'query [z] - expect [nested_var_tail]').