今日までで圏の骨格 (skeleton) を圏として構成する問題で, 対象の集まりと射の集まりを定義するところまで辿り着いた.
対象と射の定義は何度もやり直している. 今回の定義も明日以降に慎重に見直してみないといけない.
後は圏の要件となる 4 つの関数を定義して 4 種類の図式の可換性を示せばよい (†).
†: 圏の要件となる 4 つの関数とそれらが満たす 4 種類の図式
$\mathscr{C}$ を任意の圏とする.
圏の骨格の射の集まりを $A$, 対象の集まりを $O$ とおく.
4 つの関数 $d^0$, $d^1$, $u$, $m$ は以下のように定義される.
(1) $d^0, d^1 : A \to O$
$A$ に属する任意の射 $f : X \to Y$ に対してそのソースとターゲットを与える:
\begin{equation*}
d^0(f) = X, \quad d^1(f) = Y
\end{equation*}
(2) $u : O \to A$
$O$ に属する任意の対象 $X$ に対してその上の恒等射を与える:
\begin{equation*}
u(X) = (\mathrm{id}_{X} : X \to X)
\end{equation*}
(3) $m : P \to A$
集まり $P$ を
\begin{equation*}
P = \left\{\, (f, g) \mid f, g \in A,\, d^0(f) = d^1(g) \,\right\}
\end{equation*}
と定義する. $(f, g) \in P$ ならば $f$ のソースと $g$ のターゲットは等しく射の合成が可能である. その $f$ と $g$ の合成を与える.
\begin{equation*}
m(f, g) = f \circ g
\end{equation*}
圏 $\mathscr{C}$ の骨格 (skeleton) $\mathrm{sk}(\mathscr{C})$ を 6 つ組
\begin{equation*}
\mathrm{sk}(\mathscr{C}) = (A, O, d^0, d^1, u, m)
\end{equation*}
として定義する.
$\mathrm{sk}(\mathscr{C})$ が以下の4 種類の図式を可換にするならば $\mathrm{sk}(\mathscr{C})$ は圏である (図式による圏の定義).
(1) 恒等射のソースとターゲットが等しいことを示す図式:
\begin{equation*}
\begin{xy}
\xymatrix@=48pt {
A \ar[rd]_{d^0} & O \ar[l]_{u} \ar[d]^{\mathrm{id}_{O}} \ar[r]^{u} & A \ar[ld]^{d^1} \\
~ & O &
}
\end{xy}
\end{equation*}
(2) 射 $f$ と $g$ の合成 $m(f, g) = f \circ g$ のソースは $g$ のソースに等しく, ターゲットは $f$ のターゲットに等しいことを示す 2 つの図式 (以下の図式において $p_1, p_2$ は座標関数 ── $p_1(f, g) = f$, $\,p_2(f, g) = g$):
\begin{equation*}
\begin{xy}
\xymatrix@=48pt {
P \ar[d]_{m} \ar[r]^{p_2} & A \ar[d]^{d^0} & P \ar[d]_{m} \ar[r]^{p_1} & A \ar[d]^{d^1} \\
A \ar[r]_{d^0} & O & A \ar[r]_{d^1} & O
}
\end{xy}
\end{equation*}
(3) 任意の射に対して右から恒等射を合成した結果および左から恒等射を合成した結果はどちらも元の射に等しいことを示す図式:
\begin{equation*}
\begin{xy}
\xymatrix@=48pt {
A \ar[r]^{(\mathrm{id}_{A}, u \circ d^0)} \ar[rd]_{\mathrm{id}_{A}} & P \ar[d]^{m} & A \ar[l]_{(u \circ d^1, \mathrm{id}_{A})} \ar[ld]^{\mathrm{id}_{A}} \\
~ & A &
}
\end{xy}
\end{equation*}
(4) 射の合成が結合律を満たすことを示す図式 (ここで集まり $Q$ を
\begin{equation*}
Q = \left\{\, (f, g, h) \mid f, g, h \in A,\, d^0(f) = d^1(g),\, d^0(g) = d^1(h) \,\right\}
\end{equation*}
として定義する):
\begin{equation*}
\begin{xy}
\xymatrix@=48pt {
Q \ar[d]_{m \times \mathrm{id}_{A}} \ar[r]^{\mathrm{id}_{A} \times m} & P \ar[d]^{m} \\
P \ar[r]_{m} & A
}
\end{xy}
\end{equation*}
2017年05月31日
平和な一日
7 時起床.
昨晩は熟睡できた. プールで泳いで心地よく疲れただからだと思う. それから午後歩いてユニクロに行ったのも関係あるかも.
肩と脚に筋肉痛がある. 全然泳いでいなかったからだが, 昨晩のようによく眠れるならもう少し行く回数を増やしたい.
午前中は数学をやる. 見直しが大半だったが大事なところ.
昼食はトマトとレタスのサラダとベーコンエッグ.
午後からチラシ配りに出かける.
昨日買った帽子を被った. 今日はそれほど暑くはなかったのではかどった.
夕食はポトフを作る. 気長に煮込むだけなので簡単でいい.
今日は夕方からの鬱が無かったのでよかった.
理由はわからないが...
昨晩は熟睡できた. プールで泳いで心地よく疲れただからだと思う. それから午後歩いてユニクロに行ったのも関係あるかも.
肩と脚に筋肉痛がある. 全然泳いでいなかったからだが, 昨晩のようによく眠れるならもう少し行く回数を増やしたい.
午前中は数学をやる. 見直しが大半だったが大事なところ.
昼食はトマトとレタスのサラダとベーコンエッグ.
午後からチラシ配りに出かける.
昨日買った帽子を被った. 今日はそれほど暑くはなかったのではかどった.
夕食はポトフを作る. 気長に煮込むだけなので簡単でいい.
今日は夕方からの鬱が無かったのでよかった.
理由はわからないが...
UNIX: スクリプトを改良する ── getopt
以前書いた, 名前で指定したアプリケーションを停止する スクリプト
にオプションを追加した.
使っていて, アプリケーションが存在するかしないかを調べるオプションが欲しかったので書き直したのだ.
"
使用方法は
となる. たとえばメモアプリ (アプリケーション名は Notes) に対して "
と表示されて終わる.
オプション無しでアプリケーション名のみを指定するとそのアプリケーションを停止する.
ところで今回, manpage の
手元の Mac にも入っていた. MacPorts でインストールされていたのだ.
役に立った.
オプションの解析は適当で完全ではない. しかしとりあえず iPhone の iTerminal アプリから使ってみてどうするか考える.
2018 年 4 月 19 日: 修正
たまたま見直してみたらスクリプトのコードが古いものだった.
使っていて, アプリケーションが存在するかしないかを調べるオプションが欲しかったので書き直したのだ.
"
-s
" がそのためのオプションである.使用方法は
mykill [ -s ] <application-name>
となる. たとえばメモアプリ (アプリケーション名は Notes) に対して "
-s
" オプションを使うと
$ mykill -s notes
1084 /Applications/Notes.app/Contents/MacOS/Notes
と表示されて終わる.
オプション無しでアプリケーション名のみを指定するとそのアプリケーションを停止する.
$ mykill notes
Terminated: 15
$ mykill -s notes # Check if the specified application was killed or not.
ところで今回, manpage の
getopt(1)
を読んで初めて知ったのだが /usr/local/share/getopt/
というディレクトリーがあって, ここに getopt
の bash と tcsh のサンプルが置いてある.手元の Mac にも入っていた. MacPorts でインストールされていたのだ.
役に立った.
オプションの解析は適当で完全ではない. しかしとりあえず iPhone の iTerminal アプリから使ってみてどうするか考える.
2018 年 4 月 19 日: 修正
たまたま見直してみたらスクリプトのコードが古いものだった.
getopt(1)
を導入する前のものになっていたのだ.getopt(1)
を使ったスクリプトのコードに入れ換えた.
#!/bin/sh
usage="usage: `basename $0` [ -s ]"
cmd=`basename $0`
proc=""
args=`getopt s: $*`
eval set -- "$args"
while true; do
case $1 in
-s)
proc="$2"
shift 2
ps -e | grep -i $proc | grep -v grep | grep -v $cmd |
awk '{ printf("%s\t%s\n", $1, $4); }'
exit $?
;;
--)
shift
break
;;
*)
echo $usage
exit 1
;;
esac
done
proc="$1"
kill `ps -e | grep -i $proc | grep -v grep | awk '{ print $1 }'`
exit $?