(** ** Traditional Definition *)

Definition symbol := nat.Definition string X := list X.Definition card X : Type := string X * string X.Definition stack X := list (card X).Definition SRS := stack nat.Definition BSRS := stack bool.Notation "x / y" := (x,y).(** ** Inductive Definition *)

Inductive derivable (X : Type) (R : stack X) : string X -> string X -> Prop :=
|  der_sing x y : x/y el R -> derivable R x y
| der_cons x y u v : x/y el R -> derivable R u v -> derivable R (x ++ u) (y ++ v).(** ** Inductive Definition *)

Inductive derivable (X : Type) (R : stack X) : string X -> string X -> Prop :=
|  der_sing x y : x/y el R -> derivable R x y
| der_cons x y u v : x/y el R -> derivable R u v -> derivable R (x ++ u) (y ++ v).(** ** Inductive Definition *)

Inductive derivable (X : Type) (R : stack X) : string X -> string X -> Prop :=
|  der_sing x y : x/y el R -> derivable R x y
| der_cons x y u v : x/y el R -> derivable R u v -> derivable R (x ++ u) (y ++ v).Fact itau1_app A B : itau1 (A++B) = itau1 A ++ itau1 B.Fact itau2_app A B : itau2 (A++B) = itau2 A ++ itau2 B.Inductive BPCP' P : Prop := cBPCP u (_ : @derivable bool P u u).Inductive BPCP' P : Prop := cBPCP u (_ : @derivable bool P u u).

(* Specifications: *)
Lemma BPCP_BPCP' P : BPCP P <-> BPCP' P.