KAOS (85) 文を形式化する基礎としての論理:述語論理 (4.4.1-9)

前回修正した文を,材料として用いることにする.

[一文目]製造業者は,(一つ又は複数の)ソフトウェア開発計画を確立すること.開発するソフトウェアシステムの適用範囲,規模およびソフトウェア安全クラス分類に適した開発プロセスのアクティビティを実施する必要がある.ソフトウェア開発計画は,そのアクティビティを含んでいること.

[二文目](製造業者は)ソフトウエア開発ライフサイクルモデルを,その計画の中で全て定義するか,又は引用すること.

ここで前々回の述語を用いて記述を試みてみる.一部省略している.

Φ1:確立する(製造業者,ソフトウェア開発計画)∧開発する(製造業者,ソフトウェアシステム)∧適用する(製造業者,ソフトウェアシステム,現実世界)∧適した(アクティビティ,安全クラス分類)∧実施する(製造業者,アクティビティ)∧必要とする(製造業者,実施する)∧含んでいる(開発計画書,アクティビティ)

もちろん,項として現れている製造業者・ソフトウェア開発計画といったものは概念ではなく,個別のインスタンスであること注意.

[二文目]

Φ2:計画の中で定義する(製造業者, ライフサイクルモデル) ∨ 計画の中で引用する(製造業者,ライフサイクルモデル)

「計画の中で」が冗長と思えば,以下のようにもできる.

ソフトウェア開発計画∧Φ2

ここでのこの作業の意義は,自然言語文の整理である.これだけでは,まだうれしさがない.

(nil)

KAOS (84) 文を形式化する基礎としての論理:述語論理 (4.4.1-8)

述語論理によって,文ごとに真偽判定するのではなくて,主語・述語(・および目的語など)といった単位で,記述ができるようになった.論理の規則からいったん離れて,述語について考えてみる.

実際の要求文書ではないが,規格からサンプルを取り出すことにする(JIS T 2304:2012 (IEC 62304:2006),医療機器ソフトウェア – ソフトウェアライフサイクルプロセス -).5章の最初から持ってきただけで,特に文を選んだわけではない.


1文目

製造業者は,開発するソフトウェアシステムの適用範囲,規模及びソフトウェア安全クラス分類に適した,ソフトウェア開発プロセスのアクティビティを実施するために,(一つ又は複数の)ソフトウェア開発計画を確立する。

最初の文では,主語は「製造業者」で,述語は「確立する」である.目的語として「(一つ又は複数の)ソフトウェア開発計画」である.複文になっていて,内部にもう一つ主語-述語関係を持っている.述語が「実施する(ために)」とある部分である.隠れている主語は(距離が遠いだけともいえるが),「製造業者」である.更に,入れ子になっている.動詞「適した」は,単にソフトウェア開発プロセスに掛かっている(係り受けを考えると読点は不要である),「実施する」の主語は,確立すると同じく製造業者である.

私の趣味だと,以下の文の方が読みやすい.

製造業者は,(一つ又は複数の)ソフトウェア開発計画を確立すること.開発するソフトウェアシステムの適用範囲,規模およびソフトウェア安全クラス分類に適した開発プロセスのアクティビティを実施する必要がある.ソフトウェア開発計画は,そのアクティビティを含んでいること.


2文目

ソフトウェア開発ライフサイクルモデルは,その計画の中に全てを定義するか,又は引用するかのいずれかとする。

短い2番目の文章も,すこしややこしい.述部「いずれかとする」の主語が不明である.小学校でならった文法からいうと,「ソフトウェア開発プロセス」には,助詞「は」がついているので主語で,「いずれかとする」が述語となる.「この本は,哲学書か数学書のいずれかである」というのと同じ非人称主語をとる構成である.

次に複文を構成している「その計画の中に全てを定義する」や「引用する」の主語を考えると,1文目にでてきた製造業者に違いない.そうすると,この「〜は」の部分は,三上文法でいう主題提示の役割を持つだけで,主語にはなり得ないことになる(象鼻文「象は鼻が長い」において,長いのは鼻である).「ソフトウェア開発ライフサイクルプロセスに関して云えば」くらいである.「定義したり」・「引用したりする」のは,文脈上(第一文から,隠れた主語としての)製造業者ということになる.そうすると「いずれかとする」が浮いてしまう.誰がいずれかとするのか?

