1−1=?
2015年7月 2日 (木) 投稿者: メディア社会コース
これまで「面白メディア学入門」の筆者のブログ「データから社会経済の動きを探る技術」シリーズでは、AADL(代数的会計記述言語:Algebraic Accounting Description Language)に実装されている演算を、足し算、掛け算、割り算の順に紹介してきた。今回このAADL演算シリーズの最後のオペレーションとして引き算を紹介する。
なぜ、最後が引き算なのか?怪訝に思われる読者もおられるであろう。実は、AADLの引き算は会計のオペレーションをもとに設計されており、通常の数学的な引き算とは一見だいぶ趣を異にしている。しかし、実装表現上は異質でも、その考え方には共通の普遍性がある。次の例を考えてみよう。
5−3= ?
答えは言うまでもなく2であるが、上の引き算は
−3+5
と答えが等しい。数直線上の原点0を挟んで、−3は左側に3、+5は右側に5で、この計算は、両者を「相殺」して、+2と計算される。つまりプラス方向に5、マイナス方向に3で、プラス方向の絶対値の方が大きいので、差し引きプラス側に5となる訳である。AADLの引き算はこの「相殺」というオペレーションで実装されており、これが会計の考え方である。
問 Aさんはリンゴを5個買い、そのうち3個を食べました。残りのリンゴは何個ですか。
いま、Aさんからすれば、購入したリンゴは「増え」、食べたリンゴは手元から「減って」いく。このリンゴの「増・減」を「相殺」した結果が、上の問の答えになる。上の数学表記の引き算で考えれば、購入して増えたリンゴは、数直線上のプラス方向の5で、食べて減少したリンゴは、数直線上のマイナス方向の3で表され、差し引きプラスの2、すなわち2個残った、というわけである。
では、このプロセスを交換代数表記してみよう。時間基底は特定せず、この場合のAADLの表記は、#である。
5<リンゴ, 個, #, A> + 3^<リンゴ, 個, #, A >
リンゴが(食べた結果)3個減少した、という事実を交換代数で表した結果が、上記の第2項である。この第2項の交換代数の数量と基底の間に「^」という記号が表記されているところに注目されたい。これは「ハット基底」で、交換代数元の減少を表すオペレーションである。
AADLで引き算をプログラミングする際に注意すべき点がある。上記の交換代数
5<リンゴ, 個, #, A> + 3^<リンゴ, 個, #, A >・・・(1)
をプログラミングしただけでは、残り2個を計算してくれないのである。では、どうすれば良いかというと、上の交換代数をxとおくと、
~ x=2<リンゴ, 個, #, A>・・・(2)
というオペレーションが必要になる。この「~」を「バー」オペレーションといい、同一基底を持つ交換代数の間で「相殺」を行うオペレーションである。
なぜ、同じ交換代数で(1)と(2)の区別を行うのか?実は、(1)の交換代数は、問のうち、「Aさんはリンゴを5個買い、そのうち3個を食べました」というAさんの行動履歴を表しており、(2)の交換代数は、問のうち、「残ったリンゴという結果」を表している。
このような区別が必要になる理由を明らかにするためには、少し「会計」の考え方を学ぶ必要がある。次回は、会計とAADLの実装法との間の考え方を紹介しよう。
(メディア学部 榊俊吾)