Skip to content
Snippets Groups Projects
Commit 1d9c6035 authored by Robbert Krebbers's avatar Robbert Krebbers
Browse files

Merge branch 'robbert/new_contractive' into 'master'

Alternative fixes for iris!886 that do not rely on backwards compatibility layer

See merge request !29
parents 6a80db3a cf7f147f
No related branches found
No related tags found
1 merge request!29Alternative fixes for iris!886 that do not rely on backwards compatibility layer
Pipeline #78741 failed
...@@ -8,7 +8,7 @@ bug-reports: "https://gitlab.mpi-sws.org/iris/actris/issues" ...@@ -8,7 +8,7 @@ bug-reports: "https://gitlab.mpi-sws.org/iris/actris/issues"
dev-repo: "git+https://gitlab.mpi-sws.org/iris/actris.git" dev-repo: "git+https://gitlab.mpi-sws.org/iris/actris.git"
depends: [ depends: [
"coq-iris-heap-lang" { (= "dev.2022-11-29.1.c44ce4c9") | (= "dev") } "coq-iris-heap-lang" { (= "dev.2023-03-07.0.16ec64da") | (= "dev") }
] ]
build: [make "-j%{jobs}%"] build: [make "-j%{jobs}%"]
......
...@@ -179,7 +179,7 @@ Global Instance proto_map_aux_contractive {V} ...@@ -179,7 +179,7 @@ Global Instance proto_map_aux_contractive {V}
Proof. Proof.
intros n rec1 rec2 Hrec p. simpl. apply proto_elim_ne=> // a m1 m2 Hm. intros n rec1 rec2 Hrec p. simpl. apply proto_elim_ne=> // a m1 m2 Hm.
f_equiv=> v p' /=. do 2 f_equiv; [done|]. f_equiv=> v p' /=. do 2 f_equiv; [done|].
apply Next_contractive; destruct n as [|n]=> //=. apply Next_contractive; by f_contractive_core n' Hn'.
Qed. Qed.
Definition proto_map_aux_2 {V} Definition proto_map_aux_2 {V}
...@@ -211,8 +211,7 @@ Proof. ...@@ -211,8 +211,7 @@ Proof.
induction (lt_wf n) as [n _ IH]=> induction (lt_wf n) as [n _ IH]=>
PROPn Hcn PROPn' Hcn' PROP Hc PROP' Hc' gn g p. PROPn Hcn PROPn' Hcn' PROP Hc PROP' Hc' gn g p.
etrans; [apply equiv_dist, (fixpoint_unfold (proto_map_aux_2 gn g))|]. etrans; [apply equiv_dist, (fixpoint_unfold (proto_map_aux_2 gn g))|].
apply proto_map_aux_contractive; destruct n as [|n]; [done|]; simpl. apply proto_map_aux_contractive; constructor=> n' ?. symmetry. apply: IH. lia.
symmetry. apply: IH. lia.
Qed. Qed.
Lemma proto_map_end {V} `{!Cofe PROPn, !Cofe PROPn', !Cofe PROP, !Cofe PROP'} Lemma proto_map_end {V} `{!Cofe PROPn, !Cofe PROPn', !Cofe PROP, !Cofe PROP'}
(gn : PROPn' -n> PROPn) (g : PROP -n> PROP') : (gn : PROPn' -n> PROPn) (g : PROP -n> PROP') :
...@@ -240,7 +239,7 @@ Proof. ...@@ -240,7 +239,7 @@ Proof.
destruct (proto_case p) as [->|(a & m & ->)]; [by rewrite !proto_map_end|]. destruct (proto_case p) as [->|(a & m & ->)]; [by rewrite !proto_map_end|].
rewrite !proto_map_message /=. rewrite !proto_map_message /=.
apply proto_message_ne=> // v p' /=. f_equiv; [done|]. f_equiv. apply proto_message_ne=> // v p' /=. f_equiv; [done|]. f_equiv.
apply Next_contractive; destruct n as [|n]=> //=; auto using dist_S with lia. apply Next_contractive; f_contractive_core n' Hn'; eauto using dist_le with lia.
Qed. Qed.
Lemma proto_map_ext {V} `{!Cofe PROPn, !Cofe PROPn', !Cofe PROP, !Cofe PROP'} Lemma proto_map_ext {V} `{!Cofe PROPn, !Cofe PROPn', !Cofe PROP, !Cofe PROP'}
(gn1 gn2 : PROPn' -n> PROPn) (g1 g2 : PROP -n> PROP') p : (gn1 gn2 : PROPn' -n> PROPn) (g1 g2 : PROP -n> PROP') p :
...@@ -256,7 +255,7 @@ Proof. ...@@ -256,7 +255,7 @@ Proof.
induction (lt_wf n) as [n _ IH]=> PROPn ? PROP ? p /=. induction (lt_wf n) as [n _ IH]=> PROPn ? PROP ? p /=.
destruct (proto_case p) as [->|(a & m & ->)]; [by rewrite !proto_map_end|]. destruct (proto_case p) as [->|(a & m & ->)]; [by rewrite !proto_map_end|].
rewrite !proto_map_message /=. apply proto_message_ne=> // v p' /=. f_equiv. rewrite !proto_map_message /=. apply proto_message_ne=> // v p' /=. f_equiv.
apply Next_contractive; destruct n as [|n]=> //=; auto. apply Next_contractive; f_contractive_core n' Hn'; auto.
Qed. Qed.
Lemma proto_map_compose {V} Lemma proto_map_compose {V}
`{Hcn:!Cofe PROPn, Hcn':!Cofe PROPn', Hcn'':!Cofe PROPn'', `{Hcn:!Cofe PROPn, Hcn':!Cofe PROPn', Hcn'':!Cofe PROPn'',
...@@ -271,7 +270,7 @@ Proof. ...@@ -271,7 +270,7 @@ Proof.
PROP ? PROP' ? PROP'' ? gn1 gn2 g1 g2 p /=. PROP ? PROP' ? PROP'' ? gn1 gn2 g1 g2 p /=.
destruct (proto_case p) as [->|(a & c & ->)]; [by rewrite !proto_map_end|]. destruct (proto_case p) as [->|(a & c & ->)]; [by rewrite !proto_map_end|].
rewrite !proto_map_message /=. apply proto_message_ne=> // v p' /=. rewrite !proto_map_message /=. apply proto_message_ne=> // v p' /=.
do 3 f_equiv. apply Next_contractive; destruct n as [|n]=> //=; auto. do 3 f_equiv. apply Next_contractive; f_contractive_core n' Hn'; simpl; auto.
Qed. Qed.
Program Definition protoOF (V : Type) (Fn F : oFunctor) Program Definition protoOF (V : Type) (Fn F : oFunctor)
...@@ -301,7 +300,8 @@ Global Instance protoOF_contractive (V : Type) (Fn F : oFunctor) ...@@ -301,7 +300,8 @@ Global Instance protoOF_contractive (V : Type) (Fn F : oFunctor)
oFunctorContractive Fn oFunctorContractive F oFunctorContractive Fn oFunctorContractive F
oFunctorContractive (protoOF V Fn F). oFunctorContractive (protoOF V Fn F).
Proof. Proof.
intros ?? A1 ? A2 ? B1 ? B2 ? n f g Hfg p; simpl in *. intros HFn HF A1 ? A2 ? B1 ? B2 ? n f g Hfg p; simpl in *.
apply proto_map_ne=> //= y; apply proto_map_ne=> y //=.
[destruct n; [|destruct Hfg]; by apply oFunctor_map_contractive..]. + apply HFn. f_contractive_core n' Hn'. f_equiv; apply Hfg.
+ apply HF. by f_contractive_core n' Hn'.
Qed. Qed.
...@@ -72,15 +72,15 @@ Section cofe_solver_2. ...@@ -72,15 +72,15 @@ Section cofe_solver_2.
rewrite -{2}(ofe_iso_12 T_result y). f_equiv. rewrite -{2}(ofe_iso_12 T_result y). f_equiv.
rewrite -(oFunctor_map_id (F _) (ofe_iso_2 T_result y)) rewrite -(oFunctor_map_id (F _) (ofe_iso_2 T_result y))
-!oFunctor_map_compose. -!oFunctor_map_compose.
f_equiv; apply Fcontr; destruct n as [|n]; simpl; [done|]. f_equiv; apply Fcontr; f_contractive_core n' Hn'; split=> x /=;
split => x /=; rewrite ofe_iso_21 -{2}(oFunctor_map_id (F _) x) rewrite ofe_iso_21 -{2}(oFunctor_map_id (F _) x)
-!oFunctor_map_compose; do 2 f_equiv; split=> z /=; auto. -!oFunctor_map_compose; do 2 f_equiv; split=> z /=; auto.
- intros y. apply equiv_dist=> n. revert An Hcn A Hc y. - intros y. apply equiv_dist=> n. revert An Hcn A Hc y.
induction (lt_wf n) as [n _ IH]; intros An ? A ? y. induction (lt_wf n) as [n _ IH]; intros An ? A ? y.
rewrite T_iso_fun_unfold_1 T_iso_fun_unfold_2 /= ofe_iso_21. rewrite T_iso_fun_unfold_1 T_iso_fun_unfold_2 /= ofe_iso_21.
rewrite -(oFunctor_map_id (F _) y) -!oFunctor_map_compose. rewrite -(oFunctor_map_id (F _) y) -!oFunctor_map_compose.
f_equiv; apply Fcontr; destruct n as [|n]; simpl; [done|]. f_equiv; apply Fcontr; f_contractive_core n' Hn'; split=> x /=;
split => x /=; rewrite -{2}(ofe_iso_12 T_result x); f_equiv; rewrite -{2}(ofe_iso_12 T_result x); f_equiv;
rewrite -{2}(oFunctor_map_id (F _) (ofe_iso_2 T_result x)) rewrite -{2}(oFunctor_map_id (F _) (ofe_iso_2 T_result x))
-!oFunctor_map_compose; -!oFunctor_map_compose;
do 2 f_equiv; split=> z /=; auto. do 2 f_equiv; split=> z /=; auto.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment