proposition: Lemma get_method_R: forall n s1 s2 k, RState _ _ R s1 s2 -> let (v1', s1') := get_method _ n s1 k in let (v2', s2') := get_method _ n s2 k in R v1' v2' /\ RState _ _ R s1' s2'.
proof: Proof. Proof using. intros. unfold get_method. split. unfold RState in H. open_conjs. specialize (H k). open_conjs. assumption. unfold RState. simpl. unfold RState in H. open_conjs. split_all. assumption. assumption. assumption. specialize (H k). open_conjs. rewrite H2. rewrite H3. rewrite H4. reflexivity. Qed.
imports: Coq(FunctionalExtensionality List Bool) Coq(Arith Arith.Peano_dec Arith.Compare_dec) Coq(Program.Basics) Chapar(Predefs extralib KVStore)