水素原子の表現論(1.5)spectrum generating algebra

水素原子の束縛状態全体は、Lie代数so(4,2)の極小表現になっていることが知られている。このso(4,2)は、dynamical symmetryと呼ばれたり、spectrum generating algebraと呼ばれていたりする。個人的には、ハミルトニアンと可換でないものを"symmetry"と呼ぶのは紛らわしいと思うので、spectrum generating algebraという名前を使用する。spectrum generatingというのも、いまいちな名前とは思う。そして、伝説によれば、散乱状態の全体も、同様にso(4,2)の既約ユニタリー表現になっているらしいのだけど、散乱状態の方は、出典不明で、本当かどうかも、よく分からない。


#表現論的に理解したいこととして、一つには、散乱状態の全体を、何かよい基底を見つけて、so(4,2)の作用を書きたいというのがある。もう一つは、極小表現がso(4)の既約ユニタリ表現の直和に分解できるのと同様、散乱状態の方も、エネルギー一定の状態はso(3,1)の既約ユニタリ表現をなすので、散乱状態全体は、これらの表現の直積分で書けるというようなことが期待される。知る限り、そのような説明を見たことがない


束縛状態に関しては、spectrum generating algebraの具体的な実現は分かっているし、一方で、全ての束縛状態も分かっていて、極小表現は最低ウェイト表現であるから、基底状態(1s軌道解)に対して、最低ウェイト条件と特異ベクトルが消えるという条件の成立を確認すれば、水素原子の束縛状態がso(4,2)の極小表現であるということは証明できる。so(4,2)の極小表現を、so(4)に制限した時の既約分解の仕方などは、表現論の知識のみで分かる


ところで以前、
http://d.hatena.ne.jp/m-a-o/20140130#p1

で『主量子数n+1の電子殻のヒルベルト空間は、so(4)の最高ウェイト(n,0)を持ついくつかの既約表現の直和で書けることが分かったけど、各既約表現が何個出てくるかということは、表現論的に知る方法はなくて、Schrodinger方程式を解く(あるいは、Pauliの時は、まだSchrodinger方程式がなかったのでHeisenberg方程式でやっていたようだけど)しかないように思う(状態のHilbert空間を、どう取るかは物理的な理由によって決まるべきもので、表現論の立場から決める原理はないから)』と書いた


けれどもし、
(1)spectrum generating algebraの生成元が分かって
(2)束縛状態はspectrum generating algebraの何らかの既約ユニタリー表現であるということは分かっているが
(3)にも関わらず、シュレディンガー方程式の解き方は分からない
というような人がいたとしたら、束縛状態の全体について、どのくらいのことが分かるか、考えたい。現在のところ、条件(2)とか、束縛状態の全体が何故so(4,2)の極小表現となる理由を、シュレディンガー方程式を解かずに理解する方法はないと思うけど


とりあえず考えることとして、spectrum generating algebraの生成元の間には、いくつかの非自明な代数的関係式(角運動量とRunge-Lenzベクトルが直交するというような)が成立し、それらの関係式によって、U(so(4,2))の両側イデアル$J$が決定される。この両側イデアルは、極小表現上では、当然0になるはずである。$J$が消えるような、既約ユニタリー表現は、比較的限定されるだろうと期待したい。


一方、極小表現上で消えるU(so(4,2))の元全体を考えることができ、やはり両側イデアルをなす(これにはJosephイデアルという名前が付いている)。まずは、この2つのイデアルに、どれくらいの差があるか、ということを調べたい



Kepler問題に於けるspectrum generating algebraの生成元の具体的な式は、例えば、以下の論文に書いてある

SO(4,2)‐Formulation of the Symmetry Breaking in Relativistic Kepler Problems with or without Magnetic Charges
http://scitation.aip.org/content/aip/journal/jmp/12/5/10.1063/1.1665653


簡単のため、長さをBohr半径で規格化して、プランク定数も1とすると、生成元は、以下の15個

角運動量
L_1 = -y \frac{\partial}{\partial z} + z \frac{\partial}{\partial y}
L_2 = -z \frac{\partial}{\partial x} + x \frac{\partial}{\partial z}
L_3 = -x \frac{\partial}{\partial y} + y \frac{\partial}{\partial x}

scaled Runge-Lenz vector
A_1 = -\frac{1}{2} x (\frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} + \frac{\partial^2}{\partial z^2}) + \frac{\partial}{\partial x} \cdot ( x\frac{\partial}{\partial x} + y \frac{\partial}{\partial y} + \frac{\partial}{\partial z}) - \frac{1}{2} x

A_2 = -\frac{1}{2} y (\frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} + \frac{\partial^2}{\partial z^2}) + \frac{\partial}{\partial y} \cdot ( x\frac{\partial}{\partial x} + y \frac{\partial}{\partial y} + \frac{\partial}{\partial z}) - \frac{1}{2} y

A_3 = -\frac{1}{2} z (\frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} + \frac{\partial^2}{\partial z^2}) + \frac{\partial}{\partial z} \cdot ( x\frac{\partial}{\partial x} + y \frac{\partial}{\partial y} + \frac{\partial}{\partial z}) - \frac{1}{2} z


dual Runge-Lenz vector
B_1 = A_1 + x
B_2 = A_2 + y
B_3 = A_3 + z


other generators
\Gamma_1 = r \frac{\partial}{\partial x}
\Gamma_2 = r \frac{\partial}{\partial y}
\Gamma_3 = r \frac{\partial}{\partial z}

T_1 = -\frac{r}{2}(\frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} + \frac{\partial^2}{\partial z^2}) - \frac{r}{2}

T_2 = x \frac{\partial}{\partial x} + y \frac{\partial}{\partial y} + z \frac{\partial}{\partial z} + 1

T_3 = -\frac{r}{2}(\frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} + \frac{\partial^2}{\partial z^2}) + \frac{r}{2}


そして、Chevalley生成元を以下のように決める。
e_1 = (A_1 + L_2 + i(L_1 - A_2))/2

f_1 = (A_1 - L_2 + i(L_1 + A_2))/2

h_1 = -(A_3 + i L_3)

e_2 = i(T_1+T_2+B_3-\Gamma_3)/2

f_2 = i(T_1-T_2+B_3+\Gamma_3)/2

h_2 = A_3+T_3

e_3 = (A_1 + L_2 -i(L_1 -A_2))/2

f_3 = (A_1 - L_2 -i(L_1+A_2))/2

h_3 = -A_3 + i L_3