これも修正案を書いておく.ソフトウェア開発ライフサイクルモデルを目的語としている.

(製造業者は)ソフトウエア開発ライフサイクルモデルを,その計画の中で全て定義するか,又は引用すること.


原文

ちなみに,原文は以下である.

The MANUFACTURER shall establish a software development plan (or plans) for conducting the ACTIVITIES of the software development PROCESS appropriate to the scope, magnitude, and software safety classifications of the SOFTWARE SYSTEM to be developed. The SOFTWARE DEVELOPMENT LIFE CYCLE MODEL shall either be fully defined or be referenced in the plan (or plans).

これを見たあと日本語文を見ると,訳者のプロセスが見えるようである.

1文目の英語の構成は,主語・述語・目的語を最初に示している.他は付加情報であり,いわゆる主語のあとに,付加情報を「後ろから訳」しているために,目的語,述語が離れてしまい,長いスタックを持たない人には耐えがたい距離になっている.

2文目に関して云えば,無生物主語であるが,受け身の形をとっている.訳のときに,無生物主語をそのまま引き受けながら能動態の形で訳したがために,いろいろと主述関係に不整合が生じている.



(nil)

KAOS (83) 文を形式化する基礎としての論理:述語論理 (4.4.1-7)

今回は,一階述語論理である.プログラミングは別として,要求段階で二階以上の高階述語論理を扱うことはないと思う(現状実務的ではないという消極的理由もある).従って,以降では単に述語論理とする.

 命題論理では,原子式と記号(∧,→など)のみの操作となる.表現できることに限りがある.P→Qというときに,P:アクセルペダルを踏下する,Q:加速するでもよいし,P:雨が降る,Q:隕石が落ちるでも構造上は同じである(真偽は違うかもしれない).

述語論理では,主として2つの方法で,命題論理における原子式の中身を明示しようとする.

最初は,述語を利用することである.述語論理式という名前に現れている.ここでの述語は,自然言語における述語を思い出せばよい.

自然言語で述語になり得るのは,日本語の場合は,動詞・名詞(+コピュラ 1)・形容詞(イ型およびナ型 2)である.

純粋な名詞のみの場合というのは,有名なうなぎ文にある.「(食堂で注文するときの)ぼくはうなぎ」というときの文字通りではないうなぎである.要求文書に,ぼくはうなぎ,がでてくることはないが,体言止めで終わることは多い 3.ただ,名詞は普通は,コピュラ(繋詞,「です」「である」など)とともに用いられる.

主として,述語には二つの役割がある.ある特性を示す場合,ふるまいを示す場合である.

私の車は白色です.

このときは,車の特性について述べている.

車が加速する.

これは,車のふるまいについて述べている.

これらは,それぞれ次のように書くことができる.

IS_WHITE(mycar),ACCELERATE(the_car)

IS_WHITE,ACCELERATEが述語で,括弧の中は主語になっている.特性について述べる場合は,動詞「である」だけではなく属性まで含んだ述語とする.

どちらも,関数のような形をしていることに気がつく.但し,括弧の中はパラメータではなく,「項」と呼ばれる.

「車がエンジン回転数を上げる」だと,INCREASE(the_car, engine_rotation)とでき,項が2つの場合である.自然言語でいえば,最初の項が主語で,2項目が目的語になる.

(nil)

Notes:

  1. コピュラというのは,日本語でいえば「である」に相当する.全ての言語がコピュラを持つわけではない.例えば,「私はプログラマです」という日本語は,ロシア語ではЯ программист,アラビア語ではأنا مبرمج となり直接名詞を接続する.
  2. ナ型の場合,学校時代は形容動詞と習った.本論では単にナ型形容詞とする
  3. うなぎ文は,日本語における主語の役割を議論するときに必ずでてくる文.例えば,三上章の「象は鼻が長い」(くろしお出版)を参照.ちなみにこのタイトルは,象鼻文.