bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

中世城郭跡:八王子市滝山城

北海道に縄文遺跡を見学に行ったときに、八王子から参加したという人から、滝山城の近くに住んでいて、よく訪れるという話を聴いた。

この城は築造された時期については諸説あるようだ。滝山城が戦場となったのは永禄12年(1569)だ。このとき武田信玄は2万の兵を率いて、甲府を出発し、北条氏政小田原城へと攻め上った。その途中で、氏政の弟氏照が守る滝山城において、武田と北条の間で攻防があり、北条側は2千と少ない兵でよく凌いだ。

天文23年(1554)に、北条氏康武田信玄今川義元の3者で、いわゆる甲相駿三国同盟が結ばれたが、上杉謙信との川中島の合戦が収束すると、武田信玄は、信濃から相模・駿河へと目を転じ、永禄11年には今川との同盟を破棄して駿河に攻め込み、次の年には同じように氏康との関係も断ち切って、関東に攻め込んだ。その時に攻められたのが滝山城だ。氏照はこの城が脆弱であることを知り、八王子城を築造することになった。

八王子城と同じように立派な駐車場があるものと思って出かけた。滝山街道の滝山城祉下というバス停の近くに、滝山城跡入口という大きな看板があったので、そこを曲がったところ、駐車場はありませんと注意書きがあった。後で分かったのだが、角にある滝山観光駐車場を利用してくださいとも書かれていた。残念ながら、見落としてしまったので、近くのお店でおにぎりを買い、少しの時間だけ置かしてもらって駆け足で見学した。

滝山城に入っていく道はいくつかあったが、バス停の滝山城祉下から入った。すぐに大きな看板があった。
f:id:bitterharvest:20190925180032j:plain

かつてはこの入り口は大手口と呼ばれていたそうだ。公園の中に入ると孟宗竹で鬱蒼としていた。
f:id:bitterharvest:20190925180532j:plain

さらに天野坂から桝形虎口(出入口)へと向かった。この辺りは攻め上る敵が脅威にさらされるところだ。
f:id:bitterharvest:20190925181110j:plain
そして小宮曲輪だ。道沿いにこのような道しるべが立てられているので、どこにいるのかがすぐにわかる。この名は、西多摩地域出身の小宮氏に因んだのではと言われている。曲輪には、土塁で囲われたいくつかの屋敷があったと思われている。
f:id:bitterharvest:20190925181259j:plain
さらに進むとコの字型土橋の案内があった。三の丸を通り抜けたあたりだ。
f:id:bitterharvest:20190925182123j:plain
千畳敷、広い公園になっている。
f:id:bitterharvest:20190925193024j:plain
二の丸、草が茂っていてわかりにくいがくぼ地になっている。恐らく空堀だ。
f:id:bitterharvest:20190925193350j:plain
中の丸だ。
f:id:bitterharvest:20190925193533j:plain
f:id:bitterharvest:20190925193641j:plain
f:id:bitterharvest:20190925193726j:plain
中の丸からは、眺望が開け、多摩川昭島市の市街地などを見ることができた。
f:id:bitterharvest:20190925194751j:plain
本丸への道は閉鎖されていた。このため紹介の中でよく出てくる木橋を見ることはできなかった。

八王子城と比較すると、平坦で散策しやすかったが、その分、山城としての機能は低かったのだろう。武田氏に攻められた後、八王子城を築造し、移転したというのもうなずけた。
この日は、気温は少し高かったが、全国的な秋晴れで、短い時間だったが楽しむことができた。

家族システムの変遷(III) ケーススタディー:律令制成立期における大伴氏

今年もまた古代の家族システムについて考えてみました。今回は大伴氏の家族システムだ。

大伴氏は神話にも登場するような有名な古代の氏族だ。壬申の乱(天智天皇崩御したあと、皇位継承者となった天智天皇の子大友皇子を、天智天皇の弟大海人皇子(天武天皇)が倒した内乱)で功績をあげた大伴氏は、そのあと朝廷の中心にあって活躍した。しかし孫の時代ごろになると新興の勢力が出始め、古い世代となり始めた功臣たちの子孫が邪魔な存在となった。第一の功労者であった高市皇子の孫である長屋王は、皇位を継承できるような高い身分であったため、長屋王の変(727)により、吉備内親王とその子供たちとともに自殺に追い込まれた。

敏達天皇の末裔である橘諸兄(葛城王)は、大友皇子から要請された九州からの軍兵の徴発を拒否した栗隈王の孫で、藤原四兄弟天然痘の流行で病死したあと、政権の頂点に立った。しかし新しい勢力側からの圧力を受け、謀反の疑いの嫌疑をかけられて職を辞する(756)。橘諸兄の子奈良麻呂は、新しい勢力を除こうとするが、計画が発覚し、長屋王の子供たち、大伴氏の多くの人たちが、死罪・流刑になった。

そのあとも、藤原仲麻呂暗殺計画、藤原仲麻呂の乱氷上川継の謀反、家持の死後には藤原種継暗殺事件と続き、万葉集の編者である大伴家持はこの事件の首謀者と見なされ、埋葬さえ許されなかった。平安京に移った後の大伴氏は伴氏に改名、応天門事件などによってさらに没落の一途をたどった。

新しい勢力は、藤原氏を中心とする勢力だ。大化の改新で、中大兄皇子に協力した藤原鎌足壬申の乱ではすでに没していたが、同族は大友皇子側に立ったので一掃された。藤原鎌足の子とされる不比等はその時13歳で処罰の対象から免れ、そのあと実力で這い上がり、右大臣にまで上り詰め、娘の宮子を文武天皇に嫁がせるほどの権勢を得た。彼の四人の子は政権の中枢に躍り出るが、先に述べた天然痘にかかり薨去した。いったん新しい勢力の力は衰えるが、藤原四兄弟の子供たちの中から藤原仲麻呂が頭角を現し、天皇家の後継問題が厳しさを迎えるころには、政権の中枢となるに及び、古い勢力の大友氏は強い圧力を受けた。

このような時代の大きなうねりの中で、大友氏は没落してゆき、その家族システムも大きな影響を受けた。律令制が導入されるまでの日本は、母方居住あるいは双処居住であった。律令制を導入し、平城京に都を遷したとき、貴族たちは都に宅地を班給された。これは男性たちの官位に基づいてのあてがいであり、同時に導入された蔭位制とともに、父方居住へと導くものであった。

婚姻での母系居住と、職務での父型居住の摩擦の中で、没落してゆく大伴氏が家族システムの中でどのような戦略をとったかを、大伴家持を中心にまとめたのが、以下の論文である。

北海道・縄文の旅(4日目)

北海道縄文の旅も4日目、そして最終日だ。さすがに4日間も一緒にいると、見ず知らずの人々の集まりであったツアー仲間たちの間でも会話の量が増えてきた。バスの中でも、遺跡で説明を受けているときでも、賑やかになり、軽口の一つもたたくような状況になった。今回のツアーに参加したのは夫婦2組、女性一人旅9人、男性一人旅5人だった。一人だけ30代で、残りは60歳を越えていた。やはり、縄文時代が大好きという人が多く、訪れた遺跡を紹介しあったりして、次の計画を立てるにあたっての情報を得ていた。席を和ませてくれたのは、やはり大阪のおばちゃん(おばあちゃん?)。最近、東京に引っ越してきたそうで、途切れることなく、色々な話を、流暢な大阪弁で語ってくれた。男の人と女の人、そして、東京に人と大阪の人とのコミュニケーション力の差を改めて認識する旅でもあった。

この日の予定は、箱館周辺の縄文遺跡と北方民族資料館の見学で、全行程は100km足らず。
f:id:bitterharvest:20190902110937p:plain

1.函館市縄文交流文化センター

最初に訪問したのは、中空土偶で有名な函館市縄文交流文化センターだ。センターの学芸員の方が見学路に沿って説明してくれた。最初は縄文時代の概略で、写真のパネルで説明してくれた。中央の青と赤の帯状の線は縄文時代の気温を表し、赤は暖かったことを、青は寒かったことを示している。学芸員の方にビジュアルで分かりやすい展示ですねと感想を述べたところ、多くの人からそのように言われ、喜んでいますとのことだった。
f:id:bitterharvest:20190902112117j:plain

その次の部屋には、縄文時代の土器や石器が所狭しと飾ってあった。説明を一生懸命に聞いたために、次の二つの写真しか取れなかった。一つは装飾品、もう一つは舟形土製品だ。
f:id:bitterharvest:20190902113157j:plain
f:id:bitterharvest:20190902113226j:plain

さらに次の部屋には、亡くなった子供の足形を取ったのであろうか、足形付き土板があった。
f:id:bitterharvest:20190902113419j:plain
f:id:bitterharvest:20190902113452j:plain

最後は、今回のツアーのハイライトである中空土偶だ。これは北海道唯一の国宝だ。昭和50年(1975)に、旧南茅部町の主婦がジャガイモ畑で農作業をしているときに、人形の焼き物を発見し、地元役場に相談した。その町の教育委員会が調査をし、出土した場所が縄文時代後期の墳墓群である可能性が高いことが判明した。現在、この地は著保内野遺跡(ちょぼないのいせき)と名付けられている。

昨年のトーハクでの縄文の展示で、国宝に指定されている他の土偶と一緒に飾られた。しかしその時は写真を撮影することがかなわなかったので、今回はいろいろな角度から撮影した。
f:id:bitterharvest:20190902115254j:plain
f:id:bitterharvest:20190902115333j:plain
f:id:bitterharvest:20190902115402j:plain
f:id:bitterharvest:20190902115607j:plain

このセンターは世界文化遺産登録を目指している垣の島遺跡に隣接している。生憎と雨にかすんでいるが、センターから遺跡を望む場所での写真だ。
f:id:bitterharvest:20190902120036j:plain

2.大船遺跡埋蔵文化財展示館

次は大船遺跡埋蔵文化財展示館だ。垣の島遺跡、著保内野遺跡と同様に、平成16年(2004)までは南茅部という町に属していたが、合併により函館市となった。大船遺跡は、大船川左岸の標高45mを超える段丘上に造られた、縄文時代の前期後半(5,200年前)から中期(4,000)ごろまで、1,000年以上続いた大規模な集落の跡だ。100棟を超える竪穴建物跡、盛土遺構、100基以上の土坑墓群などが確認され、深さが2mを超える竪穴建物に特徴がある。たくさんの土器とともに、クジラやオットセイの骨とクリやクルミなどが出土している。

土砂降りの雨の中を、ツアー仲間と運の悪さを嘆きながら、ずぶぬれになりながら見て回った。
f:id:bitterharvest:20190902140247j:plain
f:id:bitterharvest:20190902140320j:plain
f:id:bitterharvest:20190902141740j:plain
f:id:bitterharvest:20190902140358j:plain
f:id:bitterharvest:20190902140439j:plain

深い穴の竪穴住居の復元だ。
f:id:bitterharvest:20190902141556j:plain

展示館の方はちょっと寂しく、パネルによる展示が主であった。それとは別に、発掘の様子を示したジオラマがあった。
f:id:bitterharvest:20190902141259j:plain

3.函館市北方民族資料館

函館駅近くの朝市で昼食をとったあと、函館市北方民族資料館に向かった。今回の旅の目的は縄文時代の遺跡を見ることであったが、実はこの資料館が一番面白かった。訪れる前はおまけぐらいに考えていたのだが、百聞は一見に如かずで、やはり見学してみるものだと思った。

特にツアーを主催してくれた案内人が、ここの資料館をとても気に入っているようで、とても懇切丁寧に説明してくれた。そのため写真を撮る時間がほとんどなかったが、限られた時間の中でのものが以下だ。

幕末から明治初期のアイヌ絵師の第一人者の平沢屏山が描いた「アイヌ風俗12カ月屏風」(復元)から、
f:id:bitterharvest:20190902145241j:plain
f:id:bitterharvest:20190902145328j:plain
アイヌの人々の衣装だ。地域で幾何学的なパターンが異なる。
f:id:bitterharvest:20190902144803j:plain
f:id:bitterharvest:20190902144827j:plain
アイヌの祭礼具であるイクパスイ:周りに存在する全ての神々に感謝と祈願をこめて、これにお酒をつけてふりかける。
f:id:bitterharvest:20190902145840j:plain
セイウチの牙に刻まれた狩猟風景。とてもきれいだ。
f:id:bitterharvest:20190902151607j:plain
f:id:bitterharvest:20190902151640j:plain
アイヌの子供たちが遊んでいる様子を示した絵も。子供たちの様子が分かってとても良い。
f:id:bitterharvest:20190902151836j:plain
f:id:bitterharvest:20190902151850j:plain
制裁棒であるストウ:喧嘩の決着をお互いの背中を殴り合うことでつけた。何とも痛そう。
f:id:bitterharvest:20190902152314j:plain
アイヌの人々を描いた掛け軸
f:id:bitterharvest:20190902144435j:plain
f:id:bitterharvest:20190902144523j:plain

もう少し見学をしたかったが、列車に乗り遅れないようにと新函館北斗へと向かった。鼻の長い新幹線で東京へと向かった。
f:id:bitterharvest:20190902152654j:plain

今回の旅行で、北海道の縄文時代のことがよく理解できたので、同じ文化圏であった東北地方の縄文遺跡をなるべき早い時期に訪れようと決意して、車中の人となった。

北海道・縄文の旅(3日目)

北海道縄文の旅も3日目。札幌から函館へと向かう。縄文時代には津軽海洋文化圏の一翼を担った地域で、2年後の世界文化遺産登録を目指して張り切っている。初日のキウス周堤墓群、これから訪ねる北黄金貝塚、明日の大船遺跡と垣ノ島遺跡、それと今回は訪問しないが入江・高砂貝塚が、北海道側のメンバーだ。

津軽海洋文化圏は、石川さゆりの「津軽海峡・冬景色」に代表される現代人の固定観念とは、対立する考え方だ。本州と北海道の間に横たわる荒々しい津軽海峡は、両者を断絶するものと考えがちだが、縄文時代の人々は、そうではなく、人をつなぐ生活の場と考えていたようだ。この縄文の人たちの心を少しでも理解するために、津軽海洋文化圏の北海道側をとりあえず見ておこうというのが今回の旅の目的だ。

この日の行程は、札幌を朝7時半に立ち、途中で北黄金貝塚情報センター、史跡ピリカ遺跡、五稜郭・函館奉行所を経て、7時にホテルに到着だ。移動距離は350km、車の中で過ごすことが長い一日だ。
f:id:bitterharvest:20190830091725p:plain

この日は、二つの低気圧が渡島半島を挟み、天気予報は雨だった。バスに乗っている間は雨が降ることは殆どなかったが、遺跡を見学しているときはなぜか土砂降りの雨に見舞われた。案内をしてくれた方が、この地域は、海に挟まれているため、天気の変化が激しくなりがちだとのことだった。さらに遺跡となるような場所は、水が得やすいところが選ばれる傾向にあるので、どうしても湿潤なところになるとも教えてくれた。

1.北黄金貝塚情報センター

ここは情報センターと遺跡とが一緒になっている。まずは遺跡の見学から始まった。今回の説明は情報センターのボランティアさんがしてくれた。彼は、土砂降りの雨の中を傘もささずに、我々が待っている貝塚(もちろん復元されたもの)に向かって、草が刈りこまれた道を進んできた。
f:id:bitterharvest:20190830091819j:plain
彼の説明によれば、北黄金貝塚は、縄文時代前期(約6,000~5,000年前)に人々が定住した、台地上の貝塚と低地の水場遺構を中心とした集落遺跡だそうだ。指定面積は9ha弱で、貝塚、住居跡、墓、鹿用落とし穴、盛土遺構、水場の祭祀場が発見された。

貝塚は2か所あり、説明を聞いた場所の貝塚(下の写真で白い部分)からは、縄文人の墓と、14体の人骨が発見された。
f:id:bitterharvest:20190830091900j:plain
もう一つの貝塚(下の写真で奥の方に小さく見える白い場所)は一番古いもので、貝の種類から今よりも温暖だったことが分かっているとのことだった。
f:id:bitterharvest:20190830091952j:plain
貝塚から少し低いところに復元された集落がある。
f:id:bitterharvest:20190830092020j:plain
f:id:bitterharvest:20190830092055j:plain
さらに下ると水場があり、ここは祭祀場の跡だ。使わなくなった道具を割って、供養したとのことだった。
f:id:bitterharvest:20190830092130j:plain
情報センターには遺物が飾られてあった。磨石と石皿が中央部にたくさん飾られていた。磨石は掴みやすいように頭部が丸みを帯びているのが特徴だった。先の水場で見たのは、これらの石を割ったものだ。
f:id:bitterharvest:20190830092156j:plain
館内には次のようなものも展示されていた。貝塚の断面、
f:id:bitterharvest:20190830092225j:plain
発見された人骨(復元)。
f:id:bitterharvest:20190830092258j:plain
f:id:bitterharvest:20190830092326j:plain
骨で作られた装飾品も飾られていた。クジラの骨でできた刀、
f:id:bitterharvest:20190830092355j:plain
ヘアーピン、
f:id:bitterharvest:20190830092428j:plain
ネックレスだ。
f:id:bitterharvest:20190830092502j:plain
土偶もあった。
f:id:bitterharvest:20190830092527j:plain
昼食は長万部駅近くのお寿司屋さん。この駅は、函館本線室蘭本線の分岐点だ。かつてはにぎわっていたと記憶をしていたが、すっかりさびれていた。この近辺には、我々が利用したお寿司屋さん以外には、団体で利用できるようなところがなく、ここがなくなると大変だと添乗員の方が話してくれた。
f:id:bitterharvest:20190830092555j:plain

2.史跡ピリカ遺跡

お昼後の見学場所は旧石器時代のピリカ遺跡だ。ここも遺跡跡と文化館が一緒になっていた。写真は遺跡跡だが、土砂降りの雨で、入っていく気にはなれず、遠目に見るだけだ。
f:id:bitterharvest:20190830092622j:plain
ピリカはアイヌ語で「美しい」を意味する。最近では「ゆめぴりか」というお米が有名なので、馴染みやすい。