末尾に、Risa/Asirでの確認用コードを載せてある。ただし、多項式係数でない微分作用素は扱いづらいので、付加的な変数$r,r'$を使って
p_x = \frac{\partial}{\partial x} + r' x \frac{\partial}{\partial r} - r'^3 x \frac{\partial}{\partial r'}
etc.
などとして、関係式r' = r^{-1} , r^2 = x^2+y^2+z^2によるmoduloを取ることで、計算している


長さをBohr半径で規格化しているので、1s軌道解は、規格化定数を無視すれば、単にexp(-r)である。最低ウェイト条件と特異ベクトルが消えることを確認するのは容易い。確認すべき条件は

Maxwell方程式の表現論
http://d.hatena.ne.jp/m-a-o/20150621#p1

で書いた(極小表現は、helicity0のmassless既約表現と同じ)。

e_1 \phi = e_3 \phi = 0
f_1 \phi = f_2 \phi = f_3 \phi = 0
h_1 \phi = (h_2-1)\phi = h_3 \phi = 0


ここまでが準備。それで両側イデアル$J$を計算したいし、多分、機械的に計算していくことは可能だけど、直接計算は面倒そうなので、Josephイデアルの生成元を調べて、それらは勿論極小表現の上では消える(はず)だけど、微分作用素として恒等的に消えるかどうかチェックするという手順を取ろうと思う(続く)


Josephイデアルの構造については、Garfinkleによる結果が知られている
A new construction of the Joseph ideal
https://dspace.mit.edu/handle/1721.1/15620#files-area


その他、本題とは関係ない補足

(1)Josephイデアルのassociated varietyは、極小冪零軌道の閉包になっていて、極小冪零軌道は、Kepler問題の古典的相空間とみなすことができる(散乱状態は無視している)。これには、Kepler多様体という名前がついているらしい。また、表現空間の中で、generalized coherent states全体を考えることができ、Kepler多様体と同型になると思う(要確認)

(2)Coulomb problemは、(一種の拘束条件付きの)4次元調和振動子へ変換できることが知られている(この座標変換にはKustaanheimo-Stiefel変換という名前がついているらしい。この変換は水素原子の経路積分でも使われたらしい(要確認))。数学的にみると、極小表現の4変数多項式環での実現(Segal-Shale-Weilによる?)と同じもの。この実現は

Maxwell方程式の表現論(2)Gupta-Bleuler量子化の表現論的側面
http://d.hatena.ne.jp/m-a-o/20151106#p2

にも書いてある。次数$n$の多項式が(n+1)次元で、量子数n+1の電子軌道と対応する。発見の順番とか、歴史的経緯とかは知らない(この実現自体は、sp(4,R)のmetaplectic表現を、su(2,2)に制限して得られ、metaplectic表現は、物理にinspireされて生まれたと見たことがある気がする)。Kustaanheimo-Stiefel変換はある種のmagicのように私には見えるけど、表現論的には、同じ表現を二通りの方法で実現して、その間のintertwinnerを作っているのだ、と理解できる。そのような理解を得るためには、so(4)対称性だけ見ていたのでは不十分である


(3)普遍展開環$U(so(4,2))$をJosephイデアルで割った代数$hs(4,2)$は、higher spin algebraという名前で、最近(というのは主に21世紀になってから)、物理の人が調べたりしているらしい

/**** common stuffs ****/
load("noro_pd.rr");
load("noro_matrix.rr");

def assert(V){
   if(!V){error(V);}
   return 1;
}


def appdiff_rat(P , F , V){
   N = length(V)/2;
   if(type(P)==9){  /* 分散多項式表現の時 */
      DP = dp_dtop(P, V);
   }else if(type(P)<=2){
      DP = P;
   }else{
      return;
   }
   Terms = p_terms(DP , V , 2);
   for(Ret = 0 , Terms = Terms; Terms!=[] ; Terms=cdr(Terms)){
      T = car(Terms);
      if(type(F)==9){
           Tmp = dp_dtop(F , V);
      }else{
           Tmp = F;
      }
      if(T==1){
         Ret += p_nf(DP , V , V ,0)*Tmp;
      }else{
         C = p_nf(sdiv(DP-p_nf(DP,[T],V,0) , T) , V , V , 0);  /* 単項式Tの係数 */
         for(I = 0 ; I < N ; I++){
            Deg = deg(T , V[N+I]);
            for(J = 0 ; J < Deg ; J++){
               Tmp = red(diff(Tmp , V[I]));
            }
         }
         for(I = 0 ; I < N ; I++){
            Deg = deg(T , V[I]);
            Tmp *= V[I]^Deg;
         }
         Ret += C*Tmp;
      }
   }
   return red(Ret);
}


def appdiff_complex(P , F , V){
    if(type(P)==9){
        DP = dp_dtop(P,V);
    }else{
        DP = P;
    }
    RP = real(DP);
    IP = imag(DP);
    if(type(F)<=2){
        RF = real(F);
        IF = imag(F);
    }else if(type(F)==3){ /*有理式*/
        DN_conj = conj(dn(F));
        if(DN_conj != dn(F)){
           TF = red(DN_conj*nm(F)/(DN_conj*dn(F)));
        }else{
           TF = F;
        }
        RF = red(real(nm(TF))/dn(TF));
        IF = red(imag(nm(TF))/dn(TF));
    }
    Ret = red( appdiff_rat(RP , RF , V) - appdiff_rat(IP,IF,V) );
    Ret += @i*red( appdiff_rat(IP,RF,V) + appdiff_rat(RP,IF,V) );
    return Ret;
}

/* 
微分作用Pを式Fに作用させる 
Vは変数のリスト(dp_dtopなどで使われるのと同様の形式)
*/
def appdiff(P,F,V){
    if(type(P)!=6){
        if(type(F)<=3){
           return appdiff_complex(P,F,V);
        }else if(type(F)==5){   /* vector */
           Ret = newvect(length(F));
           for(I=0;I<length(F);I++){
              Ret[I] = appdiff_complex(P, F[I] , V);
           }
           return Ret;
        }
    }else{ /*行列*/
        Sz = size(P);
        N = Sz[0];
        M = Sz[1];
        if(type(F)==5){
           Ret = newvect(N);
           for (I = 0 ; I < N ; I++){
              for(J = 0 ; J < M ; J++){
                Ret[I] += appdiff_complex(P[I][J] , F[J] , V);
              }
              Ret[I] = red(real(nm(Ret[I]))/dn(Ret[I])) + @i*red(imag(nm(Ret[I]))/dn(Ret[I]));
           }
           return Ret;
        }else if(type(F)==6){
            Sz2 = size(F);
            N2 = Sz2[0];
            M2 = Sz2[1];
            Ret = newmat(N,M2);
            for (I = 0 ; I < N ; I++){
                for(J = 0 ; J < M2 ; J++){
                    for(K = 0 ; K < M ; K++){
                       Ret[I][J] += appdiff_complex(P[I][K] , F[K][J] , V);
                    }
                }
            }
            return Ret;
        }
    }
}


def dp_weyl_matmul(A,B){
    Sz1 = size(A);
    Sz2 = size(B);
    L = Sz1[0];
    M = Sz1[1];
    N = Sz2[0];
    Ret = newmat(L,N);
    for(I = 0; I < L ; I++){
       for(J = 0 ; J < N ; J++){
          for(K = 0 ; K < M ; K++){
               Ret[I][J] += dp_weyl_mul(A[I][K] , B[K][J]);
          }
       }
    }
    return Ret;
}

/*===== end of common stuffs =====*/


/* stuffs for 3D hydrogen atom */
V=[x1,x2,x3,r,ri,d1,d2,d3,dr,dri];
X1=dp_ptod(x1,V);
X2=dp_ptod(x2,V);
X3=dp_ptod(x3,V);
R=dp_ptod(r,V);
RI=dp_ptod(ri,V);
D1=dp_ptod(d1,V);
D2=dp_ptod(d2,V);
D3=dp_ptod(d3,V);
DR = dp_ptod(dr,V);
DRI = dp_ptod(dri,V);
P1 = D1 + dp_weyl_mul(RI*X1 , DR) - dp_weyl_mul(RI*RI*RI*X1 , DRI);
P2 = D2 + dp_weyl_mul(RI*X2 , DR) - dp_weyl_mul(RI*RI*RI*X2 , DRI);
P3 = D3 + dp_weyl_mul(RI*X3 , DR) - dp_weyl_mul(RI*RI*RI*X3 , DRI);
I=gr([r*ri-1,r*r-x1*x1-x2*x2-x3*x3],V,0);
Delta = dp_weyl_mul(P1,P1)+dp_weyl_mul(P2,P2)+dp_weyl_mul(P3,P3); /* Laplacian */


/* angular momentum */
L1 = -dp_weyl_mul(X2,P3) + dp_weyl_mul(X3,P2);
L2 = -dp_weyl_mul(X3,P1) + dp_weyl_mul(X1,P3);
L3 = -dp_weyl_mul(X1,P2) + dp_weyl_mul(X2,P1);

/* check [L1,L2]=L3 , [L2,L3] = L1 , [L3,L1] = L2 */
assert(dp_weyl_mul(L1,L2)-dp_weyl_mul(L2,L1)==L3);
assert(dp_weyl_mul(L2,L3)-dp_weyl_mul(L3,L2)==L1);
assert(dp_weyl_mul(L3,L1)-dp_weyl_mul(L1,L3)==L2);

T1 = (1/2)*(-R*Delta-R);
T2 = X1*P1 + X2*P2 + X3*P3 + 1;
T3 = (1/2)*(-R*Delta+R);
/* check [T1,T2]=T3 , [T2,T3]=-T1 , [T3,T1]=T2 */
/* T1,T2,T3 generates so(2,1) */
assert(p_nf(dp_dtop(dp_weyl_mul(T1,T2)-dp_weyl_mul(T2,T1)-T3,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T2,T3)-dp_weyl_mul(T3,T2)+T1,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T3,T1)-dp_weyl_mul(T1,T3)-T2,V),I,V,0)==0);



