JP2005115498A - ソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置 - Google Patents

ソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置 Download PDF

Info

Publication number
JP2005115498A
JP2005115498A JP2003346442A JP2003346442A JP2005115498A JP 2005115498 A JP2005115498 A JP 2005115498A JP 2003346442 A JP2003346442 A JP 2003346442A JP 2003346442 A JP2003346442 A JP 2003346442A JP 2005115498 A JP2005115498 A JP 2005115498A
Authority
JP
Japan
Prior art keywords
word
value
adjacency matrix
words
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2003346442A
Other languages
English (en)
Inventor
Osamu Arai
攻 荒井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Catena Corp
Original Assignee
Catena Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Catena Corp filed Critical Catena Corp
Priority to JP2003346442A priority Critical patent/JP2005115498A/ja
Priority to PCT/IB2004/003266 priority patent/WO2005043271A2/ja
Priority to JP2005515082A priority patent/JPWO2005043271A1/ja
Publication of JP2005115498A publication Critical patent/JP2005115498A/ja
Priority to US10/574,703 priority patent/US20070169006A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】
単語単位のプログラムからなるシステムにおける、出力データを生成するための単語単位プログラムの処理を、無駄な繰り返しを排除して最少実行回数で完了すること。
【解決手段】
経路作用要素も単語の1つみなし、単語の関係を定義している単語単位のプログラムとして、要件を定義する。この経路作用要素の定義式実行条件を、その条件が成立するときに経路作用要素が指定する基本構造に属する単語の定義式実行条件に置くことによって経路作用要素を排除し、システム全体の構造を1つにまとめる。こうして得られた単一化されたシステム全体の単語単位のプログラム群(経路作用要素を含めない)に対して、トポロジカルソートを行って単語単位のプログラム群を最適順序に並び替える。これにより、例えば無駄な繰返しを回避することができる。
【選択図】 図14

Description

本発明は、ソフトウェア開発に係り、特に、数学的考え方にたったソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置に関する。
一般にプログラムは、次のような3つの部分によって構成される。
(1)領域の宣言、メモリの割り当てとそれに関連した定数及び変数のアドレス
(2)制御の順序を表す文
(3)メモリ割り当て領域に与えられる値を決定するための実行条件文と計算実行文

ソフトウェアが開発されるとき、ユーザは、主に(3)にのみ関係する。他の部分については、システムエンジニア及びプログラマが責任をもつ。人間は、コンピュータそれ自身を制御しているプログラムによって、画面及びキーボードからデータを入力し、ファイル中のデータを読み、またファイルにデータを書きこむ。
この部分に使用する装置を動かすプログラムも要件に依存せず、システムエンジニア及びプログラマが責任をもつ。このうち、特に、(2)の部分には要件に依存しない固定の(一定の)構造が存在する。したがって、要件に依存する(3)を決定する(すなわち、定義する)だけで、自動的にプログラムを生成することができる。
この構造体は Lyee(登録商標) の方法論の上では「プログラムの構造」といわれる(特許文献1乃至6、非特許文献3及び4参照)。

我々は通常、ホーア論理(Hoar Logic)やλ計算のような論理的な関係を用いてプログラム構造を表現する(非特許文献1及び2参照)。 このスタイルのプログラム構造の表現は、それらのプログラムの行動的構造を理解することの助けになる。これにより、特に宣言型(スタイル)プログラムの場合に、プログラムを理解し、分析することが可能になる。
しかしながらこのようなアプローチを通してされた分析は、論理表現の持つ複雑さゆえに、意味論を検証したり、そして/あるいは、意味論を修正したりすることの困難さを顕在化する。
国際公開第97/16784号パンフレット 国際公開第98/19232号パンフレット 国際公開第99/49387号パンフレット 国際公開第00/79385号パンフレット 国際公開第02/42904号パンフレット 特開2002−202883号公報 グリン・ウィンスケル著、「プログラミング言語の公式意味論」、MITプレス、1993年 ハンネ・リース・ニールソン、フレミング・ニールソン著、「アプリケーションについての 意味論 公式紹介」、ジョン・ワイリー・アンド・サンズ 、1992年 根来 文生著、「Lyee ソフトウェアの原理」、21世紀( IS2000 )における情報社会についての国際会議会報、日本、会津、2000年11月5日-8日、pp441 - 446 根来 文生著、「ソースコード生成についての高密度処理方法」、システミクス、サイバネティクス及びインフォマティクスについての第5回世界多極会議会報、( SCI2001 )、米国、オーランド、2001年7月22日-25日
このように、従来の論理的な関係を用いたプログラム構造についての表現は、特に宣言型(スタイル)プログラムの場合に、プログラムを理解し、分析することが可能になる。
しかしながらこのようなアプローチを通してされた分析は、論理表現の持つ複雑さゆえに、意味論を検証したり、そして/あるいは、意味論を修正したりすることの困難さを顕在化するものであった。
本発明は、前述のような従来の技術が有していた諸問題点を解決しようとするものであって、当該プログラムが複雑な論理表現を持っていても、意味論を容易に検証し、修正し得る方法論を提供することを目的とするものである。
本発明は、これにより、Lyee(登録商標)方法論によるソフトウェア開発において、より高効率、高速、高パフォーマンスを実現することを目的とする。
さらに本発明は、上記のような目的を達成できるソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置を提供することを目的とする。
また、本発明は上記と併せて、Lyee(登録商標)方法論に係るプログラム構造を数学的に表現し、その正当性を示すこと、及び、その順序性のない性質を示すことを目的とする。
上記課題を解決するために、本発明は、ソフトウェア開発要望に係る基本構造に属する単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係順序関係から第1の隣接行列を生成し、該基本構造同士の連結関係を規定する経路作用要素を単語とみなし、かかる単語の定義式及び実行条件を第2の隣接行列として表し、該第1及び第2の隣接行列からシステム全体を律する構造を成立させ、該成立した構造に対して探索を施して前記単語単位プログラム群を並び替えることを特徴とする。
さらに本発明は、ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係を有向グラフで表し、該表された有向グラフに対して探索を施し、該探索の結果をもとに当該単語単位プログラム群を並び替えることを特徴とする。
また本発明は、ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係から隣接行列を生成し、該生成された隣接行列に対して探索を施し、該探索の結果をもとに当該単語単位プログラム群を並び替えることを特徴とする。
ここで、「探索」とは、(後述する)トポロジカル・ソート、(Topological Sort)、(後述する)深さ優先探索(Depth−First Search)、幅優先探索(Breadth−First Search)、反復深化法(Iterative Deeping)、発見的探索(Heuristic Search)、ヒル・クライミング(Hill Climbing)、最適優先探索(Best―First Search)、オイラー(Euler)の一筆書き、ダイクストラ(Dijkstra)法等を含む各種アルゴリズムをいう。
また本発明は、ソフトウェア開発のユーザ要件中の単語についての有意性規定関係から隣接行列及び状態ベクトルを生成し、当該隣接行列と状態ベクトルとを所定の公理に基づき計算し、該計算の結果から、単語の状態を把握することを特徴とする。
さらに本発明は、ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係を有向グラフで表すことを特徴とする。
ここで、順序関係としては半順序及び全順序が考えられる。
また、ここで用いる「ソフトウェア」とは広義の意である。即ち、ユーザからの開発要望及び当該要望にあった目的プログラムの双方を包含する概念である。
また本発明は、ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係に係る集合が閉じる単位で基本構造単位を構成し、該構成された基本構造単位をノードとして捉えた有向グラフで表すことを特徴とする。
さらに本発明は、ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係から隣接行列を生成し、該生成された隣接行列に対して探索を施し該探索の結果をもとに当該単語単位プログラム群を並び替え、該並び替えられた当該単語単位プログラム群をLyee方法論に適用してコードを生成することで求めるソフトウェアを得ることを特徴とする。
また本発明は、ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係から隣接行列を生成する隣接行列計算部と、該生成された隣接行列に対して探索を施し該探索の結果をもとに当該単語単位プログラム群を並び替える探索部と、該並び替えられた当該単語単位プログラム群をLyee方法論に適用してコードを生成する生成部とを具備することを特徴とする。これら各部は総て自動化できるので、結局繰返し処理の排除→ソフトウェア生成まで一貫して自動処理が可能となり、ソフトウェア生産速度、効率は各段に向上する。
ここで、(後述する)「有向グラフ作成部」とは、ソフトウェア開発要望者であるユーザの発する要件に含まれるそれぞれの単語をノードによって表し、入力単語と状態単語とを区別しつつa ≦b(aからbが作られることを意味する記号として「≦」を定義する。以下同じ。)という始点と終点の間の半順序関係(または全順序関係)を矢印によって表した有向グラフを作成する機能を実現する単位をいう。例えば、こうした機能をプログラム化したソフトウェアとしてもよいし、或いは当該ソフトウェアをコード化したものをROM(ReadOnlyMemory)に書きこんだものであってもよい。
ここで、「入力単語」とは(後述の)数式3におけるfi を持っていない最終の終点単語をいい、「状態単語」とは入力単語でない単語をいう。なお、以下では、数式を指標するにあたり、数式の見出し中では「数」の表題に番号を付したものをもってするが、文章中指標するにあたっては、「数式1」のようにいうこともある。
また、「隣接行列計算部」とは、単語単位のプログラム相互の関係を(後述の)数式3形式で表現し、それを行列の形式で再表現した形態である隣接行列を計算して得る機能を実現する単位をいう。例えば、こうした機能をプログラム化したソフトウェアとしてもよいし、或いは当該ソフトウェアをコード化したものをROM(ReadOnlyMemory)に書きこんだものであってもよい。
さらに、「探索部」とは、前述の各種手法を包含するアルゴリズムである探索を一般に実現する機能を有する。例えば、こうした機能をプログラム化したソフトウェアとしてもよいし、或いは当該ソフトウェアをコード化したものをROM(ReadOnlyMemory)に書きこんだものであってもよい。
また、(後述の)「トポロジカル・ソート部」とは、上記で得られた有向グラフに対して(後述の)深さ優先探索を行い、行きついたところから探索経路を戻るときにノードを取得してゆくことでノード列(数列)を整列する機能を実現する単位をいう。例えば、こうした機能をプログラム化したソフトウェアとしてもよいし、或いは当該ソフトウェアをコード化したものをROM(ReadOnlyMemory)に書きこんだものであってもよい。
ここで、「深さ優先探索」とは、
始点であるノードを出発してノード間の連結がとれているノードを訪問が重複しないように進み、
行く場所がなくなったら行く場所のあるノードまで戻り(再帰)、
戻ったノードから再び(1)の要領で進み、
進むところがなくなったら終了する、
というアルゴリズムをいう。
上記で規定される本願に係る発明では、繰返しを回避するので、より高効率、高速、高パフォーマンスを備えたソフトウェア開発を実現することが可能となる。
さらに上記で規定される本発明では、繰返しをなくす前処理を自動で行い、こうして得られた前処理済の単語単位のプログラムをもとにLyee(登録商標)方法論により自動的に目的プログラム生成を行う。つまり、ユーザ要件の洗練化(整列)から目的プログラムの生成に至るまで自動化することが可能となる。これにより、ソフトウェア生産の大幅な効率向上、生産性向上、品質向上等、ソフトウェア産業上に大きな効果をもたらす。
本発明によれば、Lyee(登録商標)方法論によるソフトウェア開発において、より高効率、高速、高パフォーマンスを実現することができる。
以下、図面を参照しながら、本願の発明の具体的な実施形態について説明する。
第I章で、本発明の前提となる、技術および概念について述べる。第I章のI−1では、本発明が改良を施す対象であるLyee(登録商標)方法論によるソフトウェア構造(単語単位のプログラム構造)と、Lyee(登録商標)の特徴的な概念である「状態」の概念について概略を述べる。I−2では、単語単位のプログラムを数学的構造モデルによって説明する。I−3で、単語単位のプログラムによる値の生成を一巡処理で完了するための技術トポロジカルソートについて述べる。トポロジカルソート技術については、PCT/JP03/09591で特許出願済みである。
第II章で、本発明の具体的な実施形態である、トポロジカルソートをLyee方法論のシステム全体に施すためのシステム構造の単一化について述べる。第II章のII−1では、Lyeeのシステム構造について述べる。II−2で、Lyeeのシステム構造の単一化技術について述べる。

I章
I−1.単語単位のプログラムとは何か
I−1−(1)単語単位のプログラムとは
Lyee(登録商標)方法論によるソフトウェアは、単語単位のプログラムを基本にして構成されている。単語単位のプログラミングでは、要件は単語の集合によって表され、単語は宣言文を使って定義される。単語単位のプログラムは、2種類の主なコンポーネントで構成されている。1つのコンポーネントは単語のコンポ-ネントである。単語単位のプログラミングでは、要件は、単語の名前、単語の計算式の定義、単語の計算式の条件、単語の属性(入出力、データタイプ、その他の属性)を含んだ単語の集合とし、代入文ではなく宣言文の形式で定義される。

