use crate::{
control::*,
entity::Sentence,
inference::rules::{utils::*, *},
language::*,
};
use nar_dev_utils::RefCount;
pub fn compose_compound(
task_content: StatementRef,
belief_content: StatementRef,
shared_term_i: SyllogismPosition,
context: &mut ReasonContextConcept,
) {
if !context.current_task().get_().is_judgement() || !task_content.is_same_type(&belief_content)
{
return;
}
let [component_common, component_t] = shared_term_i.select(task_content.sub_pre());
let component_b = shared_term_i
.opposite()
.select_one(belief_content.sub_pre());
match [component_t.as_compound(), component_b.as_compound()] {
[Some(component_t), _] if component_t.contain_all_components(component_b) => {
return decompose_as_set(
task_content,
component_t,
component_b,
component_common,
shared_term_i,
PremiseSource::Task,
context,
)
}
[_, Some(component_b)] if component_b.contain_all_components(component_t) => {
return decompose_as_set(
task_content,
component_b,
component_t,
component_common,
shared_term_i,
PremiseSource::Belief,
context,
)
}
_ => {}
}
compose_as_set(
task_content,
belief_content,
shared_term_i,
component_common,
component_t,
component_b,
context,
);
if task_content.instanceof_inheritance() {
intro_var_outer(task_content, belief_content, shared_term_i, context);
}
}