:- module(cti,[ {}/0, {}/1 ]).
:- use_module(library(term),[acylic_term/1]).

{}.

{Expr} :-
	( \+ b_valid(Expr) -> throw(condition_failed(Expr)) ; true ).

b_valid(Expr) :-
	nonvar(Expr),
	nb_valid(Expr).

nb_valid(b(V)) :-
	ground(V),
	acyclic_term(V).
nb_valid((A,B)) :-
	b_valid(A),
	b_valid(B).
nb_valid((A;_B)) :-
	b_valid(A).
nb_valid((_A;B)) :-
	b_valid(B).

