 ERROR: missing-literal ;
 
 : assert-literal ( n -- n )
-    dup
-    [ word? ] [ symbol? not ] bi and
+    dup { [ word? ] [ symbol? not ] } 1&&
     [ missing-literal ] when ;
 
 \ + [ - ] [ - ] define-math-inverse

: define-math-inverse ( word quot1 quot2 -- )
    pick 1quotation 3array "math-inverse" set-word-prop ;

: define-pop-inverse ( word n quot -- )
    [ dupd "pop-length" set-word-prop ] dip
    "pop-inverse" set-word-prop ;

ERROR: bad-math-inverse ;


SYMBOL: visited

: flattenable? ( object -- ? )
    {
        [ word? ]
        [ primitive? not ]
        [ explicit-inverse? not ]
    } 1&& ;

: flatten ( quot -- expanded )
    visited get over suffix visited [
        [
            dup flattenable? [
                def>>
