(* ************************************************************************* *)
(*                                                                           *)
(*    natural-deduction: a basic proof assistant for natural deduction in    *)
(*    first-order logic.                                                     *)
(*                                                                           *)
(*    Copyright (C) 2026  Eric Johannesson, eric@ericjohannesson.com         *)
(*                                                                           *)
(*    This program is free software: you can redistribute it and/or modify   *)
(*    it under the terms of the GNU General Public License as published by   *)
(*    the Free Software Foundation, either version 3 of the License, or      *)
(*    (at your option) any later version.                                    *)
(*                                                                           *)
(*    This program is distributed in the hope that it will be useful,        *)
(*    but WITHOUT ANY WARRANTY; without even the implied warranty of         *)
(*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *)
(*    GNU General Public License for more details.                           *)
(*                                                                           *)
(*    You should have received a copy of the GNU General Public License      *)
(*    along with this program.  If not, see <https://www.gnu.org/licenses/>. *)
(*                                                                           *)
(* ************************************************************************* *)

(** The abstract formula type (and its sub-types). *)


type t_fml = 
        | PredApp of t_pred * (t_term list)
        | BinopApp of t_binop * t_fml * t_fml
        | UnopApp of t_unop * t_fml
        | QuantApp of t_quant * t_var * t_fml

and t_binop = Binop of string

and t_unop = Unop of string

and t_quant = Quant of string

and t_term = 
        | Atom of t_var
        | FuncApp of t_func * (t_term list)

and t_pred = Pred of string

and t_func = Func of string

and t_var = Var of string