diff --git a/theories/heap_lang/lifting.v b/theories/heap_lang/lifting.v index 6d6e5762ea9fb20ad53e2ca20c9be694db6cc315..b8d1570db4a4abde760d2ecf5f85ba71e5bd67b3 100644 --- a/theories/heap_lang/lifting.v +++ b/theories/heap_lang/lifting.v @@ -82,49 +82,49 @@ Qed. Local Ltac solve_exec_safe := intros; subst; do 3 eexists; econstructor; eauto. Local Ltac solve_exec_puredet := simpl; intros; by inv_head_step. -Local Ltac solve_pureexec := +Local Ltac solve_pure_exec := repeat lazymatch goal with | H: IntoVal ?e _ |- _ => rewrite -(of_to_val e _ into_val); clear H | H: AsRec _ _ _ _ |- _ => rewrite H; clear H end; - apply det_head_step_pureexec; [ solve_exec_safe | solve_exec_puredet ]. + apply det_head_step_pure_exec; [ solve_exec_safe | solve_exec_puredet ]. Global Instance pure_rec f x (erec e1 e2 : expr) (v2 : val) `{!IntoVal e2 v2, AsRec e1 f x erec, Closed (f :b: x :b: []) erec} : PureExec True (App e1 e2) (subst' x e2 (subst' f e1 erec)). -Proof. solve_pureexec. Qed. +Proof. solve_pure_exec. Qed. Global Instance pure_unop op e v v' `{!IntoVal e v} : PureExec (un_op_eval op v = Some v') (UnOp op e) (of_val v'). -Proof. solve_pureexec. Qed. +Proof. solve_pure_exec. Qed. Global Instance pure_binop op e1 e2 v1 v2 v' `{!IntoVal e1 v1, !IntoVal e2 v2} : PureExec (bin_op_eval op v1 v2 = Some v') (BinOp op e1 e2) (of_val v'). -Proof. solve_pureexec. Qed. +Proof. solve_pure_exec. Qed. Global Instance pure_if_true e1 e2 : PureExec True (If (Lit (LitBool true)) e1 e2) e1. -Proof. solve_pureexec. Qed. +Proof. solve_pure_exec. Qed. Global Instance pure_if_false e1 e2 : PureExec True (If (Lit (LitBool false)) e1 e2) e2. -Proof. solve_pureexec. Qed. +Proof. solve_pure_exec. Qed. Global Instance pure_fst e1 e2 v1 v2 `{!IntoVal e1 v1, !IntoVal e2 v2} : PureExec True (Fst (Pair e1 e2)) e1. -Proof. solve_pureexec. Qed. +Proof. solve_pure_exec. Qed. Global Instance pure_snd e1 e2 v1 v2 `{!IntoVal e1 v1, !IntoVal e2 v2} : PureExec True (Snd (Pair e1 e2)) e2. -Proof. solve_pureexec. Qed. +Proof. solve_pure_exec. Qed. Global Instance pure_case_inl e0 v e1 e2 `{!IntoVal e0 v} : PureExec True (Case (InjL e0) e1 e2) (App e1 e0). -Proof. solve_pureexec. Qed. +Proof. solve_pure_exec. Qed. Global Instance pure_case_inr e0 v e1 e2 `{!IntoVal e0 v} : PureExec True (Case (InjR e0) e1 e2) (App e2 e0). -Proof. solve_pureexec. Qed. +Proof. solve_pure_exec. Qed. (** Heap *) Lemma wp_alloc E e v : diff --git a/theories/program_logic/ectx_language.v b/theories/program_logic/ectx_language.v index 78bc50820f7b523b32860df32635ed716b8c50bf..65da78ed1f05df4ba649a543d4b2d4b6a7910087 100644 --- a/theories/program_logic/ectx_language.v +++ b/theories/program_logic/ectx_language.v @@ -151,7 +151,7 @@ Section ectx_language. econstructor; eauto. Qed. - Lemma det_head_step_pureexec (P : Prop) e1 e2 : + Lemma det_head_step_pure_exec (P : Prop) e1 e2 : (∀ σ, P → head_reducible e1 σ) → (∀ σ1 e2' σ2 efs, P → head_step e1 σ1 e2' σ2 efs → σ1 = σ2 ∧ e2=e2' ∧ efs = []) → diff --git a/theories/program_logic/language.v b/theories/program_logic/language.v index b884a308520fdeb1c136cd3ae83283ea540fcdd6..88c82f8eb78b43b8d7b951ff497cf450c0b69722 100644 --- a/theories/program_logic/language.v +++ b/theories/program_logic/language.v @@ -101,7 +101,7 @@ Section language. P → prim_step e1 σ1 e2' σ2 efs → σ1 = σ2 ∧ e2 = e2' ∧ efs = []; }. - Lemma hoist_pred_pureexec (P : Prop) (e1 e2 : expr Λ) : + Lemma hoist_pred_pure_exec (P : Prop) (e1 e2 : expr Λ) : (P → PureExec True e1 e2) → PureExec P e1 e2. Proof. intros HPE. split; intros; eapply HPE; eauto. Qed.