Require Import ListAux.
Lemma stream3bound_Cons0 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(list_once  il_0 u_1)/\(not (list_order  il_0 u_0 u_1))/\(not (list_member  il_0 u_0))/\(not (list_order  il_1 u_1 u_0))/\(not (u_0 = i_0))/\(u_1 = i_0)/\(list_member  il_0 u_1)/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (not (list_once  il_0 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons1 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(list_once  il_0 u_1)/\(not (list_order  il_0 u_0 u_1))/\(not (list_member  il_0 u_0))/\(not (list_order  il_1 u_1 u_0))/\(u_0 = i_0)/\(not (list_once  il_0 i_0))/\(not (u_1 = i_0))/\(list_member  il_0 u_1)/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (not (list_order  il_0 u_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons2 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(not (u_0 = i_0))/\(not (list_once  il_0 i_0))/\(u_1 = i_0)/\(list_member  il_0 u_0)/\(list_once  il_0 u_0)/\(not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (not (list_order  il_0 u_0 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons3 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(u_0 = i_0)/\(not (u_1 = i_0))/\(list_member  il_0 u_0)/\(list_once  il_0 u_0)/\(not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (not (list_once  il_0 u_1))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons4 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(u_1 = i_0)/\(not (u_0 = i_0))/\(not (list_once  il_0 i_0))/\(list_order  il_0 i_0 u_0)/\(not (list_member  il_0 u_0))/\(list_once  il_0 u_0)/\(not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (list_order  il_0 u_0 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons5 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(u_1 = i_0)/\(not (u_0 = i_0))/\(not (list_once  il_0 i_0))/\(list_order  il_0 i_0 u_0)/\(not (list_member  il_0 u_0))/\(list_once  il_0 u_0)/\(not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (list_order  il_1 i_0 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons6 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(u_1 = i_0)/\(not (u_0 = i_0))/\(not (list_once  il_0 i_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 u_0))/\(list_once  il_0 u_0)/\(not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (not (list_order  il_0 u_0 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons7 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(u_0 = i_0)/\(list_once  il_0 u_1)/\(not (list_member  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (list_order  il_1 u_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons8 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(u_0 = i_0)/\(list_once  il_0 u_1)/\(not (list_member  il_0 i_0))/\(list_order  il_0 u_1 i_0)/\(not (list_once  il_0 u_0))/\(not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (not (list_order  il_0 i_0 u_1))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons9 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(u_0 = i_0)/\(list_once  il_0 u_1)/\(not (list_member  il_0 i_0))/\(not (list_order  il_0 u_1 i_0))/\(not (list_once  il_0 u_0))/\(not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (list_order  il_0 i_0 u_1)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons10 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(u_1 = i_0)/\(not (u_0 = i_0))/\(list_once  il_0 u_0)/\(list_member  il_0 i_0)/\(not (list_member  il_0 u_0))/\(not (list_order  il_1 i_0 u_0))/\(not (list_once  il_1 u_1))/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (list_once  il_0 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons11 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(u_1 = i_0)/\(not (u_0 = i_0))/\(list_once  il_0 u_0)/\(list_member  il_0 i_0)/\(not (list_member  il_0 u_0))/\(not (list_order  il_1 i_0 u_0))/\(not (list_once  il_1 u_1))/\(list_once  il_1 u_0)/\(list_order  il_1 u_0 u_1)) -> (list_order  il_0 u_0 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons12 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_0 = i_0))/\(u_1 = u_0)/\(list_once  il_0 u_0)/\(list_member  il_0 u_0)/\(not (list_once  il_1 u_0))/\(list_order  il_1 u_0 u_1)) -> (not (list_order  il_1 u_0 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons13 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = i_0))/\(u_0 = i_0)/\(list_once  il_0 u_1)/\(not (list_member  il_0 u_1))/\(not (u_1 = u_0))/\(list_once  il_0 u_0)/\(list_member  il_0 u_0)/\(not (list_once  il_1 u_0))/\(list_order  il_1 u_0 u_1)) -> (not (list_once  il_1 u_1))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons14 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(u_0 = i_0)/\(list_once  il_0 u_1)/\(not (list_member  il_0 u_1))/\(not (list_once  il_0 u_0))/\(list_member  il_0 u_0)/\(not (list_once  il_1 u_0))/\(list_order  il_1 u_0 u_1)) -> (not (list_once  il_1 u_1))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons15 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (list_member  il_0 u_0))/\(not (list_once  il_1 u_0))/\(list_order  il_1 u_0 u_1)) -> (not (u_1 = u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons16 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_0))/\(not (u_0 = i_0))/\(not (list_once  il_1 u_0))/\(list_order  il_0 u_0 u_0)/\(list_once  il_0 u_0)/\(u_1 = u_0)/\(list_order  il_1 u_1 u_0)/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons17 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_0))/\(not (u_0 = i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 u_0))/\(list_once  il_0 u_0)/\(u_1 = u_0)/\(list_order  il_1 u_1 u_0)/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons18 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_0))/\(not (u_0 = i_0))/\(list_once  il_1 u_0)/\(not (list_once  il_0 u_0))/\(u_1 = u_0)/\(list_order  il_1 u_1 u_0)/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons19 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(not (u_0 = i_0))/\(not (list_once  il_0 i_0))/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(list_member  il_0 u_0)/\(u_1 = i_0)/\(not (u_1 = u_0))/\(list_order  il_1 u_1 u_0)/\(not (list_order  il_1 u_0 u_1))) -> (not (list_once  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons20 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(u_0 = i_0)/\(list_once  il_0 u_1)/\(list_order  il_0 u_1 i_0)/\(list_once  il_0 i_0)/\(not (u_1 = i_0))/\(not (u_1 = u_0))/\(list_order  il_1 u_1 u_0)/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_0 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons21 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_1))/\(list_once  il_1 u_1)/\(list_member  il_1 u_1)/\(list_member  il_1 u_0)/\(u_0 = i_0)/\(list_once  il_0 u_1)/\(not (list_order  il_0 u_1 i_0))/\(not (list_order  il_0 i_0 u_1))/\(not (list_member  il_0 i_0))/\(not (list_once  il_0 i_0))/\(not (u_1 = i_0))/\(not (u_1 = u_0))/\(list_order  il_1 u_1 u_0)/\(not (list_order  il_1 u_0 u_1))) -> (not (list_once  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons22 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(list_once  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons23 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(list_once  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons24 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(list_once  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons25 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(not (list_once  il_0 i_0))/\(list_once  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons26 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(list_member  il_1 u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons27 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(list_member  il_1 u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons28 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(list_member  il_1 u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons29 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(not (list_once  il_0 i_0))/\(list_member  il_1 u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons30 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(u_0 = i_0)/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons31 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_once  il_1 i_0)/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons32 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons33 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons34 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((i_0 = u_0)/\(not (u_0 = i_0))/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_0 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons35 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_once  il_1 u_0)/\(list_member  il_0 u_0)/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons36 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 u_0)/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons37 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_once  il_1 u_0)/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons38 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_1 u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons39 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(not (list_once  il_1 u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons40 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(list_once  il_0 i_0)/\(not (i_0 = u_0))/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons41 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(not (i_0 = u_0))/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons42 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_once  il_0 i_0))/\(not (i_0 = u_0))/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons43 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 u_0)/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons44 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_once  il_1 u_0)/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons45 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(list_once  il_1 u_0)/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons46 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_1 u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons47 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_member  il_0 i_0)/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons48 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons49 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons50 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_once  il_1 i_0)/\(i_0 = i_0)/\(u_0 = i_0)/\(list_member  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons51 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(i_0 = i_0)/\(u_0 = i_0)/\(list_member  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons52 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(u_0 = i_0)/\(list_member  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons53 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((i_0 = u_0)/\(not (u_0 = i_0))/\(list_member  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_0 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons54 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(i_0 = i_0)/\(not (list_member  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons55 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(i_0 = i_0)/\(not (list_member  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons56 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(not (list_member  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons57 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons58 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = u_0))/\(not (list_member  il_0 i_0))/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons59 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(i_0 = i_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons60 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(i_0 = i_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons61 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons62 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(list_order  il_0 i_0 u_0)/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons63 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(list_once  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons64 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(list_once  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons65 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(list_once  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons66 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(not (list_once  il_0 i_0))/\(list_once  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons67 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(list_member  il_1 u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons68 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(list_member  il_1 u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons69 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(list_member  il_1 u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons70 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(not (list_once  il_0 i_0))/\(list_member  il_1 u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons71 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(u_0 = i_0)/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons72 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_once  il_1 i_0)/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons73 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(i_0 = i_0)/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons74 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons75 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((i_0 = u_0)/\(not (u_0 = i_0))/\(not (list_member  il_1 u_0))/\(not (list_once  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_0 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons76 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_once  il_1 u_0)/\(list_member  il_0 u_0)/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons77 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 u_0)/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons78 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_once  il_1 u_0)/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons79 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_1 u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons80 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(not (list_once  il_1 u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons81 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(list_once  il_0 i_0)/\(not (i_0 = u_0))/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons82 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(not (i_0 = u_0))/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons83 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_once  il_0 i_0))/\(not (i_0 = u_0))/\(not (list_member  il_0 i_0))/\(list_once  il_0 u_0)/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons84 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 u_0)/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons85 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_once  il_1 u_0)/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons86 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(list_once  il_1 u_0)/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons87 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_1 u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons88 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_member  il_0 i_0)/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons89 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons90 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons91 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_once  il_1 i_0)/\(i_0 = i_0)/\(u_0 = i_0)/\(list_member  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons92 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(i_0 = i_0)/\(u_0 = i_0)/\(list_member  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons93 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(u_0 = i_0)/\(list_member  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons94 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((i_0 = u_0)/\(not (u_0 = i_0))/\(list_member  il_1 u_0)/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_0 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons95 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(i_0 = i_0)/\(not (list_member  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons96 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(i_0 = i_0)/\(not (list_member  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons97 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(not (list_member  il_1 u_0))/\(list_member  il_0 i_0)/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons98 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_member  il_0 i_0))/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons99 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = u_0))/\(not (list_member  il_0 i_0))/\(list_once  il_1 u_0)/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons100 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(i_0 = i_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons101 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(i_0 = i_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons102 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (i_0 = i_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons103 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_once  il_0 i_0))/\(not (list_once  il_0 u_0))/\(not (list_order  il_0 i_0 u_0))/\(list_order  il_0 u_0 i_0)/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons104 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_member  il_0 u_0))/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons105 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_0))/\(u_0 = u_0)/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons106 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_0))/\(not (u_0 = u_0))/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons107 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_member  il_0 i_0)/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons108 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons109 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons110 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_1 u_0)/\(u_0 = u_0)/\(list_member  il_0 u_0)/\(i_0 = u_0)/\(not (list_once  il_0 i_0))/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_once  il_0 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons111 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(not (list_once  il_0 u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_once  il_0 i_0))/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons112 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(list_member  il_0 i_0)/\(not (i_0 = u_0))/\(not (list_once  il_0 i_0))/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons113 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_member  il_0 i_0)/\(not (i_0 = u_0))/\(not (list_once  il_0 i_0))/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons114 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(not (list_once  il_0 i_0))/\(list_order  il_0 i_0 u_0)/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons115 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_member  il_0 u_0))/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons116 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_0))/\(u_0 = u_0)/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons117 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_0))/\(not (u_0 = u_0))/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(list_once  il_0 i_0)/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons118 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_member  il_0 i_0)/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons119 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons120 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(list_once  il_0 i_0)/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons121 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_0 u_0))/\(list_member  il_0 u_0)/\(i_0 = u_0)/\(not (list_once  il_0 i_0))/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons122 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(not (list_once  il_0 u_0))/\(not (list_member  il_0 u_0))/\(i_0 = u_0)/\(not (list_once  il_0 i_0))/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons123 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(list_member  il_0 i_0)/\(not (i_0 = u_0))/\(not (list_once  il_0 i_0))/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons124 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_member  il_0 i_0)/\(not (i_0 = u_0))/\(not (list_once  il_0 i_0))/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons125 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_member  il_0 i_0))/\(not (i_0 = u_0))/\(not (list_once  il_0 i_0))/\(not (list_order  il_0 i_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons126 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons127 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_member  il_0 u_0))/\(not (u_0 = u_0))/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons128 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_member  il_0 u_0)/\(list_order  il_0 u_0 u_0)/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons129 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_member  il_0 u_0))/\(list_order  il_0 u_0 u_0)/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons130 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_member  il_0 u_0)/\(not (list_order  il_0 u_0 u_0))/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons131 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_member  il_0 u_0))/\(not (list_order  il_0 u_0 u_0))/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons132 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(list_once  il_0 u_0)/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons133 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(list_order  il_0 i_0 i_0)/\(not (list_once  il_0 i_0))/\(list_once  il_0 u_0)/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons134 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_order  il_0 i_0 i_0)/\(not (list_once  il_0 i_0))/\(list_once  il_0 u_0)/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons135 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(not (list_order  il_0 i_0 i_0))/\(not (list_once  il_0 i_0))/\(list_once  il_0 u_0)/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons136 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_order  il_0 i_0 i_0))/\(not (list_once  il_0 i_0))/\(list_once  il_0 u_0)/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons137 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_0 i_0))/\(u_0 = i_0)/\(list_member  il_1 i_0)/\(list_order  il_0 i_0 u_0)/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_once  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons138 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_0 u_0)/\(not (list_member  il_1 u_0))/\(not (u_0 = i_0))/\(list_member  il_1 i_0)/\(list_order  il_0 i_0 u_0)/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_once  il_0 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons139 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_0 u_0)/\(not (list_member  il_1 u_0))/\(not (u_0 = i_0))/\(list_member  il_1 i_0)/\(list_order  il_0 i_0 u_0)/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_once  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons140 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_member  il_1 i_0))/\(list_order  il_0 i_0 u_0)/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_once  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons141 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(not (list_order  il_0 i_0 u_0))/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons142 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_0 u_0)/\(u_0 = i_0)/\(list_member  il_1 i_0)/\(not (list_once  il_0 i_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_once  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons143 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_member  il_0 u_0)/\(not (list_once  il_1 i_0))/\(not (u_0 = i_0))/\(list_member  il_1 i_0)/\(not (list_once  il_0 i_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons144 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_member  il_1 i_0))/\(not (list_once  il_0 i_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(list_member  il_0 i_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_once  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons145 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_member  il_0 u_0)/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(list_order  il_0 i_0 u_0)/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons146 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_member  il_0 u_0))/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(list_order  il_0 i_0 u_0)/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons147 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(not (list_member  il_0 u_0))/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(list_order  il_0 i_0 u_0)/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons148 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(list_order  il_0 i_0 u_0)/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons149 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(list_once  il_0 i_0)/\(not (i_0 = u_0))/\(list_order  il_0 i_0 u_0)/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons150 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(not (i_0 = u_0))/\(list_order  il_0 i_0 u_0)/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons151 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_once  il_0 i_0))/\(not (i_0 = u_0))/\(list_order  il_0 i_0 u_0)/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons152 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(list_member  il_0 u_0)/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons153 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_member  il_0 u_0))/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons154 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = u_0))/\(not (list_member  il_0 u_0))/\(list_once  il_0 u_0)/\(i_0 = u_0)/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons155 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = u_0)/\(not (list_once  il_0 u_0))/\(i_0 = u_0)/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons156 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(list_once  il_0 i_0)/\(list_once  il_0 u_0)/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons157 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(list_once  il_0 u_0)/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons158 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_once  il_0 i_0))/\(list_once  il_0 u_0)/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons159 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(list_once  il_0 i_0)/\(list_member  il_0 u_0)/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons160 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(list_member  il_0 u_0)/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons161 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_1 i_0))/\(u_0 = i_0)/\(not (list_once  il_0 i_0))/\(list_member  il_0 u_0)/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons162 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((list_once  il_1 i_0)/\(list_member  il_1 i_0)/\(not (u_0 = i_0))/\(not (list_once  il_0 i_0))/\(list_member  il_0 u_0)/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons163 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(list_once  il_1 i_0)/\(list_once  il_0 i_0)/\(not (list_member  il_0 u_0))/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons164 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(list_once  il_0 i_0)/\(not (list_member  il_0 u_0))/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons165 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((u_0 = i_0)/\(not (list_once  il_1 i_0))/\(not (list_once  il_0 i_0))/\(not (list_member  il_0 u_0))/\(not (list_once  il_0 u_0))/\(not (i_0 = u_0))/\(not (list_order  il_0 i_0 u_0))/\(not (list_member  il_0 i_0))/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 i_0))/\(u_1 = i_0)/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons166 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = i_0))/\(list_once  il_0 u_0)/\(not (list_once  il_1 u_0))/\(list_member  il_0 u_0)/\(u_1 = u_0)/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons167 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = i_0))/\(not (list_once  il_0 u_0))/\(list_once  il_1 u_0)/\(list_order  il_0 u_0 u_0)/\(not (list_member  il_0 u_0))/\(u_1 = u_0)/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons168 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = i_0))/\(list_once  il_0 u_0)/\(not (list_once  il_1 u_0))/\(list_order  il_0 u_0 u_0)/\(not (list_member  il_0 u_0))/\(u_1 = u_0)/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons169 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = i_0))/\(not (list_once  il_0 u_0))/\(list_once  il_1 u_0)/\(not (list_order  il_0 u_0 u_0))/\(not (list_member  il_0 u_0))/\(u_1 = u_0)/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_member  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons170 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (u_0 = i_0))/\(list_once  il_0 u_0)/\(not (list_once  il_1 u_0))/\(not (list_order  il_0 u_0 u_0))/\(not (list_member  il_0 u_0))/\(u_1 = u_0)/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_member  il_1 u_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons171 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_0 u_1))/\(not (list_once  il_1 u_1))/\(not (list_member  il_1 u_1))/\(list_member  il_1 u_0)/\(list_member  il_0 u_1)/\(list_member  il_0 i_0)/\(list_once  il_0 i_0)/\(u_0 = i_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_order  il_0 u_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons172 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_0 u_1))/\(not (list_once  il_1 u_1))/\(not (list_member  il_1 u_1))/\(list_member  il_1 u_0)/\(list_member  il_0 u_1)/\(list_member  il_0 i_0)/\(list_once  il_0 i_0)/\(u_0 = i_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_order  il_0 i_0 u_1)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons173 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_0 u_1))/\(not (list_once  il_1 u_1))/\(not (list_member  il_1 u_1))/\(list_member  il_1 u_0)/\(list_member  il_0 u_1)/\(list_member  il_0 i_0)/\(list_order  il_0 u_1 i_0)/\(list_order  il_0 i_0 u_1)/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_once  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons174 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_0 u_1))/\(not (list_once  il_1 u_1))/\(not (list_member  il_1 u_1))/\(list_member  il_1 u_0)/\(list_member  il_0 u_1)/\(not (list_member  il_0 i_0))/\(list_order  il_0 u_1 i_0)/\(list_order  il_0 i_0 u_1)/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_once  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons175 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_0 u_1))/\(not (list_once  il_1 u_1))/\(not (list_member  il_1 u_1))/\(list_member  il_1 u_0)/\(list_member  il_0 u_1)/\(not (list_member  il_0 i_0))/\(not (list_order  il_0 u_1 i_0))/\(list_order  il_0 i_0 u_1)/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_once  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons176 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_0 u_1))/\(not (list_once  il_1 u_1))/\(not (list_member  il_1 u_1))/\(list_member  il_1 u_0)/\(list_member  il_0 u_1)/\(list_order  il_0 u_1 i_0)/\(list_member  il_0 i_0)/\(not (list_order  il_0 i_0 u_1))/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (list_once  il_1 i_0)).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons177 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_0 u_1))/\(not (list_once  il_1 u_1))/\(not (list_member  il_1 u_1))/\(list_member  il_1 u_0)/\(list_member  il_0 u_1)/\(list_order  il_0 u_1 i_0)/\(not (list_member  il_0 i_0))/\(not (list_order  il_0 i_0 u_1))/\(not (list_once  il_0 i_0))/\(u_0 = i_0)/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_once  il_1 i_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.

