atlas
0.6

Namespaces  
atlas  
atlas::topology  
Functions  
bool  atlas::topology::isTrivial (const CoeffList &invf) 
This is topology.cpp
[I've tried to make more detailed sense of Fokko's initial comments. In case I've goofed up, I've kept the original comments just below. In any case it should be noted that all this class is used for to date (May 2007), is to print (dual) connectivity information about the real group, which might make the functorial description below seem somewhat excessive. MvL]
The calculation of the component group $(G())$ of $G()$ is based on the following two facts : (a) for $G$ simply connected semisimple, $G()$ is connected; (b) for $G$ arbitrary, a maximally split torus $T$ of $G()$ meets all its connected components.
From (b), we get that $(T)$ surjects onto $(G())$; we need to determine the kernel of this surjection, which is the subgroup of $(T)$ cut out by the identity component of $G()$. Dually we see the dual group $dpi0(G())$ as the subgroup of $dpi0(T)$ orthogonal to the mentioned kernel. Once we know $dpi0(G())$ we can therefore determine that kernel, and get $(G())$ as quotient of $(T)$ by it. In fact this module does not compute $(G())$ at all, but just the dual $dpi0(G())$.
For any covering homomorphism $G~ G$, the identity component of $G~()$ maps onto the identity component of $G()$. Dually, we see that $dpi0(G())$ injects into $dpi0(G~())$, and viewing these as subgroups of $dpi0(T)$ and $dpi0(T~)$ respectively, we can find $dpi0(G())$ as the inverse image of $dpi0(G~())$ under the map $dpi0(T) dpi0(T~)$ induced by the covering.
We can apply this to the covering of $G$ by a "simply connected" group $G~$ (defined as in RootDatum::isSimplyConnected as a group whose derived group is simply connected) that is moreover a direct product $G~=H T_1$, with $H$ simply connected semisimple, and $T_1$ a central torus. Then $H()$ is connected, by (a). Therefore $(G~()) = (T_1())$; consequently $dpi0(G~())$ identifies with $dpi0(T_1())$, and its image in $dpi0(T~)=dpi0(S) dpi0(T_1())$, where $S$ a maximally split torus in $H()$, is just the second factor.
Then the inverse image of $dpi0(G~())$ in $dpi0(T)$ we are after is also the kernel of the map $dpi0(T) dpi0(S)$. But we may take for $H$ the simply connected cover of the derived group of $G$; hence we may suppose that the weight lattice of $H$ is the weight lattice of the root system of $G$ (the set of weights in the $$span of the roots that are integral for the coroots): restriction to the derived group means projecting the weight lattice onto the $$span of the roots, and taking the simply connected cover means extending the lattice to all integral weights for the coroots. Then the coweight lattice is just the coroot lattice of $G$; it is easy to write down the involution of that lattice (this amounts to writing the involution on coroot basis), and then to construct the torus $S$ of $H$.
The upshot is that (1) the central torus $T_1$ of $G$ is irrelevant to the question, and (2) it suffices to know the involution for the maximally split torus $T$ of $G()$ (in the original coordinates), and the involution for the maximally split torus $S$ of $H()$ (in simple weight coordinates). The actual computation of components is done by computing an induced map at the level of subquotients and then taking its kernel.