split_and_assert_abstractions(_,GLowerBound,GUpperBound,IntervalSize) :-
(GLowerBound > GUpperBound ; IntervalSize =< 0) , ! , fail.
split_and_assert_abstractions(Type,GUpperBound,GUpperBound,_) :- ! ,
split_and_assert_abstractions_aux(Type,GUpperBound,GUpperBound).
split_and_assert_abstractions(Type,GLowerBound,GUpperBound,IntervalSize) :-
UpperBound is GLowerBound + IntervalSize ,
UpperBound > GUpperBound , ! ,
split_and_assert_abstractions_aux(Type,GLowerBound,GUpperBound).
split_and_assert_abstractions(Type,GLowerBound,GUpperBound,IntervalSize) :-
UpperBound is GLowerBound + IntervalSize ,
split_and_assert_abstractions_aux(Type,GLowerBound,UpperBound) ,
UpperBound1 is UpperBound + 1 ,
split_and_assert_abstractions(Type,UpperBound1,GUpperBound,IntervalSize).