### Specification for gIntersect

This code finds the intersection of two subspaces of a vector space over some field.
I wrote these notes as the code was first developed.
In both the input and output to the intersection logic, subspaces are specified by a row of vectors which span the subspace.
Each vector is a list of field elements.

The expression`((fileVal "gIntersect") `*zer zer? one add neg mul recip*)
yields a procedure we call G here.
The arguments supplied here are:
- zer
- the additive identity of the field
- zer?
- predicate for detecting the additive identity
- one
- the field multiplicative identity
- add
- the field addition operator
- neg
- the field negation operator
- mul
- the field multiplication operator
- recip
- the field reciprocal operator

The function G takes a symbol as argument and returns a function corresponding to that symbol.
`(G 'inter)`- returns the intersection routine itself.
`((G 'inter) `*a b*) returns the subspace which is the intersection of the two subspaces a and b.
The answer is in RREF but the inputs need not be.
`(G 'oss)`- returns a function which computes the complementary subspace.
If A is a subspace of some n dimensional vector space X then
`((G 'oss) `*A n*) returns C, the complementary (or orthogonal) subspace from the X’s dual space.
The value n is required only when A is represented by '() which denotes the 0 dimensional subspace.
In this case the function is unable to deduce n.
Actually it is also used when all provided vectors are 0.
C is expressed in DRREF.
`(G 'rref)`- returns the canonical version of the rref routine that it got from module RREF using the supplied field parameters.
`(G 'iden)`- returns a matrix identity generator for the field.
`((G 'iden) `*n*) returns an n by n identity matrix with the field multiplicative identity down the diagonal and the field zero elsewhere.

A matrix M is in DRREF (dual RREF) just if `(reverse (map reverse `*M*)) is in RREF.
But note that `(reverse (map reverse `*M*)) is not `(rref `*M*).
I must decide how suspicious of its arguments inter must be.
(null? arg)?, (null? (car arg))?, equal length vectors (rectangular matrices?), zero vectors?
I propose that rectangular matrices are required and vectors from both arguments, if any, must be the same length.
Also all field arguments from input matrices must be acceptable to field functions.