この遺跡は、20,000~10,000年前のもの。ピリカベツ川左岸のなだらかな20haの丘陵地帯で、20万点もの石器が発見されている。
f:id:bitterharvest:20190830092651j:plain
発掘時の復元だ。
f:id:bitterharvest:20190830132457j:plain
館内には旧石器時代の道具が展示されていた。
f:id:bitterharvest:20190830093414j:plain
f:id:bitterharvest:20190830093441j:plain
f:id:bitterharvest:20190830093508j:plain
f:id:bitterharvest:20190830093533j:plain
f:id:bitterharvest:20190830093601j:plain
f:id:bitterharvest:20190830093628j:plain
f:id:bitterharvest:20190830093656j:plain
f:id:bitterharvest:20190830093720j:plain
f:id:bitterharvest:20190830093742j:plain
北海道・東北でのナイフ形石器を出土した遺跡、
f:id:bitterharvest:20190830092726j:plain
大陸を含めてのくさび型細石刃核を出土した遺跡だ。
f:id:bitterharvest:20190830092759j:plain

3.五稜郭箱館奉行所

3日目の最後の見学場所は箱館奉行所だ。幕末の安政元年(1854)の日米和親条約により下田とともに箱館も開港され、箱館山麓箱館奉行所が設置された。しかし港湾に近く防備上不利であることから、内陸部の亀田に移設することになった。

新しい奉行所の外堀には、ヨーロッパの城郭都市を参考に、西洋式の星型五角形の形状の土塁が築かれた。その形から五稜郭と呼ばれている。五稜郭のような星形要塞は、火砲に対応するために、15世紀半ばにイタリアで発生したとされている。17世紀後半には、フランスのルイ14世の技術顧問であった建築家ヴォーバンによって、論理的に究極の形にまで発展させられた。しかし射程距離の長い大砲が導入されるようになると、星形要塞は衰退しはじめた。五稜郭が造られたのは、19世紀もすでに半ばになっていたので、ヨーロッパではすでに時代遅れとなっている技術を用いて建築されたということになる。

五稜郭は、安政4年(1857)より7年の歳月をかけて完成し、蝦夷地の統治と開拓、箱館港での外国との交渉など、幕府北方政策の拠点として使われた。文久3年(1863)の大政奉還により、明治政府の役所として引き渡されたが、明治元年(1968)榎本武揚土方歳三らに占拠され、戊辰戦争最後の箱館戦争の舞台となった。明治4年(1871)に開拓使により奉行所を含むほとんどの建物は解体された。そののちは公園として利用されていたが、平成22年(2010)に箱館奉行所は再現された。

奉行所を正面から見たところ、
f:id:bitterharvest:20190830092838j:plain
内部にある大広間、
f:id:bitterharvest:20190830093000j:plain
大広間の床の間、
f:id:bitterharvest:20190830093027j:plain
五稜郭の入り口、
f:id:bitterharvest:20190830093057j:plain
五稜郭を上から見る。
f:id:bitterharvest:20190830092919j:plain

この日のホテルは温泉付き。ここまでの疲れを取り、この旅行の最後の日に備えた。

北海道・縄文の旅(2日目)

2日目はパワースポット巡り。積丹半島の付け根にある余市・小樽近くのフゴッペ洞窟、西崎山環状列石、忍路環状列石、手宮洞窟保存館、小樽貴賓館、小樽運河を見学する全行程120Kmの旅だ。1日で移動するのにちょうどよい距離だろう。
f:id:bitterharvest:20190826175501p:plain

8月の初めごろ、カリフォルニアの友人から、彼の知人夫妻が日本を旅行するので、相談にのって欲しいという依頼があった。そのご夫婦の方から、今回の旅行を始めるちょうど1週間前に、簡単な日程が送られてきた。北海道からスタートして、そのあと広島に飛び、東京に戻ってくる予定で、1カ月にも及ぶ長い旅行だ。さらにそのあと、ハワイに寄って何日間かを過ごし、やっとカリフォルニアに戻るというものだ。アメリカ人は体力に恵まれていることは知っていたけれども、これほどとは思わなかった。

私も北海道に旅行する予定であることを伝え、彼らの要望に合うように、日本歴史の時代区分に従って、それぞれがどのような時代だったかを簡単に説明し、見るべき場所・建物・遺跡などを教えてあげた。想像した通りこれは好評だった。またレンタカーを使って移動するいうことだったので、日本は右ハンドルで、交通標識も英語表示にはなっていないので、十分気をつけるようにということと、1日の移動距離は100~150マイルぐらいに抑えた方が良いというアドバイスを差し上げた。この点はあまり理解されなかったようで、英国やニュージーランドで、右ハンドルで運転したから大丈夫と言う返事を頂いた。ちなみに彼らはともに72歳。このところ話題になっている老人ドライバーに仲間入りする年齢だ。やはり心配ですね。

話はそれたが、今日の行程はアドバイスした距離よりは短いので、移動中は安心してドライバーさんに身を任せた。

1.フゴッペ洞窟

最初の目的地は今市町にあるフゴッペ洞窟。高速道路を利用して、札幌から1時間弱の距離だ。かつてNHKの朝ドラ「マッサン」が好評を博したが、マッサンがウィスキーの醸造を始めたのが余市だ。放映されていたころは、醸造を訪れる観光客で引きも切らないほどの賑わいだったが、今でも続いているのだろうか。

フゴッペ洞窟を発見したのは、当時中学生だった大塚誠之助さん。昭和25年に海水浴に来た彼は、ここで土器片を発見した。札幌南高校で郷土研究会に属していた兄に相談したところ、思わぬ展開になって、翌年より北大助教授の名取さんを中心とした調査団が活動し、刻画が発見された。刻画は続縄文時代後期に描かれた北海道独特の文化だ。

洞窟は暗くて見にくいので、原寸大模型になって刻画とともに別室で展示されていた。
f:id:bitterharvest:20190826175534j:plain
f:id:bitterharvest:20190826175606j:plain
刻画がはっきりと表れるように一部分を拡大してみよう。人だろうか鳥だろうか、生き物が描かれているように見える。
f:id:bitterharvest:20190826175637j:plain
f:id:bitterharvest:20190826175704j:plain
f:id:bitterharvest:20190826175732j:plain
本物の洞窟は別室の奥にあり、薄暗い中で、刻画を見ることができる。但し撮影は禁止。
洞窟からは江別郷土資料館で見たのと同じ江別式土器(後期北海道式薄手縄文土器)も出土している。この土器は続縄文時代の土器だ。
f:id:bitterharvest:20190826175758j:plain
刻画を描くために使われたであろう角斧(左下)、占いのための鹿骨の卜骨(右)などもあった。これらも続縄文時代だ。
f:id:bitterharvest:20190826175825j:plain
擦文時代の太刀も展示されていた。
f:id:bitterharvest:20190826175853j:plain

2.西崎山環状列石

西崎山環状列石は今市町にあり、その構造や発見された土器から、縄文時代後期(約3,500年前)の墓域と推定されている。この丘陵には4つの列石群が発見されている。今回見学したのはそのうちの一つの列石群だ。ここには、現在7つの環状列石が残っており、それぞれは直径約1mの環状になるように自然石を配置している。かつてはもっと存在したようだ。
f:id:bitterharvest:20190826175926j:plain
f:id:bitterharvest:20190826180005j:plain
墓域から眺める景色は素晴らしい。日本海を望むことができる。千島海流対馬海流がぶつかり合い、豊かな漁場が展開されている場所だ。
f:id:bitterharvest:20190826180039j:plain

3.忍路環状列石

忍路環状列石は小樽市にあり、やはり縄文時代後期の墓域だ。万延元年(1861)に発見され、1880年代に札幌農学校の田内捨六によって発掘調査され、明治19年(1886)には渡瀬荘三郎によって、大西洋岸で発見されたストーン・サークルに因んで、「環状石離」と命名された。そのあと配列の一部が持ち出されたり、大正11年(1922)の皇太子行啓に備えて修復されたりしたため、原形をとどめていない。写真からも分かるように環状の中の石が極めて少ない。遺跡の保存の仕方の移り変わりを教えてくれる遺跡でもある。
f:id:bitterharvest:20190826180113j:plain

4.手宮洞窟保存館

手宮洞窟は、慶応2年(1866)小田原からニシンの番屋建設に来ていた石工の長兵衛によって発見された。明治11(1878)年榎本武揚によって彫刻が学界に紹介された。さらにミルンによってはじめて学術的な観察と報告がなされ、開拓使の渡瀬荘三郎などによってつぎつぎと調査がなされた。

そのあと前面の岩が削られたり、鉄道が敷設されたりしたため、当初の姿を徐々に失ったが、明治の中頃から雨除けの廂が設けられたりして保存され、大正10年(1921)には国指定史跡となり、そのあとも整備が続けられ、現在に至っている。ここも文化財の保存の仕方の歴史を知ることができる施設だ。

なお刻画は、1600年前頃の続縄文時代中期~後期に描かれている。
f:id:bitterharvest:20190826180140j:plain
風化が進んでいて、目を凝らさないと刻画を見つけるのが困難だ。下の写真のような刻画が描かれていたそうだ。
f:id:bitterharvest:20190826180213j:plain

4.小樽貴賓館

今日の昼食は旧青山別邸だ。ニシン御殿小樽貴賓館とも呼ばれている。

旧青山別邸は、ニシン業で巨万の富を築いた青山家の3代目政恵によって建てられた別荘だ。初代の青山留吉は、天保7年(1836)に山形県遊佐町の貧しい漁家に生まれ、幼少の頃は父の漁業や母の行商を手伝っていた。18歳のとき養子に出されたが、旧習に馴染めず、家に戻ったあと、24歳の時に北海道の漁場に渡った。

最初は雇漁夫として働いたが、1年後に小規模ながら祝津(小樽)に漁場を開いた。そして明治期に積丹半島に漁場を増やし、道内有数の漁業家になった。故郷遊佐で、土地を入手し、本宅を建築し、大地主となった。明治41年(1908年)留吉が73歳の時に、養子の政吉に家業を譲った。

留吉の故郷である旧庄内藩(山形県)には、「本間様には及びもせぬが、せめてなりたや殿さまに」と言われるほど、北前船で財を成した本間家があった。本間家は並外れた豪商で、酒田を本拠としていた。

留吉と政吉とによって巨万の富を得た青山家を継いだ3代目の政恵(政吉の娘)は、17歳の時に酒田の本間邸に魅せられそしてこれに負けないような邸を自ら持ちたいと思い、大正6年(1917)より6年の歳月をかけて旧青山別邸を小樽の祝津に建てた。

旧青山別邸で昼食したあと、ここを見学した。とても贅沢な造りだという一言に尽きるが、残念ながら、写真の撮影は大広間だけだ。別邸の入り口、
f:id:bitterharvest:20190826180249j:plain
大広間、
f:id:bitterharvest:20190826180316j:plain
f:id:bitterharvest:20190826180446j:plain
大広間の天井だ。
f:id:bitterharvest:20190826180343j:plain

5.小樽運河

小樽は自由時間だったので、歴史的建造物を訪れた。今日の小樽市は観光地として有名だが、かつては北海道の中心的な存在で、港湾都市として栄え、日銀通りに沿って、日本銀行をはじめとする主要な銀行が支店を出し、北のウォール街と呼ばれるほど活況を呈していた。その名残を伝えてくれるのが古い建物だ。

次の2つは小樽市指定有形文化財になっている建物だ。

日本銀行旧小樽支店 建設年次は明治45年(1912):明治26年(1893)に日本銀行の派出所が初めて開設。そのあと出張所を経て支店に昇格。 平成14年(2002)に廃止。レンガ作りの壁にモルタルを塗り、屋根は銅葺き。辰野金吾・長野宇平次・岡田信一郎の設計。東京駅に代表される「辰野式」とは異なり、岡田の意匠によるところが多いとされている。
f:id:bitterharvest:20190826181125j:plain
三井銀行小樽支店 建設年次は昭和2年(1927):三井銀行は明治13年(1880)に小樽出張店を開設。平成14年(2002)年に閉鎖。現在の建物は6代目。工部大学校一期生である曽禰達蔵設立の曽禰中條建設設計事務所が設計。ルネサンス様式の建造物。小樽で初めての鉄骨鉄筋コンクリート
f:id:bitterharvest:20190826181015j:plain

ここからは小樽市指定歴史的建造物になっている建物だ。

旧金子元三郎商店 建設年次は明治20年(1887):明治・大正期に海陸物産、肥料販売、海運業。建物の両端にうだつ(防火壁)。2階正面の窓は漆喰塗りの開き窓。
f:id:bitterharvest:20190826180529j:plain
正面の建物ではなく、右側の建物が旧第百十三国立銀行小樽支店  建設年次は明治28年(1895) :小樽支店として使用。業務拡大に伴い北寄りに移転。そのあと木材貿易商事務所や製茶会社建物として使用。寄棟の瓦屋根にトンガリ飾りの和洋折衷。明治の面影をよく伝える。
f:id:bitterharvest:20190826180641j:plain
旧岩永時計店 建設年次は明治30年代(1897):平成3年に改修され、創建時の姿に。屋根の装飾、軒の繰り型など細部にも凝ったデザイン。瓦葺屋根を飾る一対の鯱は商店では珍しい装飾。
f:id:bitterharvest:20190826180710j:plain
旧名取高三郎商店 建設年次は明治39年(1906):山梨出身の銅鉄金物商。明治37年の大火後に建設。西側と南側に開いた形でうだつ。外壁は札幌軟石、上部壁体を鉄柱で支持。明治後期の代表的商業建設。
f:id:bitterharvest:20190826180828j:plain
旧百十三銀行小樽支店 建設年次は明治41年(1908):支店の設置は明治26年。当初の建物は南寄りにあったが、業務の拡大に応じてここに建設。寄棟、瓦屋根、角地に玄関で、ギリシャ建築を思わせる。
f:id:bitterharvest:20190826180802j:plain
右から3番目の茶色の古めかしい建物が旧北海雑穀株式会社 建設年次は明治42年(1909)以前:木骨石造構造、瓦葺の切妻屋根、開口部に鉄扉。正面両脇に袖壁。2階に竿縁天井や床の間があり、和室の面影。彫刻模様付きのカーテンボックスや上げ下げの窓。和洋折衷。
f:id:bitterharvest:20190826180604j:plain
三菱銀行小樽支店 建設年次は大正11年(1922):当初は外壁に煉瓦色のタイルだったが、昭和12年に現在の色調に。1階はギリシャ・ローマ建築様式。
f:id:bitterharvest:20190826180900j:plain
北海道拓殖銀行小樽支店 建設年次は大正12年(1923):小樽経済絶頂期に建設。銀行ホールは2階まで吹き抜け。6本の古典的円柱。
f:id:bitterharvest:20190826180941j:plain
旧第一銀行 小樽支店 建設年次は大正13年(1924):当初は道路側の2面に3階通しの大円柱があった。
f:id:bitterharvest:20190826181052j:plain
三井物産小樽支店 建設年次は昭和12年(1937):玄関・1階の壁の黒御影石と、2階以上の白色タイルとでコントラスト。玄関ホールの内装は琉球産大理石。
f:id:bitterharvest:20190826181202j:plain

この後は札幌に向かい、明日に備えて早めに床に就いた。

北海道・縄文の旅(1日目)

歴史の勉強を始めてすぐに、北海道の歴史は、本州、特に畿内を中心としたそれとはずいぶん異なる、ということを知った。知っただけでなく興味を持つようにもなった。そのきっかけを与えてくれたのは、ある会合で、北海道の小中学校で副読本として利用されている『アイヌ民族:歴史と現在』を頂いたことだ。副読本を読むことで、アイヌの人々が身近に感じられるようになり、さらに瀬川拓郎さんの『アイヌの世界』で、独自の文化が形成されたことを知った。そこで北海道の歴史に一度触れてみたいと思っていたところ、ある旅行会社が北海道の縄文時代の遺跡を中心にしたツアーを企画しているというのを知り、今回それに参加した。

国内ツアーの多くは、2泊3日だが、このツアーは3泊4日だ。添乗員さんは当然のこと、案内人付きという、どちらかというと、オタク系のツアーだ。参加者は、このような人ばかりと想像して、二の足を踏まないでもなかった。しかし歴史の勉強を始めてから4年目となり、かなりの知識をため込んだので、話題についていけるだろうと思って意を決した。

初日の見学場所は千歳から札幌に沿っての縄文遺跡で、キウス周堤墓群、恵庭市郷土資料館、江別市郷土資料館、江別古墳群の4か所で、全行程70km超だ。
f:id:bitterharvest:20190825103419p:plain

1.キウス周堤墓群

古い教科書を見ると、縄文時代は平等な社会だったと書かれている。しかしあるシンポジウムで国立歴史民族博物館教授の山田康弘さんから次のような話を伺った。かつては山田さん自身もそのように考えていたそうだが、他の縄文時代遺跡とは比較にならないような大規模な構造物の周堤墓に出会い、階層社会が始まったと考えるようになったと話してくれた。それがこれから行くキウス周堤墓群だ。

入り口にはパンフレットが置かれていたが、日本語のパンフレットはツアー参加者全員分には足りなかったので、英語のパンフレットをもらった。このパンフレットによれば、造られたのは3,200年前の縄文時代後期後葉、8基の周堤墓が発見されている。その中で、大きいのは1,2,4号周堤墓で、その外周の直径はいずれも75m、内周のそれは39m、32m、45mだ。外周と内周の間には堤がある。内周の内部は掘られていて、その深さは2m、5.4m、2.6m、掘った土を積んで堤にしたのだろう。

このうち1、2号周堤墓を見た。2,4号周堤墓は道路によって切削されているので、完全な姿で見ることができるのは1号周堤墓だ。この周堤墓の中心付近では5基の墓穴が発見された。

1号周堤墓
f:id:bitterharvest:20190825104024j:plain
2号周堤墓。道路が横切っていて、古代の墓の中を現代のトラックが走り抜ける。この周堤墓からは楕円形の墓穴が1基みつかり、8個の石によって囲まれているそうだ。
f:id:bitterharvest:20190825104055j:plain
山田さんが大規模だと言っていたので、その言葉を過度に受けてしまい、実際に周堤墓を見たときは正直がっかりした。期待していたよりはずっと小さかった。1号周堤墓の写真は、堤の上から中心部に向かって撮影した。堤が周りを囲んでいるのが見え、中心部がくぼんでいるのが分かる。樹木が生えているため、墓は林の一部になっている。自然の中に溶け込んでいるので、それほど大きく感じられない。それにもまして、自然の中に溶け込んでいる周堤墓群を良くも発見したものだと、発見者に感謝を申し上げたい。

