Notation no_invG :=
(fun s : S_Ck SG =>
match s with
| (sg, z) =>
sg = Lowering /\ ~ lt_Ck z kg1 \/ sg = Raising /\ ~ lt_Ck z kg3
end) (only parsing).

(* Specifications: *)
Lemma No_invG :
forall s : S_Ck SG,
~ InvG s ->
(fun s : S_Ck SG =>
match s with
| (sg, z) =>
sg = Lowering /\ ~ lt_Ck z kg1 \/ sg = Raising /\ ~ lt_Ck z kg3
end) s.
Lemma INV_TCG_general :
forall s : StGlobal,
(fun s : StGlobal =>
match s with
| (st_x, (sc_y, sg_z)) => InvT st_x /\ InvC sc_y /\ InvG sg_z
end) s ->
ForAll TrGlobal s
(fun s : StGlobal =>
match s with
| (st_x, (sc_y, sg_z)) => InvT st_x /\ InvC sc_y /\ InvG sg_z
end).
Lemma INV_T_general :
forall s1 s2 : StGlobal,
(fun s : StGlobal =>
match s with
| (st_x, (sc_y, sg_z)) => InvT st_x /\ InvC sc_y /\ InvG sg_z
end) s1 -> RState TrGlobal s1 s2 -> InvT (fst s2).
Lemma INV_C_general :
forall s1 s2 : StGlobal,
(fun s : StGlobal =>
match s with
| (st_x, (sc_y, sg_z)) => InvT st_x /\ InvC sc_y /\ InvG sg_z
end) s1 -> RState TrGlobal s1 s2 -> InvC (fst (snd s2)).
Lemma INV_G_general :
forall s1 s2 : StGlobal,
(fun s : StGlobal =>
match s with
| (st_x, (sc_y, sg_z)) => InvT st_x /\ InvC sc_y /\ InvG sg_z
end) s1 -> RState TrGlobal s1 s2 -> InvG (snd (snd s2)).