let rec is_fd_term (term: term) : bool =
  match term with
    | Var _ ->
        true

    | Const symbol ->
        Symbol.is_input symbol
        ||
        Symbol.is_fd_symbol symbol
        ||
        Symbol.is_fd_element symbol

    | Func func ->
        (
          Symbol.is_input func.symbol
          ||
          Symbol.is_fd_relation func.symbol
          ||
          (Symbol.equal Symbol.diff func.symbol)
        )
        &&
        Tools.array_for_all is_fd_term func.subterms