#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EirEpistemicMode {
G91,
Faeel,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EirEpistemicOp {
Know,
Possible,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EirTerm {
Variable(String),
Anonymous,
Integer(i64),
FloatBits(u64),
String(String),
Symbol(u32),
List(Vec<EirTerm>),
Cons {
head: Box<EirTerm>,
tail: Box<EirTerm>,
},
Compound {
functor: String,
args: Vec<EirTerm>,
},
PredRef(String),
Aggregate {
op: String,
variable: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EirAtom {
pub predicate: String,
pub arity: usize,
pub terms: Vec<EirTerm>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EirEpistemicLiteral {
pub op: EirEpistemicOp,
pub negated: bool,
pub atom: EirAtom,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EirBodyLiteral {
Relational {
negated: bool,
atom: EirAtom,
},
Epistemic(EirEpistemicLiteral),
Constraint,
Binding,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EirRule {
pub head: EirAtom,
pub body: Vec<EirBodyLiteral>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EirConstraint {
pub body: Vec<EirBodyLiteral>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EirProgram {
pub mode: EirEpistemicMode,
pub rules: Vec<EirRule>,
pub constraints: Vec<EirConstraint>,
}