Require Import List.
Import ListNotations.

Definition stack (X : Type) := list (list X * list X).


Fixpoint {X: Type} (a : X) (A : stack X) :=
  match A with
    nil [a]
  | (x, y) :: A x ( a A) y
  end.

Definition CFPP : stack * Prop :=
   '(R, a) (A : stack ),
    incl A R A [] a A = rev ( a A).

Definition CFPI : stack * stack * Prop :=
   '(R1, R2, a) (A1 A2 : stack ),
    incl incl [] [] a = a .