.type List = [name: symbol, rest: List]
.decl list_decl(l:List)
list_decl(["A", ["B", ["C", nil]]]).
list_decl(["D", ["E", ["F", nil]]]).

.type Alias = List

.decl flatten_list(l:List)
.output flatten_list
flatten_list(l) :- list_decl(l).
flatten_list(l) :- flatten_list([_, l]).

.decl alias_map(a: Alias, l:List)
alias_map(l, l) :-
    flatten_list(l).

.decl alias(a: Alias)
alias(a) :- alias_map(a, _).

.decl parent(a: Alias, p: Alias)
.output parent
parent(a, p) :-
    alias_map(a, [_, parent]),
    alias_map(p, parent).

.decl has_no_parent(a: Alias)
has_no_parent(a) :-
    alias(a), !parent(a, _).   // No more error here
