write_info( What, That ) :-
	write( What ), 
	write( ' : ' ), 
	var( That ), 
	!,
	write( unistantiated_variable(That) ), nl.

write_info( _What, That ) :-
	( That=[_H|_T] -> 
		write( '[' ), nl,
		write_list( That, 3 ),
		write( ']' ), nl
		;
		write( That ), nl 
	).

write_item( Item  ) :-
	( var(Item) ->
		write( Item )
		;
		( Item = (A/B,Code) -> 
				name( Atom, [Code] ),
				write( (A/B,Atom) )
				;
				write( Item )
		)
	).

write_list( Var, _Tabs ) :-
	var( Var ),
	!,
	write( var_in_write_list(Var) ), nl, abort.

write_list( [], _Tabs ).
write_list( [H|T], Tabs ) :-
	( is_list(H) -> 
		RecTab is Tabs * 2,
		write( '[' ), nl,
		write_list( H, RecTab ),
		write( ']' ), nl
		;
		tab( Tabs ),
		write_item( H ), 
		write( ',' ), nl
	),
	write_list( T, Tabs ).
	
write_pivots( List ) :-
	write( possible_steps_to_consider ), nl,
	write( '[' ), nl,
	write_piv_list( List, 3 ).

write_piv_list( [], _Tab ) :- 
	write( ']' ), nl.
write_piv_list( [X-Y-Z-_Throw|T], Tab ) :-
	name( Yatom, [Y] ),
	tab( Tab ), write( X-Yatom-Z ), nl,
	write_piv_list( T, Tab ).

write_branches_prob( Message, List ) :-
	write( Message ), write( ' : [' ), nl,
	write_branches_prob_list( List, 3 ),
	write( ']' ), nl.
	

write_branches_prob_list( [], _Tab ).
write_branches_prob_list( [(BrProb,_Data,_Cont)|T], Tab ) :-
	Numcal is BrProb,
	tab( Tab ), write( BrProb ), 
	write( ' (' ), write( Numcal ),
	write( '),' ), 
	write_branches_prob_list( T, Tab ).


write_store( Store ) :-
	Enqs = [	act(Active), gr(Graph), rts(Roots),
			cnt(Count), vs(Variables), fdi(FdIs)
			],
	store_enquire( Store, Enqs ),
	write( 'Store :' ), nl,
	write_headed_list( active, Active ),
	write_headed_list( graph, Graph ),
	write_headed_list( roots, Roots ),
	write( ' count : ' ), write( Count ), nl,
	write_headed_list( variables, Variables ),
	write_headed_list( fdis, FdIs ).

write_headed_list( Heading, List ) :-
	write( ' ' ),
	write( Heading ), 
	write( ' : ' ), nl,
	write_list( List, 2 ).