%%% This package formats solution sets for
%%% Harvard Math 126, Fall 1998
%%%
%%% by Nils Barth
%%% nbarth@fas.harvard.edu
%%%
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesClass{math126}%
    [1999/02/05 Harvard Math 126 Fall 1998 Solution Set]

%%% Pass options to homework.cls, and load homework.cls
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{homework}}
\ProcessOptions
\PassOptionsToClass{enum, solutionset}{homework}
\LoadClass{homework}[1999/02/05]

\coursename{Math 126}
%\RequirePackage[euler]{mathalph}
%\RequirePackage{algebra, misc, sets, theorems}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Included copies packages at the time, in case they change %%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%% mathalph[euler] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{euler}\RequirePackage{eucal}

%%% Bold Face
% \H \L \O \P \S are already defined
\newcommand{\bA}{{\mathbf A}}
\newcommand{\bB}{{\mathbf B}}
\newcommand{\bC}{{\mathbf C}}
\newcommand{\bD}{{\mathbf D}}
\newcommand{\bE}{{\mathbf E}}
\newcommand{\bF}{{\mathbf F}}
\newcommand{\bG}{{\mathbf G}}
\newcommand{\bH}{{\mathbf H}}
\newcommand{\bI}{{\mathbf I}}
\newcommand{\bJ}{{\mathbf J}}
\newcommand{\bK}{{\mathbf K}}
\newcommand{\bL}{{\mathbf L}}
\newcommand{\bM}{{\mathbf M}}
\newcommand{\bN}{{\mathbf N}}
\newcommand{\bO}{{\mathbf O}}
\newcommand{\bP}{{\mathbf P}}
\newcommand{\bQ}{{\mathbf Q}}
\newcommand{\bR}{{\mathbf R}}
\newcommand{\bS}{{\mathbf S}}
\newcommand{\bT}{{\mathbf T}}
\newcommand{\bU}{{\mathbf U}}
\newcommand{\bV}{{\mathbf V}}
\newcommand{\bW}{{\mathbf W}}
\newcommand{\bX}{{\mathbf X}}
\newcommand{\bY}{{\mathbf Y}}
\newcommand{\bZ}{{\mathbf Z}}

%%% Caligraphic
\newcommand{\cA}{{\mathcal A}}
\newcommand{\cB}{{\mathcal B}}
\newcommand{\cC}{{\mathcal C}}
\newcommand{\cD}{{\mathcal D}}
\newcommand{\cE}{{\mathcal E}}
\newcommand{\cF}{{\mathcal F}}
\newcommand{\cG}{{\mathcal G}}
\newcommand{\cH}{{\mathcal H}}
\newcommand{\cI}{{\mathcal I}}
\newcommand{\cJ}{{\mathcal J}}
\newcommand{\cK}{{\mathcal K}}
\newcommand{\cL}{{\mathcal L}}
\newcommand{\cM}{{\mathcal M}}
\newcommand{\cN}{{\mathcal N}}
\newcommand{\cO}{{\mathcal O}}
\newcommand{\cP}{{\mathcal P}}
\newcommand{\cQ}{{\mathcal Q}}
\newcommand{\cR}{{\mathcal R}}
\newcommand{\cS}{{\mathcal S}}
\newcommand{\cT}{{\mathcal T}}
\newcommand{\cU}{{\mathcal U}}
\newcommand{\cV}{{\mathcal V}}
\newcommand{\cW}{{\mathcal W}}
\newcommand{\cX}{{\mathcal X}}
\newcommand{\cY}{{\mathcal Y}}
\newcommand{\cZ}{{\mathcal Z}}

%%% Fraktur
\newcommand{\fA}{{\mathfrak A}}
\newcommand{\fB}{{\mathfrak B}}
\newcommand{\fC}{{\mathfrak C}}
\newcommand{\fD}{{\mathfrak D}}
\newcommand{\fE}{{\mathfrak E}}
\newcommand{\fF}{{\mathfrak F}}
\newcommand{\fG}{{\mathfrak G}}
\newcommand{\fH}{{\mathfrak H}}
\newcommand{\fI}{{\mathfrak I}}
\newcommand{\fJ}{{\mathfrak J}}
\newcommand{\fK}{{\mathfrak K}}
\newcommand{\fL}{{\mathfrak L}}
\newcommand{\fM}{{\mathfrak M}}
\newcommand{\fN}{{\mathfrak N}}
\newcommand{\fO}{{\mathfrak O}}
\newcommand{\fP}{{\mathfrak P}}
\newcommand{\fQ}{{\mathfrak Q}}
\newcommand{\fR}{{\mathfrak R}}
\newcommand{\fS}{{\mathfrak S}}
\newcommand{\fT}{{\mathfrak T}}
\newcommand{\fU}{{\mathfrak U}}
\newcommand{\fV}{{\mathfrak V}}
\newcommand{\fW}{{\mathfrak W}}
\newcommand{\fX}{{\mathfrak X}}
\newcommand{\fY}{{\mathfrak Y}}
\newcommand{\fZ}{{\mathfrak Z}}