たとえば、Sが単語wを定義する宣言文であるとすると、その要件の例は表1のようになる。
Figure 2005115498
もう1つのコンポーネントは制御プログラムのコンポーネントである。制御プログラムは、それ以上実行を繰返しても、いかなる単語の値も変化しない状態になるまで、単純に単語単位プログラムの実行の繰り返しを行う。単語aの定義は単語bを使用しており、単語bは単語aの後に与えられているが、ユーザはこれらの定義が実行される順序(制御ロジック)を指定する必要がない。一方、手続き型プログラミングの場合は当然ながら、宣言型プログラムミングの一種であるロジカルプログラミングの場合でも、プログラムの一行の実行順序は実行結果に影響を与える。
表1の例を使って、この処理の動きを説明する。
最初に、単語aが実行される。単語d、b、cはまだ実行されておらず、従って単語aは値を決定することができない。次に、入力単語cが実行される。単語cは実行条件がないので、値が決定される。例えば、単語cの値が+3だとすると、単語bは、実行条件c>0が真となるので、定義 2×c+5 が実行可能になり、単語bの値は+11と計算され、値の出力が可能となる。単語dは入力単語であり、実行条件がないので、d=真である。これですべての単語が処理されたが、単語aの値は未決定のままである。結果として、プログラムは最初に戻って再び処理を実行する。
2回目の実行時、d =真、 単語bと単語cはそれぞれ値が+11と+3に決定しているので、単語aは値+14を得て、その値が適切な装置に出力される。単語c、bとdの値は前に計算されているので、これらの単語の値のすべては決定済みである。従って、2回目の実行で、4つの単語の総ての値が決定したことになる。
次に、「状態」概念について説明する。単語のデータタイプは、コンピュータ上で扱い可能な、数、ブール(boolean)、文字、その他である。論理的順序を制御するためには、それぞれの単語に存在する「状態」の概念の導入が必要となる。実際、単語の状態とは、複数の状態:すなわち、真、偽、そして未決定のいずれか1つとなる。それぞれの意味は次の通りである。
真:値が決定され、かつユーザ要件を満たす。
偽:値が決定されるが、それはユーザ要件を満たさない。
未決定(又は空):値が決定されていない。

単語の最初の状態は常に未決定で、それは単語の値がまだ転送(move)されていないか、あるいは計算されていなかったことを意味している。名前によって定義された単語を終点単語、そして、別の単語を定義するために、計算条件や計算式に使われている単語群を始点単語と呼ぶ。要件中の総ての単語が1回実行されることを一巡処理と呼ぶ。
単語の値が決定され、その状態が真となるのは、その単語の始点単語の状態がすべて真となったときである。始点単語として使われていない単語の状態は、終点単語の状態に関与しない。一巡処理が繰り返されることを、繰返し処理(又は、繰返しプロセス)と呼ぶ。単語の状態に変化がなくなるまで繰り返し処理を続けることにより、単語を出力に用いることが可能となる。各単語の状態は、真、偽になるか、あるいは未決定のまま残るか、のいずれかである。もし未決定の単語があるなら、そのシステムに入力単語が存在するかどうか、閉じたループがあるかどうかをチェックする必要がある。
閉じたループは、単語が直接的または間接的に自身で自身を定義しているか、要件が完全でないことを意味する。実行条件は排他的でなければならず、また否定は明示的に定義されていなくてはならない。すなわち、条件の総和が重なりのない全体を構成(言い換えれば、条件の総和が1となり、1以上でも1以下でもない)しなければならない。
このように、単語単位のプログラミングは、ソフトウェアの制御ロジック部分を自動的に生成する。

I−1−(2)個々の単語のプログラム構造

図1は、前述した単語単位のプログラムの構造を示したフローチャートである。同図をもとにプログラムの構造及び動作について説明する。図1のαは、単語名を示す。
(1)ボックス1
まず、statement(宣言文)を遂行するべきかどうか判断する。もし単語αの状態が空でないなら、以下を実行せず終了し(301)、空ならボックス2へ進む。
(2)ボックス2
もし始点単語の状態が総て真であるときは、単語の定義式(計算式)を遂行して、その結果を一時的な領域に記憶する。従って、一時的な領域が必要となる。始点のいずれかが真以外の場合は、定義式を遂行しない。
(3)ボックス3
定義式を実行した、または不実行の結果、単語αに有意な(ユーザ要件に適合する)値が決定されたかどうかを判断する。総ての始点単語が真であるとき、単語の値は決定される。しかし、たとえ総ての始点単語が真であるとしても、ユーザの要求条件によっては単語の値は偽とされるかもしれない。単語に有意な値が決定されるときはボックス4へ、単語に値が決定されない、又は決定された値が偽とされるときはボックス5へ移行する。
(4)ボックス4
決定された単語αの値がユーザの要求条件に適合するときには、通常領域に結果を記録する。従って、通常領域が必要となる。この場合には、単語αの状態は真である(303)。
(5)ボックス5
ボックス3で単語の値が未決定、又は決定された値が偽とされた場合はここに至る。ボックス5では、単語がこのうちどちらであるかを判断する。
単語の値がユーザ要求条件によって偽となるか、あるいは始点の値が偽の場合は、単語の状態は偽である。単語の状態が偽となる場合はボックス6へ、単語の値が偽でない場合はボックス7へ移行する。
(6)ボックス6
値が偽であることを示すフラグをセットする。このようなフラグは偽のプロセスとしてすべての単語に必要である。または、状態が偽であることを意味する値を通常領域に記憶する。このとき単語の状態は偽となる(305)。
(7)ボックス7
繰り返し処理を実行するかどうかを判断するために再帰(繰返し)カウンタに1を加える。従って、再帰カウンタが必要となる(非特許文献3参照)。このとき単語の状態は空となる(307)。

I−1−(3)全体のシステムを制御するプログラムとその構造
システム全体を制御するプログラムがパレット連鎖関数と呼ばれる(非特許文献3参照)。適切に繰り返し処理をする制御プログラムはこのプログラムの中に入れられる。図1で説明したように、もし1つの始点単語の状態が偽であるなら、終点単語の状態が確実に偽になる。たとえ始点単語のすべての状態が真であるとしても、ユーザ要求条件について偽があるときには、終点単語の状態が偽になる。したがって、繰り返しがなされるかどうかを判断するためには、ただ空(未決定)の始点単語が定義式に含まれるか否かを判断すればよい。
もし空の始点単語が1つでもあれば、繰り返し処理は実行される。しかしながら、有向グラフによってそれを表現するならば、閉じられたループが含まれるときには、終点単語の状態が空から変化しない。また、このシステムが始点単語を持っていないとき、終点単語は空から変化しない。そのために、このような場合には、繰り返しプロセスは終了せず永久のループに入る。このような状況を回避するために、プログラムのすべての単語L(α)を制御するパレット連鎖関数のプログラム(Φ)にある再帰カウンタを制御するために用いられるプログラムコードがある。
単語が空になるたびに、それぞれの単語のプログラムが再帰カウンタに1を加える。一連の繰り返しプロセスを終了する条件として、この再帰カウンタの値が前回の繰り返し処理での値と同じであるということを用いる。この状態を「状態変化はない」という。
ロジカルプログラミングでは、特に非手続き型プログラミング言語の一種である標準的なプロログ(Prolog:非手続き型プログラミング言語)では、バックトラック(再実行)が永久ループに陥る。他の改良型プロログは、待機(wait)やフリーズを使って永久ループを回避する。単語単位のプログラムでは、前述のメカニズムを使ってこのようなループを回避する。

Lyee(登録商標)方法論で用いるパレット連鎖関数プログラム(Φ)の例を以下に示す。「Crtの値は状態が未決定(空)である単語L(α)の数である」をループの変数プロパティとするというプロパティを用いることによって、このプログラムはホア(Hoare)の理論で証明することができる。下記の例はx、y及びzの3つの単語がある場合である。
[Φのプログラムコード]
PCtr = 1 /* PCtr = 前回の繰り返し処理の再起カウンタ */
Ctr =
0 /* Ctr = 再起カウンタ */
While
PCtr ¹ Ctr do
PCtr = Ctr
Ctr = 0
L(x) /* 各単語プログラムは状態と繰り返しの制御を行う以下のような関数(機能)を持っている;
もし始点単語が空なら、単語L(α)の状態は未決定で Ctr = Ctr+1
そうでないなら、単語L(α)の状態は決定済*/
L(y)
L(z)
End
/* Ctrの値は状態が未決定である単語L(α)の数*/
このプログラムは以下の意味になる:
プログラムが終了する。
終了したとき、変数Ctrの値は、状態が未決定である単語L(α)の数である。

プログラムが停止したとき、単語の定義式に従って、このシステム中に始点単語を持つ単語L(α)の状態は、通常の場合真か偽が割り当てられる。単語αの状態は、次のような場合は、未決定(空)である:
1)単語αが閉じたループの中か、閉じたループの後にある場合。
2)単語αが排他的条件を持っていない場合。
排他的とは、もし
Figure 2005115498
が常に真であり、かつ、
Figure 2005115498
が常に偽であれば、x
とy
は排他的である、として定義される。
3)単語αの始点単語が同じシステムにない場合。

I−2.単語単位のプログラムの数学的考察
単語単位のプログラムのプログラム構造はホアの定理によって証明できる。しかしながら、そのようなホアの定理のアプローチを通しての分析では、その論理表現のスタイルの複雑性のために、単語単位プログラムの意味論を検証し、改良を加えることが困難である。そこで、有向グラフ技術に起源したもう1つのアプローチである隣接行列を用いて、単語単位プログラムによるプログラム構造を数学的構造モデル化し、本発明を説明する。この章では、まず単語単位のプログラムによるプログラム構造を、数学的構造モデルによって表し、その特徴を述べる。すなわち、有向グラフモデルと隣接行列モデルである。

I−2−(1)単語単位プログラムの関数表現
Lyee 要件の仕様をより形式的に扱うと、関数xを、1、2、…nの点における定数とその他の点のxの値によって定義した方程式のシステムに表すことができる。
Figure 2005115498
数式3は、単語がn個あるシステムにおける、i番目の単語xの定義式を表す関数である。x(i)は終点単語であるi番目の単語xを表す。fi
( x(1),x(2),…,x(n))は、終点単語x(i) の定義式を表す関数で、定義式がシステム内の1からn番目の単語のいずれかによって構成されていることを示す。

数式3の Lyee (登録商標)仕様は次のように書き直すことができる:
Figure 2005115498
さらに簡易な形式では、
x = F ( x)
である。

I−2−(2)本発明の原理:有向グラフ(directed graph)とその隣接行列


始点単語と終点単語の関係は、有向グラフによって表すことができる。有向グラフでは、各単語はノードによって、単語間の関係は矢印によって表される。矢印の出発点となるノードが始点単語、終着点となるノードが終点単語を表す。さらに、それはa ≦b(単語aから単語bが作られる)という関係をもつ順序を定義する。
図2は、a ≦b(aからbが作られる)という関係(f)をもつ順序を説明するための有向グラフの例を示した図である。
同図に示すように、単語はa ≦bという関係を持つ半順序づけられた集合(セット)を構成する。即ち、同図の有向グラフは単語a及び単語bという要素及びこれらの要素間を関係付ける半順序関係(矢印)を構成要素とする集合とみることができる。
有向グラフは隣接行列によって表現することができる。n個の単語の関係を表す隣接行列は、n個×n個のマトリックスで表され、これを隣接行列Fと呼ぶ。この隣接行列において、行見出しと列見出しには、それぞれn個の単語名が置かれる。行の見出しとなるときn個の単語はそれぞれ終点単語であり、列の見出しとなるときn個の単語はそれぞれ始点単語である。
i番目の単語の式(つまり、数式3によれば、単語x(i)を生成するプログラムfi(
x(i)) )が、始点単語としてxを使うとき、隣接行列のi行目と始点単語x列の交点を表す隣接行列Fの要素fij(i=1,…,n; j=1,…,n)は1である。そうでないなら、0である。終点単語xiを生成する式において、始点単語xjが使用されているか否かを1か0で表すのである。(※「fij(i=1,…,n; j=1,…,n)」は、単語x(i)を生成するプログラムfi(
x(i)) を構成する単語のうちの単語x(j)を指し、このときはiは1からn、jは1からnのいずれかである、ことを示している。)

各単語が数式3の形式で、下記の数式5のように定義される例1の単語の関係を、有向グラフ、隣接行列の2つの形態で表して具体的に説明する。
(例1)
入力単語(fi( x(i)) を持っていない最終の終点単語)をx1及びx2と置き、状態単語(入力単語でない単語、すなわちプログラムによって値を生成する単語)をx3、x4
、x5 、x6及びx7と置く。これらの関係を上記数式3の形式で表すと下記の数式5のようになる。
Figure 2005115498
図3は、上記の例1の状態を表した有向グラフの例である。
即ち、同図に示す例においては、x1及びx2はfi(x(i))
を持っていない入力単語である。よって、いずれの矢印の終着点にもなっていない。x3はx4及びx5から生成される。よって、x3はx4及びx5から出発する矢印の終着点になっている。同様に、x4はx2及びx5から、x5はx1から、x6はx3及びx7から、x7はx4及びx6から生成されることを表すように矢印が出発点と終着点が表されている。つまり、数式5で規定される状態と図3の有向グラフで表される状態とは等価である。
このとき例1の隣接行列は数式6のように表現される。
Figure 2005115498

