「6÷2(1+2)」の喧騒を今になって知る。
数式を解釈する規則というのは(自然言語と同じく)習慣に過ぎないので、「人により違う」という曖昧さが付きまとう。「連接(演算子なし)による乗算は明示的な演算子よりも優先順位が高い」という「規則」も、場合によっては従われず曖昧になる危険性があるように感じる。特に括弧が絡む場合が危険そうである。((この件でよく参照される「Google 電卓」では、括弧なしの「1 / 2 pi
」と括弧ありの「1 / 2 (pi)
」で演算順序が異なる。))
分数式の入った数式を「別行立て」にせずに段落中に書く場合、日本では「分数式を小さく書く(LaTeX の \textstyle
の \frac
)」という習慣がないので、専ら「/」で書くことになる。この場合に、実際に私は「『/』と連接の優先順位」で悩むことがある。
(1) | (2) | (3) |
(1) は (1′) で全く問題がないだろう。(2) も私は (2′) で大丈夫だと判断する。しかし (3) くらいに複雑になってくると、*1
(3′)
だと「意図通りに解されない」恐れを感じて、
(3″)
のように「括弧を付して曖昧さをなくす」手を打つだろう。論理的には (2) と (3) の差異は小さいので、(2′) を大丈夫だと思うならば、(3′) もそうであるはずなのであるが、「数式に絶対的なルールがない」と考えているからそうするのだろう。
しかし、日本でも海外でも「6÷2(1+2)」を「6÷2×(1+2)」と同等と解する人が半数近くいるという現実を見ると、(2′) を書くのは相当危険であるという気がしてきた。Web 上の意見を見ると、(1′) すら曖昧さを持ちうると論じる人もいる(少なくとも日本の中等教育では確実に (1) と同値になるようだが)。
数式の解釈の規則が実は非合理的であることを示す例として、「連背による乗算」と「演算子型関数(sin、log のように引数の括弧が不要な関数)の適用」の優先順位の問題がある。
- (4) は間違いなく と解釈されるだろう。
- (5) は間違いなく と解釈されるだろう。
- (6) は (6a) と (6b) のどちらに解釈すべきか?
連接乗算と演算子型関数適用の優先順位が (4) と (5) で逆転しまっている。この「習慣」と矛盾しない合理的な規則を設けるのは困難であろう。それ故、(6) のような「見慣れない形の式」が出てくると、「習慣」でも「規則」でも判断できずに迷ってしまう。これも「6÷2(1+2)」と同じく「曖昧だから書いてはいけない数式」ということになるのだろう。ちなみに、私は (6b) を意図している場合は、(6′) と書けば大丈夫と思っている。しかし、「連接の乗算」と「演算子の乗算」が同等という考えがあるならば、(6′) も結局曖昧ということになりそうだ。悩ましい。
*1:このくらい複雑な数式はそもそもインラインで書くこと自体が不適当ではあるが。