山田康弘さんの『縄文時代の歴史』には、千歳市教育委員会が行った2号周溝墓の土砂移動量の計算が紹介されている。それによれば2,780~3,380平米だ。1人の成人男子が1日8平米運んだとして、432日かかるそうだ。これに穴を掘る作業も加えれば、大変な土木工事になる。このように具体的に数値が示されると、この遺跡の偉大さを実感できる。

土坑墓は周堤墓の中心だけでなく、堤の上、周堤墓の外にも造られた。また中心の墓は多くの装身具・副葬品を伴っていた。このため何処に埋められるかの区分がなされていたのではないか、即ち社会的階層があった、というのが山田康弘さんの意見だ。

2.恵庭市郷土資料館

次に向かったのは恵庭市郷土資料館だ。カリンバ遺跡から発掘された出土品を展示している博物館だ。カリンバ遺跡は、恵庭駅の北方800mのところにある。
f:id:bitterharvest:20190825103504p:plain

1999年の道路工事に伴う発掘調査によって発見され、近くにはカリンバ川(カリンバは「桜の木の皮」というアイヌ語)が流れ、川沿いの低地面と、2~3mほど高い丘陵面を利用して人々が生活した、縄文時代から近世アイヌ文化期にかけての遺跡だ。縄文時代後期末から晩期はじめ(3,000年前)の土坑墓が36基見つかり、内4基は直径が1.6~2.5mの合葬墓で、残りの32基が単葬墓だ。

低地面は生活の場であったようで、貯蔵穴・建物跡・炉跡が残されていた。また段丘面からは縄文時代から近世に至る各時代の竪穴住居跡・土坑墓・建物跡・炉跡など、多数の遺構が残されていた。

これらの遺構は、発掘調査が終了したあと、埋め戻され、カリンバ自然公園となっている。

4基の合葬墓の内の3基からは、埋葬された人が身に付けていた漆塗りの櫛・腕輪・腰飾り帯などたくさんの漆塗り装身具が見つかった。副葬品は合わせて397点で、先に述べた漆塗り装身具の他に、玉、土器、サメ歯で、これらは重要文化財に指定されている。

次の写真は118号土坑墓を復元したものだ。この土坑墓から漆製品やサメの歯などが発見された。
f:id:bitterharvest:20190825104252j:plain
土坑墓に埋葬された人たちの様子を示したのが、下の写真だ。この土坑墓には4人が屈折された状態で埋められていたと考えられている。説明してくださった学芸員の方によれば、4人はいずれも女性で、残されている副葬品などの具合から一緒に埋められたようで、祭祀を司る女性が亡くなったとき、殉葬されたのではないかと教えてくれた。もしこれが正しいとすれば、単葬墓からは副葬品が発見されないことを配慮すると、この時代には社会的な格差が存在したと考えてよいだろう。キウス周堤墓群から200年ほどたっているので、さらに目に見える形で表れたのだろう。
f:id:bitterharvest:20190825104324j:plain
カリンバ遺跡からの出土品も展示されていた。漆製品は劣化を防ぐために、年に一度だけ公開され、残りの期間はその複製品だ。


118号土坑墓からだ。
f:id:bitterharvest:20190825104359j:plain
同じく118号土坑墓の出土品(複製品)だ。
f:id:bitterharvest:20190825104438j:plain
同じ土坑墓からの土器だ。
f:id:bitterharvest:20190825104525j:plain
118号土坑墓(左下)と他の土坑墓から発掘された首飾りだ。
f:id:bitterharvest:20190825104607j:plain

3.江別市郷土資料館

次の訪問場所は、江別市郷土資料館だ。女性職員の方が説明をしてくれた。

江別市は、石狩川(地図の上部)と原生林(地図の下部、現在は野幌森林公園になっている)とに挟まれた平野部に展開した街だ。明治11年(1878)に屯田兵が入地し、開拓が本格的にスタートした。
f:id:bitterharvest:20190825103605p:plain

屯田兵制度は失業士族の救済と、ロシアに対する国防の要地としての北海道内陸部の開拓という課題を解決するために設定された制度で、最初の屯田兵は明治8年(1875)に札幌の琴似に、次の年に札幌の山鼻に入っている。明治10年西南戦争があったために中断され、次の年には江別に入地した。入地した場所は、この後に敷設された函館本線の西側で、岩手県から10戸56名を迎えた。地図で右端が最初に入地した人々の場所だ。12戸なのは分家により2戸増えたため。
f:id:bitterharvest:20190825103657g:plain
当初は碁盤の目のように区画されたが、明治15年に鉄道が開通し、それ以降は鉄道に並行になるように区画されたため、平行四辺形になった。

屯田兵には耕宅地として4,000坪(1町=3000坪=約1ha)が与えられ、3年後に成功しているならばさらに10,000坪が加えられた。また、移住後の3年間は扶助米と塩菜料が与えられた。米の量は1人当たり1日7合(当時の人は5合食べたので、2合余るが、これは必要品の購入や将来の蓄えに使われただろう)。屯田兵としての軍事訓練が午前中に行われ、耕宅地の開拓は午後からであった。原始林や熊笹で覆われた土地の開墾は、妻子に大きな負担を強いたことだろう。

江別には屯田兵に先立って入植してきた人々が存在する。明治8年(1875)にロシアとの千島樺太交換条約によって、千島列島を日本に、樺太全域をロシア領にすることが決まった。このため樺太に住むアイヌ人は、樺太に居住する場合にはロシア国籍に、日本国籍を選択する場合には日本へ移住することとなった。日本へ移住することになったアイヌの人々841人は、農業に従事させようとする開拓使(政府)の思惑もあって、宗谷を経て、対雁(ついしかり、江別)に移住させられた。開拓使は彼らに戸地を与え、学校や製鋼所を作って定住を試みたが、漁業を生業としていた彼らは営農に馴染むことができず、遺民漁場場が設けられた来札(石狩)などに移り住むようになった。そして追い打ちをかけるように、コレラ天然痘などの疫病にかかり多くの人が命を落すという悲劇にも見舞われた。明治19年ごろには生存者の大半は来札に移り住んでいた。その後、日露戦争の勝利によって南樺太が日本領になると、彼ら336人は故郷樺太に戻っていった。

しかし江別の歴史はこれらの人々が開始したわけではなく、太古の昔に始まった。縄文時代草創期(13,000~10,000前)の土器が大麻1遺跡から、早期(9,000~7,000前) の土器が大麻15・坊主山・吉井の沢1遺跡などで、また竪穴住居跡が大麻6遺跡などで発見されている。

北海道の時代区分は、稲作文化が伝わらなかったことから、縄文時代のあとは、続縄文時代(紀元前3世紀~紀元後7世紀)、擦文時代(7~13世紀)となっている。江別市の主要な遺跡は、江別太遺跡、坊主山遺跡、高砂遺跡、旧豊平河畔遺跡、元江別遺跡、大麻遺跡、萩ヶ岡遺跡 、江別古遺跡などである。

これらの遺跡から出土した土器は、2階の展示室に、時代を追いながら、所狭しと飾られていた。

縄文時代早期から前期(6,000~5,000前)
f:id:bitterharvest:20190825104700j:plain
縄文時代中期(5,000~4,000前)
f:id:bitterharvest:20190825104727j:plain
縄文時代中期
f:id:bitterharvest:20190825104753j:plain
縄文時代後期(4,000~3,000前)
f:id:bitterharvest:20190825104831j:plain
縄文時代晩期(3,000~2,300前)
f:id:bitterharvest:20190825104903j:plain
縄文時代
f:id:bitterharvest:20190825104931j:plain
縄文時代
f:id:bitterharvest:20190825105001j:plain
擦文時代
f:id:bitterharvest:20190825105026j:plain
このようにたくさんの土器が展示されている中で、注目したいのは続縄文時代の江別式土器と呼ばれているものだ。アイヌ文様の原形ではと思わせるような文様が描かれていた。
f:id:bitterharvest:20190825105106j:plain
f:id:bitterharvest:20190825105137j:plain
f:id:bitterharvest:20190825105201j:plain
木製品が残されているのも特徴だ。木製ナイフ(続縄文時代)だ。
f:id:bitterharvest:20190825105232j:plain
琥珀白玉(続縄文時代)
f:id:bitterharvest:20190825120156j:plain
時代は遡るが土偶(縄文時代晩期)もある。果たして何を表しているのだろう。熊という人も多い。
f:id:bitterharvest:20190825105332j:plain

4.江別古墳群

初日の最後の見学場所は江別古墳群だ。最も北に位置する古墳として知られている。江別市郷土資料館にジオラマが飾られていた。
f:id:bitterharvest:20190825105302j:plain
雨の中、藪をかき分け古墳群についたが、草が生い茂っていて、ただの野原にしか見えない。古墳の一つと言われたのが、イタドリの群生に占拠されているこの写真の場所。激しい雨でびしょ濡れになったが、その甲斐もなかった。
f:id:bitterharvest:20190825105449j:plain

靴の中もぐしょぐしょになり、寒さも感じる中、札幌市内のホテルへと向かった。到着したときはほっとした気分になった。

メジナの丸ごとホイル焼き

行きつけのアピタの魚売り場は、切り身魚が主流だが、ときどき丸ごとの魚を売っている。この日(10日)もタイでもないだろうかと物色していると、魚屋さんではあまり見かけないメジナが一匹だけ陳列されていた。料理法は、刺身に始まって煮魚まで、バラエティーに富んでいるが、あまり手間暇をかけたくなかったので、ホイル焼きにした。ここのお店は調理をしてくれるので、内臓とうろこを取り除いてもらった。

料理の材料はいたって少なく、主役のメジナと味付け用のオリーブオイルとハーブ塩だ。
f:id:bitterharvest:20190813133144p:plain

上の面に包丁で切れ目を入れた。
f:id:bitterharvest:20190813133241p:plain

さらにハーブ塩を両方の面にまぶした。
f:id:bitterharvest:20190813133351p:plain

オーブン皿にホイルを拡げ、その上にオリーブオイルをのせた。
f:id:bitterharvest:20190813133518p:plain

その上にメジナをのせる。
f:id:bitterharvest:20190813133614p:plain

上からもオリーブオイルをかけた。下とあわせて大さじ一杯程度。
f:id:bitterharvest:20190813133725p:plain

頭と尻尾に飾り塩。
f:id:bitterharvest:20190813133818p:plain

ホイルで包む。
f:id:bitterharvest:20190813133904p:plain

オーブンを230度にして25分間焼く。焼きあがったら、そのまま10分間分蒸らして、余熱で深部を焼く。
f:id:bitterharvest:20190813134101p:plain

この日はサラダも一緒に造り、手元にあったオーストラリア産の白ワインと、パリッとした触感のフランスパンとともに、真夏最中の夕飯で、さっぱり味の白身魚を楽しむことができた。

Maker Faireで「からくり計算器」を見学

長かった梅雨がやっと明けた東京は、これまた異常ともいえる暑い日がずっと続いている。Maker Faire に行きませんかと誘われたのは、曇り空がずっと続いた鬱陶しい梅雨のときだった。暑いころの出かけになると思ったが、これほどの暑さの中とは、不覚にも、予想していなかった。

朝の9時まえにもかかわらず、暑い夏の日差しの中、木陰を選びながら家から最寄り駅に向かったものの、熱した歩道から反射してくる容赦のない熱気を嫌というほど浴びた。限界が頂点に達していたので、人の暑さを感じるような電車に乗るのは耐えられないと思ったが、幸いなことに、日曜日の電車はそれほど混んでいなかった。催し物の会場である国際展示場駅まで、2回乗り換えをしたものの、ずっと座っていくことができ、涼をとることができた。

途中で利用した東急電鉄大井町線では「キューシート」と呼ばれる珍しい車両に乗り込んだ。この電車は座席の方向が変えられるようになっている。前向きに座れるクロスシートと横長のロングシートだ。私鉄各線では快適な通勤に力を入れているが、これもその取り組みの一つだ。平日夜にはこの電車はクロスシートで全席指定となる。それ以外の時間帯はロングシートだが、通常の電車と比べると、格段に座り心地がよい。

都内の電車は、ドアとドアの間に設けられた座席は7人掛けが普通だが、若い人たちの体格がよくなったこともあり、最近は窮屈に感じることが多い。しかしキューシートは、2人掛けの座席が3個横に並ぶため、座席一つ分広い。3組のアベックが丁度良いプライバシーを保ちながら座っているような感覚になれる。

このようなこともあって、電車に乗っている時間は楽しむことができたが、会場の最寄り駅の国際展示場駅を出ると、空は雲一つなく、太陽がぎらぎらと輝いていた。目的地の東京ビッグサイトまでは徒歩7分なのだが、灼熱の中の行軍だ。唯一の救いは、屋根のついた歩道だ。干上がってしまうことは避けられそうだ。屋根の両端からシャワーが流れていればとても快適になれると希望したのだが、果たされない夢だった。

もう歩きたくないと思い始めたころ、東京ビッグサイトにたどり着いた。
f:id:bitterharvest:20190805103516p:plain

入り口には、Maker Faireの大きな看板もあった。主催者はIT関連出版社のオライリー・ジャパンだ。日本最大の工作物の展示会、それも自作だ。このフェアーへの出店は、個人あるいは企業からの申込制で、主催者の選考によって決定されたそうだ。物品を販売しない個人出展者の場合は、出展料金はかからない。展示スペースはそれほど広くなく、多くの出展は2m四方。大きい場合でも4m四方だ。さしずめ学園祭の延長というところだ。
f:id:bitterharvest:20190805103552p:plain

開始時間を少し過ぎたころに会場に到着したが、会場の入り口付近は、夏休みということもあって、子供連れの入場者でにぎわっていた。我々は出品者用の札を頂いていたので、それを示し、同行者(今回誘ってくれた方)の甥御さんの展示場所へと進んだ。

そこはなかなか盛況で、二重、三重に人が集まっていた。人の間から展示の様子を見ると、少し大きめの机の上で『からくり計算器』のデモが行われていた。歯車やクランクを組み合わせて、2進数の基本演算を行ってくれる。素材は木だ。どのような利用法があるのだろうと考えていると、テレパシーで通じたのだろうか、見学者の一人の方が「おきもの」に良いですねと言った。これを用いて計算する機会は少ないだろうから、異質のおきものと考えたのだろう。

でも、おきものでは寂しすぎるように思う。手に取って動かし、からくりを解いてみるのが面白いと思う。さらに進んで、作れるということが分かったので、自作のハードルが低くなったはずだ。真似することなく、自身で作ってみるのもよい。抽象的なものを実体として見せることは、面白いことだ。どちらが馴染まれるかを競ってはどうだろうか。

私は「動くからくり」が好きだ。ヨーロッパの昔ながらの広場では、からくりを有する時計台を見かけることが多く、その仕掛けが判明する時報を楽しみにしたものだ。日本では、江戸時代後期から明治時代初期にかけて、田中久重さんが「弓曳童子」や「文字書き人形」を作成した。また彼の「万能時計」は平成16年に東芝セイコーの技術者によって復元されたが、そのとき群を抜いた発想力であったことが改めて確認された。

からくりは人に見せる楽しみもあるが、作る方が格段に面白いと思う。マイコンを用いれば、今日ではこの手のものは、ロボットとして、簡単に作ってしまうことができる。ただ歯車とクランクの組合せだけで実現しようとすると、その複雑さは尋常ではない。しかしその難しさゆえに、苦労を重ねて、実現したときの喜びは並大抵でなく、ものづくりの醍醐味を味わうことができる。

これらの優れたからくりは、たくさんの試行錯誤を重ねた末の結果だろう。逆に、どれだけ試行回数を重ねられるかが、良い製品を生むための決め手となる。同行者によれば、製造は随分と簡単になっているようだ。設計データを電子化して、ファブリケーション(製造)してくれるメーカーに送りさえすれば、3Dプリンタや自動カッターを用いてメーカーの方で、完成度の高い部品を作成してくれるそうだ。そのあとはそれらを組み立てるだけで済む。ファブリケーションが簡単になったことで、設計により多くの時間を割くことができるようになり、良い製品ができるようになったともいえる。

展示を見て、出店者の多くの人々が自作を楽しんでいることに、改めて気づかされた。もちろん自身の工作物が世の中に出ていくことを望んでいるだろうが、それ以上に、作ることを楽しんでいるだろうと感じさせてくれた。このような人々の環境を良くしてあげるためには、もっと身近なところでファブリケーションを助けてくれる施設が必要だろう。希望するものを短い時間で簡単にファブリケーションしてくれる工房が、近いところにあれば、今まで以上に試行を重ねることができ、その結果としてもっと優れた工作物を生み出せるようになる。そしてそれらの中から優れた製品が生まれる機会も高まるだろうと思いながら会場を後にした。

南信州の飯田市に人形美術館を観に行く

豊川に用事があったので、ちょっと足を延ばして南信州の飯田を訪ねた。豊川から飯田までは、秘境駅で知られている飯田線を利用した。豊川駅の出発は午後6時半。豊川駅には売店もないということなので、豊川稲荷にお参りがてら、近くのお土産屋で、今夜の夕食にするための稲荷ずしを入手した。
f:id:bitterharvest:20190717094655p:plain
f:id:bitterharvest:20190717103920p:plain
今回の旅行に先立って、新幹線はスマートEXを利用して座席を確保したが、飯田線はどうせ混みはしないだろうとたかをくくったいた。しかし他方では、もしかすると三連休の初日なので、座席がいっぱいになっているかもしれないという不安を抱きながら、豊川駅の切符売り場で、「飯田まで、特急券も込みで」と注文した。優しそうな駅員の人が、「指定席にしますか」と尋ねてきたので、「はい」と答えると、しばらく機械を操った後で、「ガラガラのようなので、自由席にして、もし混んでいるようでしたら、指定席に移られたらどうでしょう」と示唆してくれたので、言われるとおりに切符を購入した。二人分で、特急券も含めて、8,200円だった。