先に述べたように、隣接行列Fの行見出しは終点単語であり、列見出しは始点単語である。各行または列がどの終点単語または始点単語を示すかをわかりやすくし、説明を簡便にするために、隣接行列には見出しを付した。
数式6の隣接行列Fを各行について展開して説明する。第1行目の終点単語x 1の行は、いずれの始点単語列との交点も0になっており、終点単語x
1は始点を持たないこと(すなわち入力単語であること)が示されている。終点単語x 2についても同様である。第3行目の終点単語x
3の行は始点単語x4 とx5の列との交点が1、その他の始点単語列との交点が0になっており、終点単語x
3はx4 とx5を始点単語として持つことが示されている。以下、終点単語x 4から終点単語x
7の終点単語についても、同様に、どの単語を始点単語として持つか(あるいは持たないか)が示されている。
数式6の隣接行列の各行は、以下のような数式でも表すことができる。左辺が行見出しとなる終点単語、右辺は、交点の値が1となった列見出しの始点単語を表す。右辺の「0」は、いずれの交点の交点の値も「0」であることを表す。
1=0
2=0
3=x4
+x5
4=x2+x5
5=x1
6=x3+x7
7=x4+x6
ここで、「+」は、後述するように、通常の四則演算における「加える」の意味でなく、本明細書中の単語の関係を表す数式においては、左辺の状態単語(終点単語)を決める半順序集合の始点単語が複数あるときにこれらを付加して左辺の単語を規定することを示す演算子(以下、「付加演算子」と呼ぶ)として用いている。
以上より、したがって、数式5で定義される単語の関係は、図3の有向グラフで表される関係及び数式6の隣接行列による数学的表現で記述される関係と等価であるということがいえる。

I−2−(3)隣接行列Fと状態ベクトルXで表す終点単語のための状態モデル

前セクションでは、n個の単語の「終点単語の他の単語との関係」を表すためのモデルとして、有向グラフと隣接行列を考察した。次に、n個の単語の「終点単語の値の状態」を表すためのモデルについて述べる。まず、n個の単語の始点単語としての状態を縦列のベクトルXに記録する(ベクトルとは1つの列あるいは行しか持たないマトリックスである)。数式6の隣接行列に表された単語の例で説明すると、始点単語が表示される順序、x1からxの順序に各始点単語の状態を表したベクトルXは、たとえば下記の数式7のように表すことができる。各行がどの始点単語を示すかをわかりやすくし、説明を簡便にするために、ベクトルには見出しを付した。
Figure 2005115498
このとき、ベクトルXは、始点単語xとxの状態は「+1」、始点単語xの状態は「−1」、xからxの始点単語の状態は「null」であることを示している。
単語を生成し得る値の状態は次のように3種類に設定される。
+1:値は真であるとして決定済みである。

‐1:値)は偽であるとして決定済みである。

空(null):値は未決定である。
入力単語の初期値は以下の通りである。

1:値は真であるとして決定済みである。

(適切に入力されている状態)
−1:値は偽であるとして決定済みである。

(適切に入力されていない状態)
従って、たとえ数式3が実行されるとしても、状態は変化しない。
状態単語の初期値は空である:
空:値はまだ決定済みでない。

(移動していない、あるいはまだ計算されていない状態)

状態単語について考察するに、単語の関係を表す隣接行列Fの上に単語の状態を表す状態ベクトルXを作用させるということは当該単語の順序で数式3を横列で実行することである。順番にn個の式を使う処理は順序処理と呼ばれる。その始点単語のすべての状態が+1であるとき、状態単語の状態が+1(真)になり、状態単語の値は決定済みとなる。
始点単語ではない単語の状態はその式の終点単語の状態とは関係していない。順序処理が繰り返されることは繰り返し処理と呼ばれる。
たとえそれが繰り返されるとしても、「真」であるとして決定が済んでいない単語は、偽の状態(−1)になるか、あるいは空のままである。上記のことが「有向グラフ」で表現されると以下のようになる。
(1)もしノードが閉じられたループに含まれなかったなら、そして、もしいずれかの始点単語に係るノードから次々に始点単語を探索した際に当該始点単語の値が偽であるなら、ノード(単語)の値は決定されない。もし単語の値がユーザの必要条件を満たさなかったならノードの値は決定されない。たとえ値が成功裏に計算されるとしても、ノード(単語)の値が偽と決定される。
(2)もしノードが閉じられたループに含まれなかったなら、そして、もしすべての始点単語が、そのノードから次々に始点単語を探索したとき真であるなら、ノードの値は真として決定される。
(3)ノードが閉じられたループに含まれるときであって、ノードの始点単語がシステムに存在しないとき、ノード(単語)の値は空のまま残る。
(例2)
例1の場合、図3において、x3 、x4 、x5
、x6及びx7の状態は、この場合における終端の始点単語であるx1及びx2の状態に依存する。
同図から明らかなように、終端の始点単語であるx1が真になるとき、x5は真である。終端の始点単語であるx1及びx2が真であるとき、x4及びx5が真になる。x6及びx7はループにあるので空のままである。


I−2−(4)隣接行列Fと状態ベクトルXの計算操作
n個の単語の状態はベクトルX(列1つからなる行列)に、単語の順序に従って記録される。隣接行列Fと状態ベクトルXを用いて繰り返し処理を実行して計算した状態と同じ状態を表すように、算術演算子が定義される。言い換えれば、FとXの乗算は以下のようになる。
Figure 2005115498

m回目の隣接行列Fと状態ベクトルXの積である、状態ベクトルXmの要素xm,i(m回目の繰り返し処理後の単語xi)は以下のような式で表せる。
Figure 2005115498

乗算演算子(・)の左側のfIjには、隣接行列Fのi行目の終点単語においてj列の始点単語Xjが使われているか否かを表す指数1か0(始点単語となる場合が1、始点単語とならない場合が0)が与えられる。乗算演算子(・)の右側のxm,iには、m回目の繰返し処理中のベクトルXのi行目に表された始点単語xの状態を示す3種類の指数+1(真)、-1(偽)、null(ここでnullは空を意味する)が与えられる。
数式6の隣接行列Fと数式7のベクトルXを例にして、終点単語xの3回目の繰返し処理を数式9で表すと以下のようになる。
3,3=f3,1・x3,1+f3,2・x3,2+f3,3・x2,3+f3,4・x2,4
+f3,5・x2,5+f3,6・x2,6+f3,7・x2,7
3,3=0・(+1)+0・(+1)+0・(null)
+1・(+1)+1・(+1)+0・(null)+0・(null)
数式6のy3行と始点単語x列との交点は「0」、数式5で示されたxの状態を表す列の第1行は「+1」、よって、f3,1・x3,1は「0・(+1)」となっている。数式6のy3行と始点単語列との交点総てについて、その指数と数式7に示された対応する状態指数を乗算演算子で結び、付加演算を用いて列記していくと上記の式となる。
ここで、乗算演算子(・)の演算結果を次のように定義する。
Figure 2005115498
数式10の公理は以下のことを示している。始点単語指数が0であれば、始点単語の状態が何であれ、始点単語の状態は真(+1)となり、終点単語の状態に影響を与えない。始点単語指数が1の場合は、始点単語の状態はそのまま変化せず、始点単語の状態が終点単語の状態に営業を与える。
次に、付加演算子( + )の演算結果を次のように定義する。 付加演算子に用いる値は、公理1の演算結果である 。
Figure 2005115498

上記の公理2は、さらに右辺によって類別してみると、
Figure 2005115498
となる。

数式11乃至12から明らかなように、付加演算子(+)の意味については、例えばもし、左辺に(−1)が1個でもあれば右辺は(−1)となる。もし左辺に(−1)がなく、かつ空(
null)が1個でもあれば、右辺は空である。 もし左辺のすべてが(+1)であるなら、右辺の状態は、終点である右辺の値がユーザ要件を満たす場合は(+1)、ユーザ要件を満たさない場合は(−1)である


公理1及び2を使うことによって、次の定理が証明される。
(定理1)
終点単語の状態が(+1)(真)になるのは、始点単語の総ての状態が(+1)(真)であり、かつ終点単語の値がユーザ要件を満たす場合である<公理2第1群>。

(証明)
もし単語の状態が(+1)(真)であるなら、それは公理1によって、その単語が始点単語として用いられるとき、1・(+1)=(+1)であるから始点単語は(+1)(真)になる。その単語が始点単語として用いられない場合については、それは0・ * =(+1)( * は3つの状態のいずれかを表す)であるから、単語の状態がいずれであっても、公理2に用いる始点は(+1)(真)となる。付加演算が実行された結果が(+1)(真)になるのは、公理2によって、定理1の場合以外には考えられない。

(定理2)

終点単語の状態が(−1)(偽)になるのは、始点単語の状態が1つでも(−1)であるときか、あるいはすべての始点単語が(+1)(真)であってかつ終点単語の値がユーザ要件を満たさない場合である<公理2第2群>。

(証明)

もしいずれかの始点単語として用いられる単語の状態が(−1)であるなら、公理1によって1・(−1)=(−1)であるから、始点単語の状態は(−1)(偽)になる。そのために、結果が公理2によって(−1)(偽)
になる。すべての始点単語が(+1)(真)であるときは、定理1及び<公理2第2群>によって、(−1)(偽)になると証明される。
(定理3)
終点単語の状態が(未決定である)空になるのは、1個以上の始点単語の状態が空であり、かつ始点単語の残りの状態が(+1)(真)である場合である<公理2第3群>。

(証明)

もし1個以上の始点単語の状態が空であって、残りの始点単語の総てが(+1)(真)あるなら、公理2によって終点単語の状態は空になる。

一巡処理はXm=FXm-1によって表せる。繰り返し処理が継続されると以下のようになる。
Figure 2005115498
mは通常のマトリックスの積として定義される。Fmの要素(i,j)はマイナスでない整数である。
終点単語の状態は一巡処理を繰り返す繰り返し処理によって空から(+1) または(−1)に変化する。
その状態については、たとえ(+1)(真)のものと(−1)(偽)のものとが繰り返しプロセスを実行するとしても、終点の状態は変化しない。有向グラフによって表現した際、グラフに閉じられたループが存在し、終点が閉じられたループ内にあるとき、あるいは、このシステムが始点を持っていないとき、何度もそれを繰り返すとしても、終点単語の状態は空のままである。「状態に変化がない(すなわち、固定点fixed
pointに達した)」ことはXm+1=Xmで表わされ、数式8を用いると、次のようになる。
Figure 2005115498
この方程式が有効なとき、プログラムは停止する。

I−3.不要な繰り返しを回避する方法(実行順序の並び替え)
I−3−(1)隣接行列 の性質
I−2で、数学的構造モデルが確立された。ユーザ要件のすべての特性が隣接行列のみで示される。したがって、この隣接行列の特性を調べるのは非常に重要であって、有用である。
隣接行列Fの特性を利用して、不要な反復を避けるための方法を示す。どんなプログラム(アルゴリズム)も、再帰的な方法のみを用いて説明することができる。手続的には、再帰はwhileループ(繰り返しの終了条件をwhileで指定したループ)によって実現される。
数式8を使用して、「いかなる状態変化もない」(すなわち、「定点に達する」)という状態は、以下のように示される:
Figure 2005115498
この公式が有効になるとき、プログラムは止まることになる。
このとき、行列Fには、どんな特性があるか?行列Fmの特性は何であるか?これらの疑問に答えるために、定理4を導入することが必要である。
空でない有限集合Vの組G=(V、E)とV× Vの部分集合Eは有向グラフと呼ばれる。Vの要素は頂点もしくはポイント(点)と呼ばれ、Eの要素(u,v)は縁もしくは矢と呼ばれる。Gのポイントの有限系列P、P=<v1,v2,…,vn>はv0からv1に至るパスと呼ばれ、各i(1≦I≦n)について、(vi-1,
vi)∈Eが成り立つときには、nはこのパスの長さと呼ばれる。v0はPの始点、vnは終点と呼ばれる。<v0>は長さゼロのパスである。パスは隣接している矢の方向と共にGのポイントを追従する道筋である。
(定理4)
有向グラフVの隣接行列をAと定義する。Anの(i、j)要素は、互いに異なるGのviからvjまでの長さnのパスの数である。

