aneris_examples.ccddb.examples.message_passing.proof_adequacy
From iris.algebra Require Import excl.
From iris.base_logic.lib Require Import invariants.
From iris.proofmode Require Import tactics.
From aneris.aneris_lang Require Import
lang network notation tactics proofmode.
From aneris.aneris_lang.program_logic Require Import aneris_adequacy.
From iris_string_ident Require Import ltac2_string_ident.
From aneris.aneris_lang.lib.serialization Require Import serialization.
From aneris_examples.ccddb.spec Require Import spec.
From aneris.aneris_lang.lib Require Import util.
From aneris_examples.ccddb Require Import spec_util.
From aneris_examples.ccddb.examples Require Import lib.
From aneris_examples.ccddb.examples.message_passing Require Import prog.
From aneris_examples.ccddb.examples.message_passing Require Import
proof_resources proof_of_node0 proof_of_node1 proof_of_main.
Import Network.
Definition init_state :=
{|
state_heaps := {[ "system" := ∅ ]};
state_sockets := {[ "system" := ∅ ]};
state_ports_in_use :=
<["0.0.0.0" := ∅ ]> $ <["0.0.0.1" := ∅ ]> $ ∅;
state_ms := ∅;
|}.
Definition fixed_dom : gset socket_address := {[ z0; z1 ]}.
From aneris_examples.ccddb.instantiation Require Import proof.
Theorem adequacy : aneris_adequate main "system" init_state (λ _, True).
Proof.
set (Σ := #[anerisΣ; mpΣ; DBΣ]).
eapply (@adequacy Σ _ ips fixed_dom); try done; last first.
{ set_solver. }
{ intros i. rewrite /ips !elem_of_union !elem_of_singleton.
intros [|]; subst; simpl; set_solver. }
{ rewrite /ips /= !dom_insert_L dom_empty_L right_id_L //. }
iIntros (Hdg) "".
iPoseProof (main_spec fixed_dom) as "Hmain"; [set_solver|set_solver|].
iMod "Hmain" as (dbr) "Hmain".
iModIntro.
iExists (λ _, DB_socket_proto).
iIntros "Hfx Hproto Hips".
iDestruct (big_sepS_delete _ _ z0 with "Hproto") as "[Hz0 Hproto]";
first set_solver.
iDestruct (big_sepS_delete _ _ z1 with "Hproto") as "[Hz1 _]";
first set_solver.
iApply ("Hmain" with "[$Hz0 $Hz1 //] Hfx Hips").
Qed.
From iris.base_logic.lib Require Import invariants.
From iris.proofmode Require Import tactics.
From aneris.aneris_lang Require Import
lang network notation tactics proofmode.
From aneris.aneris_lang.program_logic Require Import aneris_adequacy.
From iris_string_ident Require Import ltac2_string_ident.
From aneris.aneris_lang.lib.serialization Require Import serialization.
From aneris_examples.ccddb.spec Require Import spec.
From aneris.aneris_lang.lib Require Import util.
From aneris_examples.ccddb Require Import spec_util.
From aneris_examples.ccddb.examples Require Import lib.
From aneris_examples.ccddb.examples.message_passing Require Import prog.
From aneris_examples.ccddb.examples.message_passing Require Import
proof_resources proof_of_node0 proof_of_node1 proof_of_main.
Import Network.
Definition init_state :=
{|
state_heaps := {[ "system" := ∅ ]};
state_sockets := {[ "system" := ∅ ]};
state_ports_in_use :=
<["0.0.0.0" := ∅ ]> $ <["0.0.0.1" := ∅ ]> $ ∅;
state_ms := ∅;
|}.
Definition fixed_dom : gset socket_address := {[ z0; z1 ]}.
From aneris_examples.ccddb.instantiation Require Import proof.
Theorem adequacy : aneris_adequate main "system" init_state (λ _, True).
Proof.
set (Σ := #[anerisΣ; mpΣ; DBΣ]).
eapply (@adequacy Σ _ ips fixed_dom); try done; last first.
{ set_solver. }
{ intros i. rewrite /ips !elem_of_union !elem_of_singleton.
intros [|]; subst; simpl; set_solver. }
{ rewrite /ips /= !dom_insert_L dom_empty_L right_id_L //. }
iIntros (Hdg) "".
iPoseProof (main_spec fixed_dom) as "Hmain"; [set_solver|set_solver|].
iMod "Hmain" as (dbr) "Hmain".
iModIntro.
iExists (λ _, DB_socket_proto).
iIntros "Hfx Hproto Hips".
iDestruct (big_sepS_delete _ _ z0 with "Hproto") as "[Hz0 Hproto]";
first set_solver.
iDestruct (big_sepS_delete _ _ z1 with "Hproto") as "[Hz1 _]";
first set_solver.
iApply ("Hmain" with "[$Hz0 $Hz1 //] Hfx Hips").
Qed.