ホームで待っていると、特急ワイドビュー伊那路は定刻に入ってきた。乗り込むと列車は教えられた通りガラガラで、指定席券を買わなくてよかったと得した気分になった。観光列車なのだろうが、観光客には都合が良いとは思えない夕刻の列車だ。乗車したときは明るかった空も、古戦場で有名な長篠を過ぎるころには、周囲は闇に包まれ、景色を楽しむことはできなかった。少数の乗客も、一人二人と降りていき、平岡駅で最後の乗客が降りてしまうと、3両編成の列車には、我々夫婦だけが残された。真っ暗闇の原始的な自然の中に、列車の室内だけが明るい人工的な空間に、置き去りにされたというような心細さが襲ってきた。平岡駅の周囲の駅は秘境駅で知られており、行楽シーズンにはこれらの駅の訪問を目的にした秘境号が走っている。このような人気の全く感じられないところで、激しく雨が降っている夜中に、取り残されるような事態になったらと想像したりしていたら滅入ってきたが、銀河鉄道に乗っていると思うことにして気を紛らわせた。
f:id:bitterharvest:20190716102852p:plain

そうこうするうちに、飯田市の市内に入ったのだろう。車窓に少しづつ街のあかりが灯るようになり、ほっとした。列車は定刻9時に飯田駅に滑り込んだ。外は激しい雨だった。今夜の宿は駅からそれほど離れていないホテルニューシルクだが、ずぶぬれになりそうなので、タクシーに乗り込んだ。近い距離だということを知らずに乗り込んだ客だと、運転手さんは思ったのだろう。とても恐縮して、「雨が激しいですね。すぐそこなので、すぐにつきますから、道一本越えたところですから」としきりに弁明しているのが、おかしかった。走っている時間よりも信号機での待ち時間の方が長かっただろう。タクシーは、数分後、ホテルの玄関前に滑り込んだ。

フロントで素泊まりでの料金12,560円を支払い、部屋へと向かった。ビジネスホテルなのであまり期待はしていなかったのだが、ドアを開けてみると期待を超えて大きく、ベッドのそれぞれの横にはサイドテーブルがついており、灯かりが相手の迷惑にならないように配慮されていたので一安心した。同じ階の大浴場でこの日の疲れをとって、明日に備えた。

次の日、朝食をとろうと駅前に向かった。飯田駅は平成4年に現在の駅舎になったとのこと、赤い屋根が特徴だ。信州特産のリンゴの色だそうだ。
f:id:bitterharvest:20190717100356p:plain
駅舎のステンドグラスも綺麗だ。人形劇の一場面のようで、手前はそれを鑑賞している観客だ。
f:id:bitterharvest:20190718164440p:plain

改札口でお迎えしてくれたのが、ナミキちゃん。ここ飯田も御多分に漏れず町興しに力を入れているのだろう。
f:id:bitterharvest:20190717100516p:plain

ナミキちゃんから、実際の改札口の方に目を転じると、ホームへの通り口なのにそれをふさぐように看板が置かれていた。一瞬嫌な予感が走り、掲示の「お知らせ」を読んでみた。なんとそこには、早朝に東栄駅(中部天竜駅本長篠駅の間)で通信ケーブルが破損し、豊川方面は不通になっており、復旧には相当の時間を要すると記されていた。飯田までやってきた今回の目的の一つは、飯田線からの車窓を楽しむことであった。そのため昼過ぎの特急列車に乗車することを予定し、豊橋から東京までの新幹線ひかり号の切符は既に購入済みだった。戦略を誤ると今日は帰れないかもしれないという嫌な予測さえ浮かんできた。朝食をとれそうなお店もなかったので、コンビニでおにぎりを購入し、ホテルに戻って今日の予定を考えることにした。

駅前はこのような感じだった。朝が早かったので、まだシャッターはどこもしまっていた。飯田市は10万人には少し届かない(ただし外国人を含めると超える)が、長野県では長野市松本市上田市に次いで人口が多く、南信州の中心的な市だ。もう少し活気があってもよさそうだが、どこの街も駅前は寂しくなっているようだ。
f:id:bitterharvest:20190717103121p:plain

朝食を済ませたあと、再び飯田駅を訪れた。状況は変わっていない。開通するような気もしたが、リスクをとることはやめて、改札の窓口にいき、「今日の新幹線利用は難しそうなので、払い戻しをしてもらえませんか」と依頼。駅員の人はとても恐縮して「列車が不通でご迷惑をおかけして申し訳ありません。払い戻しの方は承りました」と言って、手数料なしで払い戻しをしてくれた。そのあと駅前の案内所に行って、午後2時の新宿行高速バスを予約した。

飯田線からの車窓を楽しむ機会をなくしてしまったが、帰るための方策は立ったので、市内の観光に出かけた。飯田駅から中心部の市役所までの地域は「丘の上」と呼ばれている。下図は飯田市の市街地だ。中央左上に飯田駅がある。中央の少し下はこれから訪れる「川本喜八郎人形美術館」だ。その右下が市の官庁街で、図書館や美術館などがある。市街地は、天竜川の二つの支流、地図の右上の「野底川」と下の「松川」に挟まれた合流扇状地だ。
f:id:bitterharvest:20190717110205p:plain

段丘と川に恵まれた飯田市は、太古から人々が居住し、縄文・弥生・古墳時代の遺跡が点在している(520基にも及ぶ古墳があったそうで、現在残っている18基の前方後円墳と4基の帆立貝形古墳のまとまりは「飯田古墳群」と呼ばれている)。また奈良・平安時代には、伊那郡を治めるための伊那郡衙が設けられた(郡衙は下図の右上の恒川(ごんが)官衙遺跡のところにあった)。今回は残念ながら車での移動ではなかったため、訪れることはできなかった。
f:id:bitterharvest:20190718083239p:plain

飯田市は昭和22年(1947年)に大火があり、街の中心地は殆ど焼き尽くされた。その後の復興事業で、市中心街には二本の直交する緑地帯つきの防火帯道路が設けられ、南北に走る道路には地元の中学生によってリンゴの木が植えられた。「リンゴ並木」と名付けられ、復興のシンボルとして知られるようになった。
f:id:bitterharvest:20190718090220p:plain
f:id:bitterharvest:20190718090316p:plain

リンゴ並木の近くに、川本喜八郎人形美術館がある。
f:id:bitterharvest:20190718090540p:plain

川本喜八郎は、1982~84年にNHKからテレビ放送された人形劇「三国志」で人形美術を担当した人形作家だ。美術館のエントランスには、三国志に登場する諸葛亮(孔明)の木目込み人形が置かれていた。
f:id:bitterharvest:20190718091535p:plain

ギャラリーには、「三国志」、1993~95年にNHKから放送された「人形歴史スペクタクル 平家物語」、遺作となった人形アニメーション死者の書」で使われた人形が並べられていた。人形の着物は、全て帯を使って製作されたとのこと。その中で、曹操の着物は赤色だが、赤に染めた帯はまれだったため、入手にはとても苦労したとのことだった。全ての人形がとてもリアルに造られていることにビックリさせられた。また美術館の方から、人形の動かし方を教えて頂いた。人形を貸してくれたので試みたが、なかなか思うようにはいかなかった。

死者の書は、民俗学者で国文学者の折口信夫が著したものだ。あらすじは次のようになっている。藤原南家の郎女(姫)は、大和と河内の境のそして女人禁制の二上山に入り込み、そこで非業の死を遂げた大津皇子(天智天皇の皇子)の亡霊にまみえる。郎女はおもかげと重なる彼の姿を曼荼羅(まんだら)に織り上げ、さまよう魂を鎮め、浄土へと一緒に誘うという物語だ。郎女は、当時権力を極めた藤原仲麻呂の姪である。藤原仲麻呂大伴家持とで郎女が二上山に行ってしまったことを話している場面もある。また大津皇子が一目ぼれした耳面刀自(みみものとじ)が出てくるが、郎女は刀自の化身でもある。この作品は、古代人の心情をうまく描き出していると言われているので、機会があれば観たいと思っている。

ベトナムからの中高校生の団体見学もあってにぎわっていた人形美術館を後にして、日本画菱田春草の作品を鑑賞するために、飯田市美術博物館へと向かった。途中昭和4年(1929年)に新築落成した追手町小学校を通り過ぎた。時代を感じさせる校舎だが、鉄筋コンクリート3階建てでがっちりしている。長野県内では、使用中の校舎としては、松本深志高校に次いで古いそうだ。
f:id:bitterharvest:20190718102357p:plain

赤門もあった。飯田城桜丸御門だが、通称でこのように呼ばれている。
f:id:bitterharvest:20190718102938p:plain

そして目的地の飯田市美術博物館だ。
f:id:bitterharvest:20190718103035p:plain

しかし残念なことにリニューアル中だった。窓口の方が申し訳なさそうに見学できないことを伝えてくれた後で、柳田國男館を勧めてくれた。東京都世田谷区成城にあった書屋を飯田市に移築したものだ。柳田國男は、飯田市在住の柳田家に養子に入った。兵庫県の生まれで、父は儒者の松岡操、母はたけ。生家はとても狭く、「私の家は日本一小さい家だった」と言っていたそうだ。
f:id:bitterharvest:20190718103647p:plain

少し歩き疲れたので、駅までは電気小型バス「プッチー」に乗って戻った。
f:id:bitterharvest:20190718103951p:plain

近くの中華料理屋で昼食をすまし、お土産などを買って、やはりガラ空きの高速バスに乗って帰途についた。
f:id:bitterharvest:20190718104154p:plain

時間があれば、日本のチロルと呼ばれる「下栗の里」にも行ってみたかったが、公共の交通機関を利用してここを訪れるのはとても難しい。土日は早朝と夕方にそれぞれ1本走っているだけだ。タクシーでは随分と高い料金になるだろう。ところで、8年後にはリニア新幹線が飯田に停車することになっている。歓迎の看板を見かけることが普通だと思うのだが、それらしきものを見かけなかった。不思議な現象だ。もしかしたら街はそれほど期待していないのではとも感じた。

今年の梅雨は例年になく長いが、市内見学をしているときは、雨も降られず暑さも感じられず、快適に歩き回ることができた。街も綺麗で、良い旅行であった。

トーハクで『三国志』展を観る

早々とトーハクの「三国志」を観に行った。前回の「東寺」は余りにも閉会日に近い時に訪れたために、会場の入り口に入る人であふれかえっていたので、断念せざるをえなかった。今回はその反省もあって、開催日の週に、しかも小雨の降る中を、朝のラッシュが過ぎた電車を乗り継いで、勇んで訪れた。昨年から今年にかけて、WOWOWで全86回の三国志の「司馬懿」を毎週欠かすことなく観たため、曹操司馬懿諸葛亮などとても身近に感じられるようになっていた矢先だったため、少なからず興味を覚え、今日(12日)訪ねた。

実は2日後に長野県飯田市にある竹本人形美術館を訪問する予定にしている。この美術館には35年前にNHKの人形劇「三国志」で用いられた人形が展示されている。しかしその一部はここトーハクに出張中のようだ。
左が蜀漢の初代皇帝の劉備、右が後漢末期の武将・政治家で、後漢の丞相・魏王の曹操
f:id:bitterharvest:20190712154940p:plain
左が呉の初代皇帝の孫権
f:id:bitterharvest:20190712155103p:plain
左が後漢王朝最後の皇帝の景帝、右が魏の初代皇帝の曽丕、
f:id:bitterharvest:20190712155159p:plain
左が諸葛亮の南征で7回捕らえられ7回釈放されたという逸話のある孟獲、右が蜀漢の政治家で軍師の諸葛亮
f:id:bitterharvest:20190712161821p:plain
後漢末期の武将で孫権に仕えた甘寧
f:id:bitterharvest:20190712161144p:plain
魏の皇族で文学者の曹植だ。
f:id:bitterharvest:20190712161639p:plain

入口表面に座しているのが蜀漢劉備に仕えた関羽
f:id:bitterharvest:20190712165540p:plain

近くには趙雲像。劉備夫人を救い出した武者、
f:id:bitterharvest:20190712170110p:plain

前漢時代に貴族が好んだとされる工芸品の豹、
f:id:bitterharvest:20190712170357p:plain

漢時代から三国時代に広東・広西で用いられた貨客船、
f:id:bitterharvest:20190712170422p:plain

漢王朝時代の栄華を伝えてくれる石像、
f:id:bitterharvest:20190712165745p:plain

後漢時代の死後の世界を照らしてくれる多層棟、
f:id:bitterharvest:20190712170831p:plain

後漢時代の墓に副葬された四層穀倉楼、
f:id:bitterharvest:20190712171146p:plain

三国時代の武器の弩、
f:id:bitterharvest:20190712171709p:plain

三国時代の軍船模型、
f:id:bitterharvest:20190712171955p:plain

後漢から三国時代にかけての方格規矩鳥文鏡だ。倭国との関係を思いめぐらさせてくれる。
f:id:bitterharvest:20190712172517p:plain

ひょうきんな魏の秦琴俑と説唱俑、
f:id:bitterharvest:20190712172816p:plain

豊かさを感じさせてくれる呉の扁壷・羊尊・神亭壺、
f:id:bitterharvest:20190712173234p:plain

曹操高陵から出土した白磁の罐、
f:id:bitterharvest:20190712173612p:plain

これも曹操高陵から出土した鼎、
f:id:bitterharvest:20190712173822p:plain

後漢時代の金製獣文帯金具だ。これは、漢王朝が周辺部の有力者を手なずけるために贈ったとみられている。
f:id:bitterharvest:20190712173901p:plain

神仙の世界を反映したと思える後漢時代の揺銭樹だ。
f:id:bitterharvest:20190712174236p:plain

この他にも興味の引かれるものがたくさんあり、後漢から三国志の時代の遺産を目のあたりに見ることができ、この時代に対する知識を深めることができた。
また会場には中国人も多かった。本国でもめったに見ることができないのだろう。我々が戦国時代が好きなように、三国志が大好きな彼らにとっても心惹かれる展示だったようだ。

新鮮なビーツでボルシチを饗する

散歩のコースを少し外れたところにJA横浜があることは知っていたが、地元の農家の方々が丹精込めて作った野菜を販売していることを知ったのは、春先だった。それ以来ときどき立ち寄っては、珍しい野菜を手に入れて、サラダや炒め物などを作って楽しんだ。一昨日も、少し暑い中を散歩していたので、涼を取ることを目的に、あまり期待しないで立ち寄ってみた。

今の時期は、実はトマトがおいしい。特に「桃太郎ファイト」という品種が優れている。何人かの生産者が出品し、味を競っているのも気に入っている要因の一つだ。この日もいくつかは試食できるようになっていた。何人もの人が口に運んでいたが、割り込んで仲間に入ることには気後れを感じた。このため前回購入し美味であった生産者のトマトを選び、買い物かごに一袋入れた。梅雨時の鬱陶しさを忘れさせてくれる、清々しい生の味を楽しむためにだ。

精算所に向かおうと思って、他のテーブルに目を移したとき、隅の方に珍しい根野菜を発見した。見慣れない濃紅色の丸い根が目に飛び込んできた。ずっと前から入手したいと思っていたビーツではないかと期待を込めて近づいたところ、まぎれもなくそうであった。二袋しか出品されていないが、このような機会が訪れることはないかもしれないという心配が先に立って、大きい球の方を購入した。

20年近くも前になる。同僚のロシア人の家に招かれたとき、奥さん手作りのボルシチをご馳走になった。とても美味しい味だったので、そのときから是非一度作ってみたいと思っていたのだが、ビーツを見つける機会がなく、希望を果たせないまま今日に至ってしまった。とても長いこと待ち望んでいたので、是非もない買い物だった。
f:id:bitterharvest:20190628210317p:plain

買い物かごに入れたあとで、周囲を見渡すと、すぐ近くにスイスチャードがあった。柄の部分がきれいな色の野菜で、今回は濃いピンク色のものはなかったが、黄と薄ピンクと白のものがあったので、サラダや炒め物にしようと思い一緒に入手した。
f:id:bitterharvest:20190628210213p:plain

昨日(28日)は、早速ビーツを用いて長年の希望であったボルシチを作った。

材料の主役はもちろんビーツ。少し多めかなと思ったが、買ってきたビーツをすべて使った。大きな球と小さな球だ。その他の野菜は根野菜を中心に好きなものを加えればよいが、今回は、玉ねぎ(1個)、じゃがいもぎ(1個)、にんじん(1個)、キャベツ(8分の1玉程度、使っている最中のキャベツがあったので、写真のキャベツの4分の1程度を使った)を使った。

肉は、和牛だと煮たときに固くなってしまうので、オーストラリア産のブロック肉(300g)を用いた。こちらの肉の方が経済的なのももう一つの理由だ(同じ量だと和牛は1000円も高かった)。さらに味付け用だが、ホールトマト(半缶)、パセリ少々、ローリエ(1枚)、サワークリームだ。その他に、オリーブオイル(大匙2杯)、バター(20g)、マギーブイヨン(3個)、ニンニク(練ったもの小匙1杯)、塩(小匙1杯)、黒コショウだ。
f:id:bitterharvest:20190628211356p:plain

最初は野菜の処理だ。にんじんの頭と尻を落として、3等分に分割した。さらに頭の方は8等分に、尻の方は3等分、真ん中は6等分と、大きさがそろうようにシャトー切りにした。ただしお客さんに出すわけではないので、合理性を加味して、皮をむくのも角を取るのも省略。
f:id:bitterharvest:20190628211834p:plain

ニンジンの大きさが定まったので、他の野菜はこれと同じような大きさになるようにする。玉ねぎをくし切りにする。そして皮をむいてジャガイモを用意する。但し、ジャガイモは量があった方が好きなので、少し大きめに乱切りにした。
f:id:bitterharvest:20190628212329p:plain

キャベツはニンジンの長さと同じ長さになるように切った。何切りというのだろう。形に合わせて切ったとしか言いようがない。
f:id:bitterharvest:20190628212402p:plain

ビーツは、カブと同じ要領で、少し厚めに薄切りにした。
f:id:bitterharvest:20190628212426p:plain