/* scaled Runge-Lenz vector */
A1 = -(1/2)*X1*Delta + dp_weyl_mul(P1,X1*P1+X2*P2+X3*P3) - X1/2;
A2 = -(1/2)*X2*Delta + dp_weyl_mul(P2,X1*P1+X2*P2+X3*P3) - X2/2;
A3 = -(1/2)*X3*Delta + dp_weyl_mul(P3,X1*P1+X2*P2+X3*P3) - X3/2;

/* dual Runge-Lenz vector */
B1 = -(1/2)*X1*Delta + dp_weyl_mul(P1,X1*P1+X2*P2+X3*P3) + X1/2;
B2 = -(1/2)*X2*Delta + dp_weyl_mul(P2,X1*P1+X2*P2+X3*P3) + X2/2;
B3 = -(1/2)*X3*Delta + dp_weyl_mul(P3,X1*P1+X2*P2+X3*P3) + X3/2;
   

assert(dp_weyl_mul(A1,A2) - dp_weyl_mul(A2,A1) == -L3);
assert(dp_weyl_mul(A2,A3) - dp_weyl_mul(A3,A2) == -L1);
assert(dp_weyl_mul(A3,A1) - dp_weyl_mul(A1,A3) == -L2);
assert(dp_weyl_mul(A1,L2) - dp_weyl_mul(L2,A1)==A3);
assert(dp_weyl_mul(@i*A1+L1,@i*A2+L2)-dp_weyl_mul(@i*A2+L2,@i*A1+L1)==2*(@i*A3+L3));


