Definition key := string.Definition value := string.Inductive input : Set :=
| Put : key -> value -> input
| Get : key -> input
| Del : key -> input
| CAS : key -> option value -> value -> input
| CAD : key -> value -> input.Inductive input : Set :=
| Put : key -> value -> input
| Get : key -> input
| Del : key -> input
| CAS : key -> option value -> value -> input
| CAD : key -> value -> input.Inductive input : Set :=
| Put : key -> value -> input
| Get : key -> input
| Del : key -> input
| CAS : key -> option value -> value -> input
| CAD : key -> value -> input.Inductive input : Set :=
| Put : key -> value -> input
| Get : key -> input
| Del : key -> input
| CAS : key -> option value -> value -> input
| CAD : key -> value -> input.Inductive input : Set :=
| Put : key -> value -> input
| Get : key -> input
| Del : key -> input
| CAS : key -> option value -> value -> input
| CAD : key -> value -> input.Inductive input : Set :=
| Put : key -> value -> input
| Get : key -> input
| Del : key -> input
| CAS : key -> option value -> value -> input
| CAD : key -> value -> input.Inductive output : Set :=
| Response : key -> option value -> option value -> output.Inductive output : Set :=
| Response : key -> option value -> option value -> output.Definition key_eq_dec := string_dec.Definition value_eq_dec := string_dec.Definition val_eq_dec : forall v v' : option value, {v = v'} + {v <> v'}.

(* Specifications: *)
Theorem input_eq_dec : forall x y: input, {x = y} + {x <> y}.
Theorem output_eq_dec : forall x y: output, {x = y} + {x <> y}.