肉は、カレー用に切られているものと同じ大きさになるように切断した。
f:id:bitterharvest:20190628212447p:plain

鍋に、オリーブオイル(大さじ1杯)とバター(20g)を入れ、
f:id:bitterharvest:20190628212520p:plain
肉を加え、
f:id:bitterharvest:20190628212540p:plain
色が変化するまで、炒めた。
f:id:bitterharvest:20190628212601p:plain

さらにオリーブオイル(大匙1杯)と練ったニンニク(小匙1杯)を加え、そして野菜を加え、
f:id:bitterharvest:20190628212622p:plain
オリーブオイルが野菜に回るように炒めた。
f:id:bitterharvest:20190628212642p:plain

次に、水(700cc)、ホールトマト(半缶)、マギーブイヨン(3個)を加え、
f:id:bitterharvest:20190628212703p:plain
沸騰させ、
f:id:bitterharvest:20190628212733p:plain
その後、弱火で30分程ごとごと煮て、塩と黒コショウで味を調えた。

待ち望んだ、赤いスープの出来上がりだ。お皿に盛って、パセリとサワークリームを加えて、供した。
f:id:bitterharvest:20190628212759p:plain

ビーツはカブの一種なので、味もカブに似ているが、少し土っぽいという感じを受けた。今回作ったボルシチは、荒涼とした大地のなかで、寒い中を生き抜いてきた力強さを持ち、ロシアという異郷を感じさせてくれる、庶民的な料理だった。
手元には、近頃、店頭で目立っている安価なチリ産の赤ワインしかなかったので、期待しないで一緒に飲食したのだが、幸いな方向に期待が外れて、粗削りな味ともマッチして、美味しかった。

小石川後楽園で花菖蒲を愛でる

梅雨の中休み(11日)を利用して、小石川後楽園で花菖蒲を鑑賞した。浮世絵では、小雨の中、番傘を指して、花菖蒲を愛でるのが定番だ。もともとの予定日は前日だったのだが、朝から小雨が降り、天気予報では本降りになる可能性もあるということで、雨の中の鬱陶しさを避けたいという感情がまさり、浮世絵の主役になることを断念して、ときどき晴れ間の覗くこの日に訪れた。

小石川後楽園のホームページには、6月9日まで「花菖蒲を楽しむ」というイベントを開催しますという掲示があったので、時機を逸したかもしれないという不安を抱いての訪問であったが、なんと最盛期で、見事に咲いた花菖蒲を愛でることができた。例年訪れていた伊豆の虹の郷の7000株に対して、ここはその10分の1の660株と少ないが、それでも一株一株が精一杯頑張ってくれ、大都会の真ん中で、清涼なオアシスを感じさせてくれた。
f:id:bitterharvest:20190613100300j:plain
f:id:bitterharvest:20190613100403j:plain
f:id:bitterharvest:20190613100447j:plain
小石川後楽園は東京ドームの西隣にあるのだが、しばしばこの付近を訪れていたにもかかわらず、数週間前に小島敦さんの『朱子学陽明学』を読むまでは、その存在を知らなかった。

小石川後楽園水戸藩上屋敷(最初は中屋敷だった)の中にある庭園で、江戸時代の初めごろ、二代目の藩主徳川光圀によって築造された。

後楽園という名前は、中国北宋時代(藤原道長が活躍していたころ)の范仲淹(はんちゅうえん)が記した『岳陽楼記』のなかの「天下を以て己が任をなし、天下の憂いに先んじて憂え、天下の楽しみに後れて楽しむ」(先憂後楽)に因んでつけられた。

命名者は中国明王朝の遺臣である朱舜水(しゅしゅんすい)だ。彼は光圀に招聘され、後の水戸学に思想的影響を与えた儒学者だ。

水戸藩上屋敷は、現在の小石川後楽園、東京ドーム、中央大学後楽園キャンパスを含む広い敷地を有していた。

江戸時代と現在の地図を載せておこう。これらを比較することで、大きな道がそれほど変わらずに現在に残されていることが分かる。また水戸藩上屋敷に隣接して、小笠原佐渡守や松平丹後守(それぞれ1万石の大名)の上屋敷があるが、水戸藩がいかに大きな敷地を有していたかが分かる。
f:id:bitterharvest:20190613100530p:plain
f:id:bitterharvest:20190613100546p:plain
園内には、朱舜水の意見をいれて中国の風物が一部取り入れられているが、それらは円月橋と西湖の堤がある。円月橋は、石橋で、水面に映る影と合わせると満月のように見える。
f:id:bitterharvest:20190613100626j:plain

西湖(せいこ)の堤は、中国杭州の西湖の堤に見立てたものだ。
f:id:bitterharvest:20190613100653j:plain

その他にも中国に因んだものがいくつかある。小廬山は中国の名勝地「廬山」に因んで、林羅山によって名付けられた。
f:id:bitterharvest:20190613100731j:plain

徳仁堂は、光圀が18歳の時に史記「伯夷列伝」を読んで感銘を受け、伯夷・叔斉(古代中国殷代末期の孤竹国の賢人兄弟)の木造を安置した堂だ。
f:id:bitterharvest:20190613100802j:plain

中國の風物だけでなく、京都の風物を模したものもある。
京都東山東福寺の「通天橋」に習い、朱塗りの橋がかけられている。名前はもちろん通天橋だ。
f:id:bitterharvest:20190613100828j:plain
橋の下を流れる川は、京都嵐山を流れる「大堰川」に因んだ大堰川だ。
f:id:bitterharvest:20190613100904j:plain

同じく嵐山の「渡月橋」に因んだ橋。
f:id:bitterharvest:20190613100935j:plain
そのそばには屏風のように林立する屏風岩
f:id:bitterharvest:20190613101002j:plain

全体を上から見るとこのように箱庭のようだ。
f:id:bitterharvest:20190613101030j:plain

水戸藩書院のあったところは内庭になっていて、水連がきれいに咲いていた。
f:id:bitterharvest:20190613103838j:plain

庭園の中央は大泉水と呼ばれ、「琵琶湖」を見立てた池で、池の中央部には蓬莱島が造られている。
f:id:bitterharvest:20190613101118j:plain

小石川後楽園は、四季折々の花に恵まれており、特に梅や桜と紅葉の季節は良さそうだ。折々に訪れて、それぞれの趣を味わうのが楽しそうだと思って、ここを後にした。

数学的帰納法によるプログラミングを修得するためにF-代数を攻略する

4. F-代数

今回はあまり聞きなれてはいないと思われるF-代数( F-algebra )について学んでみよう。代数という名が示すとおり、これは、半群、モノイド、群、環などの代数を表現するための重要な役割を担っているが、それにもまして、数学的帰納法による再帰的表現において重要な役割を果たしてくれる。一般に、再帰的表現は、記述を平易化し、読みやすくしてくれ、さらには証明をしやすくしてくれるが、F-代数はその道具を与えてくれる。

それでは累計、フィボナッチ数(Fibonacci number)、素数などを例にあげながら、F-代数と数学的帰納法を活かしたプログラミングについて見ていこう。

4.1 F-代数の定義

F-代数とは、圏\(\mathcal{C}\)とその上での自己関手\(F: \mathcal{C} \rightarrow \mathcal{C}\)に対して、\(\mathcal{C}\)の対象\(A\)とその射
\begin{eqnarray}
α: F(A) \rightarrow A
\end{eqnarray}
の組\( (A,α) \)のことを言う。そして、\(A\)を台集合(carrier)、\( α \)を評価射(evaluation function, structure map )と呼ぶ。図で表すと次のようになる。

f:id:bitterharvest:20190608112644p:plain
図1:F-代数の定義

例1 自然数

定義はいたって簡単だ。例を挙げて理解を深めることにしよう。最初に自然数を考える。自然数は、\(0\)から始まる無限な整数の集まりだ(中学・高校では\(1\)からと学んだと思うが、\( 1 \)を別の意味で使うので、紛らわしさを避けるために、ここでは\(0\)からにする)。

そこで集合の圏\( \mathbf{Set}\)を考えることにしよう。この集合において、\( 1 \)を終対象とし、\( + \)を\( \mathbf{Set} \)上での直和とする。そして\(F: \mathbf{Set} \rightarrow \mathbf{Set}\)を自己関手とし、これは集合\(X\)を「\( 1 \)あるいは\(X\)」に移すものとしよう。ここで「\( 1 \)あるいは\(X\)」は直和\( + \)を用いて、\( 1 + X\)と表すことにしよう。

つぎに\(X\)から\(1+X\)に移すための二つの射を用意しよう。そしてここでは台集合を自然数とするので、その集合を\(\mathbb{N} \)で表す。二つの射は\( 0\)と\(succ \)で、次に示すように、\( 0\)は終対象\( 1 \)を自然数の始まりに移し、また\(succ \)は次の自然数を得る。
\begin{eqnarray}
0 &:& 1 \rightarrow \mathbb{N}; * \mapsto 0, \\
succ &:& \mathbb{N} \rightarrow \mathbb{N}; n \mapsto n+1
\end{eqnarray}

これにより、\([0,succ]:1+ \mathbb{N} \rightarrow \mathbb{N} \)となる。

したがって自然数は、\(F: X \rightarrow 1+X\)を自己関手とし、\( ( \mathbb{N}, [0,succ] ) \)を組みとするF-代数となる。

Haskellで実装してみよう。

まずF-代数の定義で出てきた評価射\( α \)にたいして、次のようなデータ型\(Algebra\)を用意しよう(ちなみにHaskellではControl.Functor.Algebraというパッケージがある)。

type Algebra f a = f a -> a

つぎは関手\(F\)をデータ型を用いて表現することだ。これは、\(F:X \rightarrow 1+X\)で、\( [0,succ] \)という二つの射で表わした。すなわち\(0:1 \rightarrow \mathbb{N} \)と\(succ:\mathbb{N} \rightarrow \mathbb{N} \)だ。ここでは\(F\)を\(NatF\)とし、次のように代数的データ型を用いて定義する(ここでは、任意のデータ型\(a\)で定義しておき、評価射のところで台集合を自然数\(\mathbb{N} \)とする)。

data NatF a = Zero | Succ a

さて\(F\)が定まったので、評価射を具体的に定義しよう。\(F\)の台集合を自然数の代わりに便宜的に整数¥(I nt ¥)とし、評価射\(algN\)を次のように定めよう。

algN :: Algebra NatF Int
algN Zero = 0
algN (Succ n) = n + 1

これを用いて実行してみよう。

f:id:bitterharvest:20190606082232p:plain
図2:F-代数で表現された自然数を確認する

例2 モノイド(足し算と掛け算)

次の例はモノイドだ。モノイドの定義はいくつかあるが、古典的な定義は、集合\(M\)の上に次の二つの射をもち、結合律と単位律を満たすことだ。なお\(1\)は自然数のときに用いた終対象だ。
\begin{eqnarray}
μ &:& M \times M \rightarrow M; x + y \mapsto z \ (if \ addition), \\
η &:&1 \rightarrow M; * \mapsto 0 \ (if \ addition)
\end{eqnarray}

これより\( [η, μ]:1 + M \times M \rightarrow M\)となり、\(F: X \rightarrow 1 + X \times X \)である。なお\(+\)は自然数のときと同様に直和だ。

Haskellでこれを実現しよう。\(η\)を\(MEmpty\)とし、\( μ\)を\(MAppend\)とする。そして\(F\)を新たなデータ型\(MonF\)で表すことにしよう。

data MonF a = MEmpty | MAppend a a

整数の足し算は、評価射\(algP\)を用意し、次のように定義すればよい。

algP :: Algebra MonF Int
algP MEmpty = 0
algP (MAppend m n) = m + n

図で示すと次のようになる。

f:id:bitterharvest:20190608112714p:plain
図3:F-代数で整数の足し算を定義する

同様に整数の掛け算は次のように用意できる。

algM :: Algebra MonF Int
algM MEmpty = 1
algM (MAppend m n) = m * n

\(MonF\)でのデータコンストラクタ\(MEmpty, MAppend\)が射となっていることを確認しておこう。

f:id:bitterharvest:20190606135321p:plain
図4:データコンストラクタの確認

例3 環(加算と乗算)

加算と乗算が成り立つ世界を環と呼ぶ。もう少し詳しく説明すると、集合\(R\)の上に二つの演算\(+\)と\( \times\)が用意されていて、\(+\)がアーベル群、\(\times\)が半群(またはモノイド)のとき、\( (R,+,\times) \)の組を環という。

モノイドは、演算を\(\circ\)としたとき、次を満たすものである(半群単位元がなくてもよい)。
1) 任意の\(a,b\)に対して、\(a \circ b \in R\)
2) 結合律( \( (a \circ b) \circ c = a \circ (b \circ c)\) )を満たし、
3) 単位元( \(i \in R \))を有し、単位律( \( i \circ a = a = a \circ i \))を満たす。

アーベル群とは上記の性質に加えて、次を満たすものである。
4) 任意の\(a\)に対して逆元 \( (a^{-1}) \)を有する。なお、逆元とは\( a \circ a^{-1} = i \)を満たすものである。
5) 可換律(\( a \circ b = b \circ a \))を満たす。

従ってアーベル群は
\begin{eqnarray}
μ &:& M \times M \rightarrow M; x + y \mapsto z \ (if \ addition), \\
η &:&1 \rightarrow M; * \mapsto 0 \ (if \ addition) \\
ι &:& M \rightarrow M; x \mapsto (-x) \ (if \ addition)
\end{eqnarray}
に加えて、単位律、結合律、可換律を満たすものである。

このためアーベル群では自己関手\(F\)は\(F: 1 + X + X \times X\)となる。またモノイドでは\(F: 1 + X \times X\)であったので、環では\(F: 1 + 1 + X + X \times X + X \times X\)となる。

整数の上での加算\(+\)と乗算\(\times\)を有するF-代数を、新しいデータ型\(RingF\)を用いて次のように定義しよう。

data RingF a = RZero | ROne | RNeg a | RAdd a a | RMul a a

評価射を\(algR\)で表すことにすると、次のようになる。

algR :: Algebra RingF Int
algR RZero = 0
algR ROne = 1
algR (RNeg m) = - m
algR (RAdd m n) = m + n
algR (RMul m n) = m * n

例4 多項式の環

多項式も環となる。演算(\(+, \times\))は次のように定義できる。
\begin{eqnarray}
\sum^{n}_{i=0} a_i x^i + \sum^{n}_{i=0} b_i x^i = \sum^{n}_{i=0} (a_i + b_i) x^i \\
\sum^{n}_{i=0} a_i x^i \times \sum^{m}_{j=0} b_j x^j = \sum^{n+m}_{k=0} (\sum_{i+j=k}a_i b_j) x^k
\end{eqnarray}
これに対するデータ型は、次のようになる。

data Expr = RZero | ROne | RNeg Expr | RAdd Expr Expr | RMul Expr Expr

4.2 不動点

F-代数において、自己関手\(F\)を適応し続け、その前後で変化がなくなったとき、これを不動点\(Fix(F)\)と呼ぶ。

f:id:bitterharvest:20190606082432p:plain
図5:自己関手\(F\)の不動点

厳密に定義すると、自己関手\(F\)の不動点(fixed point)とは、
\begin{eqnarray}
F(Fix(F)) = Fix(F)
\end{eqnarray}
となるような\( Fix(F)\)である。

Haskellでは次のように定義できる。

newtype Fix f = Fix (f (Fix f))

ところで等号の左側の\(Fix\)は型コンストラクタだが、右側の最初の\(Fix\)はデータコンストラクタである。これは、下図に示すように、射として\(f (Fix \ f) \)を\(Fix \ f \)に写像する。

f:id:bitterharvest:20190606082539p:plain
図6:Haskellでの不動点の定義
すなわちデータ型\(Fix \ f \)は、射\(Fix : F (Fix (F)) \rightarrow Fix (F) \)を与える。

\(Fix\)とは逆の射、すなわち\(Fix \ f \)を\(f (Fix \ f) \)に写像する射\(unFix\)も用意しておこう。

unFix :: Fix f -> f (Fix f)
unFix (Fix x) = x

ここで\(unFix : Fix (F) \rightarrow F(Fix (F)); Fix(x) \mapsto x \)である。

不動点の定義より、
\begin{eqnarray}
Fix \circ unFix = id \\
unFix \circ Fix = id
\end{eqnarray}
であることに注意しておこう。

4.3 Lambekの定理

