diff --git a/barrier/heap_lang.v b/barrier/heap_lang.v index a23dbaca9dbd47e6ff5a457cc73b9c7316cb22f4..bb17bb2d36dd3105f978968a245b49f68bc2fe31 100644 --- a/barrier/heap_lang.v +++ b/barrier/heap_lang.v @@ -30,8 +30,8 @@ Inductive expr := | App (e1 e2 : expr) (* Embedding of Coq values and operations *) | Lit {T : Type} (t: T) (* arbitrary Coq values become literals *) -| Op1 {T1 To : Type} (f : T1 -> To) (e1 : expr) -| Op2 {T1 T2 To : Type} (f : T1 -> T2 -> To) (e1 : expr) (e2 : expr) +| Op1 {T1 To : Type} (f : T1 → To) (e1 : expr) +| Op2 {T1 T2 To : Type} (f : T1 → T2 → To) (e1 : expr) (e2 : expr) (* Products *) | Pair (e1 e2 : expr) | Fst (e : expr) @@ -106,7 +106,7 @@ Qed. Section e2e. (* To get local tactics. *) Lemma e2e e v: - e2v e = Some v -> v2e v = e. + e2v e = Some v → v2e v = e. Proof. Ltac case0 := case =><-; simpl; eauto using f_equal, f_equal2. Ltac case1 e1 := destruct (e2v e1); simpl; [|discriminate]; @@ -121,7 +121,7 @@ Qed. End e2e. Lemma v2e_inj v1 v2: - v2e v1 = v2e v2 -> v1 = v2. + v2e v1 = v2e v2 → v1 = v2. Proof. revert v2; induction v1=>v2; destruct v2; simpl; try discriminate; first [case_depeq1 | case]; eauto using f_equal, f_equal2. @@ -215,27 +215,27 @@ Proof. Qed. Lemma fill_inj_r K e1 e2 : - fill K e1 = fill K e2 -> e1 = e2. + fill K e1 = fill K e2 → e1 = e2. Proof. revert e1 e2; induction K => el er /=; (move=><-; reflexivity) || (case => /IHK <-; reflexivity). Qed. Lemma fill_value K e v': - e2v (fill K e) = Some v' -> is_Some (e2v e). + e2v (fill K e) = Some v' → is_Some (e2v e). Proof. revert v'; induction K => v' /=; try discriminate; try destruct (e2v (fill K e)); rewrite ?v2v; eauto. Qed. Lemma fill_not_value e K : - e2v e = None -> e2v (fill K e) = None. + e2v e = None → e2v (fill K e) = None. Proof. intros Hnval. induction K =>/=; by rewrite ?v2v /= ?IHK /=. Qed. Lemma fill_not_value2 e K v : - e2v e = None -> e2v (fill K e) = Some v -> False. + e2v e = None → e2v (fill K e) = Some v -> False. Proof. intros Hnval Hval. erewrite fill_not_value in Hval by assumption. discriminate. Qed. @@ -309,10 +309,10 @@ Section step_by_value. sub-context of K' - in other words, e also contains the reducible expression *) Lemma step_by_value {K K' e e' σ} : - fill K e = fill K' e' -> - reducible e' σ -> - e2v e = None -> - exists K'', K' = comp_ctx K K''. + fill K e = fill K' e' → + reducible e' σ → + e2v e = None → + ∃ K'', K' = comp_ctx K K''. Proof. Ltac bad_fill := intros; exfalso; subst; (eapply values_stuck; eassumption) || @@ -375,8 +375,8 @@ Definition atomic (e: expr) := match e with | Alloc e => is_Some (e2v e) | Load e => is_Some (e2v e) - | Store e1 e2 => is_Some (e2v e1) /\ is_Some (e2v e2) - | Cas e0 e1 e2 => is_Some (e2v e0) /\ is_Some (e2v e1) /\ is_Some (e2v e2) + | Store e1 e2 => is_Some (e2v e1) ∧ is_Some (e2v e2) + | Cas e0 e1 e2 => is_Some (e2v e0) ∧ is_Some (e2v e1) ∧ is_Some (e2v e2) | _ => False end. @@ -387,8 +387,8 @@ Proof. Qed. Lemma atomic_step e1 σ1 e2 σ2 ef : - atomic e1 -> - prim_step e1 σ1 e2 σ2 ef -> + atomic e1 → + prim_step e1 σ1 e2 σ2 ef → is_Some (e2v e2). Proof. destruct e1; simpl; intros Hatomic Hstep; inversion Hstep; @@ -397,8 +397,8 @@ Qed. (* Atomics must not contain evaluation positions. *) Lemma atomic_fill e K : - atomic (fill K e) -> - e2v e = None -> + atomic (fill K e) → + e2v e = None → K = EmptyCtx. Proof. destruct K; simpl; first reflexivity; unfold is_Some; intros Hatomic Hnval; @@ -412,8 +412,8 @@ Qed. Section Language. Definition ectx_step e1 σ1 e2 σ2 (ef: option expr) := - exists K e1' e2', e1 = fill K e1' /\ e2 = fill K e2' /\ - prim_step e1' σ1 e2' σ2 ef. + ∃ K e1' e2', e1 = fill K e1' ∧ e2 = fill K e2' ∧ + prim_step e1' σ1 e2' σ2 ef. Global Program Instance heap_lang : Language expr value state := {| of_val := v2e;