Prove that variables in a program all come from the program's code
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
@@ -553,11 +553,18 @@ open ImplInsert _⊔₂_ using
|
||||
; union-preserves-∈₂
|
||||
; union-preserves-∉
|
||||
; union-preserves-∈k₁
|
||||
; union-preserves-∈k₂
|
||||
)
|
||||
|
||||
⊔-combines : ∀ {k : A} {v₁ v₂ : B} {m₁ m₂ : Map} → (k , v₁) ∈ m₁ → (k , v₂) ∈ m₂ → (k , v₁ ⊔₂ v₂) ∈ (m₁ ⊔ m₂)
|
||||
⊔-combines {k} {v₁} {v₂} {kvs₁ , u₁} {kvs₂ , u₂} k,v₁∈m₁ k,v₂∈m₂ = union-combines u₁ u₂ k,v₁∈m₁ k,v₂∈m₂
|
||||
|
||||
⊔-preserves-∈k₁ : ∀ {k : A} → {m₁ m₂ : Map} → k ∈k m₁ → k ∈k (m₁ ⊔ m₂)
|
||||
⊔-preserves-∈k₁ {k} {(l₁ , _)} {(l₂ , _)} k∈km₁ = union-preserves-∈k₁ {l₁ = l₁} {l₂ = l₂} k∈km₁
|
||||
|
||||
⊔-preserves-∈k₂ : ∀ {k : A} → {m₁ m₂ : Map} → k ∈k m₂ → k ∈k (m₁ ⊔ m₂)
|
||||
⊔-preserves-∈k₂ {k} {(l₁ , _)} {(l₂ , _)} k∈km₁ = union-preserves-∈k₂ {l₁ = l₁} {l₂ = l₂} k∈km₁
|
||||
|
||||
open ImplInsert _⊓₂_ using
|
||||
( restrict-needs-both
|
||||
; updates
|
||||
|
||||
@@ -6,18 +6,28 @@ open import Agda.Primitive using (Level) renaming (_⊔_ to _⊔ℓ_)
|
||||
module Lattice.MapSet {a : Level} (A : Set a) (≡-dec-A : Decidable (_≡_ {a} {A})) where
|
||||
|
||||
open import Data.List using (List; map)
|
||||
open import Data.Product using (proj₁)
|
||||
open import Data.Product using (_,_; proj₁)
|
||||
open import Function using (_∘_)
|
||||
|
||||
open import Lattice.Unit using (⊤; tt) renaming (_≈_ to _≈₂_; _⊔_ to _⊔₂_; _⊓_ to _⊓₂_; isLattice to ⊤-isLattice)
|
||||
import Lattice.Map
|
||||
|
||||
private module UnitMap = Lattice.Map A ⊤ _≈₂_ _⊔₂_ _⊓₂_ ≡-dec-A ⊤-isLattice
|
||||
open UnitMap using (Map)
|
||||
open UnitMap using
|
||||
( _⊆_; _≈_; ≈-equiv; _⊔_; _⊓_; empty
|
||||
; isUnionSemilattice; isIntersectSemilattice; isLattice; lattice
|
||||
) public
|
||||
open UnitMap
|
||||
using (Map; Expr; ⟦_⟧)
|
||||
renaming
|
||||
( Expr-Provenance to Expr-Provenanceᵐ
|
||||
)
|
||||
open UnitMap
|
||||
using
|
||||
( _⊆_; _≈_; ≈-equiv; _⊔_; _⊓_; _∪_ ; _∩_ ; `_; empty; forget
|
||||
; isUnionSemilattice; isIntersectSemilattice; isLattice; lattice
|
||||
; Provenance
|
||||
; ⊔-preserves-∈k₁
|
||||
; ⊔-preserves-∈k₂
|
||||
)
|
||||
renaming (_∈k_ to _∈_) public
|
||||
open Provenance public
|
||||
|
||||
MapSet : Set a
|
||||
MapSet = Map
|
||||
@@ -27,3 +37,9 @@ to-List = map proj₁ ∘ proj₁
|
||||
|
||||
insert : A → MapSet → MapSet
|
||||
insert k = UnitMap.insert k tt
|
||||
|
||||
singleton : A → MapSet
|
||||
singleton k = UnitMap.insert k tt empty
|
||||
|
||||
Expr-Provenance : ∀ (k : A) (e : Expr) → k ∈ ⟦ e ⟧ → Provenance k tt e
|
||||
Expr-Provenance k e k∈e = let (tt , (prov , _)) = Expr-Provenanceᵐ k e k∈e in prov
|
||||
|
||||
Reference in New Issue
Block a user