\newcommand{\fa}{{\mathfrak a}}
\newcommand{\fb}{{\mathfrak b}}
\newcommand{\fc}{{\mathfrak c}}
\newcommand{\fd}{{\mathfrak d}}
\newcommand{\fe}{{\mathfrak e}}
\newcommand{\ff}{{\mathfrak f}}
\newcommand{\fg}{{\mathfrak g}}
\newcommand{\fh}{{\mathfrak h}}
\newcommand{\Fi}{{\mathfrak i}} % Damn!
\newcommand{\fj}{{\mathfrak j}}
\newcommand{\fk}{{\mathfrak k}}
\newcommand{\fl}{{\mathfrak l}}
\newcommand{\fm}{{\mathfrak m}}
\newcommand{\fn}{{\mathfrak n}}
\newcommand{\fo}{{\mathfrak o}}
\newcommand{\fp}{{\mathfrak p}}
\newcommand{\fq}{{\mathfrak q}}
\newcommand{\fr}{{\mathfrak r}}
\newcommand{\fs}{{\mathfrak s}}
\newcommand{\ft}{{\mathfrak t}}
\newcommand{\fu}{{\mathfrak u}}
\newcommand{\fv}{{\mathfrak v}}
\newcommand{\fw}{{\mathfrak w}}
\newcommand{\fx}{{\mathfrak x}}
\newcommand{\fy}{{\mathfrak y}}
\newcommand{\fz}{{\mathfrak z}}

%%% algebra %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Algebraic Geometry ---------------------------------------------
\DeclareMathOperator{\Spec}{Spec}       % Spectrum
\DeclareMathOperator{\MSpec}{MSpec}     % Maximum Spectrum
\DeclareMathOperator{\Pic}{Pic}         % Picard Group

%%% Category Theory ------------------------------------------------
\DeclareMathOperator{\Hom}{Hom}         % Homomorphisms
\DeclareMathOperator{\Aut}{Aut}         % Automorphisms
\DeclareMathOperator{\End}{End}         % Endomorphisms

\DeclareMathOperator{\Id}{Id}           % The Identity Map
\DeclareMathOperator{\Obj}{Obj}         % Objects
\DeclareMathOperator{\Mor}{Mor}         % Morphisms
% \DeclareMathOperator{\ker}{ker}       % Kernal -- already in AMS-LaTeX
\DeclareMathOperator{\coker}{coker}     % Cokernal
\DeclareMathOperator{\im}{im}           % Image

%%% Field Theory ----------------------------------------------------
\DeclareMathOperator{\Gal}{Gal}         % Galois Group

%%% Group Theory ----------------------------------------------------
\DeclareMathOperator{\Out}{Out}         % Outer Automorphisms
\DeclareMathOperator{\Inn}{Inn}         % Inner Automorphisms

\def\GrpGen<#1>{\left<#1\right>}        % Group by generators
% Normal subgroup
\newcommand{\normsub}{\vartriangleleft}
\newcommand{\subnorm}{\vartriangleright}

%%% Linear Algebra --------------------------------------------------
\DeclareMathOperator{\ann}{ann}         % Annihilator
%\DeclareMathOperator{\dim}{dim}        % Dimension -- already \def'ined
\DeclareMathOperator{\rank}{rank}       % Rank
\DeclareMathOperator{\Span}{span}       % Span -- note that \span
                                          % already means something
\DeclareMathOperator{\tr}{tr}           % Trace
%\DeclareMathOperator{\det}{det}        % Determinant -- already \def'ined

