Definition ad_to_be_eq1 (f : mu_form) (f1 f2 : ad -> bool_expr) :=
forall x : ad, mu_rel_free x f = true -> be_eq (f1 x) (f2 x).

(* Specifications: *)
Lemma mu_eval_lemma2 :
forall f : mu_form,
f_ok f ->
mu_form_ap_ok (var_lu 0 N) f ->
(forall re : rel_env,
ad_to_be_ok (var_lu 0 N) re -> be_ok (var_lu 0 N) (mu_eval f re)) /\
(forall P : ad, f_P_even P f true -> re_to_be_inc (mu_eval f) P) /\
(forall P : ad, f_P_even P f false -> re_to_be_dec (mu_eval f) P) /\
(forall re1 re2 : rel_env,
ad_to_be_eq1 f re1 re2 -> be_eq (mu_eval f re1) (mu_eval f re2)).
Lemma mu_eval_lemma1 :
forall f : mu_form,
f_ok f ->
mu_form_ap_ok (var_lu 0 N) f ->
(forall re : rel_env,
ad_to_be_ok (var_lu 0 N) re -> be_ok (var_lu 0 N) (mu_eval f re)) /\
(forall P : ad, f_P_even P f true -> re_to_be_inc (mu_eval f) P) /\
(forall P : ad, f_P_even P f false -> re_to_be_dec (mu_eval f) P) /\
(forall re1 re2 : rel_env,
ad_to_be_eq re1 re2 -> be_eq (mu_eval f re1) (mu_eval f re2)).
Lemma lfp_be_lfp :
forall (bef : bool_expr -> bool_expr) (be : bool_expr),
lfp bef be <-> lfp_be bef Zero be.
Lemma be_iter_is_lfp_be :
forall (bef : bool_expr -> bool_expr) (n : nat) (be : bool_expr),
be_le be (bef be) ->
(forall be1 be2 : bool_expr, be_eq be1 be2 -> be_eq (bef be1) (bef be2)) ->
(forall be1 be2 : bool_expr, be_le be1 be2 -> be_le (bef be1) (bef be2)) ->
(exists m : nat, m <= n /\ be_eq (be_iter1 bef be m) (be_iter1 bef be (S m))) ->
lfp_be bef be (be_iter bef be n).
Lemma be_iter1_n_le :
forall (n : nat) (be : bool_expr) (bef : bool_expr -> bool_expr),
n <> 0 ->
(forall be1 be2 : bool_expr, be_le be1 be2 -> be_le (bef be1) (bef be2)) ->
be_le be (bef be) -> be_le be (be_iter1 bef be n).
Lemma be_iter2n_is_lfp_be :
forall (bef : bool_expr -> bool_expr) (n : nat) (be : bool_expr),
be_le be (bef be) ->
(forall be1 be2 : bool_expr, be_eq be1 be2 -> be_eq (bef be1) (bef be2)) ->
(forall be1 be2 : bool_expr, be_le be1 be2 -> be_le (bef be1) (bef be2)) ->
(exists m : nat,
m <= two_power n /\ be_eq (be_iter1 bef be m) (be_iter1 bef be (S m))) ->
lfp_be bef be (fst (be_iter2n bef be n)).
Lemma be_le_zero : forall be : bool_expr, be_le Zero be.
Section Mu_eval_as_fix.