m=1、m=2、…と連続して計算しFm+1X0=FmX0が成立するときにはプログラムが停止する。FとFmのプロパティを検証する。X0の全要素が常にヌル(空)なので、F
はシステムの全プロパティを表す。
1)Fm=0である場合 (m≦n)
Fmのすべての要素が0である。定理4を用いれば、閉鎖ループがこの隣接行列の有向グラフに存在しないことが証明される。変数mはその有向グラフの最も長いパスの長さを表す。Fの固有値はすべて0である。零べき行列(Fm
=0)のプロパティから、対角に要素0を持つ下三角形のマトリクスFに再配列することができる。即ち、
F'=P-1FP、ここでPは正方行列もしくは長方形行列。
理由は、F(FmX0)=FmX0,Fm+1X0=FmX0
が有効であるからである。Xmのすべての要素は(+1)か(-1)である。

2)Fm≠0である場合 (m≦n)
もし、閉じたループがこの隣接行列の有向グラフに存在した場合、対角の要素
Figure 2005115498
に1つ以上の整数が現れることが、定理4を使って証明される。このとき、変数rは最も短い閉じたループである。Fの固有値は、総てが0ではない。言い換えれば、固有値の1つは0と等しくない。総てのX0値が空(null)なので、Fm+1X0=FmX0は有効である。変数mは、その有向グラフのループの前の最も長いパスの長さを表す。Xの例では、
Figure 2005115498
もし、閉じたループが有向グラフに存在しなければ、その隣接行列は零冪行列(Fm=0)となる。この特性は重要である。

I−3−(2)繰り返しプロセスを不必要にする単語の並べ方

「有向グラフ」で表現する際に、前述の第III章1項で示したように、閉じられたループ内で始点単語・終点単語である関係がないときには、隣接行列が下三角行列になり、対角の三角形が0になるような一巡処理順序に単語を並べることによって、繰り返しプロセスを避けることができる。
分析的に規則正しい行列Pを得るのは困難である。F’=P-1FPを用いる代わりに、トポロジカル・ソートを用いる。半順序関係が与えられているとき、最初にするべき仕事から終わりにするべき仕事まで、データを一列に並べることをトポロジカル・ソート(topological
sort)と呼ぶ。半順序関係(partial order)であるから、答えが常に唯一的に決定されるわけではない。
有向グラフに深さ優先探索(depth first search:縦型検索ともいう)をしつつ、戻るときにノードを拾い上げるという方法によって、トポロジカル・ソートを実行することができる。各ノードからこれを行い結果を逆順にならべる。順序処理(一巡処理)における単語を並べるには、この方法によって単語を並べさえすればよい。

図4は、あるノード1乃至8が形成する特定の順序関係を表した有向グラフである。
即ち、同図に示す例においては、先に定義した始点単語と終点単語との関係を用いて次のように規定できる。
ノード2≦ノード1
ノード1≦ノード3
ノード3≦ノード4、ノード5≦ノード4
ノード2≦ノード5
ノード5≦ノード6
ノード3≦ノード7、ノード6≦ノード7、ノード8≦ノード7
ノード6≦ノード8
(例4)
図4に示される有向グラフの隣接行列は次の数式18の通りである。
Figure 2005115498

図4の有向グラフでは閉じられたループ内で始点単語・終点単語の関係がない。そこで、この半順序関係に係る隣接行列が下三角行列になるように、トポロジカル・ソートを行う。具体的には次のように行う。
有向グラフに対する深さ優先探索を実行する。即ち、一例として、ノード1を始点とすると、ノード1を出発して連結されている未訪問のノードを半順序関係を守って探索(即ち、連結される未訪問のノードまで進み、行き場所がなくなったら、行ける場所があるノードまで戻って(再帰)再び進めるだけ進み、行き場所がなくなったら終了(再帰からリターン):これを「再帰的に進む」ともいう)する。これにより、ノード1→ノード3→ノード4(*)→ノード3→ノード7(*)→ノード3(*)→ノード1(*)を得る。但し、(*)は再帰の時点を示す。
次に、始点をノード2に移し、上記と同様の探索を行う。すでに訪問したところは進まない。これにより、ノード2→ノード5→ノード6→ノード8(*)→ノード6(*)→ノード5(*)→ノード2(*)を得る。
その他のノードを始点として探索をするところ、すでに全ノードを訪問済みなので探索は終了する。
戻る(再帰の)ときのノードを拾い上げる。具体的には、(1)(2)で(*)の時点のノードを拾い上げる。上の例では、ノード4(*)→ノード7(*)→ノード3(*)→ノード1(*)→ノード8(*)→ノード6(*)→ノード5(*)→ノード2(*)を得る。
順序処理(一巡処理)における単語を逆順に並べる。即ち、(4)で拾い上げたノードの列を逆に並べたものを一つの解として得る。上の例では、ノード2→ノード5→ノード6→ノード8→ノード1→ノード3→ノード7→ノード4が求める一つの解である。

以上より、トポロジカル・ソートの結果は(1,2,3,4,5,6,7,8)→(2,5,6,8,1,3,7,4)である。(「ノード」の表記は省略する。)

このトポロジカル・ソートの具体的な方法についてフローチャートを用いて説明すると次のようになる。図5はトポロジカル・ソートの動作を説明するためのフローチャートである。
まず、初期値を、a=1,I=1と設定する(ステップ501)。
次に、a=a+1とし、始点をノードaに設定する(ステップ502)。
ここから探索を開始する。具体的には、訪問可能な連結されているノードで未訪問のところがないかを判定する(ステップ503)。これについては、例えば、各ノードに訪問フラグを設定、初期値に0(未訪問を示す)を入れておき、当該ノードが訪問されたときには訪問フラグを1にするなどの方法により自動判定させることができる。
ここで未訪問ノードが存在するときには、1ノード進み(ステップ504)、ステップ503に戻る。
未訪問ノードが存在しないときには、1ノード戻り(再帰)、I=I+1とする(ステップ505)。このとき、再帰に係るノードを再帰ノード列I番目の要素として退避する(ステップ506)。
次に、再帰の結果ノードaに戻ったかを判定し(ステップ507)、まだ戻っていなければステップ503に戻る。ノードaに戻った場合には始点をノードaとする探索は終了する。即ち、再帰からリターンし、I=I+1とし(ステップ508)、再帰点を先の再帰ノード列I番目の要素として退避する(ステップ509)。
ここで全ノードが探索済みかどうかをチェックする(ステップ510)。まだ探索を行っていないノードが存在する場合には、始点を替えて再度探索を始めるため、ステップ502に戻る。全ノードの探索が終了しているときには、探索は終了し、退避してあった再帰ノード列を逆順に並べる(ステップ511)ことで、並び替えの1候補を得て、一連のトポロジカル・ソートの動作を終了する(ステップ512)。
このように、トポロジカル・ソートのアルゴリズム自体を上記で説明したフローチャートに沿ってプログラム化すれば、トポロジカル・ソートの自動プログラムを得ることができる。
さて、上記によりFをトポロジカル・ソートした。その結果、F’(トポロジカル・ソートされたF)は次の数式19のようになる。
Figure 2005115498

トポロジカル・ソートの結果、一巡処理の順序は、「1,2,3,4,5,6,7,8」から「2,5,6,8,1,3,7,4」となった。
このようにF’が得られるが、このF’はその形から明らかなように上三角形に当たる総ての項が0である下三角行列になっている。この(ソート済み隣接行列である)F’は(上三角形部分には0しかないため)その構造上、あるノード(終点単語)を求めるための始点単語は当該ノードより(ソート済み隣接行列における)上の行のノードにしかない。従って、F’の行の上位から順番に値を求めていけば、Fで同じことを行う場合に比べて、繰り返しや遡りを行うことなくスムーズに総てのノードについて値が求まる。
さて、次に、上記で説明したトポロジカル・ソートをLyee(登録商標)方法論において応用する方法の一つを説明する。
図6は、Lyee(登録商標)方法論における単語単位の論理要素をノードとして上記のトポロジカル・ソートを用いて繰り返しをなくすための自動制御の動作を説明するためのフローチャートである。
同図に示すように、まず、単語ごとの論理要素(これらをノードと考える)間の関係を規定する(ステップ601)。
このためには例えば有向グラフの作成(ステップ602)を行っても良いが、これに限定されるものではない。
次に、ノードについての(上記説明した)隣接行列を定義する(ステップ603)。
この隣接行列に対して上述のトポロジカル・ソートを実行する(ステップ604)。トポロジカル・ソートの詳しいアルゴリズムについては図5及び対応する説明で詳述したので、ここでは割愛する。また、ここでは探索技法の一例としてトポロジカル・ソートとして説明したが、このステップ604では前述の他の探索の実行を行っても良いのはもとよりである。
最後に、トポロジカル・ソートの結果得られた1解に基づき、当該単語単位の論理要素(ノード)を並び替え(ステップ605)、当該動作を終了する(ステップ606)。
なお、隣接行列定義のステップ(ステップ603)については、本稿では理解の容易さを助けるために入れたが、本質的には必須のステップではない。つまり、隣接行列を定義することなく、単語ごとの論理要素間関係の規定(ステップ601)から、直接に、或いは有向グラフ作成(ステップ602)を介して、トポロジカル・ソート等の探索のステップ(ステップ604)に至ることも本発明の思想の範囲内であり、本発明の目的とするところを実現し得る。
このように、Lyee(登録商標)のソフトウェア生成自動プログラムにかける前の段階で、Lyee(登録商標)方法論によるユーザ要件から抽出した単語ごとの論理要素に対してトポロジカル・ソートをかけることで繰返しの省かれたLyee(登録商標)方法論によるソフトウェア生成が可能となる。
換言すれば、上記のノードをLyee(登録商標)方法論における単語ごとの論理要素と考えれば、上記の方法でF’を求めることで、ある単語について値を求める(有意性を決定する)に当たって、何回も繰り返し処理を行うことなく1回のRUNのみで目的を達することが可能となる。
さらに、上記のようなトポロジカル・ソートのアルゴリズムは、上記の説明から明らかなように、それ自体をソフトウェアとしてプログラミングして自動化することが可能である。
従って、Lyee(登録商標)方法論によるソフトウェア自動生成方法についてそれをさらに効率化・高品質化するのにも自動化を図れることになる。
なお、上記の説明においては、有向グラフに表される単語の順序関係として主として半順序関係を持つ場合について説明したが、半順序関係のみならず、全順序関係について、或いは全順序関係及び半順序関係が混在する場合についても上記の説明が該当することはもとよりである。
また上記の説明においては、理解のしやすさの観点から、有向グラフの作成を行った後に隣接行列を作成する点を説明したが、有向グラフの作成を介さずに、単語単位のプログラム相互の関係から直接隣接行列を作成するようにしても本発明は実現できる。

すべての単語で作るべきプログラムの構造と当該プログラムを制御するのに用いるパレット連鎖関数のプログラムの構造は、上記の記述で明確になった。そして、それらが数学上適切に動くことが証明された。

I−4.まとめ
以上詳細に説明したように、トポロジカルソート技術では、単語の状態を定義している単語単位をベースにするプログラムの数学的な構造モデルを作成し、それをLyee(登録商標)方法論によるソフトウェア開発に適用することで、より高効率、高速、高パフォーマンスの開発を実現した。
単語の状態は完全な半順序を構成する。それは単語の最小要素(極小点)として 空を持っている。有向グラフとその隣接行列とを使って、この構造モデルは数学的な面からも正しいといえる。
さらに、本技術ではパレットの一般的な考えと基本構造の正当性を考察した。それらは実務上、プログラムを作るために必要である。また、順次読込(sequential read)のようなアルゴリズム、合計値算出を実現するための構造について説明した。これらの一般的な考えは Lyee(登録商標)のシステム開発方法論で使われる。それは多くの産業的な応用分野ですでに実用的に有効とされた多くの結果をもたらしている。


人間であるユーザと、外の装置とのインタフェース及びコミュニケーションについても論じられている。これは、このようなシステムのタイプのために、単語単位をベースとするプログラムとして設計する(モデリング)ことの、実際の作業を正当化する。

以上を要するに、本技術によれば、数学的な考え方、手法、解析法をLyee(登録商標)のソフトウェア開発論、開発技術に適用・応用するので、ソフトウェア開発をより効率良く、高速に、精密に実現することができる。