assert(dp_weyl_mul(B1,B2)-dp_weyl_mul(B2,B1)==L3);
assert(dp_weyl_mul(B2,B3)-dp_weyl_mul(B3,B2)==L1);
assert(dp_weyl_mul(B3,B1)-dp_weyl_mul(B1,B3)==L2);
assert(dp_weyl_mul(B1,L2) - dp_weyl_mul(L2,B1)==B3);
assert(dp_weyl_mul(B2,L3) - dp_weyl_mul(L3,B2)==B1);
assert(dp_weyl_mul(B3,L1) - dp_weyl_mul(L1,B3)==B2);
assert(dp_weyl_mul(B1+L1,B2+L2)-dp_weyl_mul(B2+L2,B1+L1)==2*(B3+L3));


assert(dp_weyl_mul(A1,B1)-dp_weyl_mul(B1,A1)==T2);
assert(dp_weyl_mul(A2,B2)-dp_weyl_mul(B2,A2)==T2);
assert(dp_weyl_mul(A3,B3)-dp_weyl_mul(B3,A3)==T2);
assert(dp_weyl_mul(T2,A1)-dp_weyl_mul(A1,T2)+B1==0);
assert(dp_weyl_mul(T2,A2)-dp_weyl_mul(A2,T2)+B2==0);
assert(dp_weyl_mul(T2,A3)-dp_weyl_mul(A3,T2)+B3==0);
assert(dp_weyl_mul(T2,B3)-dp_weyl_mul(B3,T2)+A3==0);


G1 = R*P1;
G2 = R*P2;
G3 = R*P3;
assert(p_nf(dp_dtop(dp_weyl_mul(G1,T1)-dp_weyl_mul(T1,G1)-A1,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(G2,T1)-dp_weyl_mul(T1,G2)-A2,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(G3,T1)-dp_weyl_mul(T1,G3)-A3,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(G1,T3)-dp_weyl_mul(T3,G1)-B1,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T1,A2)-dp_weyl_mul(A2,T1)-G2,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T1,A3)-dp_weyl_mul(A3,T1)-G3,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T1,B1)-dp_weyl_mul(B1,T1),V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T1,B2)-dp_weyl_mul(B2,T1),V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T1,B3)-dp_weyl_mul(B3,T1),V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T3,A1)-dp_weyl_mul(A1,T3),V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T3,A2)-dp_weyl_mul(A2,T3),V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T3,B1)-dp_weyl_mul(B1,T3)+G1,V),I,V,0)==0)
assert(p_nf(dp_dtop(dp_weyl_mul(T3,B2)-dp_weyl_mul(B2,T3)+G2,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T3,B3)-dp_weyl_mul(B3,T3)+G3,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(T3,G3)-dp_weyl_mul(G3,T3)+B3,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(A3,G3)-dp_weyl_mul(G3,A3)+T1,V),I,V,0)==0);


assert(p_nf(dp_dtop(dp_weyl_mul(A3,T3)-dp_weyl_mul(T3,A3),V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(L3,T3)-dp_weyl_mul(T3,L3),V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(L3,A3)-dp_weyl_mul(A3,L3),V),I,V,0)==0);



/*
$T_1 (e^{-r}) = (1-r)e^{-r}$
$T_2 (e^{-r}) = (1-r)e^{-r}$
$T_3 (e^{-r}) = e^{-r}$

$A_1 (e^{-r}) = 0$
$A_2 (e^{-r}) = 0$
$A_3 (e^{-r}) = 0$

$L_1 (e^{-r}) = 0$
$L_2 (e^{-r}) = 0$
$L_3 (e^{-r}) = 0$

$\phi$: lowest weight vector for minrep of so(4,2)

$f_1(\phi) = f_2(\phi) = f_3(\phi) = 0$
$h_1 \phi = (h_2-1)\phi = h_3 \phi = 0$
$e_1 \phi = e_3 \phi = 0$

$h_4 = h_1+h_2 , h_5 = h_2+h_3 , h_6 = h_1+h_2+h_3$
*/

