Module Import Valid := Validator_safe.Make A.Proposition shift_head_symbs: shift_head_symbs.Proposition goto_head_symbs: goto_head_symbs.Proposition shift_past_state: shift_past_state.Proposition goto_past_state: goto_past_state.Proposition reduce_ok: reduce_ok.(** The stack of symbols of an automaton stack **)
Definition symb_stack_of_stack (stack:stack) :=
  List.map
    (fun cell:sigT noninitstate_type => last_symb_of_non_init_state (projT1 cell))
    stack.

Lemma pop_stack_invariant_conserved (symbols_to_pop:list symbol) (stack_cur:stack) A action: stack_invariant stack_cur -> prefix symbols_to_pop (head_symbs_of_state (state_of_stack init stack_cur)) -> match pop symbols_to_pop stack_cur (A:=A) action with | OK (stack_new, _) => stack_invariant stack_new /\ state_valid_after_pop (state_of_stack init stack_new) symbols_to_pop (head_states_of_state (state_of_stack init stack_cur)) | Err => False end.