Parse.overload_on : string * term -> unit
When printing, this call causes tm to be seen as the operator name. The string name may prompt further pretty-printing if it is involved in any of the relevant grammar’s rules for concrete syntax.
If tm is an abstraction, then the parser will perform beta-reductions if the term is the function part of a redex position.
   - val inter = new_definition("inter", Term`inter p q x = p x /\ q x`);
   <<HOL message: inventing new type variable names: 'a.>>
   > val inter = |- !p q x. inter p q x = p x /\ q x : thm
   - overload_on ("/\\", Term`inter`);
   <<HOL message: inventing new type variable names: 'a.>>
   > val it = () : unit
   - Term`p /\ q`;
   <<HOL message: more than one resolution of overloading was possible.>>
   <<HOL message: inventing new type variable names: 'a.>>
   > val it = `p /\ q` : term
   - type_of it;
   > val it = `:'a -> bool` : hol_type
   - overload_on ("/\\", Term`bool$/\`);
   > val it = () : unit
   - Term`p /\ q`;
   <<HOL message: more than one resolution of overloading was possible.>>
   > val it = `p /\ q` : term
   - type_of it;
   > val it = `:bool` : hol_type
   - overload_on ("/\\", Term`/\ :bool->bool->bool`);
   > val it = () : unit
   - overload_on ("|<", Term`\x y. ~(x < y)`);
   > val it = () : unit
   - set_fixity "|<" (Infix(NONASSOC, 450));
   > val it = () : unit
   - val t = Term`p |< q`;
   > val t = `p |< q` : term
   - dest_neg t;
   > Val it = `p < q` : term