Lemma stream3bound_Cons178 (i_0:nat) (il_0:list nat) (il_1:list nat) (u_0:nat) (u_1:nat) : (push_spec  i_0 il_0 il_1) -> (((not (list_once  il_0 u_1))/\(not (list_once  il_1 u_1))/\(not (list_member  il_1 u_1))/\(list_member  il_1 u_0)/\(list_once  il_0 u_0)/\(list_order  il_0 u_0 u_1)/\(not (list_member  il_0 u_1))/\(list_member  il_0 u_0)/\(not (u_0 = i_0))/\(not (u_1 = u_0))/\(not (u_1 = i_0))/\(not (list_order  il_1 u_1 u_0))/\(not (list_order  il_1 u_0 u_1))) -> (not (list_once  il_1 u_0))).
Proof. solve_push; try (assert (u_0 = u_1); subst; eauto). Qed.


From Perennial.goose_lang Require Import notation proofmode typing.
From Perennial.goose_lang Require Import wpc_proofmode.
From Perennial.goose_lang.lib Require Import typed_mem.
From Perennial.goose_lang.lib Require Import
     slice.slice slice.typed_slice into_val.

Set Default Proof Using "Type".

Section goose_lang.
Context `{ffi_sem: ffi_semantics} `{!ffi_interp ffi} `{!heapGS Σ}.
Context {ext_ty: ext_types ext}.

Context `{!IntoVal V}.

