use super::common::*;
use super::tff::{TFFTerm, TFFType, TFFVariable};
#[derive(Debug, Clone, PartialEq)]
pub enum TCFStatement<'a> {
Logical(TCFFormula<'a>),
Typing(TCFTyping<'a>),
}
#[derive(Debug, Clone, PartialEq)]
pub struct TCFTyping<'a> {
pub symbol: AtomicWord<'a>,
pub typ: TFFType<'a>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum TCFFormula<'a> {
Quantified {
variables: Vec<TFFVariable<'a>>,
clause: Box<TCFClause<'a>>,
},
Clause(TCFClause<'a>),
}
#[derive(Debug, Clone, PartialEq)]
pub enum TCFClause<'a> {
Disjunction(Vec<TCFLiteral<'a>>),
Parens(Box<TCFClause<'a>>),
}
#[derive(Debug, Clone, PartialEq)]
pub enum TCFLiteral<'a> {
Positive(TCFAtomicFormula<'a>),
Negative(TCFAtomicFormula<'a>),
Equality(TFFTerm<'a>, TFFTerm<'a>),
Inequality(TFFTerm<'a>, TFFTerm<'a>),
Parens(Box<TCFLiteral<'a>>),
}
#[derive(Debug, Clone, PartialEq)]
pub enum TCFAtomicFormula<'a> {
Plain(AtomicWord<'a>, Vec<TFFTerm<'a>>),
Defined(DefinedWord<'a>, Vec<TFFTerm<'a>>),
System(SystemWord<'a>, Vec<TFFTerm<'a>>),
True,
False,
}