上記の詳細な説明では、有向グラフ表記、隣接行列算出、トポロジカル・ソート、並び替えという順序で本発明の思想を実現する方法について述べた。しかしこれらはどれも絶対不可欠な要素というものではなく、例えば、有向グラフ表記の表記を経ないで直接隣接行列算出→トポロジカル・ソート→並び替えという順序で本発明の思想を実現してもよい。
さらに、有向グラフに対して、例えば幅優先探索(Breadth−First Search)、反復深化法(Iterative Deeping)、発見的探索(Heuristic Search)、ヒル・クライミング(Hill Climbing)、最適優先探索(Best―First Search)、オイラー(Euler)の一筆書き、ダイクストラ(Dijkstra)法等の各種探索技法を組み合わせることで並び替えてもよい。
或いは、隣接行列算出のあとを、これらの各種探索技法を組み合わせることで本技術の根本思想を実現してもよい。
図7は、本技術をソフトウェア開発装置として実現する場合の機能構成を示したブロック図である。即ち、同図に示す一例においては、ソフトウェア開発装置1000として、次の要素を備えさせる。
制御部1010は全体の制御及びLyee(登録商標)方法論に基づいたソフトウェア開発を自動的に行う機能を有する。即ち、後述する(有向グラフ作成部1050、)隣接行列計算部1060及びトポロジカルソート部1070により並び替えられた単語単位プログラム群をLyee方法論に自動的に適用して生成コードを得る機能を有している。
情報入力部1020は(図示しない)画面等を通じて、Lyee(登録商標)に係るユーザ要件を初めとする人間の意思をコンピュータに入力するインターフェースとしての機能を果たす。情報取得部/通信部1030は外部との通信や(ソフトウェア開発装置1000にある場合の)データベース1040、1041等との情報の授受を行う。なお、この例ではデータベース1040、1041はソフトウェア開発装置1000内に持っていてもよいことはもとよりである。
有向グラフ作成部1050は、制御部1010の制御に基づき、上記で説明したように、Lyee(登録商標)に係るユーザ要件から半順序関係を割り出し、それを有向グラフとして作成する機能を有する。隣接行列計算部1060は、制御部1010の制御に基づき、有向グラフ作成部1050で作成された有向グラフについて、上記で説明したような隣接行列を計算・作成する。トポロジカルソート部1070は、制御部1010の制御に基づき、隣接行列計算部1060で計算・作成された隣接行列に対して、上記で説明したようなトポロジカルソートを実行する機能を有する。
なお、上記トポロジカルソート部1070は探索を行う機能を持つ一例であって、上述のように、他の探索手法を実現する機能を有する探索部(一般)としても本発明の思想は実現される。
このように構成することにより、これら各部(1010〜1070、従って1000)は総て自動化できるので、結局繰返し処理の排除→ソフトウェア生成まで一貫して自動処理が可能となり、ソフトウェア生産速度、効率は各段に向上する。
このように、各機能を、それを実現するようにプログラムとして組んだソフトウェアとして、或いはそのようなソフトウェアを例えばROM(ReadOnlyMemory)に書きこみかかるROMを組み込んだ全体システム(装置)とすることで、前述した本発明に係る各要素をソフトウェアとして或いはそのようなソフトウェアが組み込まれたソフトウェア開発装置としても実現可能である。

II章 Lyee方法論のシステム構造の単一化
本章では、I章で述べた単語単位のプログラムの最適順序への並び替えによるプログラムの効率化技術を、システム全体に適用してシステム全体の効率化を実現するための、Lyee方法論のシステム構造の単一化技術について述べる。

II−1 Lyee方法論のシステムの構造
II−1−(1)Lyee方法論のシステムを構成する単位:基本構造
Lyee方法論は、同一条件を持っている単語を1つのグループとして、システム全体をそのグループ単位に分割する。同一条件とは、同時に出力(画面またはファイルへ)される、という条件で、そのグループの単位を論理レコードと呼ぶ。論理レコード単位に単語単位のプログラムが基本構造(Basic Structure)と呼ぶ構造を作り、基本構造単位に単語単位のプログラムが実行される。これは Lyeeの規則の1つである。
従って、Lyee方法論においては、1つのシステムはいくつかの基本構造に分割されることになる。システムのこの構造は、処理経路図(Process Route Diagram。あるいはPRDと呼ぶ)によって表現される。処理経路図では、基本構造のリンクの状態(実行の経路を示す)が表現されている。図8は2つの基本構図からなるシステムの場合の処理経路図の例である。
基本構造から別の基本構造へとプログラムの実行が遷移するしくみは、図8の例で説明すると次のとおりである。第1の基本構造において、1つ以上の始点単語(start-word)の状態がnull(未決定) であることによって終点の値の状態がnull(未決定)である出力単語が1つ以上あるとき、次に実行されるべき基本構造(第2の基本構造)が深さ優先探索(depth-first
search)によって探索され、次に実行する基本構造として指定される。次に実行される第2の基本構造において、値がnullである出力単語がなくなったとき、第2の基本構造は実行を終了し、次に実行する基本構造として、null値が最初に現われた第1の基本構造が指定される。このプロセスは、システム全体の単語の状態変化が総て消滅するまで継続される。

このように、Lyee方法論によるシステムは、基本構造単位の構造を持つので、システムの実行は基本構造単位の実行順序となる。この場合、基本構造単位の実行は1巡処理で完了することは保証されていおらず、単語単位のプログラムの実行は無駄な繰り返しが発生する。
これに対して、システムとして実行時の構造として、システム全体を1つの構造に統合すれば、基本構造単位での順序ではなく、システム内の単語単位プログラム全部に対して、一括にI章で述べたトポロジカルソートを施すことができ、単語単位プログラムを最適順序で実行することによってプログラムの実行時間等の効率化がはかれる。

基本構造から次に実行すべき基本構造の決定が、深さ優先探索では決定できない場合がある。それは、ユーザの画面からの指示によって実行される基本構造が決定する場合である。たとえば、画面に処理Aを実行するボタンと、処理Bを実行するボタンがあり、ユーザがこれらのボタンのいずれか1つを押下することによって、プログラムが実行する処理内容が決定するような場合である。このように、画面からのユーザの指示によって処理内容が決定するような仕様を含むシステムにおいては、基本構造単位に分割され単語単位プログラムの実行条件をそのままにして、基本構造を1つの構造に統合し、トポロジカルソートを施すことができない。以下に、画面からのユーザ指示が実行する基本構造を決定するような場合の基本構造の単一化の方法について具体例を上げて以下に詳しく述べる。

そのためのステップとして、まず、基本構造をリンクする(次に実行すべき基本構造を指定する)役割を果たしているプログラム、経路作用要素について詳しく考察する。


II−1−(2)基本構造をリンクするプログラム:経路作用要素
次に実行する基本構造を指定することによって基本構造をリンクする役割は、経路作用要素(Routing Vector)と呼ぶプログラムが行う。Lyeeの単語単位プログラムにおいては、入力単語、状態単語の値を生成するための単語のプログラム以外に、次に実行する基本構造を指定する、あるいは出力単語の値を出力する、などの作用を行うためのプログラムがある。これらのプログラムを作用要素(action
vector)と呼び、経路作用要素もその1つである。

これらの作用要素も一種の単語と見なすことができ、実際これらのプログラムの基本的構造は単語のプログラムと同じである。単語と作用要素の大きな違いは、単語は1つの単語のみに作用(値の生成という作用)するが、作用要素は同時に2つ以上の単語に対して作用する点だけである。たとえば、経路作用要素(次に実行する基本構造を指定する)は、基本構造という単語の集合に対して作用し、出力作用要素(出力単語を出力する)は、出力レコードという単語の集合に対して作用する。作用要素を単語とみなすことによって、作用要素を有向グラフおよび隣接行列の要素として取扱うことができ、システム全体をI章で説明してきた数学的モデルによって表すことができる。
以下に例を上げて、単語単位プログラムのモデルにおける経路作用要素の意味を説明する。
(例5)
図9は、あるシステムの画面で、ユーザがデータ項目cおよびデータ項目dにデータを入力して実行ボタンのaまたはbを押すことによって、データ項目gに値を得るためのシステムである。701はデータ項目cの入力データフィールド、702はデータ項目dの入力データフィールド、703はデータ項目gの出力データフィールド、704は実行ボタンa、705は実行ボタンbである。実行ボタンaが押されるときは、gの値は式c+dで計算され、実行ボタンbが押されるときは、gの値は式c×dによって計算される。実行ボタンのaおよびbは、両方が同時に押されることはないので、gの値の生成のための2つの計算式のどちらが実行されるかの条件となっている。
このシステムを基本構造単位に単語で表すと図10のようになる。図10のBS1、BS2、BS3はそれぞれ基本構造である。基本構造BS1は、図9に示した画面の基本構造である。BS1は、実行ボタンである入力単語aと入力単語b、入力データ項目である入力単語bと入力単語c、出力データ項目である出力単語g、経路作用要素であるXを含んでいる。
基本構造BS2は、実行ボタンaが押された時、出力データ項目gの値を式c+dによって計算するための基本構造(媒体がファイル)である。式c+dの結果を記録する単語eを含んでいる。基本構造BS3は実行ボタンbが押された時、出力データ項目gの値を式c×dによって計算するための基本構造(媒体がファイル)である。式c×dの計算結果を記録する単語fを含んでいる。
画面にユーザがデータを入力した(BS1が実行された)後に、出力単語gの値を計算するための基本構造はBS2またはBS3であるが、どちらが実行されるべきかを指定するのが経路作用要素Xである。2つの基本構造に所属する単語は、それぞれボタンaとbのどちらが押されたかによって実行が決まるので、経路作用要素Xは、実行ボタンaが押された場合(単語a=真、値がある)はBS2を、実行ボタンbが押された場合(単語b=真、値がある)はBS3を、次に実行する基本構造として指定する。また、実行が次の基本構造に移るのは入力データがそろったときであるので、単語cおよび単語dに値があることも、経路作用要素Xの実行条件となる。
基本構造BS2またはBS3の実行によって、出力単語gの値が単語eまたは単語fに成立する。出力データを画面に出力するための基本構造BS1の出力単語gは、単語eに値が成立したとき(e=真)はg=e、単語fに値が成立したとき(f=真)はg=f、と定義される。
上記のような単語の定義を整理すると下記の表2のとおりである。
Figure 2005115498
II−2 基本構造の統合によるシステム構造の単一化
II−2−(1) 基本構造の隣接行列
図11は、図10の単語の関係を有向グラフによって示した図である。基本構造BS1に属する入力単語である単語a、単語b、単語c、単語dは、有向グラフによって表される単語のネットワークの最端始点となる。同じく基本構造BS1に属する経路作用要素である単語Xは、上記表2に示したとおり、値が成立(次に実行する基本構造決定の真偽判定が成立)するためには、単語aまたは単語bと単語cと単語dが必要であるので、これらの4つの単語を始点とする矢印によって4つの単語とリンクされる。基本構造BS2に属す単語e、および、基本構造BS3に属す単語fは、値が成立するために、単語c、単語dおよび単語Xが必要であるので、これらの3つの単語を始点とする矢印によって各々3つの単語とリンクされる。基本構造BS1に属す出力単語gは、値が成立するために、単語eまたは中間単語fが必要であるので、これらの2つの単語を始点とする矢印によって2つの単語とリンクされる。
次に、図11で有向グラフで示した例5のシステムを隣接行列を用いて表す。最初に図11の、入力単語を扱った基本構造BS1(901)を表した隣接行列F1を下記の数式20に示す。
基本構造BS1(入力単語)の隣接行列
Figure 2005115498
BS1(入力単語)の要素は単語a、単語b、単語c、単語d、単語xrであるから、F1の行列はこれらの要素によって構成される。入力単語である単語a、単語b、単語c、単語dは、始点単語を持たないので、終点単語a、b、c、dのそれぞれの横列(始点単語a、b、c、d、xrとの交点)は総て始点単語として用いないことを示す「0」となる。経路作用要素である単語xrは、図11の有向グラフに示したとおり、始点として単語a、単語b、単語c、単語dを持つので、終点単語xrの横列は、これらの始点単語との交点は始点であることを示す「1」となる。
次に、基本構造BS2およびBS3(以下、基本構造BS2&BS3と記す)を合わせたものを表す隣接行列F2を下記の数式21に示す。
基本構造BS2&BS3の隣接行列
Figure 2005115498
BS2&BS3の要素は単語eと単語fのみであるので、F2の行列はこれら2つの要素で構成される。単語eと単語fはお互いに独立している(すなわち、どちらの単語も始点単語としてもう一方の単語を用いていない)ので、いずれの交点も「0」となる。
基本構造BS1の出力単語を扱った集合の隣接行列F3を、下記の数式22に示す。
基本構造BS1(出力単語)の隣接行列
Figure 2005115498
BS3の要素は単語gのみであるので、F3の行列は単語g1つのみで構成される。単語gは始点として自身を用いないので、交点は「0」となる。
以上で、例5のシステムを構成する基本構造単位に、同一基本構造内の要素間の関係を隣接行列に表した。
II−2−(2) 結合隣接行列による基本構造の統合
次に、これらをシステム全体として1つの隣接行列として表すために、各基本構造の要素である単語と他の基本構造の要素である単語との関係を示すことによって基本構造をリンクする結合隣接行列(connection matrix)について説明する。
任意の基本構造の単語と他の基本構造の単語の関係は、図11に示したように終点単語と始点単語の関係によって表わされている。基本構造同士は、それに属する単語の関係よってリンクされていると言える。図11から以下のことが分かる。
1)基本構造BS1(入力)の単語を終点単語としたとき、いずれの他の基本構造の単語も、BS1(入力)の単語より後に現れるので、始点単語となりえない。
2)基本構造BS2&3の単語を終点単語としたとき、BS2&3の単語より前に現れるBS1(入力)の単語は始点単語となりえるが、BS1(出力)の単語は始点単語となりえない。
3)基本構造BS1(出力)の単語を終点単語したとき、BS2&3およびBS1(入力)のいずれの単語も、BS1(出力)の単語より前に現れるので、始点単語となりえる。

