pub unsafe extern \"C-unwind\" fn rewrite(term: &DataExpressionRefFFI<'_>) -> DataExpressionFFI {{
let reconstructed = DataExpressionFFI::create(symbol, &[arg0.copy(), arg1.copy(), arg2.copy()]);
let reconstructed = DataExpressionFFI::create(symbol, &[arg0.copy(), arg1.copy(), arg2.copy(), arg3.copy()]);
let reconstructed = DataExpressionFFI::create(symbol, &[arg0.copy(), arg1.copy(), arg2.copy(), arg3.copy(), arg4.copy()]);
let reconstructed = DataExpressionFFI::create(symbol, &[arg0.copy(), arg1.copy(), arg2.copy(), arg3.copy(), arg4.copy(), arg5.copy()]);
let reconstructed = DataExpressionFFI::create(symbol, &[arg0.copy(), arg1.copy(), arg2.copy(), arg3.copy(), arg4.copy(), arg5.copy(), arg6.copy()]);
// Keep track of all positions that need to be read from terms, to generate getters for them later.
"if check_equivalence_classes_{index}_{symbol}_{ann_idx}(t) && check_condition_{index}_{symbol}_{ann_idx}(t) {{",
for (annotation_index, (_announcement, annotation)) in transition.announcements.iter().enumerate() {
for (annotation_index, (_announcement, annotation)) in transition.announcements.iter().enumerate() {
for (annotation_index, (_announcement, annotation)) in transition.announcements.iter().enumerate() {
"let {prefix}var_{stack_index} = match_term(&DataExpressionFFI::create(unsafe {{ DataExpressionRefFFI::from_ptr({:?}) }}, &[{}]).copy());",
"let {prefix}var_{stack_index} = match_term(&DataExpressionFFI::constant(unsafe {{ DataExpressionRefFFI::from_ptr({:?}) }}).copy());",
let result = if let Some(stack_index) = term_stack.innermost_stack.read().iter().find_map(|c| {
"fn rewrite_term_stack_{index}_{symbol}_{ann_idx}(t: &DataExpressionRefFFI<'_>) -> DataExpressionFFI {{"
"fn check_condition_{index}_{symbol}_{annotation_index}(t: &DataExpressionRefFFI<'_>) -> bool {{"
"fn check_equivalence_classes_{index}_{symbol}_{annotation_index}<'a>(t: &DataExpressionRefFFI<'a>) -> bool {{",