台集合\(A\)と評価射\(α:F(A) \rightarrow A\)の対( \( (A, F(A) \rightarrow A \) )をF-代数と定めた。それでは、二つの代数が存在したときに、片方の代数の構造が他方の代数の構造の中で保持されているという性質をどのように記述したらよいのかについて考えよう。構造が保たれるということは、圏論の世界では大切な性質で、たとえば関手はこの役割を担っている。

F-代数の圏

いま二つのF-代数( \( A, α:F(A) \rightarrow A \) )と( \( B, β:F(B) \rightarrow B \) )があったし、前者の代数の構造が、後者の代数の構造の中で保持される条件を考えることにしよう。

f:id:bitterharvest:20190608083249p:plain
図7:F-代数( \( A, F(A) \rightarrow A \) )と( \( B, F(B) \rightarrow B \) )が準同型のとき、\(m\)は関手となり、上図は可換図式となる

対象\(A\)から対象\(B\)への射を\(m\)とする。上の図で\( F(A) \)から\(B\)を得ることを考える。経路は二つある。上側の経路を辿ると\(β \circ F(m) \)となる。これは後者の代数の方に移って計算するというものである。下側の経路を辿ると\(m \circ α\)である。これは前者の代数で計算した後で、その値を後者の値に変えるというものである。これが一致することが、構造を保持するための約束なので、次の式を得る。
\begin{eqnarray}
β \circ F(m) = m \circ α
\end{eqnarray}
ある代数の構造が別のある代数の構造の中で保たれるとき、準同型(homomorphism)であると言い、その条件は上に示した式である。これより\(F\)代数\( (A, α:F(A) \rightarrow A) \)と\( (B, β:F(B) \rightarrow B) \) を圏とした時に、\(m\)が関手であれば二つの圏は準同型となる。そして上図は可換図式となる。

そして準同型を射として構成した圏をF-代数の圏と呼ぶ。上図であれば\(m\)が射、( \( A, α:F(A) \rightarrow A \) )と( \( B, β:F(B) \rightarrow B \) )が対象となる。

始代数

F-代数の圏が始対象を有するならば、その始対象をF-始代数と呼ぶ。これまで例で挙げてきた自然数、足し算や掛け算のモノイド、加算と乗算からなる環などはF-始代数の例である。

それではLambekの定理を示そう。これはF-始代数に関するものだ。

Lambekの定理

F-代数の圏において、台集合が始対象\(I\)のとき、\(F(I)\)と\(I\)は同型(isomorphic)である。

証明
\(I\)が始対象であることから、\(I\)の中に複数の要素が含まれていたとしても、それらは同型であることに注意して証明を行う。\(I\)が始対象であることから、\(I\)から\(F(I)\)に対してただ一つの射が存在する。これを\(m\)としよう。また評価射を\( j : F(I) \rightarrow I \)とすると、\(F(I)\)と\(I\)が同型であることを示すには、
\begin{eqnarray}
j \circ m = id_I \\
m \circ j = id_{F(I)}
\end{eqnarray}
であることを示せばよい。それでは次の可換図式を用いて証明しよう(この可換図式はF-代数の圏である)。

f:id:bitterharvest:20190606082713p:plain
図8:Lambekの定理の証明

下側の横方向の射の合成\( j \circ m \)は\(I\)から\(I\)への射であり、\(I\)の任意の要素はお互いに同型なので、これは恒等射となる。すなわち\(j \circ m = id_I \)である。


上側の横方向の射の合成\( F(j) \circ F(m) \)は\(F(I)\)から\(F(I)\)への射であり、\( f(j) \circ F(m) = F (j \circ m) = F(id_I) = id_{F(I)} \)より、これは恒等射となる。(証明おわり)

これより、\( I \)と\( F(I) \)が同型であることから、\(I\)が不動点であることが分かる。すなわち、
\begin{eqnarray}
j &:& F(I) \rightarrow I \ \ (cf \ Fix : F (Fix (F)) \rightarrow Fix (F)) \\
m &:& I \rightarrow F(I) \ \ (cf \ unFix : Fix (F) \rightarrow F (Fix (F))
\end{eqnarray}
となり、\(j\)は\(Fix\)であり、\(m\)は\(unFix\)である。また\(Fix(F)\)が台集合であることにも注意して欲しい。

4.4 Catamorphism

F-代数で表された自然数は、1)出発点となるものと、2)任意の\(n\)という数とその次の数との関係、を用いて定義した。すなわち始まりの値\(0\)と、任意の数\(n\)が与えられたときにその次の数\(n+1\)が求められるように定めた。このように定義されたものからは、最初に初めの数\(0\)を用意し、それに次の数を求める方法を適応して\(1\)を求め、さらにこれを適応して\(2\)を求めるということを繰り返す。

これは高校の頃に習った数学的帰納法だ。これまで説明した方法を一般化し、数学的帰納法をより自然な形で表して、利用できるようにしたのがCatamorphismである(残念ながらCatamorphismに対する日本語は用意されていない)。

F-代数の圏の性質

下図のように、F-始代数\( (Fix (F),F (Fix (F)) \rightarrow Fix (F)) \)とF-代数\( (A,α:F(A) \rightarrow A) \)を用意しよう。これはF-代数の圏なので下図は可換図式である。

f:id:bitterharvest:20190606082939p:plain
図9:始対象\(Fix(F)\)を有するF-代数の圏

左側はF-始代数であることから、\( F (Fix (F))\)と\(Fix (F) \)は同型であり、\( Fix . unFix = id_{Fix (F)} \)かつ\( unFix . Fix = id_{F(Fix (F))} \) とする\(unFix : Fix (F) \rightarrow F (Fix (F)) \)が存在する。また\(unFix (Fix \ x) = x \)である。

さらに\( Fix F \)が始対象であることから、\(A\)への射が存在する。これを\(m\)としよう。これにより\( F (Fix F) \)から\(F (A) \)への射は\(F(m)\)となる。

左側のF-始代数\( (Fix (F),F (Fix (F)) \rightarrow Fix (F)) \) と右側のF-代数\( (A,α:F(A) \rightarrow A) \)が準同型であることから、
\begin{eqnarray}
m = α . F(m) . unFix
\end{eqnarray}
となる。

上記の式が数学的帰納法を与えるが、これを実際の例で追っていこう。

例1 加算

それではモノイドでの加算を利用してHaskellを用いて具体的に見ていくこととしよう。モノイドでの加算はこれまで用いていたものではなく、リストを用いることにしよう。

data ListF a b = Nil | Cons a b

これは自己関手なので、次のように\(Functor\)のインスタンスとする。

instance Functor (ListF a) where
  fmap f Nil = Nil
  fmap f (Cons e lst) = Cons e (f lst)

さらにF-代数や不動点に関しても定めておこう。

type Algebra f a = f a -> a

newtype Fix f = Fix ( f (Fix f))

unFix :: Fix f -> f (Fix f)
unFix (Fix x) = x

\(ListF\)の評価射を\(sumAlg\)とすると、この射は次のようになる。

sumAlg :: Algebra (ListF Int) Int
sumAlg Nil = 0 
sumAlg (Cons e acc) = e + acc

さらに射\(m\)を\(cata \ alg\)としよう。ここで、\(alg\)は評価射である。次のようになる。

cata :: Functor f => Algebra f a -> Fix f -> a
cata alg = alg . fmap (cata alg) . unFix

ここまでのプログラムはまとめると次のようになる。

type Algebra f a = f a -> a

newtype Fix f = Fix ( f (Fix f))

unFix :: Fix f -> f (Fix f)
unFix (Fix x) = x

cata :: Functor f => Algebra f a -> Fix f -> a
cata alg = alg . fmap (cata alg) . unFix

data ListF a b = Nil | Cons a b

instance Functor (ListF a) where
  fmap f Nil = Nil
  fmap f (Cons e lst) = Cons e (f lst)

sumAlg :: Algebra (ListF Int) Int
sumAlg Nil = 0 
sumAlg (Cons e acc) = e + acc

それではプログラムの動きを見てみよう。
最初は何もない状態から始まるので、次のようになっている。これはF-代数の圏なので可換図式である。

f:id:bitterharvest:20190606083008p:plain
図10:加算の処理は\(N il\)から始まる

まず左下のところから説明しよう。ここは始対象が入る場所だ。\( N il \)がそのような役割を担うが、不動点であるので\( Fix \ N il \)となる。この値を求めたいのだが、下側の射\( (cata \ sumAlg) \)からは直接求めることができないので、上側の経路を経て値を得る。

すなわち\(unFix (Fix \ N il) \)を利用して、左上の\(N il\)を得る。次に\(fmap \ (cata \ sumAlg) \ N il = N il \)によって、右上の\(N il\)を得る。これを評価射\(sumAlg\)で値を得ると、右下の0となる。

それでは、これに\(e\)という値を加える場合を考えてみよう。下図のようになる。

f:id:bitterharvest:20190606083030p:plain
図11:加算の処理:\(Cons\)で新しい値を追加する

左下は\(Cons\)によってこれまでのものに\(e\)を追加するということになる。これまでのものは先ほどの\(Fix \ N il\)である。またここは不動点であるので、前のときと同じよう\(Fix\)をつけて\(Fix \ $ \ Cons \ e \ (Fix \ N il) \)となる。

これを\(unFix\)で持ち上げると、左上の\( Cons \ e \ (Fix \ N il) \)となる。これに\(fmap \ (cata \ sumAlg) \) を施すと、
\begin{eqnarray}
&& fmap \ (cata \ sumAlg) \ (Cons \ e \ (Fix \ N il)) \\
&=& Cons \ e \ ( (cata \ sumAlg) \ (Fix \ N il)) \\
&=& Cons \ e \ N il
\end{eqnarray}
より、右上は\( Cons \ e \ N il \)となる。これを評価射\(sumAlg\)で値を得ると、右下の\(e\)となる。

さらに、\(d\)を加える場合の可換図式は以下のようになる。

f:id:bitterharvest:20190606083050p:plain
図12:加算の処理:\(Cons\)でさらに新しい値を追加する

そして一般化した可換図式は次のようになる。

f:id:bitterharvest:20190606083152p:plain
図13:加算の処理:一般化する

例2 フィボナッチ数

次はフィボナッチ数を考えてみよう。これは、\(1,1\)で初めて、先行する二つの数の和を次の値とするものだ。すなわち\(1,1,2,3,5,8,13,21…\)である。

それではこれをCatamorphismを利用してプログラムを作成しよう。用意するデータ型は自然数と同じように、最初の値を決めるものと、その後の続きを決めるものとを用意する。

data NatF a = Zero | Succ a

これは自己関手なので\(Functor\)のインスタンスとする。

instance Functor NatF where
  fmap f Zero = Zero
  fmap f (Succ a) = Succ (f a)

評価射を\(fib\)とすると

fib :: Algebra NatF (Int, Int)
fib Zero = (1,1)
fib (Succ (m, n)) = (n, m + n)

プログラムを実行するために、不動点を次のように定める。

lstFib :: Fix NatF
lstFib = Fix $Succ (Fix $ Succ (Fix $ Succ ( Fix $ Succ (Fix Zero))))

実行してみよう。

f:id:bitterharvest:20190606083252p:plain
図14:F-代数の圏を利用してフィボナッチ数を定義し、それを実行する

4.5 Anamorphism

これまでに説明してきたCatamorphismに対して双対なのが、Anamorphismである。F-代数の矢印を全て反対にすると、次のようにF-余代数を得ることができる。

用語の定義

AnamorphismがCatamorphismに対して双対であることから、Catamorphismの中で用いた用語に対して、双対の用語を定義できる。それらをまとめると次のようになる。

F-余代数:\(F\)を圏\(\mathcal{C}\)上の自己関手\(F: \mathcal{C} \rightarrow \mathcal{C} \)とするとき、\(\mathcal{C}\)の対象\(A\)と射\(α:A \rightarrow F(A) \)の組\( (A,α) \)の組である。

F-余代数の準同型:F-余代数\( (A,α:A \rightarrow F(A) ) \)から別のF-余代数\( (B,β:B \rightarrow F(B) ) \)への準同型の射とは\(\mathcal{C}\)の射\(m:A \rightarrow B \)であって、これは\( F(m) \circ α = β \circ m \)を満たす。これよりある自己関手\(F\)に対して、F-余代数全体は圏をなす。そしてF-余代数の準同型射を一般にAnamorphismという。そして準同型を射として構成した圏をF-余代数の圏と呼ぶ

f:id:bitterharvest:20190924090412p:plain
図15:F-余代数の準同型

F-終余代数:自己関手\(F\)に対するF-余代数の圏が終対象を有するとき、その終対象をF-終余代数と呼ぶ。F-余代数の終対象は、不動点である(不動点には最大なものと最小なものがあり、厳密には、Catamorphismのときは最小不動点、Anamorphismのときは最大不動点である)。
下図で、左側はF-終余代数で右側はF-余代数である。

f:id:bitterharvest:20190605085017p:plain
図16:F-終余代数とF-余代数

用語の定義が住んだので、Haskellでプログラムを作ってみよう。最初に余代数\(Coalgebra\)を定義しよう。

type Coalgebra f a = a -> f a

次に準同型射\(m\)を定義する。ここではCatamorphismのときと同様に、評価射\(α\)を\(coa\)とし、\(m\)を\( a na \ coa \)としよう。

ana :: Functor f => Coalgebra f a -> a -> Fix f
ana coa = Fix . fmap (ana coa) . coa

Catamorphismのときは、\(ListF\)を用意したが、今度は\(StreamF\)を用意しよう。\(ListF\)は空のリストから始まったが、\(StreamF\)は無限な長さのストリームだ。次のように定義する。

data StreamF e a = Stream e a

\(Functor\)のインスタンスにしよう。

instance Functor (StreamF e) where
  fmap f (Stream e a) = Stream e (f a)

それでは素数を得ることを考えよう。エラストテネスは自然数のリストがあったとき、素数にたいしてその倍数を除くということを原理にしている。より詳細に説明すると、2で始まる整数のリスト\(lst\)を用意しておき、\(lst\)の先頭を素数としておりだし、先頭を除いたリストからその倍数を除いたリストを新たなリストとして、この操作を繰り返す。そして得られた素数の列はストリームの中に納める。

それではプログラミングしてみよう。ここでは上の図の右側のF-余代数の部分の評価射を考えることにしよう。\(A\)のところは整数のリスト\(p:ps\)で、先頭\(p\)は素数である。\(ps\)はそれを除いた残りのリストである。

これに対して評価射を施したのが\(F(A)\)である。ここではエラストテネスの古いを施すこととなるので、評価射を\(era\)となずけよう。データ型はストリーム\(StreamF\)となる。ストリームの最初の要素はもちろん素数の\(p\)だ。次の要素は倍数を除いたリストだ。倍数を取り除く処理を\(filter\)を用いて表すと次のようになる。

era ::  Coalgebra (StreamF Int) [Int]
era (p:ps) = Stream p (filter (\a -> mod a p /= 0) ps)

これより素数の列\(primes\)は

primes = ana era [2..]

しかしこれはストリームになっているので、表示することができない。ストリームをリストにするためには、Catamorphisumを用いる。これは次のようになる。

ary :: Algebra (StreamF Int) [Int]
ary (Stream e a) = e:a

最初の100個の素数を取り出してみよう。

f:id:bitterharvest:20190606085152p:plain
図17:F-余代数を用いて作成した素数のプログラムを実行する

武蔵国府・武蔵府中熊野古墳を訪ねる

昨日(5月17日)、武蔵国府があった地を訪れた。クスノキがうっそうと茂る大国魂神社と重なるように、国府跡は存在する。現在の地名は東京都府中市、最寄り駅は南武線府中本町駅、あるいは、京王線府中駅だ。

国府が設けられたころ、武蔵国で最も勢力のあった地域は、埼玉県行田市の埼玉古墳であった。しかもこの時期、武蔵野国東海道ではなく、東山道武蔵路に属していた。このため、ヤマト王権に近くて便利なのは埼玉のほうだ。それにもかかわらず、なぜ府中に国府が置かれたのかと感じていたので、現地を訪れて手がかりをつかみたいと思い出かけた。

文献からの手掛かりは以下の通りだ。この地域の状況を大きく変えたのは、国府が設定される1世紀半前の事件だろう。6世紀の中ごろ、関東と九州で、その地の豪族とヤマト王権の勢力関係を一変させる事件が起きた。九州での磐井の乱(527年)、関東での武蔵国造の乱(534年)だ。

武蔵国造の乱は、『日本書紀安閑天皇元年(534年)状に記載されている。笠原直使主(かさはらのあたいおぬし)と、同族の小杵(おぎ)との勢力争いだ。小杵が、上毛野君小熊(かみつけののきみおぐま)の助けを借りて、使主を殺害しようとしたが、この謀を知った使主が京に上り、ヤマト王権に助力を求めた。ヤマト王権は小杵を誅し、使主を武蔵国の国造(くにつくり)に定めた。使主は、これを受けて、横渟・橘花・多氷・倉樔の4か所を屯倉(みやけ)として献上した。

横渟は横見郡(埼玉県比企郡吉見町)、 橘花橘樹郡(川崎市幸区北加瀬から横浜市港北区日吉付近)、多氷は多磨郡(東京都あきる野市)、倉樔は久良郡(横浜市南東部)と比定され、橘花・多氷・倉樔は、府中を囲むような地域である。屯倉大和王権が直接経営する土地を意味し、献上されたこの地域は、ヤマト王権にとっては重要な地となり、府中に国府を設置する必然性が存在するようになったのだろう。

武蔵国府は、前記したように、南武線府中本町駅あるいは京王線府中駅が最寄り駅だ。下図で下部に府中本町駅、上部に府中駅、中央の下部に大国魂神社、その左右にふるさと府中歴史館、武蔵国府跡がある。さらに、府中本町駅のすぐ右には、府中御殿井戸跡発見場所がある。
f:id:bitterharvest:20190518130553p:plain

平成26年に府中市教育委員会から提案された国史武蔵国府保存管理計画書には、武蔵国府関連遺跡と周辺の遺跡が掲載されており、当時の状況が分かる。図下部の武蔵国衙跡が国府の中心で、前に述べたように、大国魂神社と重なっている。また、上部には少し遅れて設置されたであろう武蔵国分寺跡がある。これらの地域が東山道武蔵路で結ばれている。
f:id:bitterharvest:20190518130632p:plain
一つ前の地図に戻ってみると、国府跡は大国魂神社の東側にある。ここには国府の中枢の役所である国衙が置かれていた。赤い柱は、そのときの建物の柱の跡があった場所だ。
f:id:bitterharvest:20190518130422j:plain
f:id:bitterharvest:20190518130453j:plain
f:id:bitterharvest:20190518130347j:plain

また府中本町駅の東側に昨年の11月から「国司舘と家康御殿史跡広場」がオープンしている(家康御殿とあるのは、家康、秀忠、家光の三代がこの地を鷹狩の宿舎などとして用いたため)。国司舘は国司が居住する屋敷で、やはり柱の位置が示されている。帰宅してから存在に気がついたので残念ながら写真がない。府中観光協会がここの様子を説明しているので、そちらを見て欲しい。

大国魂神社の参道に沿った「ふるさと府中歴史館」には土器や瓦などの出土遺物が展示されている。
f:id:bitterharvest:20190518130312j:plain
f:id:bitterharvest:20190518130953j:plain

府中が武蔵国府の地として選ばれた理由が、先ほど説明したように屯倉の地にあったとすれば、屯倉の管理・運営を支えた地元の豪族が存在するはずだ。そのヒントとなるのが武蔵府中熊野神社古墳だ。

この遺跡は南武線の西府(にしふ)駅が最寄り駅だ。西府駅からほぼ真北に向かい、甲州街道を越えた地点が、熊野神社だ。それを奥に進んでいくと古墳にたどり着く。
f:id:bitterharvest:20190518130705p:plain

熊野神社と古墳への入り口だ。
f:id:bitterharvest:20190518125315j:plain

熊野神社を右手に、
f:id:bitterharvest:20190518125344j:plain

