let make_admissible
(config: Config.config)
(raw_context_unifier: raw_context_unifier)
(subst: subst)
(remainder_states: bool array)
: subst =
let (remainder_input_vars: Subst.var list list) =
vars_of_remainder_input_literals raw_context_unifier remainder_states
in
let (remainder_literal_vars: Subst.var list list) =
List.map
(fun vars ->
Subst.get_bound_vars subst vars
)
remainder_input_vars
in
let (shared_remainder_literal_vars: Subst.var list) =
Tools.lists_shared Subst.var_equal remainder_literal_vars
in
let (subst, fresh_pars) =
make_v_free
subst
shared_remainder_literal_vars
[]
in
let fixed_pars =
add_pars_of_non_remainder_context_literals
raw_context_unifier
remainder_states
(
fresh_pars
@
raw_context_unifier.Context_unifier.rcu_space.Context_unifier.cus_shared_vars
@
shared_remainder_literal_vars
)
in
let reversed_subst =
reverse_subst
subst
remainder_input_vars
fixed_pars
raw_context_unifier.Context_unifier.rcu_space.Context_unifier.cus_shared_vars
in
if Config.mixed_literals config then
reversed_subst
else
parameterize_mixed_literals
reversed_subst
remainder_literal_vars
fresh_pars