%% Linear Groups
% For consistency, so I don't get GL_n and Gl_n mixed up
%%%%% In fact, I should really make this
%%%%% \newcommand{\GL}[2][]{GL_{#1}\left(#2\right)}
%%%%% or
%%%%% \newcommand{\GL}[2][]{GL\left(#1, #2\right)}
%%%%% with suitable dealing with the case \GL{V}
%%%%% (and a nicer TeX way would be to have \GL(V) -- ha!)
\newcommand{\GL}{GL}
\newcommand{\SL}{SL}
\newcommand{\SO}{SO}
\newcommand{\SU}{SU}

%%% Number Theory ---------------------------------------------------
\DeclareMathOperator{\lcm}{lcm}         % Least Common Multiple
%\DeclareMathOperator{\gcd}{gcd}        % Greatest Common Divisor
                                        %   -- already in AMS-LaTeX
\DeclareMathSymbol{\divides}{\mathbin}{symbols}{"6A}
\DeclareMathSymbol{\ndivides}{\mathbin}{AMSb}{"2D}
\newcommand{\residue}[1]{\overline{#1}}

%%% Representation Theory -------------------------------------------
\DeclareMathOperator{\Res}{Res}         % Restriction
\DeclareMathOperator{\Ind}{Ind}         % Induced

%% Character tables
\RequirePackage{float}    % Standard; for nice character tables
\floatstyle{plain}
\newfloat{CharTable}{ht}{aux}
\floatname{CharTable}{\textsc{Character Table}}
\newfloat{PCharTable}{ht}{aux}
\floatname{PCharTable}{\textsc{Partial Character Table}}
\newfloat{Char}{ht}{aux}
\floatname{Char}{\textsc{Character}}
\newfloat{Chars}{ht}{aux}
\floatname{Char}{\textsc{Characters}}
% Use \SP to get correct spacing for negative signs
\newlength{\negativesign}
\settowidth{\negativesign}{$-$}
\newcommand{\SP}{\hspace{\negativesign}}

%%% Ring Theory -----------------------------------------------------
\DeclareMathOperator{\charstc}{char}    % Characteristic -- note that \char
                                          % (and, it seems, \Char)
                                          % already means something
%\DeclareMathOperator{\deg}{deg}        % Degree -- already in AMS-LaTeX

%%% Common
%% Opposite (ring, group)
\newcommand{\op}[1]{#1^{\text{op}}}

%%% misc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{amssymb} % For \twoheadrightarrow, \nexists
\def\nsubset{\not\subset}   % I should get rid of this,
                            % and make a noeq option, which
                            % should be default.
\newcommand{\nequiv}{\not\equiv}
\def\phi{\varphi}
\def\theta{\vartheta}
\newcommand{\del}{\partial}

\newcommand{\Ddots}{\mathinner{\mkern1mu\raise\p@\vbox{\kern7\p@\hbox{.}}%
        \mkern2mu\raise4\p@\hbox{.}\mkern2mu\raise7\p@\hbox{.}\mkern1mu}}
        % Diagonal dots going in the other direction
%\DeclareSymbolFont{symbols}     {OMS}{cmsy}{m}{n}
%\SetSymbolFont{symbols}  {bold}{OMS}{cmsy}{b}{n}
%\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}
%\DeclareMathSymbol{\mapstochar}{\mathrel}{symbols}{"37}

\def\mapsfrom{\DOTSB\leftarrow\!\mapstochar}
\let\tomaps\mapsfrom
\def\longmapsfrom{\DOTSB\longleftarrow\!\mapstochar}
\let\longtomaps\longmapsfrom

\newcommand{\ie}{i.e.,\ }
\newcommand{\eg}{e.g.,\ }

\newcommand{\floor}[1]{\left\lfloor#1\right\rfloor}
\newcommand{\Langle}{\left<}
\newcommand{\Rangle}{\right>}
\newcommand{\Lvert}{\left\lvert}
\newcommand{\Rvert}{\right\rvert}
\newcommand{\LVert}{\left\lVert}
\newcommand{\RVert}{\right\rVert}

%%% Small matricies
\newenvironment{psmallmatrix}
{\left(\begin{smallmatrix}}
{\end{smallmatrix}\right)}
\newenvironment{bsmallmatrix}
{\left[\begin{smallmatrix}}
{\end{smallmatrix}\right]}
\newenvironment{Bsmallmatrix}
{\left\{\begin{smallmatrix}}
{\end{smallmatrix}\right\}}
\newenvironment{vsmallmatrix}
{\left\lvert\begin{smallmatrix}}
{\end{smallmatrix}\right\rvert}
\newenvironment{Vsmallmatrix}
{\left\lVert\begin{smallmatrix}}
{\end{smallmatrix}\right\rVert}

%% Reminder
\newcommand{\remind}[1]{\marginpar{\raggedright\tiny{\emph{#1}}}\typeout{#1}}

%% Map commands, so you can write
% \map f:X->Y,
% instead of
% f\colon X\to Y,
% the result being more readable TeX
\def\map#1:#2->#3{#1\colon #2\to #3}
\def\maps#1->#2{#1 \to #2}
\def\mapssurj#1->>#2{#1 \twoheadrightarrow #2}
\def\lmap#1:#2<-#3{#1\colon #2\leftarrow #3}
\def\mapo#1-#2->#3{#1\overset{#2}{\to}#3}
\def\mapinj#1:#2(->#3{#1\colon #2\hookrightarrow #3}
\def\mapsur#1:#2->>#3{#1\colon #2\twoheadrightarrow #3}
\def\mapbij#1:#2<->#3{#1\colon #2\leftrightarrow #3}
\def\mapiso#1:#2-~->#3{#1\colon #2\overset{\sim}{\to} #3}

\def\iso={\cong}

%%%%% Replaced by \ip[]{}{}
% \def\ip<#1,#2>{\left<#1, #2\right>}
\newcommand{\ip}[3][0]{
\ifthenelse{#1=0}{\left<#2,#3\right>}{
\ifthenelse{#1=1}{\left(#2,#3\right)}{
\ifthenelse{#1=2}{\left(#2\vert #3\right)}{
\typeout{Delimiter size too big} % I should make this an error
}}}}

%%% Kill this -- replace by \normsub
%\newcommand{\nsgrp}{\triangleleft}

\def\degrees{^{\circ}}
\newcommand{\restrict}[1]{\vert_{#1}}
\newcommand{\evaluate}[1]{\vert_{#1}}

% Indexing
\newcommand{\Index}[1]{#1\index{#1}}    % In general, you can index thus
\newcommand{\Def}[2][0]{\textsc{#2}%
\ifthenelse{#1=0}{\index{#2|textbf}}{\index{#1|textbf}}}

%%% These need _massive_ work
\newcommand{\QED}{$$\qedsymbol$$}
%%%%% Replace all $$\QED$$ with \QED

%%%%% These have been replaced
%\def\inj{\hookrightarrow}
%\newcommand{\SURJ}{\twoheadrightarrow}
\newcommand{\injects}{\hookrightarrow}
\newcommand{\surjects}{\twoheadrightarrow}

% Algebraic Objects

\newcommand{\Poly}[1]{{\mathcal P}^{#1}}
%\newcommand{\NAT}{{\mathbf N}} -- replace with \N
%\newcommand{\ZINT}{{\mathbf Z}} -- replace with \Z
%\newcommand{\QR}{{\mathbf Q}} -- replace with \Q
%\newcommand{\RE}{{\mathbf R}} -- replace with \R
%\newcommand{\CO}{{\mathbf C}} -- replace with \C
\newcommand{\COH}{\widehat{\bC}}
% \newcommand{\C}[1]{{\mathcal C}^{#1}}
% \newcommand{\M}{{\mathcal M}} -- replace with \cM
% \newcommand{\Half}{{\mathbf H}} -- replace with \H

%%% sets %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{ifthen}     % For delimiters

\def\emptyset{\varnothing}              % I prefer this emptyset
%%%%% Fix all my \Null!!!!!

\newcommand{\compliment}[1]{{#1}^c}
\newcommand{\closure}[1]{\overline{#1}}
\newcommand{\interior}[1]{{#1^\circ}}
\newcommand{\varinterior}[1]{\overset{\circ}{#1}}

% Cardinality
\DeclareMathOperator{\card}{card}
%\newcommand{\card}[1]{\left|#1\right|}

%% This is kinda inelegant -- I shouldn't need to space manually
%%%%% Oops -- this doesn't work with Euler
%\DeclareMathDelimiter{\miid}
%   {\mathrel}{symbols}{"6A}{largesymbols}{"0C}
%\let\mid\undefined
%\newcommand{\mid}[1][0]{
%\ifthenelse{#1=0}{\miid}{
%\ifthenelse{#1=1}{{\:\big\miid\:}}{
%\ifthenelse{#1=2}{{\:\Big\miid\:}}{
%\ifthenelse{#1=3}{{\:\bigg\miid\:}}{
%\ifthenelse{#1=4}{{\:\Bigg\miid\:}}{
%\typeout{Delimiter size too big} % I should make this an error
%}}}}}}

\newcommand{\compose}{\circ}
%\newcommand{\set}[1]{\left\{#1\right\}}
%\def\seq<#1>{\left<#1\right>}  -- okay, this is bad and non-LaTeX
\newcommand{\set}[2][0]{
\ifthenelse{#1=0}{\left\{#2\right\}}{
\ifthenelse{#1=1}{\{#2\}}{
\ifthenelse{#1=2}{\big\{#2\big\}}{
\ifthenelse{#1=3}{\Big\{#2\Big\}}{
\ifthenelse{#1=4}{\bigg\{#2\bigg\}}{
\ifthenelse{#1=5}{\Bigg\{#2\Bigg\}}{
\typeout{Delimiter size too big} % I should make this an error
}}}}}}}
\newcommand{\seq}[2][0]{
\ifthenelse{#1=0}{\left<#2\right>}{
\ifthenelse{#1=1}{\langle#2\rangle}{
\ifthenelse{#1=2}{\big\langle#2\big\rangle}{
\ifthenelse{#1=3}{\Big\langle#2\Big\rangle}{
\ifthenelse{#1=4}{\bigg\langle#2\bigg\rangle}{
\ifthenelse{#1=5}{\Bigg\langle#2\Bigg\rangle}{
\typeout{Delimiter size too big} % I should make this an error
}}}}}}}
\newcommand{\abs}[1]{\left\lvert#1\right\rvert}
\newcommand{\norm}[1]{\left\lVert#1\right\rVert}
\newcommand{\Norm}{\norm{\,\cdot\,}}
\newcommand{\lparen}{\left(}
\newcommand{\rparen}{\right)}
\newcommand{\Lfloor}{\left\lfloor}
\newcommand{\Rfloor}{\right\rfloor}
\newcommand{\power}{\cP}
\newcommand{\OR}{\vee}
\newcommand{\AND}{\wedge}
% \newcommand{\OR}{\text{ or }}
% \newcommand{\AND}{\text{ and }}
\newcommand{\NOT}{\neg}
% \newcommand{\NOT}{\sim}
\newcommand{\nin}{\notin}
\newcommand{\nni}{\notni}
\newcommand{\nimplies}{\notimplies}
% \newcommand{\nexists}{\not\exists}
% \newcommand{\seilpmi}{\Leftarrow}

\newcommand{\pto}{\rightharpoonup}      % Partial function

%%% theorems %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{amsthm}

% Subordinates equation numbering to section
%%% Oops--I don't want this for problem sets!
%%% Instead, I want it within problems...
%%% I should add an option...
%\numberwithin{equation}{section}


% Put theorem numbers on the left
\swapnumbers
% Ties theorem numbering to equation numbering
\theoremstyle{plain}
\newtheorem{thm}[equation]{Theorem}
\newtheorem{lem}[equation]{Lemma}
\newtheorem{prop}[equation]{Proposition}
\newtheorem{cor}[equation]{Corollary}
\newtheorem{conj}[equation]{Conjecture}
\newtheorem{claim}[equation]{Claim}

% If you prefer theorems to be numbered independently of equations:
%\newtheorem{thm}{Theorem}[section]
%\newtheorem{lem}[thm]{Lemma}
%\newtheorem{prop}[thm]{Proposition}
%\newtheorem{cor}[thm]{Corollary}
%\newtheorem{conj}[thm]{Conjecture}

\theoremstyle{definition}
\newtheorem{defn}[equation]{Definition}
\newtheorem{exmp}[equation]{Example}
%\newtheorem{exmp}{Example}[section]
\newtheorem{prob}[equation]{Exercise}

\theoremstyle{remark}
\newtheorem*{rmk}{Remark}
\newtheorem*{note}{Note}

% Referencing
\newcommand{\thmref}[1]{\eqref{thm:#1}}
\newcommand{\lemref}[1]{\eqref{lem:#1}}
\newcommand{\propref}[1]{\eqref{prop:#1}}
\newcommand{\corref}[1]{\eqref{cor:#1}}
\newcommand{\secref}[1]{section~\ref{sec:#1}}
\newcommand{\Secref}[1]{Section~\ref{sec:#1}}

% If you like verbose referencing
%\newcommand{\thmref}[1]{Theorem~\ref{thm:#1}}
%\newcommand{\lemref}[1]{Lemma~\ref{lem:#1}}
%\newcommand{\propref}[1]{Proposition~\ref{prop:#1}}
%\newcommand{\corref}[1]{Corollary~\ref{cor:#1}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Number the (partial) character tables within the problem set
\numberwithin{CharTable}{problemset}
\numberwithin{PCharTable}{problemset}
