(* ************************************************************************* *)
(*                                                                           *)
(*    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 proof types (and their sub-types). *)



type t_fml_raw = Fml_raw of string

type t_nullary_rule = Nullary_rule of string
type t_unary_rule = Unary_rule of string
type t_binary_rule = Binary_rule of string
type t_trinary_rule = Trinary_rule of string

type t_prf_raw = 
        | Atomic_prf_raw of t_fml_raw
        | Nullary_prf_raw of (t_nullary_rule * t_fml_raw)
        | Unary_prf_raw of (t_prf_raw * t_unary_rule * t_fml_raw)
        | Binary_prf_raw of (t_prf_raw * t_prf_raw * t_binary_rule * t_fml_raw)
        | Trinary_prf_raw of (t_prf_raw * t_prf_raw * t_prf_raw * t_trinary_rule * t_fml_raw)

type t_prf =
        | Atomic_prf of FML_types.t_fml
        | Nullary_prf of (t_nullary_rule * FML_types.t_fml)
        | Unary_prf of (t_prf * t_unary_rule * FML_types.t_fml)
        | Binary_prf of (t_prf * t_prf * t_binary_rule * FML_types.t_fml)
        | Trinary_prf of (t_prf * t_prf * t_prf * t_trinary_rule * FML_types.t_fml)