Variables (n : nat) (s : ll_vars -> vec nat n -> Prop) (rx : pos n -> ll_vars).
Fact ll_tps_vec_map_list_mono :
(forall (p : pos n), s (rx p) (vec_one p))
-> forall v, ll_tps_list s (map £ (vec_map_list v rx)) v.
Fact ll_tps_vec_map_list :
(forall (p : pos n) (v : vec nat n), s (rx p) v <-> v = vec_one p)
-> forall v w, ll_tps_list s (map £ (vec_map_list v rx)) w <-> v = w.
End TPS.
Section g_eill_complete_bound.
Variable (Si : list eill_cmd) (Ga : list ll_vars) (n : nat).
Notation vars := (flat_map eill_cmd_vars Si ++ Ga).
(* This is a surjection from [0,n-1] into the vars of Si,Ga *)
Hypothesis (w : vec ll_vars n)
(w_surj : forall u, In u vars -> exists p, u = vec_pos w p).
Let rx p := vec_pos w p.
Let Hrx l : incl l (flat_map eill_cmd_vars Si ++ Ga) -> exists v, l ~p vec_map_list v rx.
Let s x v := Si; vec_map_list v rx ⊦ x.
Notation "⟦ A ⟧" := (ll_tps s A) (at level 65).
Notation "'[<' Γ '|-' A '>]'" := (ll_sequent_tps s Γ A) (at level 65).

(* Specifications: *)
Theorem G_eill_complete_bound x : [< map (fun c => ❗[i c]) Si ++ map £ Ga |- £ x >] vec_zero ->
Si; Ga ⊦ x.