(*^ ::[ Information = "This is a Mathematica Notebook file. It contains ASCII text, and can be transferred by email, ftp, or other text-file transfer utility. It should be read or edited using a copy of Mathematica or MathReader. If you received this as email, use your mail application or copy/paste to save everything from the line containing (*^ down to the line containing ^*) into a plain text file. On some systems you may have to give the file a name ending with ".ma" to allow Mathematica to recognize it as a Notebook. The line below identifies what version of Mathematica created this file, but it can be opened using any other version as well."; FrontEndVersion = "Macintosh Mathematica Notebook Front End Version 2.2"; MacintoshStandardFontEncoding; fontset = title, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L3, e8, 24, "New York"; fontset = subtitle, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L2, e6, 18, "New York"; fontset = subsubtitle, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L2, e6, 14, "New York"; fontset = section, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, grayBox, M22, bold, L2, a20, 14, "New York"; fontset = subsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, blackBox, M19, bold, L2, a15, 12, "New York"; fontset = subsubsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, whiteBox, M18, bold, L2, a12, 10, "New York"; fontset = text, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L2, 12, "New York"; fontset = smalltext, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L2, 10, "New York"; fontset = input, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeInput, M42, N23, bold, L2, 12, "Courier"; fontset = output, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L2, 12, "Courier"; fontset = message, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, R65535, L2, 12, "Courier"; fontset = print, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L2, 12, "Courier"; fontset = info, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L2, 12, "Courier"; fontset = postscript, PostScript, formatAsPostScript, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeGraphics, M7, l34, w282, h287, L2, 12, "Courier"; fontset = name, inactive, nowordwrap, nohscroll, noKeepOnOnePage, preserveAspect, M7, italic, B65535, L2, 10, "Geneva"; fontset = header, inactive, noKeepOnOnePage, preserveAspect, M7, L2, 10, "Times"; fontset = leftheader, inactive, L2, 10, "Times"; fontset = footer, inactive, noKeepOnOnePage, preserveAspect, center, M7, L2, 12, "Times"; fontset = leftfooter, inactive, center, L2, 12, "Times"; fontset = help, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L2, 10, "Geneva"; fontset = clipboard, inactive, noKeepOnOnePage, preserveAspect, M7, L2, 12, "New York"; fontset = completions, inactive, nowordwrap, noKeepOnOnePage, preserveAspect, M7, L2, 12, "New York"; fontset = special1, inactive, nowordwrap, noKeepOnOnePage, preserveAspect, M7, L2, 12, "New York"; fontset = special2, inactive, nowordwrap, noKeepOnOnePage, preserveAspect, center, M7, L2, 12, "New York"; fontset = special3, inactive, nowordwrap, noKeepOnOnePage, preserveAspect, right, M7, L2, 12, "New York"; fontset = special4, inactive, nowordwrap, noKeepOnOnePage, preserveAspect, M7, L2, 12, "New York"; fontset = special5, inactive, nowordwrap, noKeepOnOnePage, preserveAspect, M7, L2, 12, "New York"; paletteColors = 128; currentKernel; ] :[font = input; initialization; preserveAspect] *) mx = MatrixForm; (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] wedge[x] - Differential form x where wedge indicates wedge product ;[s] 10:0,3;4,1;12,2;14,3;35,1;36,4;37,3;44,1;49,4;50,3;75,-1; 5:0,14,10,Courier,1,12,0,0,0;3,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;4,16,10,Palatino,2,12,0,0,0;2,16,10,Palatino,3,12,0,0,0; :[font = input; initialization; dontPreserveAspect] *) ClearAll[wedge] (* :[font = input; initialization; dontPreserveAspect] *) wedge[x__] := Block[{qq,zz}, qq = Signature[{x}] Sort[zz[x]]; qq /. zz -> wedge ] /; !OrderedQ[{x}]; wedge[x__] := 0 /; Signature[{x}] == 0; (* :[font = input; initialization; dontPreserveAspect] *) wedge[x___,y_ + z_, u___] := wedge[x,y,u] + wedge[x,z,u]; wedge[x___,f_ (y_ + z_), u___] := wedge[x,f y,u] + wedge[x,f z,u]; wedge[x___,f_ wedge[y__], u___] := ExpandAll[f wedge[x,y,u]]; wedge[x___,n_Integer y_, u___] := n wedge[x,y,u]; wedge[x___,f_ extd[y_], u___] := ExpandAll[f wedge[x,extd[y],u]]; wedge[x___,0,u___] := 0; wedge[x___,y_ / f_, u___] := wedge[x,y,u] / f; (* :[font = input; initialization; dontPreserveAspect] *) Format[wedge[x_,y__]] := Infix[wedge[x,y]," ^ "]; Format[wedge[x_]] := x (* :[font = input; initialization; dontPreserveAspect; endGroup] *) Attributes[wedge] := {Flat, Listable, Constant}; (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] d[x] - Exterior derivative of function or differential form x ;[s] 5:0,3;5,1;9,2;11,3;67,1;69,-1; 4:0,14,10,Courier,1,12,0,0,0;2,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;2,16,10,Palatino,2,12,0,0,0; :[font = input; initialization; dontPreserveAspect] *) ClearAll[d,extd] (* :[font = input; initialization; dontPreserveAspect] *) extd[y_ + z_] := extd[y] + extd[z]; extd[n_Integer] := 0; extd[r_Rational] := 0; extd[y_ ^ n_] := n y^(n-1) extd[y]; extd[extd[x_]] := 0; extd[wedge[x_]] := extd /@ x; extd[wedge[x_,y__]] := wedge[extd@@x,y] - wedge[x,extd[wedge[y]]]; extd[x_ wedge[y__]] := wedge[extd[x],y] + x extd[wedge[y]]; extd[y_ z_Plus] := extd[ExpandAll[y z]]; extd[y_ z_] := y extd[z] + z extd[y]; (* :[font = input; initialization; dontPreserveAspect] *) Format[extd[x_]] := Prefix[extd[x],"d"] (* :[font = input; initialization; dontPreserveAspect] *) Attributes[extd] := {Listable}; (* :[font = input; initialization; dontPreserveAspect] *) d[f_] := wedge[extd[f]]; (* :[font = input; initialization; dontPreserveAspect; endGroup] *) Attributes[d] := {Listable}; (* :[font = input; initialization; dontPreserveAspect] *) dx = d[x]; dy = d[y]; dz = d[z]; du = d[u]; dp = d[p]; dq = d[q]; dr = d[r]; dv = d[v]; dt = d[t]; ds = d[s]; dw = d[w]; (* :[font = input; initialization; dontPreserveAspect] *) mx = MatrixForm (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] derivformat[u] - Format derivatives of u as subscripts ;[s] 8:0,3;5,1;19,2;21,3;46,1;47,4;48,3;62,0;63,-1; 5:1,14,10,Courier,1,12,0,0,0;2,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;3,16,10,Palatino,2,12,0,0,0;1,16,10,Palatino,3,12,0,0,0; :[font = input; initialization; wordwrap; dontPreserveAspect; startGroup] *) dlist[x_]:={x}; (* :[font = input; initialization; wordwrap; dontPreserveAspect] *) dlist[{x_,n_}]:=Table[x,{n}]; (* :[font = input; initialization; wordwrap; dontPreserveAspect; endGroup] *) elist[l_]:=Flatten[Map[dlist,l]]; (* :[font = input; initialization; wordwrap; dontPreserveAspect; endGroup] *) derivformat[u_]:= (Unprotect[Dt]; Format[Dt[u,l__]]:=SequenceForm[u, Subscript[Apply[SequenceForm,elist[{l}]]]] ; Protect[Dt];); (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] depends[f] - Format derivatives and define differential of f ;[s] 5:0,3;5,1;15,2;17,3;66,1;68,-1; 4:0,14,10,Courier,1,12,0,0,0;2,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;2,16,10,Palatino,2,12,0,0,0; :[font = input; initialization; dontPreserveAspect; endGroup] *) depends[f_] := (derivformat[f]; extd[f] := (Dt[f,#]& /@ fvars) . extdfvars; extd[Dt[f,x__]] := (Dt[Dt[f,x],#]& /@ fvars) . extdfvars) (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] gvarQ[x] - Gives True if x has any group variables in it ;[s] 10:0,3;5,1;13,2;15,3;24,1;28,4;29,3;34,1;35,4;36,3;69,-1; 5:0,14,10,Courier,1,12,0,0,0;3,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;4,16,10,Palatino,2,12,0,0,0;2,16,10,Palatino,3,12,0,0,0; :[font = input; initialization; dontPreserveAspect; endGroup] *) gvarQ[x_] := Or @@ (Not[FreeQ[x,#]]& /@ gvars) (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] Cartanformats - Formats variables and forms ;[s] 4:0,3;5,1;18,2;20,3;52,-1; 4:0,14,10,Courier,1,12,0,0,0;1,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;2,16,10,Palatino,2,12,0,0,0; :[font = input; initialization; dontPreserveAspect] *) Cartanformats := (ClearAll[atorcf,thetaform,cabsorb]; Format[thetaform[i_]] := SequenceForm["t",Subscript[i]]; Format[atorcf[i_,j_,k_]] := SequenceForm["x",ColumnForm[ {k," ",SequenceForm[i,j]},Left,Center]]; Format[cabsorb[i__]] := SequenceForm["z",Subscript[i]];) (* :[font = input; initialization; dontPreserveAspect; endGroup] *) Cartanformats (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] pmakevars[a,4] - makes list of variables {a1,a2,a3,a4} ;[s] 5:0,3;5,1;20,2;22,3;51,1;65,-1; 4:0,14,10,Courier,1,12,0,0,0;2,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;2,16,10,Palatino,2,12,0,0,0; :[font = input; initialization; preserveAspect; endGroup] *) makevars[u_,l_List] := (ToExpression[StringJoin @@ ToString /@ {u,#}])& /@ l; makevars[u_,n_Integer] := makevars[u,Range[n]]; (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] pdform - Formats partial derivatives ;[s] 4:0,3;5,1;11,2;13,3;45,-1; 4:0,14,10,Courier,1,12,0,0,0;1,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;2,16,10,Palatino,2,12,0,0,0; :[font = input; initialization; dontPreserveAspect; endGroup] *) Format[pdform[F_,x_]] := OutputForm[ SequenceForm["¶",F] / SequenceForm["¶",x]] (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] multform - Formats multiplications without doing them ;[s] 4:0,3;5,1;13,2;15,3;62,-1; 4:0,14,10,Courier,1,12,0,0,0;1,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;2,16,10,Palatino,2,12,0,0,0; :[font = input; initialization; dontPreserveAspect; endGroup] *) multform[0,y_] := 0; multform[-x_,y_] := - multform[x,y]; multform[n_Integer,y_] := n y; multform[x_,y_] := SequenceForm[x," ",y] (* :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] autogvars - Automatically read off group variables in group matrix ;[s] 4:0,3;5,1;14,2;16,3;75,-1; 4:0,14,10,Courier,1,12,0,0,0;1,14,10,Courier,0,12,0,0,0;1,16,10,Palatino,1,12,0,0,0;2,16,10,Palatino,2,12,0,0,0; :[font = input; initialization; preserveAspect; endGroup] *) autogvars := (gvars = Select[Flatten[gmat], Not[NumberQ[#]]&]) (* :[font = input; initialization; preserveAspect] *) Unprotect[Coefficient]; Attributes[Coefficient] = {Listable}; Protect[Coefficient]; (* :[font = input; initialization; dontPreserveAspect] *) Cartaninitialize := ( nvars = Length[vars]; dvars = d[vars]; nfvars = Length[fvars]; extdfvars = extd[fvars]; depends /@ fns; omega = ExpandAll[omega]; amat = Coefficient[#,dvars]& /@ omega; bmat = Inverse[amat]; hmat = Inverse[gmat]; cmat = gmat . amat; dmat = bmat . hmat; dgvars = d[gvars]; ngvars = Length[gvars]; dgzero = Thread[dgvars -> 0]; theta = Table[thetaform[i],{i,nvars}]; theta2 = Flatten[Table[wedge[thetaform[i],thetaform[j]], {i,nvars-1},{j,i+1,nvars}]]; theta2zero = Thread[theta2 -> 0]; thetarep = Join[Thread[theta -> gmat . wedge[omega]], Thread[wedge[theta] -> gmat . wedge[omega]]]; xtorcoef = Table[Flatten[Table[atorcf[i,j,k], {i,nvars-1},{j,i+1,nvars}]],{k,nvars}]; xtorcf = Flatten[xtorcoef]; xtorsion = xtorcoef . theta2; zmat = Table[cabsorb[i,j],{i,ngvars},{j,nvars}]; zvars = Flatten[zmat]; nzvars = Length[zvars]; zform = zmat . wedge[theta]; dgzrep = Thread[dgvars -> zform];) (* :[font = input; initialization; dontPreserveAspect] *) Structureeq := ( dvarrep = Thread[dvars -> dmat . wedge[theta]]; dtheta = d[theta] /. thetarep; structure = ExpandAll[dtheta //. dvarrep]; maurer = structure /. theta2zero; torsion = ExpandAll[structure /. dgzero];) (* :[font = input; initialization; dontPreserveAspect] *) Torsion := ( torcoef = ExpandAll[Coefficient[#,theta2]& /@ torsion]; torcf = Together[Flatten[torcoef]]; xtorrep = Thread[xtorcf -> torcf]; xtorconstrep = Select[xtorrep,NumberQ[#[[2]]]&]; xtorvarrep = Select[xtorrep,Not[NumberQ[#[[2]]]]&]; ytorsion = xtorsion /. xtorconstrep; ytorcf = xtorcf /. xtorconstrep;) (* :[font = input; initialization; dontPreserveAspect] *) Absorb := ( If[ Plus @@ maurer === 0, xinv = ytorcf, zabsorb = ExpandAll[maurer /. dgzrep]; ztorcf = Flatten[ Coefficient[#,theta2]& /@ zabsorb]; zrep = {}; xinv = {}; zsolve = {}; zeq = ztorcf + ytorcf; nzeq = Length[zeq]; Do[ za = ExpandAll[First[zeq]]; zeq = Rest[zeq]; zin = Cases[Level[za,{-2}],cabsorb[__]]; If[Length[zin] > 0, zv = zin[[1]]; zsolve = Append[zsolve,zv]; zr = Solve[za==0,zv]; zr = zr[[1,1]]; If[prflag,Print[zr]]; zrep = Append[zrep/.zr,zr]; zeq = zeq /. zr, in = za; If[prflag,Print[in]]; xinv = Append[xinv,in]],{nzeq}] ]; zfree = Complement[zvars,zsolve]; zsoln = Thread[zvars -> (zvars /. zrep)]; allinv = {#,Together[ExpandAll[# /. xtorrep]]}& /@ xinv; allinv = Select[allinv, Not[NumberQ[#[[2]]]]&]; allginv = Select[allinv, gvarQ[#[[2]]]&]; If[allginv == {}, ginv = {}; xginv = {}, aiv = Transpose[allginv]; ginv = aiv[[2]]; xginv = aiv[[1]]]; nginv = Length[ginv]; allainv = Select[allinv, Not[gvarQ[#[[2]]]]&]; If[allainv == {}, ainv = {}; xainv = {}, aiv = Transpose[allainv]; ainv = aiv[[2]]; xainv = aiv[[1]]]; nainv = Length[ainv];) (* :[font = input; initialization; dontPreserveAspect] *) Prinvariants := (prtitle["Current Symbolic Torsion"]; Do[ prline; Print[d[thetaform[i]]," = ",ytorsion[[i]]]; ,{i,nvars}]; prline; If[nainv + nginv == 0,prtitle["No Non-constant Invariants"]]; If[nainv > 0,prten["Absolute Invariants",xainv,ainv]]; If[nginv > 0,prten["Group Dependent Invariants",xginv,ginv]]; ) (* :[font = input; initialization; dontPreserveAspect] *) Normalize[a_,g_] := (grep = Solve[ginv == {a},{g}][[1]]; prta["Group Normalizations",grep]); Normalize[{a__},{g__}] := (grep = Solve[ginv == {a},{g}][[1]]; prta["Group Normalizations",grep]); (* :[font = input; initialization; dontPreserveAspect] *) Restructure := ( gone = #[[1]] /@ grep; gvars = Complement[gvars,gone]; ngvars = Length[gvars]; dvarrep = dvarrep /. grep; newstructure = ExpandAll[ (maurer /. grep) //. dvarrep]; If[ngvars > 0, maurer = newstructure /. theta2zero]; torsion = (newstructure /. dgzero) + (torsion /. grep);) (* :[font = input; initialization; dontPreserveAspect] *) Cartan1 := (Structureeq; Torsion; Absorb; Prinvariants;) (* :[font = input; initialization; dontPreserveAspect] *) Cartan2 := (Restructure; Torsion; Absorb; Prinvariants;) (* :[font = input; initialization; dontPreserveAspect] *) Cartan0 := (Cartaninitialize; Cartan1;) (* :[font = input; initialization; dontPreserveAspect] *) Savecartaninit := Save[filename, vars,fns,nvars,dvars, fvars,nfvars,extdfvars,omega,gmat, d,wedge,atorcf,thetaform,cabsorb, amat,bmat,hmat,cmat,dmat, gvars,dgvars,ngvars,dgzero, theta,theta2,theta2zero,thetarep, xtorcoef,xtorcf,xtorsion, zmat,zvars,zform]; (* :[font = input; initialization; dontPreserveAspect] *) Savecartan := Save[filename, torsion,maurer,ytorsion, xtorrep,xtorconstrep,grep,dvarrep, allinv,allginv,ginv,xginv,nginv,allainv,ainv,xainv,nainv]; (* :[font = input; inactive; dontPreserveAspect] ************************************************ :[font = input; initialization; dontPreserveAspect] *) Coframe := (Computetorsion; Prtorsion;) (* :[font = input; initialization; dontPreserveAspect] *) Computetorsion := ( nvars = Length[vars]; dvars = d[vars]; nfvars = Length[fvars]; extdfvars = extd[fvars]; depends /@ fns; omega = ExpandAll[omega]; amat = Coefficient[#,dvars]& /@ omega; bmat = Together[ExpandAll[Inverse[amat]]]; theta = Table[thetaform[i],{i,nvars}]; theta2 = Flatten[Table[wedge[thetaform[i],thetaform[j]], {i,nvars-1},{j,i+1,nvars}]]; theta2zero = Thread[theta2 -> 0]; thetarep = Join[Thread[theta -> wedge[omega]], Thread[wedge[theta] -> wedge[omega]]]; xtorcoef = Table[Flatten[Table[atorcf[i,j,k], {i,nvars-1},{j,i+1,nvars}]],{k,nvars}]; xtorcf = Flatten[xtorcoef]; xtorsion = xtorcoef . theta2; dvarrep = Thread[dvars -> bmat . wedge[theta]]; dtheta = d[theta] /. thetarep; torsion = ExpandAll[dtheta //. dvarrep]; torcoef = ExpandAll[Coefficient[#,theta2]& /@ torsion]; torcf = Together[Flatten[torcoef]]; xtorrep = Thread[xtorcf -> torcf]; xtorconstrep = Select[xtorrep,NumberQ[#[[2]]]&]; xtorvarrep = Select[xtorrep,Not[NumberQ[#[[2]]]]&]; xainv = #[[1]]& /@ xtorvarrep; ainv = #[[2]]& /@ xtorvarrep; ytorsion = xtorsion /. xtorconstrep; ytorcf = xtorcf /. xtorconstrep; nainv = Length[ainv] ; ) (* :[font = input; initialization; dontPreserveAspect] *) gsoln[r_,v_] := (geqs = Thread[ginv == r]; geqs = Cases[geqs,___==_Integer]; grep = Solve[geqs,v]; If[Length[grep] >0, grep = grep[[1]]; prta["Group normalizations",grep], prtitle["No solutions found"]];) (* :[font = input; initialization; dontPreserveAspect] *) Prtorsion := (Print[]; Print["******* Current Symbolic Torsion ********"]; Do[ prline; Print[d[thetaform[i]]," = ",ytorsion[[i]]]; ,{i,nvars}]; If[nainv > 0,prten["Absolute Invariants",xainv,ainv]]; pds = pdform[F,#]& /@ vars; cvs = pdform[F,#]& /@ theta; cvderivs = Inner[multform,bmat,pds]; prte["Covariant Derivatives",cvs,cvderivs]; ) (* :[font = input; initialization; preserveAspect] *) prline := Print[" "]; (* :[font = input; initialization; preserveAspect] *) prarray[a_] := (j = Length[a]; Do[Print[a[[i]]]; prline, {i,j}]; prline;) (* :[font = input; initialization; preserveAspect] *) preqns[a_,b_] := (j = Length[a]; Do[Print[a[[i]]," = ",b[[i]]]; prline, {i,j}]; prline;) (* :[font = input; initialization; preserveAspect] *) preqnn[a_,b_] := (j = Length[a]; Do[Print["# ",i," : ",a[[i]]," = ",b[[i]]]; prline, {i,j}]; prline;) (* :[font = input; initialization; preserveAspect] *) prtitle[t_] := (prline; Print["****** ", t, " ******"]; prline;) (* :[font = input; initialization; preserveAspect] *) prta[t_,a_] := (prtitle[t]; prarray[a];) (* :[font = input; initialization; preserveAspect] *) prte[t_,a_,b_] := (prtitle[t]; preqns[a,b];) (* :[font = input; initialization; preserveAspect] *) prten[t_,a_,b_] := (prtitle[t]; preqnn[a,b];) (* :[font = input; initialization; preserveAspect] *) Prtor := prta["Explicit Torsion",xtorrep] (* :[font = input; initialization; preserveAspect] *) Prz := (prtitle["Free Variables"];Print[zfree]; prline; prta["Solution of Absorption Equations",zsoln]; zexsol = Together[ExpandAll[zsoln /. xtorrep]]; prta["Explicit Solution of Absorption Equations", zexsol]; ) (* :[font = input; inactive; dontPreserveAspect] ************************************************************** :[font = input; inactive; wordwrap; dontPreserveAspect; startGroup] ********* Initialization for Cartan ************ ;[s] 4:0,2;18,1;27,2;56,1;69,-1; 3:0,14,10,Courier,1,12,0,0,0;2,14,10,Courier,0,12,0,0,0;2,16,10,Palatino,2,12,0,0,0; :[font = input; dontPreserveAspect; endGroup] vars = {x, u, p}; fns = {L}; fvars = vars; omega = { du - p dx, L dx, dp}; gmat = {{a,0,0},{b,1,0},{c,e,f}}; gvars = {a,b,c,e,f}; prflag = False; :[font = input; dontPreserveAspect] Cartan1 :[font = input; output; dontPreserveAspect] Normalize[{1,0},{a,b}] ;[o] Normalize[{1, 0}, {a, b}] :[font = input; dontPreserveAspect] filename = "lagx0"; Savecartaninit :[font = input; dontPreserveAspect] filename = "lagx1"; Savecartan :[font = input; dontPreserveAspect] Cartan2 :[font = input; dontPreserveAspect] filename = "lagx2"; Savecartan ^*)