1 subgoal Σ : gFunctors heapG0 : heapG Σ one_shotG0 : one_shotG Σ Φ : val → iProp Σ N : namespace l : loc γ : gname ============================ "HN" : inv N (one_shot_inv γ l) --------------------------------------□ "Hl" : l ↦ InjLV #() _ : own γ (Pending (1 / 2)) --------------------------------------∗ one_shot_inv γ l ∗ (⌜InjLV #() = InjLV #()⌝ ∨ (∃ n : Z, ⌜InjLV #() = InjRV #n⌝ ∗ own γ (Shot n))) 1 subgoal Σ : gFunctors heapG0 : heapG Σ one_shotG0 : one_shotG Σ Φ : val → iProp Σ N : namespace l : loc γ : gname m, m' : Z ============================ "HN" : inv N (one_shot_inv γ l) "Hγ'" : own γ (Shot m) --------------------------------------□ "Hl" : l ↦ InjRV #m' "Hγ" : own γ (Shot m') --------------------------------------∗ |={⊤ ∖ ↑N}=> ▷ one_shot_inv γ l ∗ WP let: "y'" := InjRV #m' in match: InjRV #m with InjL <> => #() | InjR <> => assert: InjRV #m = "y'" end {{ _, True }}