15.1 SetKnowns and SetUnknowns

In most mathematics and engineering appications, certain quantities are considered known and others are considered unknown. The goal is usually to solve for unknowns in terms of the knowns, or to solve for some unknowns in terms of others. In a prestrategy session, one must declare which variables are knowns and which ones are unknowns. While this declaration evolves through the course of a session, it is, at any moment, a part of the computing environment. Indeed, before any of the NCProcess commands can be called, it is necessary to set all variables to either be known or be unknown. Mathematically, the variables which are declared unknown are those which one wants to solve for.

An example is :

Example 15.1

SetNonCommutative[A,B,C,a,b,c];  
             SetKnowns[A,B,C];  
             SetUnknowns[{a,b,c}];

After the above three commands have been executed, the user can run any of the NCProcess commands (NCProcess1, NCProcess2 or NCProcess) on any equations in the variables A, B, C, a, b, c. Here, A, B and C are knowns and a, b and c are unknowns. In the case of NCProcess and NCProcess1, setting the knowns and unknowns as above has the effect that the NCProcess command will try to solve for a, b, c and produce equations from which they have been eliminated. Also the spreadsheet displayed by the NCProcess command does bookkeeping based on what is known and unknown.

The above three commands have imposed an order on the variables A, B, C, a, b, c which expresses our priorities for eliminating them. We use the notation

A < B  < C  ≪ a <  b < c
to denote the order imposed in the example. The NCProcess command will try hardest to eliminate c and the least to solve for A.

If you are running a prestrategy session and stop making progress one of the first things to try is changing the order.

The means that the NCProcess commands go to much greater lengths 1 towards eliminating a,b,c than it does for A,B,C.

A fancier example of such prioritizing is :

Example 15.2

SetNonCommutative[A,B,C,a,b,c,e,f,g];  
             SetKnowns[A,B,C];  
             SetUnknowns[{a,b,c},{d,e,f}];

This produces the ordering

A < B  < C ≪  a <  b < c ≪ d < e < f ,

There is an alternative to SetKnowns and SetUnknowns. The command
SetMonomialOrder[{A,B,C},{a,b,c},{d,e,f}] has exactly the same effect as the commands in Example 15.2.

One can proceed with an NCProcess command, only after an ordering is set.