左手にしたときは
f:id:bitterharvest:20190518125414j:plain

全体を写すと、
f:id:bitterharvest:20190518125441j:plain

この古墳は、上部が円く、下部が方形の、珍しい形の上円下方墳だ。同型の古墳は、奈良市のカラト古墳、沼津市の清水柳北1号墳、福島県白河市の野路久保古墳が確認されているに過ぎない。しかもこれらの段築は2段だが、ここは3段だ。高さ4.8m(推定高5m以上)、上円部の直径16m、下方部は、一辺が、それぞれ上段では23m、下段では32mの正方形だ。それぞれの長さ比は、1:√2:2となっていて、均衡がとれていて面白い。

埋葬施設は複式構造の切石積横穴式石室である。石室に入ることもできる。
f:id:bitterharvest:20190518125509j:plain

この古墳ができたのは、飛鳥時代の7世紀中ごろである。武蔵国府は奈良時代の初めから平安時代の中頃(8世紀~11世紀)に設置されていたので、古墳は、武蔵国府が設置される直前に構築されたので、武蔵国府とのつながりが特に深いと推測されている。

なおこの古墳に先立って、6世紀から7世紀前半にかけては、西府駅南側の御嶽塚古墳群、その西側に高倉古墳群(地図の高倉塚古墳もその中の一つ)が存在しており、もう少し古い時代にも、小地域の有力者が住んでいたと考えられている。

最後になったが、もちろん大国魂神社も訪れた。社伝『府中六所社伝』などに記された伝承によれば、今から1900年前に創建されたとなっている。国府よりも古いとなるが、果たしてどうなのだろう。大国魂神社という名称は明治になってからのもので、それまでは六所宮と呼ばれていた。これは武蔵国の一之宮から六之宮までを合わせて祀るためである。境内には様々な建物が立っている。それらを見ていこう。

ますは隋神門、
f:id:bitterharvest:20190518125537j:plain

隋神の一方の神は櫛磐間戸命で
f:id:bitterharvest:20190518125606j:plain
他方の神は豊磐間戸命である。
f:id:bitterharvest:20190518125633j:plain

鼓楼、
f:id:bitterharvest:20190518125705j:plain

拝殿、
f:id:bitterharvest:20190518125735j:plain

本殿、
f:id:bitterharvest:20190518125806j:plain

徳川家所縁の東照宮も、
f:id:bitterharvest:20190518125910j:plain

参道、
f:id:bitterharvest:20190518130027j:plain

今回の目的は、国府がなぜ府中に設置されたかを探ることであった。武蔵国造の乱によってヤマト朝廷に献上された屯倉についての手掛かりは得られなかったものの、府中国府跡に向かっている電車のなかで、武蔵府中熊野神社古墳の存在を知り、訪ねることができたのは良い収穫だった。そのおかげで珍しい形の古墳を見ることができたし、隣接する展示館には丁寧な説明があり、新しい知識を得ることができた。

鞘尻金具(さやじりかなぐ)も新しく得た知識の一つだ。これは太刀の鞘の先に使われた金具で、七曜文(1個の小さな円を6個の小さな円が囲い込む)という飾りがついている。この文様は、富本銭のものと同じで、7世紀後葉の作品であることを示している。古墳が構築された時代を教えてくれる物証にもなっていて、ささやかなものが重要な情報を伝えてくれるという良い例だ。今後も国府跡の整備が進むことと思われるので、府中が国府に選ばれたことを示す新たな発見があることを期待して、散策を終えた。
f:id:bitterharvest:20190518130104j:plain

モノイドを攻略する

3. モノイドとコモノイド

今回はモノイド(monoid)と、そして、その双対であるコモノイド(comonoid)を説明しよう。モノイドという用語を使うと難解だと感じる読者も多いことだろうが、小学校以来学んできた足し算や掛け算などの多くの二項演算に関するものだ。モノイドという概念を、最初に理論的に学ぶのはおそらく群論だろう。

今回は、群論から入って、圏論の世界へと進み、Haskellで実現するという長い旅に出ることにしよう。

3.1 群論における半群とモノイド

群論のスタートとなるのは半群だ。殆どの二項演算がこれに属す。その定義は次のようになっている。
[半群の定義]
集合\(S\)とその上の二項演算子\(\bullet : S \times S \rightarrow S\)が与えられたとき、

1)組\((S,\bullet)\)が結合律、すなわち\(S\)の任意の\(a,b,c\)に対して\((a \bullet b) \bullet c = a \bullet (b \bullet c) \)が成り立つ

ならば、これを半群という。

引き算と割り算は結合律が成り立たないので半群とはならないが、足し算と掛け算は結合律が成り立つので半群となる。

半群の中で、単位元を有し、単位律が成り立つものをモノイドという。即ち、
[モノイドの定義]
集合\(S\)とその上の二項演算子\(\bullet : S \times S \rightarrow S\)が与えられたとき、

1)組\((S,\bullet)\)が結合律、すなわち\(S\)の任意の\(a,b,c\)に対して\((a \bullet b) \bullet c = a \bullet (b \bullet c) \)が成り立ち

2)\(S\)に単位元\(i\)が存在し、単位律、すなわち、\(S\)の任意の\(a\)に対して\(i \bullet a = a = a \bullet i \)が成り立つ

ならば、これをモノイドという。

足し算での単位元は\(0\)、掛け算でのそれは\(1\)である。

3.2 モノイドを圏として構成する

群論でのモノイドを、圏論での圏として、構成することを考えてみよう。圏の主要な構成要素は対象と射である。高校までの数学で学んできた「集合と関数」の考え方に素直に従った場合、集合を対象に、関数を射にするのが自然のように思われるだろう。すなわち集合\(S\)を対象に、二項演算子\(\bullet : S \times S \rightarrow S\)を射にしてはと思うだろう。

このようにすると、困った問題が生じる。圏を構成するためには、射と射を結びつける合成を必要とする。射が二項演算子\(\bullet : S \times S \rightarrow S\)だとすると、合成は何にしたらよいのだろう。私も圏論を学び始めたときは、ここでおおいに悩んだ。

参考書に描かれているモノイドの概念図を長いこと見つめた後で、発想の転換が必要なのだと思えるようになった。群論での二項演算子\(\bullet\)は、結合律を求めている。これは射ではなく合成としての性質だ。そこで二項演算子を合成にしてみよう。このようにすると、合成させられるものは射ということになる。すなわち集合\(S\)は射となる。

次の難関は射のドメインとコドメインだ。二項演算子を乗算と考えると、乗算が合成で、その被乗数と乗数が射ということになる。射は矢(arrow)と書かれることも多いが、矢はどこから来て、どこに行くのだろう。数学的な言葉で言うと、ドメインとコドメインをどのように定めたらよいのだろう。

矢は連続して何本も打たれることがある。数学的な言葉でいうと合成だ。これに似たような現象は、行ったきりの矢ではなく、手元に戻ってくるブーメランだ。そこで、ブーメランの手元をドメイン、コドメインとすることにしよう。手元はただ一つなので、これを★ということにしよう。そしてドメインとコドメインは対象となる。対象はこれだけということにしよう。図で表すと下図のようになる。

f:id:bitterharvest:20190301105316p:plain
図1:モノイドの概念図

このような考え方を元にして、モノイドを圏として構成しよう。

項目 構成要素
対象の集まり
射の集まり \( S =\{a,b,c,…\} : ★ \rightarrow ★ \)
ドメインとコドメイン
恒等射 \(i \in S \)
合成 \(\bullet\)
結合律 \( (f \bullet g) \bullet h = f \bullet (g \bullet h) \ where f,g,h \in S \)
単位律 \( i \bullet f = f = f \bullet i \ where f \in S\)

具体的な例を示そう。正整数の乗算は次のように構成することができる。

項目 構成要素
対象の集まり
射の集まり \( S =\{1,2,3,…\}: ★ \rightarrow ★ \)
ドメインとコドメイン
恒等射 \(1\)
合成 \(\times\)
結合律 \( (f \bullet g) \bullet h = f \bullet (g \bullet h) \ where f,g,h \in S \)
単位律 \( i \bullet f = f = f \bullet i \ where f \in S\)

圏は条件を満たすように構成要素を定義すればよいので、モノイドを圏として表す方法は、この外にも考えることができる。しかし数学者は簡潔で優雅な表現を求めるので、現在のところこれが最も的確な表現だと彼らは思っている。

3.3 Haskellでのモノイドの定義

それではHaskellで、モノイドがどのように実装されているかを見てみよう。Hasekllでは\(Semigroup\)というクラスを用意し、その下位クラスで\(Monoid\)を定義している。
\(Semigroup\)の定義は簡単で、二項演算子\( (< >) \)を定義している。

class Semigroup m where
  (<>) :: m -> m -> m

また結合律については、このクラスのインスタンスはこれを満足しなければならないという約束になっている。

そしてモノイドは次のように、単位元を\(mempty\)とし、二項演算子を\(mappend\)で置き換えている。

class Semigroup m => Monoid m where
  mempty :: m
  mappend :: m -> m -> m
  mappend = (<>)

但し次の条件を満たさないといけない。

x <> mempty = x
mempty <> x = x
(x <> y) <> z = x <> (y <> z)

このようにHaskellでの定義は、群論での定義を踏襲していることが分かる。そして圏論の圏としては定義されていないことも分かる。

3.4 モノイドの例

モノイドの例を上げよう。よく使うのはリストだろう。これは次のように定義できる。

instance Semigroup [a] where
  (<>) = (++)
instance Monoid [a] where
  mempty = []

なお、要求されている単位律や結合律が満たされていることは明らかである。

馴染みのあるところで、掛け算の例も挙げておこう。被乗数と乗数は\(Product\)というデータ型で定義されているとしよう。

newtype Product n = Product n
instance Num n => Semigroup (Product n) where
  Product x <> Product y = Product (x * y)
instance Num n => Monoid (Product n) where
  mempty = Product 1

同じように足し算は次のようになる。

newtype Sum n = Sum n
instance Num n => Semigroup (Sum n) where
  Sum x <> Sum y = Sum (x + y)
instance Num n => Monoid (Sum n) where
  mempty = Sum 0

もう少し、複雑な例を挙げてみよう。デカルト積だ、これは二つの対象の積だ。例えばトランプは種類\(S=\{♡,♠,♦.♣\}\)と数字\(T=\{1,2,,,,9,J,Q,K\}\)の対\(S \times T\)、例えば\((♠,9)\)、で表されるが、これはデカルト積の一例だ。Haskellでは次のように定義できる。

instance Semigroup () where
  _ <> _ = ()
instance Monoid () where
  mempty = ()
instance (Semigroup a, Semigroup b) => Semigroup (a, b) where
  (a, b) <> (a’,b’) = (a <> a’, b <> b’)
instance (Monoid a, Monoid b) => Monoid (a, b) where
  mempty = (mempty, mempty)

ここで、\(((),a)\)と\(a\)とが同型であることに注意しておく必要がある。圏論的に表現すれば、\(((),A) \cong A\)である。
少し利用してみよう。ここでは\(Monoid\)のクラスで用意されているものを利用した。

f:id:bitterharvest:20190301105528p:plain
図2:Haskellでの実行例

これまでにあげた例は二つの項の積だが、これらを最も抽象化したものがテンソル積である。

3.5 モノイド対象

この記事の最初の方で、群論での半群とモノイドを説明し、そしてそれを圏として次のように構成した。

項目 構成要素
対象の集まり
射の集まり \( S =\{a,b,c,…\} : ★ \rightarrow ★ \)
ドメインとコドメイン
恒等射 \(i \in S \)
合成 \(\bullet\)
結合律 \( (f \bullet g) \bullet h = f \bullet (g \bullet h) \ where f,g,h \in S \)
単位律 \( i \bullet f = f = f \bullet i \ where f \in S\)

それでは、これをもう少し抽象化することにしよう。抽象化の一つは関手を導入することだ。関手は圏から圏への関数なので、圏を対象とし、関手を射とすることができる。いま、圏\(\mathcal{C}\)から同じ圏\(\mathcal{C}\)への関手\(M\)を考えてみよう。また関手と関手の合成を\( \otimes \)とすると、次の左側の図が得られる。そして圏\(\mathcal{C}\)を★で表し、これを一か所にまとめると右の図が得られる。これは先に述べたモノイドと同じようには見えるはずだ。

f:id:bitterharvest:20190411092626p:plain
図3:一つの関手\(M\)を射としてモノイドを構成

これを圏として構成したのが次の表の右側だ。

項目 群論からのモノイド モノイド対象\(M\)
対象の集まり \(\mathcal{C}\)
射の集まり \( a,b,c,…\in S\) \( M : \mathcal{C} \rightarrow \mathcal{C}\)
ドメイン \(\mathcal{C}\)
ドメイン \(\mathcal{C}\)
恒等射 \( i \in S \) \(I : \mathcal{C} \rightarrow \mathcal{C}\)
合成 \(\bullet\) \( \otimes \)
単位律 \(i \bullet a = a = a \bullet i\) \(λ : I \otimes M \cong M \\ ρ : M \cong M \otimes I\)
結合律 \((a \bullet b) \bullet c =a \bullet (b \bullet c) \) \( α : (M \otimes M) \otimes M \cong M \otimes (M \otimes M)\)

すなわち圏\(\mathcal{C}\)を対象とし、関手\(M\)を射とし、そして自身への関手\(I\)を恒等射とし、関手と関手の合成\(\otimes\)をモノイドでの合成としたものだ。もちろん単位律
\begin{eqnarray}
λ : I \otimes M \cong M \\
ρ : M \cong M \otimes I
\end{eqnarray}
と結合律
\begin{eqnarray}
α : (M \otimes M) \otimes M \cong M \otimes (M \otimes M)
\end{eqnarray}
は満たさなければならない。なお上記で\( \cong \)は自然同型である。自然同型について簡単にふれておこう。ある空間\(A\)からある空間\( B\)への射\(f\)が逆写像を有するとき、射\(f\)を同型射あるいは単に同型という。空間を圏とし、写像を関手としたときに、関手にたいして同様なことが成り立つときに、自然同型という。

もう少し厳密に説明すると、圏\(\mathcal{C}\)から圏\(\mathcal{D}\)へ関手\(F,G\)が存在し、\(F\)から\(G\)への射\(η\)(これは自然変換と呼ばれる)が存在したとする。このとき、\(\mathcal{C}\)の任意の対象\(x\)に対して\(η_x\)が圏\(\mathcal{D}\)の同型射となっているとき、自然同型という。図で示すと下図のとおりである。

f:id:bitterharvest:20190413092231p:plain
図4:自然同型は成分ごとに同型射となることを言う


さて今導入したモノイドの構造では、モノイドが有する性質、すなわち二項演算子が見えにくい。そこで射\(M,I\)を対象にし、モノイドの構造が現れるようにしよう。二項演算子を一般化するとテンソル積となるが、ここではこれを表すために\(\otimes\)を用いよう。そしてテンソル積が圏の構成の中で表れるようにしよう。すなわち、テンソル積\(μ: M \otimes M \rightarrow M\)を射と考えることにしよう。

さらにもう一つはモノイドという対象を作り出してくれる射だ。これを\(η:I \rightarrow M\)としよう。ビッグバンに似たような性質を持つ。ビッグバンによって宇宙が生じたように、\(η\)は対象\(M\)を生み出す。

なお\(μ,η\)は関手から関手への射なので、自然変換である。

最後に単位律と結合律が成り立つようにしなければならないが、これは同じである。。

項目 モノイド対象\(M\) 抽象化(射を対象に)
対象の集まり \(\mathcal{C}\) \( M, I \)
射の集まり \( M : \mathcal{C} \rightarrow \mathcal{C}\) \( μ : M \otimes M \rightarrow M \\ η:I \rightarrow M \)
ドメイン \(\mathcal{C}\) \((M,M),I\)
ドメイン \(\mathcal{C}\) \(M\)
恒等射 \(I : \mathcal{C} \rightarrow \mathcal{C}\) \(I_M : M \rightarrow M \)
合成 \( \otimes \) \(\otimes\)
単位律 \(λ : I \otimes M \cong M \\ ρ : M \cong M \otimes I\) \(λ : I \otimes M \cong M \\ ρ : M \cong M \otimes I\)
結合律 \( α : (M \otimes M) \otimes M \\ \cong M \otimes (M \otimes M)\) \( α : (M \otimes M) \otimes M \\ \cong M \otimes (M \otimes M)\)

このようにしてできたのは、一般に、モノイド対象と呼ばれる。これまでの話をまとめて、モノイド対象を定義してみよう。

[モノイド対象の定義]

モノイド対象( \( M,μ,η\))とはモノイド圏(\( \mathcal{C}, \otimes, I, α, λ, ρ \))が与えられた時、\(\mathcal{C}\)の対象\(M\)および二つの射(\(μ : M \otimes M \rightarrow M, η: I \rightarrow M \))を有し、下記の単位子図式と五角形図式を満たすものである。

f:id:bitterharvest:20190301110152p:plain
図5:モノイド対象での単位子図式

f:id:bitterharvest:20190301110301p:plain
図6:モノイド対象での五角形図式

3.6 モノイド圏

モノイド圏は一つまたは複数のモノイド対象をその対象にしたもので次のように定義される。

[モノイド圏の定義]

モノイド圏(\( \mathcal{C}, \otimes, I, α, λ, ρ \))とは、圏 \(\mathcal{C} \)が次の条件を備えているときである。
1) テンソル積と呼ばれる双関手\(\otimes : \mathcal{C} \times \mathcal{C} \rightarrow \mathcal{C} \)
2) モノイド単位(あるいは単位対象)\(I\)
3) 結合律:\(α_{A,B,C}: (A \otimes B) \otimes C \cong A \otimes (B \otimes C)\) (ただし、\(α\)は自然同型)
4) 右単位律:\(λ_A : I \otimes A \cong A \), 左単位律:\(ρ_A : A \otimes I \cong A \) (ただし、\(λ, ρ\)は自然同型)
モノイド圏を概念図で表すと以下のようになる。

f:id:bitterharvest:20190301105947p:plain
図7:モノイド圏の概念図

モノイド圏とモノイド対象との関係を概念的に表すと下図になる(ここでのモノイド圏は一つのモノイド対象を持つものとする)。

