Proposition BC_to_TRS_Mmono bc: Mmono (BC_to_TRS bc).

(* Specifications: *)
Lemma map_BC_to_TRS_Mmono bcl: Mmono (lm_to_ml (map BC_to_TRS bcl)).
Lemma get_rules_eq trsl: (* to allow fold and not only unfold *) concat (map rules trsl) = get_rules trsl.
Lemma get_rules_cons trs trsl: get_rules (trs::trsl) = (rules trs)++(get_rules trsl).
Lemma map_mk_tv_is_mk_tvl n m: map mk_tv (seq n m) = mk_tvl n (m+n).
Lemma tvl_incl n0 m0 n1 m1: n1 ≤ n0 ∧ m0 ≤ m1 → incl (mk_tvl n0 m0) (mk_tvl n1 m1).
Lemma pvl_arity : ∀ n m, maxl (map (max_arity_pattern (constructor:=constructor)) (mk_pvl n m)) = 0.
Lemma pvl_length : ∀ n m, n≤m → length (mk_pvl n m) = m-n.
Lemma tvl_arity : ∀ n m, maxl (map (max_arity_term (constructor:=constructor)) (mk_tvl n m)) = 0.
Lemma tvl_length : ∀ n m, n≤m → length (mk_tvl n m) = m-n.
Lemma tfp_pv_cancelation: ∀ l, map term_from_pattern (map mk_pv l) = map mk_tv l.
Lemma tfp_pvl_is_tvl: ∀ n m, map term_from_pattern (mk_pvl n m) = mk_tvl n m.
Lemma vot_tvl_cancellation m n: flat_map (vars_of_term (constructor:=constructor)) (mk_tvl m n) = ints m n.
Lemma firstn_tvl p n m: firstn p (mk_tvl n m) = mk_tvl n (min (n+p) (m)).
Lemma skipn_tvl p n m: skipn p (mk_tvl n m) = mk_tvl (n+p) m.
Lemma pattern_term_list_cast: ∀ m n, map (vars_of_pattern (constructor:=constructor)) (mk_pvl m n) = map (vars_of_term (constructor:=constructor)) (mk_tvl m n).
Lemma vop_vot_flat_map_cast m n: flat_map (vars_of_pattern (constructor:=constructor)) (mk_pvl m n) = flat_map (vars_of_term (constructor:=constructor)) (mk_tvl m n).
Lemma funcs_in_mk_call trsl n: flat_map functions_of_term (map (mk_call_trs n) trsl) = map main trsl.