上記の考察の結果、基本構造をリンクするための結合隣接行列として重要なのは、任意の基本構造と、それに属す単語の始点単語になりえる単語を含む基本構造との関係を表す結合隣接行列であることがわかる。なぜなら、有向グラフで示されるように、単語間の関係は始点単語から終点単語へと向かう関係のみが存在するのであるから、基本構造間の関係も、それと同様に始点単語を含む基本構造から終点単語を含む基本構造へと向かう関係のみが存在し、逆の関係は存在しない(そのような基本構造間の関係を表す結合隣接行列は、すべての交点が0となる)からである。
以下に、例5の基本構造をリンクする(始点単語を含む基本構造から終点単語を含む基本構造へと向かう関係を表す)結合隣接行列を1つづつ考察する。
数式23は、基本構造BS1(入力)(始点単語)から基本構造BS2&BS3(終点単語)への関係を示す結合隣接行列FC1である。
Figure 2005115498
隣接行列FC1は、基本構造BS2&BS3の要素である単語eと単語fを終点単語においたとき、BS1(入力)の要素である単語a、単語b、単語c、単語d、単語xrが始点単語として用いられる状態を表し、2つの基本構造の関係を示している。図11で示したように、単語eおよび単語fは、は単語c、単語d、単語xrを始点単語に用いる。従って、FC1において、終点単語eおよび終点単語fの行と、始点単語c、d、xrとの交点は「1」となり、その他の始点単語との交点は「0」となる。
数式24は、基本構造BS1(入力)および基本構造BS2&BS3(始点単語)から、基本構造BS1(出力)(終点単語)への関係を示す隣接行列FC2を表している。
Figure 2005115498
隣接行列FC2は、基本構造BS1(出力)の要素である単語gを終点単語においたとき、有向グラフにそれ以前に現われるBS1(入力)、BS2、BS3の要素である単語a、単語b、単語c、単語d、単語xr単語e、単語f、が始点単語として用いられる状態を表して、2つのグループの関係表している。図11で示したように、単語gは、単語eと単語fを始点単語に用いる。従って、FC2において、終点単語gの行と、始点単語eおよびfとの交点は「1」となり、その他の始点単語との交点は「0」となる。
以上が、例5のシステムを構成する基本構造間のリンクに意味を持つ結合隣接行列であった。システム全体として1つの隣接行列へ統合する過程の説明を簡便にするために、下記に、関係が存在しない基本構造間の結合隣接行列も示す。数式25は、基本構造BS2&BS3(始点単語)から基本構造BS1(入力)(終点単語)の関係がないことを示す結合隣接行列FC3である。
Figure 2005115498

数式26は、基本構造BS1(出力)(始点単語)から基本構造BS1(入力)(終点単語)の関係がないことを示す結合隣接行列FC4である。
Figure 2005115498
数式27は、基本構造BS1(出力)(始点単語)から基本構造BS2&BS3(終点単語)の関係がないことを示す結合隣接行列FC5である。
Figure 2005115498
上記に示した隣接行列F1からF3、結合隣接行列FC1からFC5を用いて、例5のシステムを1つの隣接行列Fとして表したものが数式28である。
Figure 2005115498
上記数式で、「F=」の右辺に示された、F1、F2、F3、FC1、FC2と0(行列の交点が総て0である隣接行列で、FC3、FC4、FC5に相当する)で構成された行列は、基本構造単位の隣接行列と結合隣接行列がどのように統合されてシステム全体を表わすかを示している。次に、それらの要素を単語に変えたものが、その右辺にあるa、b、c、d、x、e、f、gを行列の要素とする隣接行列である。F1、F2、F3、FC1、FC2、FC3、FC4、FC5がどのように統合されてFを構成するのか、さらにわかりやすく示したのが図12である。図12の1001の部分がF1、1002がF2、1003がF3、1004がFC1、1005がFC2である。行列の交点が総て0である結合隣接行列は、FC3が1006、FC4が1007、FC5が1008を構成する。
以上のようにして、2つ以上の基本構造から成る1つのシステムは、1つの隣接行列で表すことができる。

以上でシステム全体を1つの隣接行列で表わすことができたので、このシステムの隣接行列に対して、I章で述べたトポロジカルソートを行って、総ての単語の値の状態が最少実行回数で確定(すなわち総ての出力単語の生成が完了)するような最適順序に単語単位のプログラムの並び替えを行う。
例5のシステムの隣接行列Fをみれば、図13に示すように、値が1である始点単語との交点は総て左下三角形(1301)の内にある。I章で述べたように、これは単語が最適順序に並んでいることを意味する。従って、数式28の隣接行列Fは、すでにトポロジカルソート済みであって、初期値の単語の状態ベクトルを与えれば、最少実行回数で出力単語の生成を完了することができる単語の順序になっているといえる。

ここで、トポロジカルソートを施す効果について補足する。トポロジカルソートによって最適実行順序に並んだ単語単位のプログラムは、1巡処理で総ての出力単語の値を生成することができる。しかし、システム全体に対して言及する場合には、より正確には「最少実行回数」で実現できるということが適切である。なぜなら、システム全体でみたときには、集計処理のように、一時的記録領域を置くことによって同じ計算式を繰り返し利用する必要がある処理を含む場合があるからである。もちろん、この場合の「繰り返し」は、無駄な繰り返しではない。集計するデータの数マイナス1が最少繰り返し数になる。このような集計処理も、結合隣接行列を用いて1つの隣接行列に表わすことができる。

II−2−(3) システムの隣接行列の検証
本セクションでは、前セクションで示したシステムの隣接行列Fが、出力単語の値を生成する関数として機能し、しかも、トポロジカルソート済みであるので、最少実行回数で総ての出力単語の生成を完了できることを、I章で述べた単語の状態ベクトルをかける計算操作によって検証する。出力単語gの値が決定されれば、隣接行列Fは関数として機能すると言える。また、例5のシステムは、前述の集計処理のような繰り返し処理を含まないので、1巡処理で出力単語gの値の状態が確定すれば、最少実行回数で処理が完了したと言える。

例5のシステムにおいて、ユーザが入力を行う前の単語の値の状態、すなわち単語の状態ベクトルXの初期値は、I章で述べたように総ての要素が「null(未決定)」で、下記の数式29のようになる。
Figure 2005115498
数式28の隣接行列F(すなわち例5のシステム)に、数式29の状態ベクトルXをかける計算処理を施す(すなわち、例5のシステムに入力を行う)。FXの計算処理によって変化する単語の値の状態を1つの終点単語ごとに追って説明する。
(1)1巡目処理中の終点単語aの計算
1巡目処理中の終点単語aの計算は、次のようになる。

=0・null+0・null+0・null +0・null+0・null+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
入力単語aは始点単語を持たないので、どのような値の状態をかけても値の状態が確定し、nullから(+1)へ変化する。すなわち、これは入力によって値が確定したことを表わしている。その結果、1巡処理中の単語a行完了後の各単語の値の状態は、以下の表3のとおりである。
Figure 2005115498
(2)1巡目処理中の終点単語bの計算
1巡目処理中の終点単語bの計算は、表3の単語の値の状態を用いるので次のようになる。

=0・(+1)+0・null+0・null +0・null+0・null+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
入力単語bも始点単語を持たないので、どのような値の状態をかけても値の状態が確定し、nullから(+1)へ変化する。その結果、1巡処理中の単語b行完了後の各単語の値の状態は、以下の表4のとおりである。
Figure 2005115498
例5のシステムでは、単語aと単語bは画面上の2者択一の指示ボタンであるので、どちらか一方が選択されることによって、双方の値の状態が確定することになる。

(3)1巡目処理中の終点単語cの計算
1巡目処理中の終点単語cの計算は、表4の単語の値の状態を用いるので次のようになる。

=0・(+1)+0・(+1)+0・null +0・null+0・null+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
入力単語cも始点単語を持たないので、どのような値の状態をかけても値の状態が確定し、nullから(+1)へ変化する。その結果、1巡処理中の単語c行完了後の各単語の値の状態は、以下の表5のとおりである。
Figure 2005115498

(4)1巡目処理中の終点単語dの計算
1巡目処理中の終点単語dの計算は、表5の単語の値の状態を用いるので次のようになる。

=0・(+1)+0・(+1)+0・(+1) +0・null+0・null+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
入力単語dも始点単語を持たないので、どのような値の状態をかけても値の状態が確定し、nullから(+1)へ変化する。その結果、1巡処理中の単語d行完了後の各単語の値の状態は、以下の表6のとおりである。
Figure 2005115498

(5)1巡目処理中の終点単語xの計算
1巡目処理中の終点単語xの計算は、表6の単語の値の状態を用いるので次のようになる。

=1・(+1)+1・(+1)+1・(+1) +1・(+1)+0・null+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
単語xの始点単語となる単語a、b、c、dの値の状態がすでに確定した、すなわち、表2に示した経路作用要素である単語xの定義式実行条件(1)および(2)が満たされたので、単語xの値の状態もnullから確定済みの(+1)へ変化する。その結果、1巡処理中の単語x行完了後の各単語の値の状態は、以下の表7のとおりである。
Figure 2005115498

(6)1巡目処理中の終点単語eの計算
1巡目処理中の終点単語eの計算は、表7の単語の値の状態を用いるので次のようになる。

=0・(+1)+0・(+1)+1・(+1) +1・(+1)+1・(+1)+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
単語eの始点単語となる単語c、dおよびxの値の状態がすでに確定済みであるので、すなわち、定義式c+dの始点単語の値が決定済み、かつ経路作用要素xが次に実行する基本構造を指定したので、単語eの値の状態もnullから確定済み(+1)へ変化する。その結果、1巡処理中の単語e行完了後の各単語の値の状態は、以下の表8のとおりである。
Figure 2005115498

(7)1巡目処理中の終点単語fの計算
1巡目処理中の終点単語fの計算は、表8の単語の値の状態を用いるので次のようになる。

=0・(+1)+0・(+1)+1・(+1) +1・(+1)+1・(+1)+0・(+1)+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
単語fの始点単語となる単語c、dおよびxの値の状態がすでに確定済みであるので、単語fの値の状態もnullから(+1)へ変化する。その結果、1巡処理中の単語f行完了後の各単語の値の状態は、以下の表9のとおりである。
Figure 2005115498

例5のシステムでは、単語eと単語fはそれぞれの実行条件が2者択一の条件であるので、どちらか一方の条件が真と確定すれば、他方の条件は偽と確定し、双方の値の状態が確定することになる。たとえば、BS2が指定されれば、単語eの定義式実行条件=真が確定して単語eに値が与えられることによって値の状態が確定する。一方、単語fは、定義式実行条件=偽が確定して単語fに値が与えられないことによって値の状態が確定する。従って、経路作用要素がどちらか一方の基本構造を指定したとき、単語eも単語fも値の状態が確定済みとなるのである。

(8)1巡目処理中の終点単語gの計算
1巡目処理中の終点単語gの計算は、表9の単語の値の状態を用いるので次のようになる。

=0・(+1)+0・(+1)+0・(+1) +0・(+1)+0・(+1)+1・(+1)+1・(+1)+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
単語gの始点単語となる単語eおよびfの値の状態がすでに確定済みであるので、単語gの値の状態もnullから(+1)へ変化する。その結果、1巡処理中の単語g行完了後の各単語の値の状態は、以下の表10のとおりである。
Figure 2005115498

以上で隣接行列Fの総ての単語行の計算処理が1巡したことになる。従って、表10がFXの結果となる。下記の数式30の状態ベクトルXがFXの結果である。
Figure 2005115498
以上のように、隣接行列Fは、トポロジカルソートによって単語単位プログラムが最適順序で実行されるように並んでいるので、1巡の計算処理の実行で総ての単語の値の状態が確定し、出力単語gの値を成立することができた。

II−2−(4) 経路作用要素の排除
経路作用要素の実行条件は、経路作用要素によって指定される基本構造に属する全単語の集合(1つ以上からなる)の定義式を実行するための条件と等しい。なぜなら、その基本構造の単語の総ては、その経路作用要素の条件が満されたときに実行されるからである。従って、経路作用要素の実行条件は、経路作用要素によって指定される基本構造に属す単語の条件に移すことができる。
例5のシステムの場合で具体的に述べると次のようになる。まず、経路作用要素である単語xと、単語eおよび単語fの定義式と定義式実行条件は下記の表11の通りであった。
Figure 2005115498

従って、Xの条件(1)「a=真かつ、c=真およびd=真」を、この条件が成立するとき指定する基本構造BS2に属する単語eの実行条件「XrがBS2を指定」と置き換え、条件(2)「b=真かつ、c=真およびd=真」をこの条件が成立するとき指定する基本構造BS3に属する単語fの実行条件「XrがBS3を指定」と置き換える、ということになる。この結果、単語eおよび単語fの定義式、定義式実行条件は下記の表12のようになる。
Figure 2005115498