/* Chevalley generators */
E1 = (A1+L2+@i*L1-@i*A2)/2;
F1 = (A1-L2 +@i*L1+@i*A2)/2;
H1 = -(A3+@i*L3);

E2 = @i*(T1+T2+B3-G3)/2;
F2 = @i*(T1-T2+B3+G3)/2;
H2 = A3+T3;

E3 = -(@i*(@i*A1+L1)-(@i*A2+L2))/2;
F3 = (A1-L2-@i*L1-@i*A2)/2;
H3 = -A3+@i*L3;

assert(dp_weyl_mul(E1,F1)-dp_weyl_mul(F1,E1)==H1);
assert(dp_weyl_mul(H1,E1)-dp_weyl_mul(E1,H1)==2*E1);
assert(dp_weyl_mul(H1,F1)-dp_weyl_mul(F1,H1)==-2*F1);

assert(p_nf(@i*dp_dtop(dp_weyl_mul(H2,E2)-dp_weyl_mul(E2,H2)-2*E2,V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(E2,F2)-dp_weyl_mul(F2,E2)-H2,V),I,V,0)==0);
assert(p_nf(@i*dp_dtop(dp_weyl_mul(H2,F2)-dp_weyl_mul(F2,H2)+2*F2,V),I,V,0)==0);

assert(dp_weyl_mul(E3,F3)-dp_weyl_mul(F3,E3)==H3);
assert(dp_weyl_mul(H3,E3)-dp_weyl_mul(E3,H3)==2*E3);
assert(dp_weyl_mul(H3,F3)-dp_weyl_mul(F3,H3)==-2*F3);

assert(dp_weyl_mul(H1,E3)-dp_weyl_mul(E3,H1)==0);
assert(dp_weyl_mul(H3,E1)-dp_weyl_mul(E1,H3)==0);
assert(dp_weyl_mul(E1,F3)-dp_weyl_mul(F3,E1)==0);
assert(dp_weyl_mul(E3,F1)-dp_weyl_mul(F1,E3)==0);

/* [H2 , E1] = -E1 */
assert(p_nf(dp_dtop(dp_weyl_mul(A3+T3,A1+L2)-dp_weyl_mul(A1+L2,A3+T3)+(A1+L2),V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(A3+T3,L1-A2)-dp_weyl_mul(L1-A2,A3+T3)+(L1-A2),V),I,V,0)==0);

/* [H2 , F1] = F1 */
assert(p_nf(dp_dtop(dp_weyl_mul(A3+T3,L1+A2)-dp_weyl_mul(L1+A2,A3+T3)-(L1+A2),V),I,V,0)==0);
assert(p_nf(dp_dtop(dp_weyl_mul(A3+T3,A1-L2)-dp_weyl_mul(A1-L2,A3+T3)-(A1-L2),V),I,V,0)==0);

/* [H1,E2] = -E2 */
assert(p_nf(dp_dtop(@i*(dp_weyl_mul(H1,E2)-dp_weyl_mul(E2,H1)+E2),V),I,V,0)==0);

/* [H1,F2] = F2 */
assert(p_nf(dp_dtop(@i*(dp_weyl_mul(H1,F2)-dp_weyl_mul(F2,H1)-F2),V),I,V,0)==0);



/* some vanishing conditions */ 
assert(dp_weyl_mul(L1,A1)+dp_weyl_mul(L2,A2)+dp_weyl_mul(L3,A3)==0);

/* A1*A1+A2*A2+A3*A3-L1*L1-L2*L2-L3*L3==T3*T3-1 */
assert(p_nf(dp_dtop(dp_weyl_mul(A1,A1)+dp_weyl_mul(A2,A2)+dp_weyl_mul(A3,A3)-dp_weyl_mul(L1,L1)-dp_weyl_mul(L2,L2)-dp_weyl_mul(L3,L3)-dp_weyl_mul(T3,T3)+1,V),I,V,0)==0);

/* B1*B1+B2*B2+B3*B3+L1*L1+L2*L2+L3*L3==T1*T1+1 */
assert(p_nf(dp_dtop(dp_weyl_mul(B1,B1)+dp_weyl_mul(B2,B2)+dp_weyl_mul(B3,B3)+dp_weyl_mul(L1,L1)+dp_weyl_mul(L2,L2)+dp_weyl_mul(L3,L3)-dp_weyl_mul(T1,T1)-1,V),I,V,0)==0);