「ウィーン売買条約第II部」のプログラム


「ウィーン売買条約第II部」の Quixote プログラムを 紹介します。

但し、ここでは参考文献 1. から、 契約の成立に必須の条文だけ紹介します。

&program;;
&subsumption;;
売り主 =< 人;;
買い主 =< 人;;
口述 =< 同意する旨を示す行為;;          % 追加
配達 =< 同意する旨を示す行為;;          % 追加
&rule;;
% 第14条(1)
def::申込[順番=0]/[申込者=A, 被申込者=B] <=
  fact:申入れ/[契約を締結せんとする提案=yes,
	       対象が一又は複数の特定の者に向けられている=yes,
  	       内容が十分明確である=yes,
	       承諾があった場合には拘束されるとの
				申込者の意思が示されている=yes,
               行為者=A,
               受取人=B];;

fact::申入れ/[内容が十分明確である=yes] <=
  fact:申入れ/[物品を示す=yes,
	       数量及び代金=明示的に定めている];;
fact::申入れ/[内容が十分明確である=yes] <=
  fact:申入れ/[物品を示す=yes,
	       数量及び代金=黙示的に定めている];;
fact::申入れ/[内容が十分明確である=yes] <=
  fact:申入れ/[物品を示す=yes,
	       数量及び代金=決定方法を規定している];;

% 第15条(1)
effect_def::申込[順番=N]/[発生日時=S,申込者=A, 被申込者=B] <=
  def:申込[順番=N]/[申込者=A, 被申込者=B],
  def:到達[順番=N]/[到達日時=S];;

% 第18条(1)
def::承諾[順番=N] <=
%  effect_def:申込[順番=N-1]/[被申込者=A],
  arith:dif_one(N0,N),
  effect_def:申込[順番=N0]/[被申込者=A],
  fact:回答[順番=N]/[行為 -> 同意する旨を示す行為,
		     行為者=A,
                     変更を含んでいる=no];;     % 追加

% 第18条(2)
effect_def::承諾[順番=N]/[発生日時=S] <=
  def:承諾[順番=N],
  def:到達[順番=N]/[kind -> 期間内, 到達日時=S];;

% 第19条(1)
def::申込[順番=N]/[申込者=A, 被申込者=B] <=
%  effect_def:申込[順番=N-1]/[被申込者=A],
  arith:dif_one(N0,N),
  effect_def:申込[順番=N0]/[被申込者=A],
  fact:回答[順番=N]/[変更を含んでいる=yes,行為者=A,受取人=B];;

% 第23条
def::契約[順番=N] <=
  effect_def:承諾[順番=N];;

% 第24条
def::到達[順番=N]/[到達日時=T]  <=
  fact:回答[順番=N]/[行為=口述, 口述日時=T];;
def::到達[順番=N]/[到達日時=T]  <=
  fact:回答[順番=N]/[行為=配達[場所=個人],
		     配達日時=T];;
def::到達[順番=N]/[到達日時=T]  <=
  fact:回答[順番=N]/[受取人=R,
		     行為=配達[場所=営業所],
		     配達日時=T],
  fact:R/[営業所又は郵便送付先あり=yes]||{R =< 人};;
def::到達[順番=N]/[到達日時=T]  <=
  fact:回答[順番=N]/[受取人=R,
		     行為=配達[場所=郵便送付先],
		     配達日時=T],
  fact:R/[営業所又は郵便送付先あり=yes]||{R =< 人};;
def::到達[順番=N]/[到達日時=T]  <=
  fact:回答[順番=N]/[受取人=R,
		     行為=配達[場所=常居所],
		     配達日時=T],
  fact:R/[営業所又は郵便送付先あり=no]||{R =< 人};;
% 申入れ
def::到達[順番=0]/[到達日時=T]  <=
  fact:申入れ/[行為=口述, 口述日時=T];;
def::到達[順番=0]/[到達日時=T]  <=
  fact:申入れ/[行為=配達[場所=個人],
	       配達日時=T];;
def::到達[順番=0]/[到達日時=T]  <=
  fact:申入れ/[受取人=R,
	       行為=配達[場所=営業所],
	       配達日時=T],
  fact:R/[営業所又は郵便送付先あり=yes]||{R =< 人};;
def::到達[順番=0]/[到達日時=T]  <=
  fact:申入れ/[受取人=R,
	       行為=配達[場所=郵便送付先],
	       配達日時=T],
  fact:R/[営業所又は郵便送付先あり=yes]||{R =< 人};;
def::到達[順番=0]/[到達日時=T]  <=
  fact:申入れ/[受取人=R,
	       行為=配達[場所=常居所],
	       配達日時=T],
  fact:R/[営業所又は郵便送付先あり=no]||{R =< 人};;

arith::dif_one(0,1);;
arith::dif_one(1,2);;
arith::dif_one(2,3);;
arith::dif_one(3,4);;


fact::買い主;;
fact::売り主;;
fact::申入れ;;
fact::回答[順番=1];;
fact::回答[順番=2];;
fact::回答[順番=3];;
&end.