% decompose the theory into clauses, and insert clauses


% input is a list with [1-[...],2-[...] ...]
insertTheories([],Tree,Tree).
insertTheories([EI-OneEITRecord|All_T_Records],TreeSoFar,Tree):-
	insertOneEI_Ts(OneEITRecord,EI,TreeSoFar,NTreeSoFar),
	insertTheories(All_T_Records,NTreeSoFar,Tree).

insertOneEI_Ts([],EI,Tree,Tree).
insertOneEI_Ts([TI|TIs],EI,TreeSoFar,Tree):-
	insertClas(TI,EI,TreeSoFar,NTreeSoFar),
	insertOneEI_Ts(TIs,EI,NTreeSoFar,Tree).

insertClas([],EI,Tree,Tree).
insertClas([ClaI|ClaIs],EI,TreeSoFar,Tree):-
	(rb_lookup(ClaI,EI_List,TreeSoFar)->
		%ClaI is there-> previous example, or the same example
		(append(Pre,[EI|Post],EI_List)->
			NTreeSoFar=TreeSoFar;
			rb_update(TreeSoFar,ClaI,[EI|EI_List],NTreeSoFar)
		);
				
		rb_insert(TreeSoFar,ClaI,[EI],NTreeSoFar)
	),	
	insertClas(ClaIs,EI,NTreeSoFar,Tree).



/* % with facts of candidateH, you need to gather them into a list, since they are not simply processed, but added to a tree, so the previous inserted result should be passed to the next one.

% Input is EIs -- the first argument
insertTheories([],Tree,Tree).
insertTheories([EI|EIs],TreeSoFar,Tree):-
	insertOneEI_Ts(EI,TreeSoFar,NTreeSoFar),
	insertTheories(EIs,NTreeSoFar,Tree).

insertOneEI_Ts(EI,Tree,Tree).
insertOneEI_Ts([TI|TIs],EI,TreeSoFar,Tree):-
	insertClas(TI,EI,TreeSoFar,NTreeSoFar),
	insertOneEI_Ts(TIs,EI,NTreeSoFar,Tree).

insertClas([],EI,Tree,Tree).
insertClas([ClaI|ClaIs],EI,TreeSoFar,Tree):-
	(rb_lookup(ClaI,EI_List,TreeSoFar)->
		%ClaI is there-> previous example, or the same example
		(append(Pre,[EI|Post],EI_List)->
			NTreeSoFar=TreeSoFar;
			rb_update(TreeSoFar,ClaI,[EI|EI_List],NTreeSoFar)
		);
				
		rb_insert(TreeSoFar,ClaI,[EI],NTreeSoFar)
	),	
	insertClas(ClaIs,EI,NTreeSoFar,Tree).
*/