f:id:bitterharvest:20190301110732p:plain
図8:モノイド圏とモノイド対象の関係

またモノイド圏の単位律と結合律に関する可換図を下図に示す。

f:id:bitterharvest:20190402082158p:plain
図9:モノイド圏での単位律を表す可換図
f:id:bitterharvest:20190402082303p:plain
図10:モノイド圏での結合律を表す可換図

3.7 コモノイド

モナイド圏とモナイド対象の矢印を逆にするとこれらと双対の関係にあるコモノイド圏とコモノイド対象を得ることができる。そこで、ここではコモナイド対象について少し詳しく説明しよう。

モノイド対象( \( M,μ,η\))は、モノイド圏(\( \mathcal{C}, \otimes, I, α, λ, ρ \))が与えられた時、\(\mathcal{C}\)の対象\(M\)および二つの射(\(μ : M \otimes M \rightarrow M, η: I \rightarrow M \))を有し、下記の単位子図式と五角形図式を満たすものであった。この定義の中で重要なのは、モノイド対象を定義している二つの射(\(μ : M \otimes M \rightarrow M, η: I \rightarrow M \))だ。

そこで、ここでは、これら二つについて考えてみることにしよう。矢印の方向を反対にすると、
\begin{eqnarray}
δ : M \rightarrow M \otimes M \\
ε: M \rightarrow I
\end{eqnarray}

となる。\(δ\)は、対象のコピーを取って対にしているだけなので、面白いことをしてはいない。このようなわけで、Haskellにはコモナドは実装されていないが、実現することは次のように可能である。

class Comonoid m where
  split :: m -> (m,m)
  destroy :: m -> ()

instance Comonoid a where
  split a = (a,a)
  destroy a = ()

モナドが自己関手の(小さい圏の)圏で記述されたモノイドと同じであったが、同様なことがコモナドとコモノイドについても言える。コモノイドは面白くもなんともないのに、これから生じるコモナドが前の記事で書いたようにとても実用的な性質を持っている。このギャップがコモノイドとモノイドの関係を魅力的にさせてくれる。

3.8 Haskellでの実装

モノイドとコモノイドの理解を深めるために、Haskellでどのように実現されているかを見ていくことにしよう。本格的ではないが、実験的なものが、ライブラリー"data-category"として用意されている。これをダウンロードしよう。解凍したフォルダーの直下にDataと呼ばれるフォルダーがある。ここが、このライブラリーを用いるときの先頭になるフォルダーだ。

それではこのライブラリーを使ってみよう。Dataの直下に、Category.hsと呼ばれるHaskellのソースプログラムがあるので、これをHaskellのプラットフォームであるWinGHCiにドラッグ&ドロップする。ソースプログラムがロードされ、このプログラムが実行できるようになる。

しかし我々が実行したいのは、フォルダーCategoryの直下にあるMonoidal.hsだ。Category.hsをロードした時点でのディレクトリーはCategoryになっているので、一つ上のディレクトリーDataに移したあと、Monoidal.hsをロードする。このときドラッグ&ドロップを用いず、キーボードより

:load "Data/Category/Monoidal.hs"

と打ち込む必要がある。さもないと、ロードに先立ってディレクトリーがData/Categoryに移動してしまう。

それでは、環境が整ったので、プログラムの中身を見ることにしよう。

f:id:bitterharvest:20190320090046p:plain
図11:Monoidalのパッケージを利用できるように関連するファイルをロードする

1)圏を定義する

ライブラリーを作成した作者は、ソースコードをアップロードしているだけで、その考え方を説明していない。このためプログラムを説明するときには、作者の意図を読み解いていくことが必要だ。もしかすると作者の意図とは異なるかもしれないが、ライブラリーのソースコードを読んでいくことにしよう。なお、このライブラリーは一から作り上げているので、とても基本的なところからスタートする。

ライブラリーは圏を定義するための\(Category\)と呼ばれるクラスを用意している。しかし理解しやすくするために、そのもとになっているだろうと思われる考え方を最初に説明しておこう。

集合と関数は馴染みのある言葉だ。集合\(A\)と\(B\)があり、\(A\)のそれぞれの要素に対して\(B\)のある要素を割当てる関数\(f\)があるというのが出発点になっている。さらに集合\(C\)があり、\(B\)から\(C\)へ写像する関数\(g\)がある。このとき、\(f\)と\(g\)を合成した関数は、\(A\)から\(C\)への写像となる。これを\(h\)で表すと、\(h (x) = g \circ f (x)\)となる。

このような集合と関数の概念を、圏論の世界で、なるだけ一般的に表そうとしたのが、アロー(arrow)と呼ばれる概念だ。そこではすべてをアローで表す。アローは\(k \ a \ b\)で表され、これは射\(k\)が\(a\)から\(b\)へと向かうと考えるとよい。

先の集合と関数で説明した関数\(f\)は\(k \ A \ B\)となり、集合\(A\)は恒等射\(k \ A \ B\)となる。また、関数の合成\(g \circ f\)は\(k \ B \ C \ . \ k \ A \ B\)となり、準同型写像となる。

上で説明した集合を任意のものについて論じている場合には、Haskellでは型変数を用い、その場合には小文字を用いる。例えば\(f\)は\(k \ a \ b\)のようになる。

これを図で表すと以下のようになる。これからも分かるように、集合と関数の空間からアローだけで構成された世界へと関手\(arr\)で写像して圏を構成している。

f:id:bitterharvest:20190418093254p:plain
図12:アロー\(k \ a \ b \)は\(a\)から\(b\)へと向かう射\(k\)であるが、関手\(arr\)によって集合と関数の世界からアローだけで構成された世界へと移動することができる。

それではライブラリーの説明に移ろう。そこではオリジナルが集合であったアローを明確にするため、\(Obj \ k\)というデータ型を用意している。

type Obj k a = k a a

そして、集合と関数の時の関数のソースとターゲットを明確にするために、それらのメソッドを用意して、次のように\(Category\)の定義をしている。

class Category k where 
  src :: k a b -> Obj k a 
  tgt :: k a b -> Obj k b 
  (.) :: k b c -> k a b -> k a c 

圏としての構造をまとめると次のようになる。これからも分かるように、極めて単純な構造であることが分かる。

\(k\)
対象の集まり
射の集まり \(k \ a \ b \)
ドメインとコドメイン
恒等射 \(id_a :: k \ a \ a \)
合成 (.)
結合律 \( (k \ c \ d . k \ b \ c) . k \ a \ b = k \ c \ d . ( k \ b \ c . k \ a \ b) \)
単位律 \(id_b . k \ a \ b = k \ a \ b = k \ a \ b . id_a \)

このクラスにはインスタンスが一つだけ用意されている。それは\(k\)を関数\( (->)\)としたものだ。関手\(arr\)で一度持ち上げておいて、元に戻すようで変な感じになるが、集合の部分が射で表されているので、元の集合と関数の世界とは違うことに注意しよう。

instance Category (->) where 
  src _ = \x -> x 
  tgt _ = \x -> x 
  g . f  = \x -> g (f x)  

圏の構造を示すと次のようになる。

\(->\)
対象の集まり
射の集まり \(f,g,h,… \)
ドメインとコドメイン
恒等射 \(id\)
合成 (.)
結合律 \( (f . g) . h = f . ( g . h) \)
単位律 \(id . f = f = f . id \)

実行例を示してみよう。但し、”Data.Category”には関数が実装されていないので、”Control.Arrow”のライブラリーをインポートして使った。以下の実行例で、\(x -> x \)は入力、\(y -> y \)は出力を意味し、集合での\(A\)と\(B\)に相当する。

f:id:bitterharvest:20190418094747p:plain
図13:アローを用いた世界での実行例

2)終対象を用意する

この記事では示さなかったが、モノイドは終対象を持つ。終対象に対するクラス\(HasTerminalObject\)は次のように定義されている。

class Category k => HasTerminalObject k where
  type TerminalObject k :: * 
  terminalObject :: Obj k (TerminalObject k) 
  terminate :: Obj k a -> k a (TerminalObject k) 

図で示すと次のようである。なお図では集合と関数の関係が、圏として構成された後にも反映ざれるように、元々は集合であった部分を薄緑色で表した。ライブラリーの作成者も\(Obj\)という言葉を用いたのはそのためだろう。しかし、圏の構成から見るとこれらは射であることに注意しておこう。

f:id:bitterharvest:20190418095043p:plain
図14:終対象を定義する。

インスタンス\(->\)は次のように定義されている。

instance HasTerminalObject (->) where 
  type TerminalObject (->) = () 
  terminalObject = \x -> x 
  terminate _ _ = () 

3)バイナリー積を用意する

次はいよいよ二項演算だ。もう一度、アローの話に移そう。アローを構成するものはすべてが射だ。そしてアローはつなぎ合わせることが可能だ。まるでシステムを構成する部品のようだ。しかも部品の種類が一種だけ、全てがアローというのも魅力的だ。部品のつなぎ方には、直列と並列がある。

直列接続は合成だ。並列接続は二項演算だ。二項演算子の左右にはそれぞれ左の項と右の項があるが、これらの項は別々に計算した後で、二項演算を施せばよい。このため左右の項を別々に計算するという方法は、それぞれを別々に計算するという考え方へと導いてくれる。

そこでアローを並列に接続する方法を考えてみよう。二つのものを並列にすることを考えさえすれば、多数のものを並列に接続する手段を得ることができる。そこで二つを並列にする方法を考えてみよう。これは様々であるが、ここではライブラリーに実装されている並列接続を示そう。下図のようだ。

f:id:bitterharvest:20190418100359p:plain
図15:二つのアローを並列に接続する。

\(proj1,proj2\)は、二つの値を取り、その一方をとるものである。\( (\& \& \&) \)は一つの値に対して、二つの射\(f,g\)からの出力を得るというものだ。\( (\ast \ast \ast) \)は別々の値に対して、それぞれの射\(f,g\)からの出力を得るというものだ。

ところで並列処理にするためには、上図に示したように、複数の入力、複数の関数、複数の出力が必要になる。ライブラリーでは、この複数に対応するのが、バイナリー積(\(BinaryProduct\))だ。クラスの定義の中で\( BinaryProduct (k :: * -> * -> *) x y :: *\)と定義されている。また、インスタンス\( (->)\)に対しては\( BinaryProduct (->) x y = (x, y) \)と定義されている。

ライブラリーではクラスは次のように定義されている。

class Category k => HasBinaryProducts k where 
  type BinaryProduct (k :: * -> * -> *) x y :: * 
  proj1 :: Obj k x -> Obj k y -> k (BinaryProduct k x y) x
  proj2 :: Obj k x -> Obj k y -> k (BinaryProduct k x y) y
  (&&&) :: k a x -> k a y -> k a (BinaryProduct k x y) 
  (***) :: k a x -> k b -> k (BinaryProduct k a b) (BinaryProduct k b1 b2) 
  l *** r = (l . proj1 (src l) (src r)) &&& (r . proj2 (src l) (src r)) 

そして\(->\)に対するインスタンスは次のようになっている。

instance HasBinaryProducts (->) where 
  type BinaryProduct (->) x y = (x, y) 
  proj1 _ _ = \(x, _) -> x 
  proj2 _ _ = \(_, y) -> y 
  f &&& g = \x -> (f x, g x) 
  f *** g = \(x, y) -> (f x, g y) 

4)圏同士のバイナリー積を用意する

モノイドを圏論として表すための準備がだいぶ整ってきた。モノイドを構成するのに必要とされる二つの圏の積を別の圏に関手で写像することを考えよう。

ここからの説明は下図を用いて行う。

f:id:bitterharvest:20190418101138p:plain
図16:圏論の中でモノイドを定義する。

図に示したように、二つの圏\(\mathcal{C}1, \mathcal{C}2\)があるとし、それぞれから任意のアロー\( c1 \ a1 \ b1, c2 \ a2 \ b2 \)を取り出したとしよう。この積を\(:**:\)で表すこととしよう。この二項演算子は、アローの接続のところで示したように、それぞれのアローを並列に処理すると考えることができる。

さらに、圏\(\mathcal{C}1, \mathcal{C}2\)は圏\(\mathcal{C}\)の対象であるとしよう。また、圏\(\mathcal{C}\)からは双関手によって圏\(\mathcal{C}3\)に写像されるとしよう。すなわちアローの積\( (c1 \ a1, \ b1) :**: (c2 \ a2, \ b2) \)は双関手\(ProductFunctor\)によって、圏\(\mathcal{C}3\)のあるアロー\( c1 \ c2 \ (a1, a2 \ (b1,b2) \)に写像されるとする。

勘のいい読者は、これはモノイド圏だと、思っただろう。実際、モノイド圏の説明の中で用いた\(A,B,C=A \otimes B\)は\( c1 \ a1, \ b1), (c2 \ a2, \ b2), c1 \ c2 \ (a1, a2 \ (b1,b2) \)に対応し、テンソル積\(\otimes\)は\(:**:\)に対応する。また、\(\mathcal{C}1, \mathcal{C}2, \mathcal{C}3\)が同じとき、\(A,B,C\)は\(M\)となりモノイド対象となる。ライブラリーはこの関係を用いて実装されている。

それではライブラリーでどのように定義されているかを見ていくこととしよう。

data (:**:) :: (* -> * -> *) -> (* -> * -> *) -> * -> * -> * where
  (:**:) :: c1 a1 b1 -> c2 a2 b2 -> (:**:) c1 c2 (a1, a2) (b1, b2)

\(Category\)のインスタンスとして次のように定義されている。

instance (Category c1, Category c2) => Category (c1 :**: c2) where
  src (a1 :**: a2)            = src a1 :**: src a2
  tgt (a1 :**: a2)            = tgt a1 :**: tgt a2
  (a1 :**: a2) . (b1 :**: b2) = (a1 . b1) :**: (a2 . b2)

また、終対象に対しては次のように定義されている。

instance (HasTerminalObject c1, HasTerminalObject c2) => HasTerminalObject (c1 :**: c2) where 
  type TerminalObject (c1 :**: c2) = (TerminalObject c1, TerminalObject c2) 
  terminalObject = terminalObject :**: terminalObject 
  terminate (a1 :**: a2) = terminate a1 :**: terminate a2  

さらに、この圏がバイナリー積に対しては次のように定義されている。

instance (HasBinaryProducts c1, HasBinaryProducts c2) => HasBinaryProducts (c1 :**: c2) where 
  type BinaryProduct (c1 :**: c2) (x1, x2) (y1, y2) = (BinaryProduct c1 x1 y1, BinaryProduct c2 x2 y2) 
  proj1 (x1 :**: x2) (y1 :**: y2) = proj1 x1 y1 :**: proj1 x2 y2 
  proj2 (x1 :**: x2) (y1 :**: y2) = proj2 x1 y1 :**: proj2 x2 y2 
  (f1 :**: f2) &&& (g1 :**: g2) = (f1 &&& g1) :**: (f2 &&& g2) 
  (f1 :**: f2) *** (g1 :**: g2) = (f1 *** g1) :**: (f2 *** g2) 

5)テンソル積を用意する

それではいよいよテンソル積を定義することにしよう。

class (Category (Dom ftag), Category (Cod ftag)) => Functor ftag where 
  type Dom ftag :: * -> * -> * 
  type Cod ftag :: * -> * -> *
  type ftag :% a :: *
  (%) :: ftag -> Dom ftag a b -> Cod ftag (ftag :% a) (ftag :% b)

テンソル積のインスタンスを作ろう。そのために、二項演算に体操する双関手\(ProductFunctor\)を用意しよう。

data ProductFunctor (k :: * -> * -> *) = ProductFunctor 

それではこれを双関手としよう。

instance HasBinaryProducts k => Functor (ProductFunctor k) where 
  type Dom (ProductFunctor k) = k :**: k 
  type Cod (ProductFunctor k) = k 
  type ProductFunctor k :% (a, b) = BinaryProduct k a b 
  ProductFunctor % (a1 :**: a2) = a1 *** a2 

テンソル積のクラスは次のように定義されている。

class (Functor f, Dom f ~ (Cod f :**: Cod f)) => TensorProduct f where 
  type Unit f :: * 
  unitObject :: f -> Obj (Cod f) (Unit f) 
  leftUnitor :: Cod f ~ k => f -> Obj k a -> k (f :% (Unit f, a)) a 
  leftUnitorInv :: Cod f ~ k => f -> Obj k a -> k a (f :% (Unit f, a)) 
  rightUnitor :: Cod f ~ k => f -> Obj k a -> k (f :% (a, Unit f)) a 
  rightUnitorInv :: Cod f ~ k => f -> Obj k a -> k a (f :% (a, Unit f)) 
  associator :: Cod f ~ k => f -> Obj k a -> Obj k b -> Obj k c -> k (f :% (f :% (a, b), c)) (f :% (a, f :% (b, c))) 
  associatorInv :: Cod f ~ k => f -> Obj k a -> Obj k b -> Obj k c -> k (f :% (a, f :% (b, c))) (f :% (f :% (a, b), c)) 

これを用いてテンソル積のインスタンスは次のように定義されている。

instance (HasTerminalObject k, HasBinaryProducts k) => TensorProduct (ProductFunctor k) where 
  type Unit (ProductFunctor k) = TerminalObject k 
  unitObject _ = terminalObject 
  leftUnitor _ a = proj2 terminalObject a 
  leftUnitorInv _ a = terminate a &&& a 
  rightUnitor _ a = proj1 a terminalObject 
  rightUnitorInv _ a = a &&& terminate a 
  associator _ a b c = (proj1 a b . proj1 (a *** b) c) &&& (proj2 a b *** c) 
  associatorInv _ a b c = (a *** proj1 b c) &&& (proj2 b c . proj2 a (b *** c)) 

実行例を示そう。単位律、結合律が成り立っていることが分かる。

f:id:bitterharvest:20190419104032p:plain
図17:テンソル積のプログラムを実行する。

そして上記のインスタンスは、\(TensorProduct\)を\(\otimes\)とし、\( unitObject \ ( ) \)を\(I\)とすると、モノイド圏の定義と合致していることが分かる。また、下図に示すようにモノイド対象となることも分かる。

f:id:bitterharvest:20190427094155p:plain
図18:モノイド対象であることを示した概念図。