Implicit Types (v:V) (vs: list V).

Lemma wpc_slice_len stk E1 s Φ Φc :
  Φc ∧ Φ #(Slice.sz s) -∗
  WPC slice.len (slice_val s) @ stk; E1 {{ v, Φ v }} {{ Φc }}.
Proof.
  iIntros "HΦ".
  rewrite /slice.len.
  wpc_pures.
  { by iDestruct "HΦ" as "[$ _]". }
  { by iDestruct "HΦ" as "[_ $]". }
Qed.

Lemma wpc_SliceGet stk E1 s t q vs (i: u64) v0 :
  {{{ is_slice_small s t q vs ∗ ⌜ vs !! int.nat i = Some v0 ⌝ }}}
    SliceGet t (slice_val s) #i @ stk; E1
  {{{ RET (to_val v0); is_slice_small s t q vs }}}
  {{{ True }}}.
Proof.
  iIntros (Φ Φc) "[Hs %] HΦ".
  rewrite /SliceGet.
  wpc_pures; first auto.
  { by crash_case. }
  wpc_pures.
  { by crash_case. }
  wpc_frame "HΦ".
  { by crash_case. }
  iApply (wp_SliceGet_body with "[$Hs]").
  { rewrite /list.untype list_lookup_fmap.
    rewrite H //. }
  iIntros "!> [Hs %] HΦ". iNamed "HΦ".
  iRight in "HΦ".
  iApply "HΦ".
  auto.
Qed.

Theorem wpc_forSlice (I: u64 -> iProp Σ) Φc' stk E1 s t q (vs: list V) (body: val) :
  □ (∀ x, I x -∗ Φc') -∗
  (∀ (i: u64) (x: V),
      {{{ I i ∗ ⌜(int.nat i < length vs)%nat⌝ ∗
                ⌜vs !! int.nat i = Some x⌝ }}}
        body #i (to_val x) @ stk; E1
      {{{ RET #(); I (word.add i (U64 1)) }}}
      {{{ Φc' }}}) -∗
    {{{ I (U64 0) ∗ is_slice_small s t q vs }}}
      forSlice t body (slice_val s) @ stk; E1
    {{{ RET #(); I s.(Slice.sz) ∗ is_slice_small s t q vs }}}
    {{{ Φc' }}}.
Proof.
  iIntros "#HΦcI #Hind".
  iIntros (Φ Φc) "!> [Hi0 Hs] HΦ".
  rewrite /forSlice.
  wpc_pures.
  { iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ". iApply "HΦ". eauto. }
  wpc_pures.
  { iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ". iApply "HΦ". eauto. }
  wpc_apply wpc_slice_len.
  iSplit.
  { iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ". iApply "HΦ". eauto. }
  wpc_pures.
  { iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ". iApply "HΦ". eauto. }
  remember 0 as z.
  iRename "Hi0" into "Hiz".
  assert (0 <= z <= int.Z s.(Slice.sz)) by word.
  iDestruct (is_slice_small_sz with "Hs") as %Hslen.
  autorewrite with len in Hslen.
  clear Heqz; generalize dependent z.
  intros z Hzrange.
  assert (int.Z (U64 z) = z) by (rewrite /U64; word).
  (iLöb as "IH" forall (z Hzrange H)).
  wpc_if_destruct.
  - wpc_pures.
    { iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ". iApply "HΦ". eauto. }
    destruct (list_lookup_Z_lt vs z) as [xz Hlookup]; first word.
    wpc_apply (wpc_SliceGet with "[$Hs] [HΦ Hiz]").
    { replace (int.Z z); eauto. }
    { iSplit.
      - iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ".
        iIntros "_".
        iApply ("HΦ" with "[$]").
      - iIntros "!> Hs".
        wpc_pures.
        { iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ". iApply "HΦ". eauto. }
        wpc_apply ("Hind" with "[Hiz]").
        + iFrame.
          iPureIntro.
          split; try lia.
          replace (int.nat z) with (Z.to_nat z) by lia; auto.
        + iSplit; crash_case.
          { iLeft in "HΦ"; iFrame. }
          iIntros "!> Hiz1".
          wpc_pures.
          { iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ". iApply "HΦ". eauto. }
          assert (int.Z (z + 1) = int.Z z + 1) by word.
          replace (word.add z 1) with (U64 (z + 1)) by word.
          iSpecialize ("IH" $! (z+1) with "[] []").
          { iPureIntro; word. }
          { iPureIntro; word. }
          wpc_apply ("IH" with "[$] [$] [$]"). }
  - assert (z = int.Z s.(Slice.sz)) by lia; subst z.
    wpc_pures; swap 2 3.
    { iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ". iApply "HΦ". eauto. }
    { iSpecialize ("HΦcI" with "[$]"). iLeft in "HΦ". iApply "HΦ". eauto. }
    iRight in "HΦ".
    replace (U64 (int.Z s.(Slice.sz))) with s.(Slice.sz); last first.
    { rewrite /U64 word.of_Z_unsigned //. }
    iApply ("HΦ" with "[$]").
Qed.

End goose_lang.


Require Import Coqlib.
Require Import ITreelib.
Require Import ImpPrelude.
Require Import STS.
Require Import Behavior.
Require Import ModSem.
Require Import Skeleton.
Require Import PCM.
Require Import HoareDef STB IPM.
Require Import MapHeader.

Set Implicit Arguments.

(*** module A Map
private map := (fun k => 0)

def init(sz: int) ≡
  skip

def get(k: int): int ≡
  return map[k]

def set(k: int, v: int) ≡
  map := map[k ← v]

def set_by_user(k: int) ≡
  set(k, input())
***)

Section A.
  Context `{@GRA.inG MapRA0 Σ}.
  Context `{@GRA.inG MapRA1 Σ}.

  Let Es := (hAPCE +' Es).

  Definition initF: list val -> itree Es val :=
    fun varg =>
      ;;;
      Ret Vundef
  .

  Definition setF: list val -> itree Es val :=
    fun varg =>
      '(k, v) <- (pargs [Tint; Tint] varg)?;;
      f <- pget;;
      _ <- pput (fun n => if Z.eq_dec n k then v else f n);;;
      Ret Vundef
  .

  Definition getF: list val -> itree Es val :=
    fun varg =>
      k <- (pargs [Tint] varg)?;;
      f <- pget;;;
      Ret (Vint (f k))
  .

  Definition set_by_userF: list val -> itree Es val :=
    fun varg =>
      k <- (pargs [Tint] varg)?;;
      v <- trigger (Syscall "input" (([]: list Z)↑) (fun _ => True));; v <- v↓?;;
      ccallU "set" [Vint k; Vint v]
  .

  Definition MapSbtb: list (string * fspecbody) :=
    [("init", mk_specbody init_spec (cfunU initF));
     ("get", mk_specbody get_spec (cfunU getF));
     ("set", mk_specbody set_spec (cfunU setF));
     ("set_by_user", mk_specbody set_by_user_spec (cfunU set_by_userF))].

  Definition SMapSem: SModSem.t := {|
    SModSem.fnsems := MapSbtb;
    SModSem.mn := "Map";
    SModSem.initial_mr := GRA.embed (Excl.unit, Auth.excl ((fun _ => Excl.just 0%Z): @URA.car (Z ==> (Excl.t Z))%ra) ((fun _ => Excl.just 0%Z): @URA.car (Z ==> (Excl.t Z))%ra));
    SModSem.initial_st := (fun (_: Z) => 0%Z)↑;
  |}
  .

  Definition SMap: SMod.t := {|
    SMod.get_modsem := fun _ => SMapSem;
    SMod.sk := [("init", Sk.Gfun); ("get", Sk.Gfun); ("set", Sk.Gfun); ("set_by_user", Sk.Gfun)];
  |}
  .

  Variable GlobalStb: Sk.t -> gname -> option fspec.
  Definition Map: Mod.t := (SMod.to_tgt GlobalStb SMap).
End A.