let list_symbol = unsafe { SymbolRef::from_index(&symbol_pool.create("<list_constructor>", 2)) };
let empty_list_symbol = unsafe { SymbolRef::from_index(&symbol_pool.create("<empty_list>", 0)) };
pub fn create_symbol<P>(&self, name: impl Into<String> + AsRef<str>, arity: usize, protect: P) -> Symbol
pub(crate) fn register_thread_term_pool(&mut self) -> Arc<UnsafeCell<SharedTermProtection>> {
/// Triggers garbage collection if necessary and returns an updated counter for the thread local pool.
// SAFETY: We have exclusive access to the global term pool, so no other thread can modify the protection sets.
// SAFETY: We have exclusive access to the global term pool, so no other thread can modify the protection sets.
// For some terms, such as ATermInt, we must ONLY consider the valid arguments (indicated by the arity)
let term = random_term(rng, &[("f".into(), 2), ("g".into(), 1)], &["a".to_string()], 10);