表12のように、経路作用要素の実行条件を、指定先の基本構造の単語の実行条件に置き換えると、BS1とBS2およびBS3のリンクは、BS2およびBS3の単語の実行条件によって成立するので、経路作用要素は単に、次の基本構造の実行に移る条件が整ったこと(入力単語cおよびdに値があり、かつボタンaまたはbが押された)を示すだけの意味をしか持たなくなる。これは、経路作用要素を取り除いてもシステムの意味に変化が生じないことを意味する。従って、経路作用要素の実行条件を、その条件の成立によって指定される基本構造の単語の実行条件に置き換えを行った後、システム全体の隣接行列から、経路作用要素を除くことができる。
図14は、経路作用要素を取り除いて、例5のシステムの単語の関係を有向グラフで表したものである。図14では、経路作用要素である単語xがなくなり、単語eおよび単語fと始点単語との関係は、上記の表12で定義された定義式と定義式実行条件に従って示されている。すなわち、単語eは、始点単語として単語a(定義式実行条件「実行ボタンaが押された」)、単語cおよび単語d(定義式「c+d」および、定義式実行条件「c=真およびd=真」)を持つ。単語fは、始点単語として単語b(定義式実行条件「実行ボタンbが押された」)、単語cおよび単語d(定義式「c+d」および、定義式実行条件「c=真およびd=真」)を持つ。単語eおよび単語fから単語gへの関係は図11と変らない。
経路作用要素を取り除いた例5のシステムを、図14の有向グラフに従って隣接行列に表わせば、以下のようになる。数式31のF1’は、基本構造BS1(入力)の隣接行列である。経路作用要素である単語xが要素から削除されている。
Figure 2005115498
数式32のF2’は、基本構造BS2&BS3の隣接行列である。
Figure 2005115498
数式33のF3’は、基本構造BS1(出力)の隣接行列である。
Figure 2005115498
数式34のFC1’は、基本構造BS1(入力)から基本構造BS2&BS3への関係を示す結合隣接行列である。経路作用要素が削除されたので、始点単語の要素として単語Xが削除されている。単語eおよび単語fは、表12に示したように経路作用要素の実行条件を移したことで、それぞれ新たに単語a、単語bを始点単語として持つことになった。従って、終点単語eは、始点単語cおよびdの他に単語aとの交点が1となっている。終点単語fは、始点単語cおよびdの他に単語bとの交点が1となっている。
Figure 2005115498
数式35のFC2’は、基本構造BS2&BS3から基本構造BS1(出力)への関係を示す結合隣接行列である。経路作用要素が削除されたので、始点単語の要素として単語Xが削除されている。
Figure 2005115498
数式36のFC3’は、基本構造BS2&BS3から基本構造BS1(入力)への関係がないことを示す結合隣接行列である。経路作用要素が削除されたので、始点単語の要素として単語Xが削除されている。
Figure 2005115498
数式37のFC4’は、基本構造BS1(出力)から基本構造BS1(入力)への関係がないことを示す結合隣接行列である。経路作用要素が削除されたので、始点単語の要素として単語Xが削除されている。
Figure 2005115498
数式38のFC5’は、基本構造BS1(出力)から基本構造BS2&BS3への関係がないことを示す結合隣接行列である。
Figure 2005115498
システムの隣接行列Fは、経路作用要素の条件の置き換えと経路作用要素の削除を行うと、下記の数式39に示す隣接行列F’で表わすことができる。
Figure 2005115498
上記数式で、「F’=」の右辺に示された、F1’、F2’、F3’、FC1’、FC2’と0(行列の交点が総て0である隣接行列で、FC3’、FC4’、FC5’に相当する)で構成された行列は、基本構造単位の隣接行列と結合隣接行列がどのように統合されてシステム全体を表わすかを示している。次に、それらの要素を単語に変えたものが、その右辺にあるa、b、c、d、e、f、gを行列の要素とする隣接行列である。F1’、F2’、F3’、FC1’、FC2’、FC3’、FC4’、FC5’がどのように統合されてF’を構成するのか、さらにわかりやすく示したのが図15である。図15の1201の部分がF1’、1202がF2’、1203がF3’、1204がFC1’、1205がFC2’である。行列の交点が総て0である結合隣接行列は、FC3’が1206、FC4’が1207、FC5’が1208を構成する。
以上のようにして、2つ以上の基本構造から成る1つのシステムを、経路作用要素を排除して、1つの隣接行列で表わすことができる。

次に、このシステムの隣接行列に対して、トポロジカルソートを行って、総ての単語の値の状態が最少実行回数で確定(すなわち総ての出力単語の生成が完了)するような最適順序に単語単位のプログラムの並び替えを行う。隣接行列F’をみると、図16に示すように、値が1である始点単語との交点は総て左下三角形(1601)内にある。I章で述べたように、これは単語が最適順序に並んでいることを意味する。従って、数式39の隣接行列F’は、すでにトポロジカルソート済みであって、初期値の単語の状態ベクトルを与えれば、最少実行回数で出力単語の生成を完了することができる単語の順序になっているといえる。


II−2−(5) 経路作用要素を排除した構造の検証
このセクションでは、前セクションで示した、経路作用要素を排除したシステムの構造を示す隣接行列F’が、経路作用要素を排除する前の構造である隣接行列Fと同じ関数機能を持つことを検証する。以下に、隣接行列F’に単語の状態ベクトルを与えて出力単語gの値を求める過程を示す。m回目の計算処理の結果、単語の状態ベクトルXの値が総て確定済みとなれは、F’もFと同等に機能する関数だと言える。また、トポロジカルソートを施したことによって、最少実行回数で出力単語の生成を完了できることも検証する。例5のシステムであるF’も、1巡処理で単語gの値の状態が確定すれば、最少実行回数で実行できたと言える。

前述したように、単語の状態ベクトルの初期値は総ての要素が「null(未決定)」であるので、F’に最初に与えるべき単語の状態ベクトルX’は下記の数式40のようになる。
Figure 2005115498
数式39の隣接行列F’(すなわち例5のシステム)に、数式39の状態ベクトルX’をかける計算処理を施す(すなわち、例5のシステムに入力を行う)。F’X’の計算処理によって変化する単語の値の状態を1つの終点単語ごとに追って説明する。
(1)F’1巡目処理中の終点単語aの計算
終点単語aは、計算処理にX’の単語の値の状態を用いるので、1巡目処理中の終点単語aの計算は、次のようになる。

=0・null+0・null+0・null +0・null+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
入力単語aは始点単語を持たないので、値の状態が確定し、nullから(+1)へ変化する。すなわち、これは入力によって値が確定したことを表わしている。その結果、1巡処理中の単語a行完了後の各単語の値の状態は、以下の表13のとおりである。
Figure 2005115498
(2)F’1巡目処理中の終点単語bの計算
終点単語bは、計算処理に表13の単語の値の状態を用いるので、1巡目処理中の終点単語bの計算は、次のようになる。

=0・(+1)+0・null+0・null +0・null+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
入力単語bも始点単語を持たないので、値の状態が確定し、nullから(+1)へ変化する。その結果、1巡処理中の単語a行完了後の各単語の値の状態は、以下の表14のとおりである。
Figure 2005115498

(3)F’1巡目処理中の終点単語cの計算
終点単語cは、計算処理に表14の単語の値の状態を用いるので、1巡目処理中の終点単語cの計算は、次のようになる。

=0・(+1)+0・(+1)+0・null +0・null+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
入力単語cも始点単語を持たないので、値の状態が確定し、nullから(+1)へ変化する。その結果、1巡処理中の単語c行完了後の各単語の値の状態は、以下の表15のとおりである。
Figure 2005115498

(4)F’1巡目処理中の終点単語dの計算
終点単語dは、計算処理に表15の単語の値の状態を用いるので、1巡目処理中の終点単語dの計算は、次のようになる。

=0・(+1)+0・(+1)+0・(+1) +0・null+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
入力単語dも始点単語を持たないので、値の状態が確定し、nullから(+1)へ変化する。その結果、1巡処理中の単語d行完了後の各単語の値の状態は、以下の表16のとおりである。
Figure 2005115498

(5)F’1巡目処理中の終点単語eの計算
終点単語eは、計算処理に表16の単語の値の状態を用いるので、1巡目処理中の終点単語eの計算は、次のようになる。

=1・(+1)+0・(+1)+1・(+1) +1・(+1)+0・null+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
単語eの始点単語である単語a、c、dの値の状態が確定しているので、単語eの値の状態もnullから(+1)へ変化して確定する。その結果、1巡処理中の単語e行完了後の各単語の値の状態は、以下の表17のとおりである。
Figure 2005115498

(6)F’1巡目処理中の終点単語fの計算
終点単語fは、計算処理に表17の単語の値の状態を用いるので、1巡目処理中の終点単語fの計算は、次のようになる。

=0・(+1)+1・(+1)+1・(+1) +1・(+1)+0・(+1)+0・null+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
単語fの始点単語である単語b、c、dの値の状態が確定しているので、単語fの値の状態もnullから(+1)へ変化して確定する。その結果、1巡処理中の単語f行完了後の各単語の値の状態は、以下の表18のとおりである。
Figure 2005115498

(7)F’1巡目処理中の終点単語gの計算
終点単語gは、計算処理に表18の単語の値の状態を用いるので、1巡目処理中の終点単語gの計算は、次のようになる。

=0・(+1)+0・(+1)+0・(+1) +0・(+1)+1・(+1)+1・(+1)+0・null
=(+1) +(+1) +(+1) +(+1) +(+1) +(+1) +(+1)
=(+1)
単語gの始点単語である単語e、fの値の状態が確定しているので、単語gの値の状態もnullから(+1)へ変化して確定する。その結果、1巡処理中の単語g行完了後の各単語の値の状態は、以下の表19のとおりである。
Figure 2005115498

以上で隣接行列F’の総ての単語行の計算処理が1巡したことになる。従って、表19の単語の値の状態がF’X’の結果となる。下記の数式41の状態ベクトルX’がF’X’の結果である。
Figure 2005115498
以上のように、隣接行列F’は、トポロジカルソートによって単語単位プログラムが最適順序で実行されるように並んでいるので、1巡の計算処理の実行で総ての単語値が確定し、出力単語gの値を成立することができた。

また、経路作用要素の単語を除いた隣接行列F’も、状態ベクトルの初期値を与える(入力を行う)ことで、隣接行列Fと同様に総ての単語の値の状態が確定し、出力単語gの値が生成できたことがわかる。従って、経路作用要素のあるシステムである隣接行列Fと、経路作用要素のないシステムである隣接行列F’は、システムとして同等の処理機能を持つことが検証できた。

上記で述べたように、全体システムが複数の基本構造を有する場合に、これを統合し、さらに当該統合されたものに対して(例えばトポロジカルソートのような)探索を施すことで、Lyee(登録商標)等のソフトウェアの自律的開発技術の適用に際して各段のパフォーマンスを提供する。これが例えば、統合されずに複数の基本構造をそのまま有する場合には、本願に係る発明によるほどのパフォーマンスは得られず、また、トポロジカルソート等の探索技法によって整序しなかった場合には本願に係る発明によるほどのパフォーマンスは得られない。

III章 むすび
処理経路図を作成すること、すなわち分割してとらえることは、システムの要件を正確にとらえるために非常に有用である。処理経路図を作成することは、出力条件に共通要素を持つ単語を論理レコードの単位でとらえることである。条件の共通要素を経路作用要素に割り当てることは、効率的にユーザ要件を定義するためには大きなメリットがある。

一方、プログラムコードを生成し、実行する時点では、基本構造に分割したシステムを統合することが有用である。なぜなら、システム全体の単語単位のプログラムの実行順序を、最少実行回数で出力単語の生成を完了できる順序に並べることができるからである。

本明細書では、単語単位のプログラムからなるシステムにおける、出力データを生成するための単語単位プログラムの処理を、無駄な繰り返しを排除して最少実行回数で完了することを課題として、以下の手段で解決することについて述べた。

1)同じ出力条件を持つ単語の集合(論理レコード)を、1つの基本構造として、システム全体を処理経路図でとらえる。これによって、同じ基本構造に属する単語単位のプログラムに共通する実行条件(経路作用要素がその基本構造を指定する条件)を的確にとらえることができる。

2)経路作用要素も単語の1つみなし、単語の関係を定義している単語単位のプログラムとして、要件を定義する。すなわち、どのような条件が成立したとき(定義式実行条件)、どの基本構造の実行を指定するか(定義式)、を定義する。

3)この経路作用要素の定義式実行条件を、その条件が成立するときに経路作用要素が指定する基本構造に属する単語の定義式実行条件に置くことによって、経路作用要素を排除する。経路作用要素の実行条件を、指定先の基本構造の単語の実行条件に置くことによって、経路作用要素を削除しても、基本構造間のリンク(すなわち単語間のリンク)が成立するので、システム全体を1つにまとめることが可能になる。

4)こうして得られた単一化されたシステム全体の単語単位のプログラム群(経路作用要素を含めない)に対して、トポロジカル・ソートを行って単語単位のプログラム群を最適順序に並び替える。これにより、無駄な繰返しを回避し、最少実行回数でプログラムを実行することが可能となる。

