diff --git a/iris/algebra/ofe.v b/iris/algebra/ofe.v index df78c64fe5be742685e05a5dc1dd4fe6858f8d46..b2c909d267e01fdd93dea89d7fcdebcc3ab4890b 100644 --- a/iris/algebra/ofe.v +++ b/iris/algebra/ofe.v @@ -261,7 +261,9 @@ Ltac f_contractive := | |- @dist_later ?A _ ?n ?x ?y => destruct n as [|n]; [exact I|change (@dist A _ n x y)] end; - try simple apply reflexivity. + (* Only try reflexivity if the terms are syntactically equal. This avoids + very expensive failing unification. *) + try match goal with |- _ ?x ?x => simple apply reflexivity end. Ltac solve_contractive := solve_proper_core ltac:(fun _ => first [f_contractive | f_equiv]). diff --git a/iris/program_logic/weakestpre.v b/iris/program_logic/weakestpre.v index b918c293379f1c1bef06f481c0807cef1aa162eb..733294c4adf74f8ac2171302b9051060071b1e44 100644 --- a/iris/program_logic/weakestpre.v +++ b/iris/program_logic/weakestpre.v @@ -100,9 +100,6 @@ Global Instance wp_ne s E e n : Proof. revert e. induction (lt_wf n) as [n _ IH]=> e Φ Ψ HΦ. rewrite !wp_unfold /wp_pre /=. - (* FIXME: figure out a way to properly automate this proof *) - (* FIXME: reflexivity, as being called many times by f_equiv and f_contractive - is very slow here *) do 24 (f_contractive || f_equiv). (* FIXME : simplify this proof once we have a good definition and a proper instance for step_fupdN. *) diff --git a/iris_heap_lang/proofmode.v b/iris_heap_lang/proofmode.v index 2d78d4319c941f329510af9964d614001fd25e5a..9d44d43ee5565ca11851c1eac9a820a3859a70b0 100644 --- a/iris_heap_lang/proofmode.v +++ b/iris_heap_lang/proofmode.v @@ -473,7 +473,7 @@ Lemma tac_twp_cmpxchg_fail Δ s E i K l q v v1 v2 Φ : Proof. rewrite envs_entails_eq. intros. rewrite -twp_bind. eapply wand_apply; first exact: twp_cmpxchg_fail. - rewrite envs_lookup_split //=. by do 2 f_equiv. + rewrite envs_lookup_split //=. simpl. by do 2 f_equiv. Qed. Lemma tac_wp_cmpxchg_suc Δ Δ' s E i K l v v1 v2 Φ :