(***********************************************************************
Mathematica-Compatible Notebook
This notebook can be used on any computer system with Mathematica 3.0,
MathReader 3.0, or any compatible application. The data for the notebook
starts with the line of stars above.
To get the notebook into a Mathematica-compatible application, do one of
the following:
* Save the data starting with the line of stars above into a file
with a name ending in .nb, then open the file inside the application;
* Copy the data starting with the line of stars above to the
clipboard, then use the Paste menu command inside the application.
Data for notebooks contains only printable 7-bit ASCII and can be
sent directly in email or through ftp in text mode. Newlines can be
CR, LF or CRLF (Unix, Macintosh or MS-DOS style).
NOTE: If you modify the data for this notebook not in a Mathematica-
compatible application, you must delete the line below containing the
word CacheID, otherwise Mathematica-compatible applications may try to
use invalid cache data.
For more information on notebooks and Mathematica-compatible
applications, contact Wolfram Research:
web: http://www.wolfram.com
email: info@wolfram.com
phone: +1-217-398-0700 (U.S.)
Notebook reader applications are available free of charge from
Wolfram Research.
***********************************************************************)
(*CacheID: 232*)
(*NotebookFileLineBreakTest
NotebookFileLineBreakTest*)
(*NotebookOptionsPosition[ 16220, 575]*)
(*NotebookOutlinePosition[ 17002, 602]*)
(* CellTagsIndexPosition[ 16958, 598]*)
(*WindowFrame->Normal*)
Notebook[{
Cell["Georg Lang/ TU-Berlin/April 2002", "SmallText"],
Cell[CellGroupData[{
Cell["Using the \"ccr_car_algebra\" Package", "Title"],
Cell["\<\
Copyright notice: This is work of Georg Lang, Berlin, Germay. \
Non-commercial use of this notebook is permitted.\
\>", "SmallText"],
Cell[CellGroupData[{
Cell["Introduction", "Section"],
Cell[CellGroupData[{
Cell["What is it good for?", "Subsection"],
Cell["\<\
The \"ccr_car_algebra\" package has been written for physicists \
and/or mathematicians, who would like to save themselves the sometimes \
tedious work to verify algebraic identities or calculate expectation values \
in many particle physics. In particular I had the CCR- and CAR-Algebras of \
respectively Bose and Fermi systems in mind, but the package can deal with \
polynomials of any algebra given by its commutation or anti-commutation \
relations. It includes some commands particular to the so called Wick-Theorem \
(hierarchy of functionals, truncated functionals), a somewhat more \
specialised topic.\
\>", "Text"]
}, Open ]],
Cell[CellGroupData[{
Cell["What is the idea behind it?", "Subsection"],
Cell[TextData[{
"The \"ccr_car_algebra\" package is designed to work with algebras, which \
are abstract in the sense that their elements are not represented by matrices \
or functions, but by mere symbols. The algebraic structure is encoded in \
either commutation or anti-commutation relations. This situation arises \
naturally in many particle physics, where the so called CCR-Algebra is given \
in terms of the \"canonic commutation relations\" and the CAR-Algebra is \
given in terms of the \"canonic anti-commutation relations\". According to ",
StyleBox["Mathematica-",
FontSlant->"Italic"],
"Notation, the multiplication of two elements \"a\" and \"b\" of an \
abstract algebra is repesented by \"NonCommutativeMultiply[a,b]\", i.e. \
\"a**b\". This package also provides some commands, which are related to the \
so called hierarchy of functionals, which do play an important role in \
quantum field theory (see example 2 below). In particular the command \
\"SetOfPartitions\" allows to calculate the right hand side of the equality \
commonly known as Wick-Theorem in an easy way. This second topic is of course \
more specialized than the first, but both are closely related. \nAlthough I \
have written the package with the CCR and CAR-Algebras in mind, this package \
can in principle deal with any algebra determined by commutation or \
anti-commutation relations. It is written is such a way, as to presuppose as \
little notation as possible on the user's side. It may therefore be \
convenient to introduce your own shorthand notation, when working with this \
package."
}], "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(<< ccr_car_algebra.m\)], "Input"],
Cell[BoxData[
\("Version last udated 5.4.02 ... Georg Lang."\)], "Print"]
}, Open ]]
}, Open ]]
}, Open ]],
Cell[CellGroupData[{
Cell["Basic features", "Section"],
Cell["\<\
Possibly most important is the capability to distinguish between \
scalars (seen as elements commuting with all other elements) and general \
elements of the algebra. This is achieved by the functions \"DeclareScalar\" \
and \"ScalarQ\" in the following way:\
\>", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(ScalarQ[1]\)], "Input"],
Cell[BoxData[
\(True\)], "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
\(ScalarQ[s]\)], "Input"],
Cell[BoxData[
\(False\)], "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
\(DeclareScalar[s]; \nScalarQ[s]\)], "Input"],
Cell[BoxData[
\(True\)], "Output"]
}, Open ]],
Cell["\<\
Wether or not a symbol has been declared scalar, has important \
consequences for other functions. This is particulary true for the Functions \
\"Commutator\" and \"AntiCommutator\" representing the corresponding \
mathematical objects.\
\>", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(Commutator[a, b]\)], "Input"],
Cell[BoxData[
\(Commutator[a, b]\)], "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
\(Commutator[a, s]\)], "Input"],
Cell[BoxData[
\(0\)], "Output"]
}, Open ]],
Cell["\<\
The second commutator is zero, because \"s\" is a scalar! \
Similarly, we have:\
\>", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(AntiCommutator[a, b]\)], "Input"],
Cell[BoxData[
\(AntiCommutator[a, b]\)], "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
\(AntiCommutator[a, s]\)], "Input"],
Cell[BoxData[
\(2**s**a\)], "Output"]
}, Open ]],
Cell["These functions do have the known linearity properties, e.g.", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(AntiCommutator[a + s, b]\)], "Input"],
Cell[BoxData[
\(AntiCommutator[a, b] + 2**s**b\)], "Output"]
}, Open ]],
Cell["\<\
One more thing: \"AntiCommutator\" has the attribute of being \
\"Orderless\", so without loss of generality you may assign values to \
anti-commutators directly using \":=\". For example:\
\>", "Text"],
Cell[BoxData[
\(AntiCommutator[x, y] := u\)], "Input"],
Cell[CellGroupData[{
Cell[BoxData[
\(AntiCommutator[y, x]\)], "Input"],
Cell[BoxData[
\(u\)], "Output"]
}, Open ]],
Cell["\<\
Commutators on the other hand are anti-symmetric, so it is \
recommendable to use the function \"DeclareCommutator\"\
\>", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(\(?DeclareCommutator\)\)], "Input"],
Cell[BoxData[
\("DeclareCommutator[{a,b,value}] sets the value of Commutator[a,b] to \
value and sets the value of Commutator[b,a] to -value. You may provide \
definitions for several commutators, by \
DeclareCommutator[{a1,b1,value1},{a2,b2,value2},...]. It is also possible to \
directly define \"Commutator[a,b]:=c\". To make sure that Commutator[a,b] and \
Commutator[b,a] are both recognized, {a,b} should be in canonic order."\)],
"Print"]
}, Open ]]
}, Open ]],
Cell[CellGroupData[{
Cell["Ordering of monomials of elements of an algebra", "Section"],
Cell["\<\
The basic problem is to determine the equality of polynomials in \
algebra elements. Even though seemingly different, two polynomials may be \
equal due to commutation relations. Let us take the example of the \
CCR-Algebra. Denoting its elements by a[0,p] and a[1,p], where the latter \
denotes the adjoint of the first and p is an index, which we do not need to \
specify, the CCR-Algebra is given by the commutation relations:\
\>", "Text"],
Cell[BoxData[
\(DeclareCommutator[{a[s_, p_], a[s_, q_], 0}]; \n
DeclareCommutator[{a[0, p_], a[1, q_], Kronecker[p, q]}]; \)], "Input"],
Cell["\<\
Obviously the follwing two expressions correspond to the same \
element of the algebra:\
\>", "Text"],
Cell[BoxData[{
\(Clear[expr]\n\),
\(expr[1] = a[1, p]**a[0, q]; \n
expr[2] = a[0, q]**a[1, p] - Kronecker[p, q]; \)}], "Input"],
Cell[TextData[{
"Since ",
StyleBox["Mathematica",
FontSlant->"Italic"],
" does not automatically use the commutation relations to simplify, it does \
not recognize the equality of the expressions:"
}], "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(Evaluate[expr[1] == expr[2]]\)], "Input"],
Cell[BoxData[
\(a[1, p]**a[0, q] == \(-Kronecker[p, q]\) + a[0, q]**a[1, p]\)], "Output"]
}, Open ]],
Cell["\<\
The \"ccr_car_algebra\" package provides a command to bring \
polynomials of algebra elements into a prescribed order, thereby reducing all \
expressions to a unique standard form:\
\>", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(\(?CommuteOrder\)\)], "Input"],
Cell[BoxData[
\("CommuteOrder[expr,{pat[1],pat[2], ...}] commutes all terms in expr \
matching pat[j]**pat[i] provided j>i, thus ordering monomials matching \
pat[i1]**pat[i2]**... according to the specified order. Note that quantities \
not matching any of the pat[1],pat[2], ... will not be commuted."\)], "Print"]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
\(CommuteOrder[expr[1] == expr[2], {a[0, x_], a[1, y_]}]\)], "Input"],
Cell[BoxData[
\(True\)], "Output"]
}, Open ]],
Cell["\<\
The package also provides the related commands \"Commute\" and \
\"CommuteLeft\", which are both documented. The commands \"AntiCommutator\", \
\"AntiCommuteOrder\", \"AntiCommute\" and \"AntiCommuteLeft\" do the same for \
Algebras given in terms of their anti-commutators.\
\>", "Text"]
}, Open ]],
Cell[CellGroupData[{
Cell["\<\
Example 1: Calculating vacuum expectation values (fermionic case)\
\
\>", "Section"],
Cell["\<\
In many particle physics, the CAR-Algebra given by the following \
\"canonic anti-commutation relations\"\
\>", "Text"],
Cell[BoxData[
\(AntiCommutator[a[0, p_], a[1, q_]] := Kronecker[p, q]; \n
AntiCommutator[a[s_, p_], a[s_, q_]] := 0; \)], "Input"],
Cell["\<\
is a C-star-algebra, the selfadjoined elements of which, represent \
the observables of a quantum many particle system with fermionic statistics. \
In addition to the algebra there exists a normalized functional on the \
algebra, the vacuum expectation, with the follwing properties\
\>", "Text"],
Cell[BoxData[{
\(Clear[Vacuum]\n\),
\(ScalarQ[Vacuum[_]] ^= True; \n\nVacuum[s_] := s /; ScalarQ[s]\ ; \n\n
Vacuum[b_ + c_] := Vacuum[b] + Vacuum[c]; \n
Vacuum[a_?ScalarQ**x_] := a*Vacuum[x]; \n\nVacuum[a[1, _]**x_] := 0; \n
Vacuum[x_**a[0, _]] := 0; \)}], "Input"],
Cell["\<\
Remark: It is more convenient to define the value of \
\"ScalarQ[Vacuum[_]]\" as an upvalue of \"Vacuum[_]\" rather than using the \
function \"DeclareScalar\". Otherwise the evaluation of \"Vacuum\" would \
imply the evaluation of \"ScalarQ\" and viceversa, possibly giving rise to an \
infinite recursion loop.\
\>", "SmallText"],
Cell["\<\
Calculating the expectation value of polynomial in algebra \
elements, is a merely combinatorial problem, which can effectively be tackled \
as in the following example:\
\>", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(expr[3]\ = \
Vacuum[a[0, p[1]]**a[0, p[2]]**a[1, p[3]]**a[1, p[4]]]\)], "Input"],
Cell[BoxData[
\(Vacuum[a[0, p[1]]**a[0, p[2]]**a[1, p[3]]**a[1, p[4]]]\)], "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
\(expr[4] = AntiCommuteOrder[expr[3], {a[1, _], a[0, _]}]\)], "Input"],
Cell[BoxData[
\(Kronecker[p[1], p[4]]\ Kronecker[p[2], p[3]] -
Kronecker[p[1], p[3]]\ Kronecker[p[2], p[4]]\)], "Output"]
}, Open ]],
Cell["\<\
The remaining vacuum expectation values of ordered monomials vanish \
by the last two properties defined for \"Vacuum\".\
\>", "Text"],
Cell["\<\
Those familiar with many particle physics will not be surprised by \
this result, predicted by the so called Wick-Theorem\
\>", "Text"]
}, Open ]],
Cell[CellGroupData[{
Cell["Example 2: Truncated funtionals (Bosonic Case)", "Section"],
Cell["\<\
In many particle physics, it is common to view expectation values \
of fields as an hierarchiy of functionals. Let \"W\" be such an hierachy. We \
may then define the so called truncated hierarchy of functionals \"w\" \
associated to \"W\" using the function \"SetOfPartitions\"\
\>", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(\(?SetOfPartitions\)\)], "Input"],
Cell[BoxData[
\("SetOfPartitions[set] yields the list of all partitions of set into \
disjoint subsets. Any element of such a partition is non empty and the union \
of all elements of such a partition is set."\)], "Print"]
}, Open ]],
Cell["We illustrate this function with an example:", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(SetOfPartitions[{a, b, c}]\)], "Input"],
Cell[BoxData[
\({{{a}, {b}, {c}}, {{a, b}, {c}}, {{b}, {a, c}}, {{a}, {b, c}}, {{a, b,
c}}}\)], "Output"]
}, Open ]],
Cell["\<\
We first define the left hand side of the equation, which is to \
determine \"w\" in terms of \"W\"\
\>", "Text"],
Cell[BoxData[{
\(Clear[W, w, V]\n\),
\(V[fs___] :=
Plus@@Apply[Times, Apply[w, SetOfPartitions[{fs}], {2}], {1}]\)}],
"Input"],
Cell["We repeat the last example given above for \"V\":", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(V[a, b, c]\)], "Input"],
Cell[BoxData[
\(w[a]\ w[b]\ w[c] + w[c]\ w[a, b] + w[b]\ w[a, c] + w[a]\ w[b, c] +
w[a, b, c]\)], "Output"]
}, Open ]],
Cell["\<\
Now \"w\" as a hierarchy of functionals is determined by equating \
\"W\" with \"V\":\
\>", "Text"],
Cell[BoxData[{
\(Clear[eqn]\n\),
\(eqn[n_] :=
\((W@@Table[f[k], {k, 1, n}] == V@@Table[f[k], {k, 1, n}])\)\)}],
"Input"],
Cell["For example we obtain the following equations:", "Text"],
Cell[CellGroupData[{
Cell[BoxData[{
\(eqn[1]\),
\(eqn[2]\),
\(eqn[3]\)}], "Input"],
Cell[BoxData[
\(W[f[1]] == w[f[1]]\)], "Output"],
Cell[BoxData[
\(W[f[1], f[2]] == w[f[1]]\ w[f[2]] + w[f[1], f[2]]\)], "Output"],
Cell[BoxData[
\(W[f[1], f[2], f[3]] ==
w[f[1]]\ w[f[2]]\ w[f[3]] + w[f[3]]\ w[f[1], f[2]] +
w[f[2]]\ w[f[1], f[3]] + w[f[1]]\ w[f[2], f[3]] +
w[f[1], f[2], f[3]]\)], "Output"]
}, Open ]],
Cell["\<\
These equations can be recursively solved to give explict \
expressions for \"w\" in terms of \"W\". This expressions now become \
definitions of \"w\":\
\>", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(w[f_] =
\((w[f[1]] /. \(Solve[eqn[1], w[f[1]]]\)[\([1]\)])\) /. f[1] -> f\)],
"Input"],
Cell[BoxData[
\(W[f]\)], "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
\(w[f_, g_] =
\((w[f[1], f[2]] /. \(Solve[eqn[2], w[f[1], f[2]]]\)[\([1]\)])\) /. {
f[1] -> f, f[2] -> g}\)], "Input"],
Cell[BoxData[
\(\(-W[f]\)\ W[g] + W[f, g]\)], "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
\(w[f_, g_, h_] =
\((w[f[1], f[2], f[3]] /.
\(Solve[eqn[3], w[f[1], f[2], f[3]]]\)[\([1]\)])\) /. {f[1] -> f,
f[2] -> g, f[3] -> h}\)], "Input"],
Cell[BoxData[
\(2\ W[f]\ W[g]\ W[h] - W[h]\ W[f, g] - W[g]\ W[f, h] - W[f]\ W[g, h] +
W[f, g, h]\)], "Output"]
}, Open ]],
Cell["and so on ...", "Text"]
}, Open ]],
Cell[CellGroupData[{
Cell["Complete List of Documented Commands Provided by the Package", "Section"],
Cell["\<\
DeclareScalar
ScalarQ
Kronecker
DeclareCommutator
AlgebraExpand
AlgebraCollectMonomials
AlgebraCollectScalars
AntiCommutator
AntiCommute
AntiCommuteLeft
AntiCommuteOrder
AlgebraDropZeros
Commutator
Commute
CommuteLeft
CommuteOrder
NonCommutativeDot
SetOfPartitions
SignatureOfPartition
WickOrder\
\>", "Text"]
}, Open ]]
}, Open ]]
},
FrontEndVersion->"X 3.0",
ScreenRectangle->{{0, 1280}, {0, 1024}},
WindowSize->{1241, 758},
WindowMargins->{{Automatic, 6}, {6, Automatic}},
PrintingPageRange->{Automatic, Automatic},
PrintingOptions->{"PaperSize"->{597.562, 842.375},
"PaperOrientation"->"Portrait",
"Magnification"->1}
]
(***********************************************************************
Cached data follows. If you edit this Notebook file directly, not using
Mathematica, you must remove the line containing CacheID at the top of
the file. The cache data will then be recreated when you save this file
from within Mathematica.
***********************************************************************)
(*CellTagsOutline
CellTagsIndex->{}
*)
(*CellTagsIndex
CellTagsIndex->{}
*)
(*NotebookFileOutline
Notebook[{
Cell[1709, 49, 53, 0, 27, "SmallText"],
Cell[CellGroupData[{
Cell[1787, 53, 54, 0, 104, "Title"],
Cell[1844, 55, 142, 3, 27, "SmallText"],
Cell[CellGroupData[{
Cell[2011, 62, 31, 0, 52, "Section"],
Cell[CellGroupData[{
Cell[2067, 66, 42, 0, 45, "Subsection"],
Cell[2112, 68, 636, 10, 68, "Text"]
}, Open ]],
Cell[CellGroupData[{
Cell[2785, 83, 49, 0, 45, "Subsection"],
Cell[2837, 85, 1611, 24, 140, "Text"],
Cell[CellGroupData[{
Cell[4473, 113, 53, 1, 27, "Input"],
Cell[4529, 116, 77, 1, 23, "Print"]
}, Open ]]
}, Open ]]
}, Open ]],
Cell[CellGroupData[{
Cell[4667, 124, 33, 0, 52, "Section"],
Cell[4703, 126, 282, 5, 50, "Text"],
Cell[CellGroupData[{
Cell[5010, 135, 43, 1, 27, "Input"],
Cell[5056, 138, 38, 1, 27, "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[5131, 144, 43, 1, 27, "Input"],
Cell[5177, 147, 39, 1, 27, "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[5253, 153, 63, 1, 43, "Input"],
Cell[5319, 156, 38, 1, 27, "Output"]
}, Open ]],
Cell[5372, 160, 260, 5, 32, "Text"],
Cell[CellGroupData[{
Cell[5657, 169, 49, 1, 27, "Input"],
Cell[5709, 172, 50, 1, 27, "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[5796, 178, 49, 1, 27, "Input"],
Cell[5848, 181, 35, 1, 27, "Output"]
}, Open ]],
Cell[5898, 185, 103, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[6026, 192, 53, 1, 27, "Input"],
Cell[6082, 195, 54, 1, 27, "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[6173, 201, 53, 1, 27, "Input"],
Cell[6229, 204, 41, 1, 27, "Output"]
}, Open ]],
Cell[6285, 208, 76, 0, 32, "Text"],
Cell[CellGroupData[{
Cell[6386, 212, 57, 1, 27, "Input"],
Cell[6446, 215, 64, 1, 27, "Output"]
}, Open ]],
Cell[6525, 219, 212, 4, 32, "Text"],
Cell[6740, 225, 58, 1, 27, "Input"],
Cell[CellGroupData[{
Cell[6823, 230, 53, 1, 27, "Input"],
Cell[6879, 233, 35, 1, 27, "Output"]
}, Open ]],
Cell[6929, 237, 140, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[7094, 244, 55, 1, 27, "Input"],
Cell[7152, 247, 452, 7, 55, "Print"]
}, Open ]]
}, Open ]],
Cell[CellGroupData[{
Cell[7653, 260, 66, 0, 52, "Section"],
Cell[7722, 262, 453, 7, 50, "Text"],
Cell[8178, 271, 144, 2, 43, "Input"],
Cell[8325, 275, 111, 3, 32, "Text"],
Cell[8439, 280, 140, 3, 75, "Input"],
Cell[8582, 285, 219, 6, 32, "Text"],
Cell[CellGroupData[{
Cell[8826, 295, 61, 1, 27, "Input"],
Cell[8890, 298, 93, 1, 27, "Output"]
}, Open ]],
Cell[8998, 302, 204, 4, 32, "Text"],
Cell[CellGroupData[{
Cell[9227, 310, 50, 1, 27, "Input"],
Cell[9280, 313, 320, 4, 39, "Print"]
}, Open ]],
Cell[CellGroupData[{
Cell[9637, 322, 87, 1, 27, "Input"],
Cell[9727, 325, 38, 1, 27, "Output"]
}, Open ]],
Cell[9780, 329, 298, 5, 50, "Text"]
}, Open ]],
Cell[CellGroupData[{
Cell[10115, 339, 94, 3, 52, "Section"],
Cell[10212, 344, 129, 3, 32, "Text"],
Cell[10344, 349, 138, 2, 43, "Input"],
Cell[10485, 353, 306, 5, 50, "Text"],
Cell[10794, 360, 286, 5, 187, "Input"],
Cell[11083, 367, 341, 6, 42, "SmallText"],
Cell[11427, 375, 193, 4, 32, "Text"],
Cell[CellGroupData[{
Cell[11645, 383, 108, 2, 27, "Input"],
Cell[11756, 387, 88, 1, 27, "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[11881, 393, 88, 1, 27, "Input"],
Cell[11972, 396, 132, 2, 27, "Output"]
}, Open ]],
Cell[12119, 401, 144, 3, 32, "Text"],
Cell[12266, 406, 145, 3, 32, "Text"]
}, Open ]],
Cell[CellGroupData[{
Cell[12448, 414, 65, 0, 52, "Section"],
Cell[12516, 416, 303, 5, 50, "Text"],
Cell[CellGroupData[{
Cell[12844, 425, 53, 1, 27, "Input"],
Cell[12900, 428, 226, 3, 39, "Print"]
}, Open ]],
Cell[13141, 434, 60, 0, 32, "Text"],
Cell[CellGroupData[{
Cell[13226, 438, 59, 1, 27, "Input"],
Cell[13288, 441, 120, 2, 27, "Output"]
}, Open ]],
Cell[13423, 446, 123, 3, 32, "Text"],
Cell[13549, 451, 145, 4, 59, "Input"],
Cell[13697, 457, 65, 0, 32, "Text"],
Cell[CellGroupData[{
Cell[13787, 461, 43, 1, 27, "Input"],
Cell[13833, 464, 118, 2, 27, "Output"]
}, Open ]],
Cell[13966, 469, 110, 3, 32, "Text"],
Cell[14079, 474, 139, 4, 59, "Input"],
Cell[14221, 480, 62, 0, 32, "Text"],
Cell[CellGroupData[{
Cell[14308, 484, 75, 3, 59, "Input"],
Cell[14386, 489, 52, 1, 27, "Output"],
Cell[14441, 492, 83, 1, 27, "Output"],
Cell[14527, 495, 204, 4, 27, "Output"]
}, Open ]],
Cell[14746, 502, 176, 4, 32, "Text"],
Cell[CellGroupData[{
Cell[14947, 510, 116, 3, 27, "Input"],
Cell[15066, 515, 38, 1, 27, "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[15141, 521, 153, 3, 27, "Input"],
Cell[15297, 526, 59, 1, 27, "Output"]
}, Open ]],
Cell[CellGroupData[{
Cell[15393, 532, 193, 4, 27, "Input"],
Cell[15589, 538, 121, 2, 27, "Output"]
}, Open ]],
Cell[15725, 543, 29, 0, 32, "Text"]
}, Open ]],
Cell[CellGroupData[{
Cell[15791, 548, 79, 0, 52, "Section"],
Cell[15873, 550, 319, 21, 374, "Text"]
}, Open ]]
}, Open ]]
}
]
*)
(***********************************************************************
End of Mathematica Notebook file.
***********************************************************************)