本発明は当該技術分野における通常の知識を有する者にとって修正および改変が容易に数多くなし得るので、図示および記述されたものと寸分違わぬ構成および動作に本発明を限定することは望ましくないことであり、従って、あらゆる適切な改変体および等価体は本発明の範囲に含まれるものと見なされうる。前述の本発明に係る実施の具体的形態の説明および例示によって詳細に記述されたが、本願の特許請求の範囲のみならず本発明に係る開示事項全体に定義された本発明の範囲から逸脱することなしに、修正、置換、および、変更が数多く可能である。
また、本願に係る発明は、その適用において、上記の記述において説明されるか、或いは、図面に示された要素の詳細な解釈及び組み合わせに限定されるものではない。本発明は、他の実施形態が可能であり、種々の方法で実用および実施可能である。また、ここで用いられた語法および用語は記述を目的とするものであり、限定的に働くものとみなされてはならない。
従って、当該技術分野における通常の知識を有する者は、本開示の基調となる概念は、本発明の幾つかの目的を実施するための他の構造、方法、及び、システムを設計するための基礎として容易に利用され得ることを理解するはずである。従って、本発明の趣旨および範囲から逸脱しない限り、本願の特許請求の範囲にはそのような等価な解釈が含まれるものと見なされるものである。
上記の詳細な説明では、有向グラフ表記、隣接行列算出、トポロジカル・ソート、並び替えという順序で本発明の思想を実現する方法について述べた。しかしこれらはどれも絶対不可欠な要素というものではなく、例えば、有向グラフ表記の表記を経ないで直接隣接行列算出→トポロジカル・ソート→並び替えという順序で本発明の思想を実現してもよい。
さらに、有向グラフに対して、例えば幅優先探索(Breadth−First Search)、反復深化法(Iterative Deeping)、発見的探索(Heuristic Search)、ヒル・クライミング(Hill Climbing)、最適優先探索(Best―First Search)、オイラー(Euler)の一筆書き、ダイクストラ(Dijkstra)法等の各種探索技法を組み合わせることで並び替えてもよい。
或いは、隣接行列算出のあとを、これらの各種探索技法を組み合わせることで本発明の根本思想を実現してもよい。
また、本発明に係る技術思想は、例えばコンピュータソフトウェアの自動開発装置、自動開発プログラム、自動開発プログラムを記録した記録媒体、伝送媒体、紙媒体としても、また、自動開発プログラムを登載したコンピュータ・装置、自動開発プログラムを実行するクライアント・サーバ形式等といったカテゴリーにおいても実現、利用可能であることはいうまでもない。
さらに本発明は、単一プロセッサ、単一ハードディスクドライブ、及び、単一ローカルメモリを備えたコンピュータシステムに限らず、当該システムのオプションとして、任意の複数または組み合わせプロセッサ又は記憶デバイスを装備するにも適している。コンピュータシステムは、精巧な計算器、掌タイプコンピュータ、ラップトップ/ノートブックコンピュータ、ミニコンピュータ、メインフレームコンピュータ、及び、スーパーコンピュータ、ならびに、これらの処理システムネットワーク組合わせを含む。本発明の原理に従って作動する任意の適切な処理システムによって代替されうるし、また、これらと組合せて用いることも可能である。
また、本発明に係る技術思想は、もとよりあらゆる種類のプログラミング言語に対応可能である。さらに本発明に係る技術思想は、あらゆる種類・機能のアプリケーションソフトウェアに対しても適用可能である。
またさらに本願発明は、その技術思想の同一及び等価に及ぶ範囲において様々な変形、追加、置換、拡大、縮小等を許容するものである。また、本願発明を用いて生産されるソフトウェアが、その2次的生産品に登載されて商品化された場合であっても、本願発明の価値は何ら減ずるものではない。
上記で規定される本発明では、繰返しをなくす前処理を自動で行い、こうして得られた前処理済の単語単位のプログラムをもとにLyee(登録商標)方法論により自動的に目的プログラム生成を行う。つまり、ユーザ要件の洗練化(整列)から目的プログラムの生成に至るまで自動化することが可能となる。これにより、ソフトウェア生産の大幅な効率向上、生産性向上、品質向上等、ソフトウェア産業上に大きな効果をもたらす。
状態単語αについての数式3を計算するプログラムの構造を示したフローチャートである。 a ≦b(aからbが作られる)という関係をもつ順序を説明するための有向グラフの例である。 有向グラフの例である。 あるノード1乃至8が形成する特定の半順序関係を表した有向グラフである。 トポロジカル・ソートの動作を説明するためのフローチャートである。 Lyee(登録商標)方法論における単語単位の論理要素をノードとした場合にトポロジカル・ソートを用いて繰り返しをなくすための自動制御の動作を説明するためのフローチャートである。 本発明をソフトウェア開発装置として実現する場合の機能構成を示したブロック図である。 処理経路図の例である。 例5のシステムの画面の説明図である 例5のシステムの単語を基本構図単位に示した説明図である。 例5のシステムの単語の関係を表わした有向グラフである。 例5のシステム全体を1つの隣接行列Fで表わす過程を説明するための図である。 隣接行列Fがトポロジカルソート済みであることを説明するための図である。 例5のシステムの構造から経路作用要素を削除したときの、単語の関係を表わした有向グラフである。 例5のシステムの構造から経路作用要素を削除したとき、システム全体を1つの隣接行列F’で表わす過程を説明するための図である。 隣接行列F’がトポロジカルソート済みであることを説明するための図である。
符号の説明
1101 基本構造BS1(入力)
1102 基本構造BS2
1103 基本構造BS3
1104 基本構造BS1(出力)
1201 隣接行列F1’
1202 隣接行列F2’
1203 隣接行列F3’
1204 結合隣接行列FC1’
1205 結合隣接行列FC2’

Claims (6)

  1. ソフトウェア開発要望に係る基本構造に属する単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係順序関係から第1の隣接行列を生成し、
    前記基本構造同士の連結関係を規定する経路作用要素を単語とみなし、かかる単語の定義式及び実行条件を第2の隣接行列として表し、
    前記第1及び第2の隣接行列からシステム全体を律する構造を成立させ、
    前記成立した構造に対して探索を施して前記単語単位プログラム群を並び替える
    ことを特徴とするソフトウェア開発前処理方法。
  2. 前記探索はトポロジカル・ソートによることを特徴とする請求項2記載のソフトウェア開発前処理方法。
  3. ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係を有向グラフで表すことを特徴とするソフトウェア制御方法。
  4. ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係に係る集合が閉じる単位で基本構造単位を構成し、
    前記構成された基本構造単位をノードとして捉えた有向グラフで表すことを特徴とするソフトウェア制御方法。
  5. ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係から隣接行列を生成し、
    前記生成された隣接行列に対して探索を施し該探索の結果をもとに前記単語単位プログラム群を並び替え、
    前記並び替えられた前記単語単位プログラム群をLyee方法論に適用してコードを生成する
    ことを特徴とするソフトウェア開発方法。
  6. ソフトウェア開発要望に係る単語ごとのエリアに値を求めるための単語単位プログラム相互の順序関係から隣接行列を生成する隣接行列計算部と、
    前記生成された隣接行列に対して探索を施し該探索の結果をもとに前記単語単位プログラム群を並び替える探索部と、
    前記並び替えられた前記単語単位プログラム群をLyee方法論に適用してコードを生成する生成部と
    を具備することを特徴とするソフトウェア開発装置。
JP2003346442A 2003-10-06 2003-10-06 ソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置 Pending JP2005115498A (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2003346442A JP2005115498A (ja) 2003-10-06 2003-10-06 ソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置
PCT/IB2004/003266 WO2005043271A2 (ja) 2003-10-06 2004-10-06 ソフトウェア生成方法
JP2005515082A JPWO2005043271A1 (ja) 2003-10-06 2004-10-06 ソフトウェア生成方法
US10/574,703 US20070169006A1 (en) 2003-10-06 2007-01-29 Software generation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003346442A JP2005115498A (ja) 2003-10-06 2003-10-06 ソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置

Publications (1)

Publication Number Publication Date
JP2005115498A true JP2005115498A (ja) 2005-04-28

Family

ID=34539362

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2003346442A Pending JP2005115498A (ja) 2003-10-06 2003-10-06 ソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置
JP2005515082A Pending JPWO2005043271A1 (ja) 2003-10-06 2004-10-06 ソフトウェア生成方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2005515082A Pending JPWO2005043271A1 (ja) 2003-10-06 2004-10-06 ソフトウェア生成方法

Country Status (3)

Country Link
US (1) US20070169006A1 (ja)
JP (2) JP2005115498A (ja)
WO (1) WO2005043271A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9043695B2 (en) 2010-11-26 2015-05-26 International Business Machines Corporation Visualizing total order relation of nodes in a structured document
CN117311678A (zh) * 2023-08-04 2023-12-29 四川大学 用于ai***的程序模块序化组接功能合成的等效嵌入方法

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007018295A1 (ja) * 2005-08-05 2007-02-15 Catena Corporation プログラム実行順序決定装置および方法
US20110288931A1 (en) * 2010-05-20 2011-11-24 Google Inc. Microsite models
US8893074B2 (en) 2011-03-11 2014-11-18 Hewlett-Packard Development Company, L.P. Software development requirements recording
US9507909B2 (en) * 2012-10-12 2016-11-29 The Boeing Company System and method for computational planning in a data-dependent constraint management system
US10339458B2 (en) 2012-10-12 2019-07-02 The Boeing Company System and method for rapid and robust uncertainty management during multidisciplinary analysis
US10339459B2 (en) 2012-10-12 2019-07-02 The Boeing Company System and method for rapid and robust uncertainty management during multidisciplinary analysis

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6532586B1 (en) * 1995-10-30 2003-03-11 Information System Development Institute Software producing method, processor, processing method and recording medium
NZ321670A (en) * 1995-10-30 1999-04-29 Information System Dev I Subst Software production method, processing apparatus and recording medium
WO1999049387A1 (fr) * 1998-03-20 1999-09-30 Information System Development Institute Dispositif et procede servant a produire un logiciel
US6292938B1 (en) * 1998-12-02 2001-09-18 International Business Machines Corporation Retargeting optimized code by matching tree patterns in directed acyclic graphs
US7100164B1 (en) * 2000-01-06 2006-08-29 Synopsys, Inc. Method and apparatus for converting a concurrent control flow graph into a sequential control flow graph
JP2002202883A (ja) * 2000-12-28 2002-07-19 Isd Kenkyusho:Kk ソフトウェアの実現(インプリメンテーション)方法及び処理生産装置
US7299458B2 (en) * 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9043695B2 (en) 2010-11-26 2015-05-26 International Business Machines Corporation Visualizing total order relation of nodes in a structured document
CN117311678A (zh) * 2023-08-04 2023-12-29 四川大学 用于ai***的程序模块序化组接功能合成的等效嵌入方法
CN117311678B (zh) * 2023-08-04 2024-06-04 四川大学 用于ai***的程序模块序化组接功能合成的等效嵌入方法

Also Published As

Publication number Publication date
JPWO2005043271A1 (ja) 2007-05-10
US20070169006A1 (en) 2007-07-19
WO2005043271A2 (ja) 2005-05-12
WO2005043271A3 (ja) 2005-09-01

Similar Documents

Publication Publication Date Title
Bergman et al. Decision diagrams for optimization
Narasimhan Labeling schemata and syntactic descriptions of pictures
Gil et al. A semantic framework for automatic generation of computational workflows using distributed data and component catalogues
Bouajjani et al. Abstract regular (tree) model checking
Ehrig et al. Graph grammars and Petri net transformations
Carmona et al. New region-based algorithms for deriving bounded Petri nets
US10713429B2 (en) Joining web data with spreadsheet data using examples
JP2003178170A (ja) ワークフロー・システムにおける変更後のプロセス定義への移行方法
US8577825B2 (en) System, method and device for solving problems in NP without hyper-polynomial cost
CN112800282B (zh) 一种业务流程异常节点溯源方法
Cooper et al. The Hamiltonian cycle and travelling salesman problems in cP systems
Grumberg et al. Learning to order BDD variables in verification
Johansson Lemma discovery for induction: a survey
US20070169006A1 (en) Software generation method
Mota et al. A compact timed state space approach for the analysis of manufacturing systems: key algorithmic improvements
CN109144498A (zh) 一种面向对象实例化任务的api自动推荐方法及装置
JPWO2004068342A1 (ja) ソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置
JP2651452B2 (ja) 質問回答方法および装置
Czaja et al. Computing in Cause-Effect Structures
Lustig et al. Synthesis from recursive-components libraries
De Una Discrete optimization over graph problems.
Kaiser et al. BDD complexity reduction by component fault trees
Bisztray et al. Combining termination proofs in model transformation systems
Stolfo Automatic discovery of heuristics for nondeterministic programs from sample execution traces
Wang et al. Simplification Method of CPN Model Based on Data Abstraction