SubscriptsonsubscriptsSubscripts_{on_{subscripts}}

2021 James B. Wilson, Colorado State University

SubscriptsonsubscriptsSubscripts_{on_{subscripts}}

Cause: Ordering what doesn't want to be ordered.

 

Γi1iaj1jb\Gamma_{i_1\cdots i_{a}}^{j_1\cdots j_b}

 

Kd1××dK^{d_1\times \cdots \times d_{\ell}}

 

xi1xix_{i_1}\otimes \ldots \otimes x_{i_{\ell}}

 

Kd1KdK^{d_1}\otimes \cdots \otimes K^{d_{\ell}}

 

SubscriptsonsubscriptsSubscripts_{on_{subscripts}}

In Code:  we want a command like

def MakeSpace( K, d_1, ...., d_ell )  
	... 

Above "ell" is a variable also,

but the program doesn't know this,

this cannot be programmed without very special features (dependent types, variadic inputs, etc.).

SubscriptsonsubscriptsSubscripts_{on_{subscripts}}

Solution 1: assign a new variable.

 

Kd1××dK^{d_1\times \cdots \times d_{\ell}}

becomes

Kd,whered=d1××dK^{d}, \quad where\quad d=d_1\times \cdots \times d_{\ell}

SubscriptsonsubscriptsSubscripts_{on_{subscripts}}

Solution 2: use a set

Kd1KdK^{d_1}\otimes \cdots \otimes K^{d_{\ell}}

becomes

dDKd,D={d1,,d}\bigotimes_{d\in D} K^d,\qquad D=\{d_1,\ldots,d_{\ell}\}

 

One step further let the set index itself:

Let V\mathcal{V} be a set of spaces and consider VVV=V\bigotimes_{V\in \mathcal{V}} V=\otimes\mathcal{V}

 

SubscriptsonsubscriptsSubscripts_{on_{subscripts}}

// Original
def MakeSpace( K, d_1, ...., d_ell )  
	... 
   
// Create index set
ds = [1,2, 19,...]  // "..." means user filled in constants

def MakeSpace( K, ds)
	... 

Solution 2 in code

x1++xx_1+\cdots+x_{\ell}

ΣX=xXx,X={x1,,x}\Sigma X = \sum_{x\in X} x, \qquad X=\{x_1,\ldots, x_{\ell}\}

xs = [ 3, -9, 541 ]
sum(xs)

// Alternatives
xs.fold(+)     // head+tail.fold(+), recursive
+&xs           // "&"="forall" + = sum

SubscriptsonsubscriptsSubscripts_{on_{subscripts}}

Solution 3ε3-\varepsilon:  if sub-sub-scripted, e.g.

Γi1ia\Gamma_{i_1\ldots i_a}

replace i=(i1,,ia)i_*=(i_1,\ldots,i_a)

Γi\Gamma_{i_*}

SubscriptsonsubscriptsSubscripts_{on_{subscripts}}

Asside: what is (i1,,ia)(i_1,\ldots, i_a)?

(i1,,ia)[d1]××[d](i_1,\ldots,i_a)\in [d_1]\times \cdots \times [d_{\ell}]

where [n]={1,,n}[n]=\{1,\ldots,n\}

 

Generally

(x1,,xa)X1××Xa(x_1,\ldots,x_a)\in X_1\times \cdots \times X_{a}

That is...

xΠX=XXXx\in \Pi \mathcal{X}=\prod_{X\in \mathcal{X}} X

SubscriptsonsubscriptsSubscripts_{on_{subscripts}}

Solution 3: use functions

Γi1ia\Gamma_{i_1\ldots i_a}

Step I, replace iki_k with tuple ιΠD\iota\in \Pi D

 

Step II, Γ\Gamma is now a function on tuples

Γ:ΠDK\Gamma:\Pi D\to K

and we access it like any function, 

ΓιK\Gamma_{\iota}\in K

Γi1iaj1jb\Gamma_{i_1\ldots i_a}^{j_1\ldots j_b}

Γιτ\Gamma_{\iota}^{\tau} where ιΠLτΠU\iota\in \Pi L \quad\tau\in \Pi U

is = x -> ...  // A lambda, a little function 
js = y -> ...  // that given index, calcs the coordinate.
gamma(is, js)

Examine what you mean

 

A subscript in the end is just turning symbol into a function, aia_i means a function varying with ii, so a:ITa:I\to T.

 

All functions are defined on sets and so order of the domain never matters.

 

Let that reality sink in and soon your subscripts will become tidy and programable.

But above all be flexible with others, and yourself!