mi3(true).
        mi3((A,B)) :-
                mi3(B),        % first B, than A
                mi3(A).
        mi3(g(G)) :-
                mi_clause(G, Body),
                mi3(Body).
    
From a logical point of view, this changes nothing (conjunction is commutative). Procedurally, there's a difference: With minor adjustments to mi_clause/2 (adding the fact "defaulty_better(false, false)." and guarding G against the atom false/0), and after adding the additional clause
        mi3(false) :- false.
    
this MI can be used to prove that the query "?- declarative_false." cannot succeed given the predicate's definition:
        declarative_false :-
                declarative_false,
                false.
    
This can't be derived with the standard execution order. HERE, filler text is needed, showing that the issue may be related to SCROLLING. If I remove the preceding paragraph starting with HERE, this line, and everything following until the

in, then the issue goes away. Even more filler text is needed, and therefore additional text and a few more paragraphs appear between the previous snippet and the final one. Even more filler text is needed, and therefore additional text and a few more paragraphs appear between the previous snippet and the final one.

We can ask the user before we execute goals (tracing), print out the execution history or restrict access to safe goals by adjusting the third clause:
        mi2_safe(g(G)) :-
                (   safe_goal(G) ->
                    mi_clause(G, Body),
                    mi2_safe(Body)
                ;   throw(cannot_execute(G))
                ).