HTTPS SSH
petersonfree is a collection of programs for comparing Peterson translation and freeness of
hyperplane arrangements, in support of the following papers:

    W. Slofstra. Rationally smooth Schubert varieties and inversion hyperplane
        arrangements. http://arxiv.org/abs/1312.7540. 2013.

    W. Slofstra. A pattern avoidance criterion for free inversion arrangements.
        http://arxiv.org/abs/1409.7299. 2014. 

Note: The code has a lot of rough edges, and probably shouldn't be used for anything other
than verifying the claims in the above papers. Use at your own peril. For more information
see <http://www.math.ucdavis.edu/~wslofstra>.

Currently the collection contains 3 programs:
- indfree: check inductive freeness of hyperplane arrangements over the integers.
- freepattern: find minimally non-free convex/coconvex/biconvex subsets of rootsystems.
- petersonfree: generate Peterson translation graphs, and check freeness of the vertices.

To make any of these programs from source:
    cd src
    make program_name
    cd ..
    cp src/program_name .

There is also a certificate checker to verify the output of indfree. To make the certificate
checker: 
    cd check_certificate
    make
    cd ..
    cp check_certificate/checkcert .

To see a summary of commandline options for any of these programs:
    ./program_name -h

Also included:
- maple_src: similar programs implemented in Maple.
- sage_src: a certficate checking program in sage.
- scripts: directory for related shell scripts.
- input: directory for input files. 
- output: directory for output files. 
- certs: directory for certificates generated by indfree. 

-------------------------------------------------------------------------------------------------

indfree is a program for checking inductive freeness of hyperplane arrangements.

1. To generate a certificate of a inductive freeness for a file:

    ./indfree cert cert_filename < input_filename

    Some default files are in the "input" directory. So to get a certificate of freeness for
    D4, run

    ./indfree cert certs/D4.cert < input/D4

2. To check the certificate:
    
    ./checkcert cert_filename < input_filename

   So for D4:

    ./checkcert certs/D4.cert < input/D4

   One of the reasons for the certificate checker is that indfree (as well as the other
   programs in this collection use long long ints (effectively working mod 2^64), whereas
   the certificate checker can handle integers of arbitrary size (via gmp).

3. To check the certificate in sage:
    
    ./indfree sage cert_filename.sage < input/input_filename

    sage
    %load cert_filename.sage
    %load sage_src/check_certificate.sage
    check_certificate(M,C)

   So for D4, generate the sage certificate:

    ./indfree sage D4.sage < input/D4

   And verify:
    sage
    %load certs/D4.sage
    %load sage_src/check_certificate.sage
    check_certificate(M,C)

-------------------------------------------------------------------------------------------------

freepattern is a program for finding the minimal non-free convex/coconvex/biconvex sets in a
root system. Currently the program cannot generate the rootsystems; these must be given as input.

1. To generate all coconvex sets:

    ./freepattern coconvex < input/rootsystem

   So for instance to generate all coconvex sets for D4:

    ./freepattern coconvex < input/D4

2. A set is minimally non-free if it is not free, and no flattening of the set is non-free. 
   To generate all minimally non-free coconvex sets:

    ./freepattern comin < input/rootsystem

Run 

    ./freepattern

to see other options.

-------------------------------------------------------------------------------------------------

petersonfree is a program to generate the Peterson translation graph associated with a root system.

1. To generate the Peterson translation graph:

    ./petersonfree < input/rootsystem

   Note that the vertices of this graph are coconvex subsets of the root system, specified as a
   column set. Each vertex is assigned an identification number, and edges are specified as
    
    n (l)

   where n is the target edge, and l is the column of the original input matrix labelling the edge.

2. To test freeness of each vertex:

    ./petersonfree 0 < input/rootsystem

Run 

    ./petersonfree help 

to see other options and information.