This program is a calculator for the multi-dimensional Thompson groups Vn. More detailed documentation is available
is on Github as Javadoc (http://github.com/romwell/nvTrees).

Author: Roman Kogan; contact: romwell@gmail.com 

Instructions for usage: type a string to evaluate and hit Enter. Use scrollbars on the left to control zoom and scale;
the boxes on the right contain command history and list of variables. Clicking on a variable name or a command in the
history box brings it up in the command line.

Usage examples (note: type the expressions exactly - extra spaces may be a problem):
Define the generators of the Thompson group F:
	X0={11000,10100,1 2 3}
	X1={1011000,1010100,1 2 3 4}
Multiplication (left action, corresponding to function composition X0 o X1)
	X0*X1	
Inverse
	!X0
	X0^-1	
Power
	X0^(-3)	
Conjugation
	X1^(X0^-1)
	X1^X0
Commutator
	X1#X0
Growth (note the single space!)
	growth [A,B,3]			
Cyclic permutation as an element of V
	X={1100100,1100100,2 3 4 1}
Baker's map as an element of 2V
	X={100,200,1 2}
Do something with the result of last operation
	ans^2


Application commands:		
  \save			Saves session to default filename ~default.nvt

  \save fname		Saves session to fname.nvt	

  \load			Loads session from default filename ~default.nvt (this happens at the start of the program if the file exists)

  \load fname		Loads session from fname.nvt : loads history and re-runs it

  \qload		Quick load from ~default.nvt: loads history and variable values; doesn't re-run history

  \qload fname		Quick load from fname.nvt: loads history and variable values; doesn't re-run history

  \clear		Clear screen	

  \reset		Resets the program	

  \pattern		Enables or disables pattern display

	
		
Expression Commmands:

  expression		Evaluates the expression and displays it	

  X=expression		Evaluates the expression and assigns it to a variable X	
		
Expression may contain the following:		
  ans					The result of last calculation is stored here	

  x={treepair format string}		See treepair format below

  (any expression involving 		Ex.: $((A#!B)^(C*D))
   parentheses, variables and 
   operators)		

	
Unary operators:		

  !	inverse	
  $	reduced form	
  @	left-side-to-grid form	
		
Binary Operators:		
  * multiplication A*B (left action, corresponding to function composition A o B)	
  ^	conjugation B*A*B^-1	
  ^	power A^integer	
  #	commutator A*B*A^-1*B^-1	

Other commands:
  growth		Computes the growth function of a group generated by a given list of elements
			Syntax: growth[x1, x2, x3,..,xk, n]
			where x1, x2, ..., xk are variables previously defined, and n is a positive integer
			-->computes the size of balls of sizes 1,2,3,..,n
  semi		Same syntax and usage as growth, but computes growth of the semigroup instead.

		
Tree Pair Format:
  random N C				Random tree pair with N leaves in dimension C (labels are in 1,2,...C)
  left_tree,right_tree,permutation	See Tree format below for left_tree, right_tree. 
  					See Permutation format below for permutation	
					right_tree can be replaced with “same”, then the right tree
					will be made the same as the left tree.
  
  left_tree,right_tree			A tree pair (left_tree, right_tree) with identity permutation	
		
		
Tree format:		
  random N C				Random tree with N leaves in dimension C (labels are in 1,2,...C)
  DFS of the tree as a sring		Values at nodes: colors; values at leaves: 0. 
  					Example: 10200 corresponds to the tree
							1
						       / \
						      0   2
							 / \
							0   0
 		
Permutation format:		
permutation of numbers from 1 to n		Ex.: 1 5 4 2 7 6 3 is a permutation of numbers from 1 to 7	
random						Random permutation 	
id						Identity permutation	

Most of the code was written as a part of Collin Bleak's REU in 2008.