Definition extractIT i : IdiomaticTransformation (KSApplicative i i) IdApplicative.
exists (@extract i).
exact (@extract_pure i).
exact (@extract_ap i).
Defined.

(* Specifications: *)
Lemma duplicate_pure i j k a (x : a) :
duplicate j (KSpure i k x) = KSpure i j (KSpure j k x).
Lemma duplicate_ap i j k a b (f : KleeneStore i k (a -> b)) (x : KleeneStore i k a):
duplicate j (KSap f x) =
ap (a:=ComposeApplicative (KSApplicative i j) (KSApplicative j k)) (duplicate j f) (duplicate j x).