The Cartesian product, named after Rene (with suitable accents) des Cartes,
is orthodoxly a way of taking a list of sets and generating a set of lists; if
we have ({collections}:F|n) with n natural, the cartesian product C of F is that
collection for which: c in C
iff i in n implies c(i) in F(i)
. Thus [a,b] is
a member of A×B
(as orthdoxy writes it), the cartesian product of [A,B],
iff a is in A and b is in B. I depart from orthodoxy in not using × to
denote this (it's too heavily over-loaded already); it will be Rene([A,B]).
At the same time, the theory of smooth manifolds obliges one to deal
extensively with functions of form (:F|M), with M the smooth manifold, for which
F(m) is a linear space, for each m; F is then a tensor rank
on M and a
section of
F is a mapping (:f|M) for which f(m) is a member of F(m) for
each m in M [subject to some continuity conditions not relevant to the present].
This clearly has the same form, with m and M replacing i and n in the above.
The situation is then further complicated by the fact that each F(m) is formally
constructed from a pair of equivalence relations at m (and possibly some tensor
algebra), so that I'd ideally like to allow that F's outputs need not be
collections - e.g. they may be equivalences. Expanding the uses of in
above, we get C relates c to d
iff i in n implies F(i) relates c(i) to
d(i)
, which perfectly safely allows us arbitrary relations as the outputs of
F; and allows n to be any collection (or, indeed, general relation; but only its
collection of fixed points will matter).
I therefore address the theoretical construct of the cartesian product by defining the mapping
i in (:F|)implies
F(i) relates c(i) to d(i):{mappings}) ← ({relations}:F:) :{mappings})
which mediates the above. If (:{mappings}|F) then F(i) relates c(i)
to d(i)
translates to c(i) = F(i,d(i))
so Rene(F) can be written (:
(: F(i,d(i)) ←i |(:F|)) ← (:d|(:F|)) :). When (furthemore)
(:{collections}|F), Rene(F) becomes {d: i in (:F|) implies d(i) in F(i)}, which
is its orthodox cartesian product, at least when F is a list (i.e. (:F|) is
natural).
At the same time, if F is a rank
of some smooth manifold's tensor
bundle, Rene(F) is the collection of sections - a.k.a. tensor fields (on the
whole manifold) - of that rank. If (:F|M) is a section of the rank which
describes linear maps from one rank, A, to another, W - a.k.a. a tensor field
whose value at each point, m, is a linear map (W(m):|A(m)) - then Rene(F) =
(Rene(W): (: F(m,a(m)) ←m |M) ←(:a|M) :Rene(A)) is a pointwise
linear
map from sections of A to sections of W. Indeed, the case where F
was a rank is just a special case of this: a rank is the identity on itself, and
trivially linear, so Rene maps it to the identity (pointwise linear) map on
sections of that rank, i.e. the collection of such sections.
[Complication: for equivalences ... G(m) and T(m) are equivalences on {({scalars}:h:M): h smooth on some neighbourhood of m} and {(M:f:{scalars})←t: f(t) = m, f smooth in some neighbourhood of t}, respectively ... really want mappings from any rank to G or T to be nice about these equivalences ... but that can always be implemented by suitable composition with G or T.]
Now, if we have (:F|M) and (:H|M) as sections of two ranks describing linear maps, with H's output rank being F's input rank, we can construct (: F(m)&on;H(m) ←m |M) which is then a section on a third rank describing linear maps, from H's input rank, (: (:H(m)|) ←m |M), to F's output rank, (: (|F(m):) ←m |M). Applying Rene to the composite, we get
so that the pointwise composite
of F and H can be written as
unRene(Rene(F)&on;Rene(H)) with unRene = reverse(Rene). [The structure of this
echoes that of star(a*b) = star(a)&on;star(b) for a binary operator, *, and its
associated mapping, star = (: (: u*v ← v :) ←u :).]