
::<推論エンジン
	<記憶 #line #x #y>
		::self <addMethod <事実 #line #x #y>>;

	<推論 #x #x _ ()>;
	<推論 #x #y #L (#a:#p)>
	        <事実 #a #x #x1>
	        ::sys <isUnregistered #x1 #L>
	        <推論 #x1 #y (#x1:#L) #p>;

	<推論 #x #y #p>
		<推論 #x #y (#x) #p>;

	<全推論 #x #y>
		<findall <推論 #x #y #p> <printlist #p>>;
>;


	
<三段論法>
	<* #x>
	("ならば" | "だったら" | "であれば" | "は")
	(  "、"
	 | "，"
	 | ","
	)
	<* #y>
	["である" | "です" | "だ"]
	( "。" )		::sys <concat #line (#x  "ならば、" #y "である。")>
				::推論エンジン <記憶 #line #x #y>
	;

<質問>
	<* #x>
	( "になるのは" | "であるには" | "であるのは" )
	( "？" | "?" )		::推論エンジン <全推論 _ #x>

	;

<質問>
	<* #x>
	("ならば" | "だったら" | "であれば" | "は")
	( "？" | "?" )		::推論エンジン <全推論 #x _>
	;


<質問 #p>
	<* #x>
	("ならば" | "だったら" | "であれば" | "は")
	(  "、"
	 | "，"
	 | ","
	)
	<* #y>
	[ "であるか" | "ですか" | "か" ]
	( "？" | "?" )		 ::推論エンジン <推論 #x #y #p>
				 ::sys <is #res "はい">
	;

<会話 #res>
	(
		<質問 #p>	::sys <is #res "はい"> 
					<print "はい">
					<printf "なぜならば、">
					<printlist #p>
	 |
		<質問>		::sys <is #res "はい"> 
	 |
		<三段論法>	<print "わかりました。">
				::sys <is #res "わかりました。">
	 |
				<print "わかりません。">
				::sys <is #res "わかりません。">
	)
	;


? ::sys <syntax "aならば、bである。" <会話 #x>>
  ::sys <syntax "bならば、cである。" <会話 #x>>
  ::sys <syntax "cならば、dである。" <会話 #x>>
  ::sys <syntax "cならば、eである。" <会話 #x>>
  ::sys <syntax "dならば、fである。" <会話 #x>>
  ::sys <syntax "eならば、aである。" <会話 #x>>;


? ::推論エンジン <推論 a f #p>;
? ::推論エンジン <推論 c b #p>;
? ::推論エンジン <全推論 c _>;
? ::推論エンジン <全推論 _ a>;

? ::sys <syntax "eならば、aか？" <質問 #res #p>>;
? ::sys <syntax "aならば、fか？" <質問 #res #p>>;
? ::sys <syntax "dならば、eか？" <質問 #res #p>>;

? ::sys <syntax "aならば、fか？" <会話 #x>>;
? ::sys <syntax "dならば、eか？" <会話 #x>>;
? ::sys <syntax "cならば、bか？" <会話 #x>>;



//? { ::sys <getline #l <print "# " #l> <会話 #x>> };

