similistar(Commands1,Commands2) :- collect_stars(Commands1,Stars1), collect_stars(Commands2,Stars2), canonical_stars(Stars1,Canonical1), canonical_stars(Stars2,Canonical2), Canonical1 == Canonical2. canonical_stars([],[]). canonical_stars(Stars,CanonicalStars) :- Stars = [star(StartCol,InitialLine)|RestStars], max_line(RestStars,InitialLine,StartLine), canonical_stars(Stars,StartCol,StartLine,CanonicalStars). canonical_stars([],_,_,[]). canonical_stars([star(X,Y)|R],StartCol,StartLine,[star(X1,Y1)|R1]) :- X1 is X - StartCol, Y1 is Y - StartLine, canonical_stars(R,StartCol,StartLine,R1).