Record IdiomaticTransformation (F G:Applicative) := idiomaticTransformation 
 { transform :> forall a, F a -> G a
 ; _ : forall a (x:a), transform (pure F x) = pure G x
 ; _ : forall a b (f : F (a -> b)) x, transform (ap f x) = ap (transform f) (transform x)
 }.Record IdiomaticTransformation (F G:Applicative) := idiomaticTransformation 
 { transform :> forall a, F a -> G a
 ; _ : forall a (x:a), transform (pure F x) = pure G x
 ; _ : forall a b (f : F (a -> b)) x, transform (ap f x) = ap (transform f) (transform x)
 }.Record IdiomaticTransformation (F G:Applicative) := idiomaticTransformation 
 { transform :> forall a, F a -> G a
 ; _ : forall a (x:a), transform (pure F x) = pure G x
 ; _ : forall a b (f : F (a -> b)) x, transform (ap f x) = ap (transform f) (transform x)
 }.

Lemma extract_ap i a b (f : KleeneStore i i (a -> b)) (x : KleeneStore i i a) : extract (KSap f x) = extract f (extract x).