Parameterize FiniteMap by its keys right away
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
		
							parent
							
								
									cf824dc744
								
							
						
					
					
						commit
						ffe9d193d9
					
				@ -10,7 +10,6 @@ module Analysis.Forward.Lattices
 | 
			
		||||
 | 
			
		||||
open import Data.String using (String) renaming (_≟_ to _≟ˢ_)
 | 
			
		||||
open import Data.Product using (proj₁; proj₂; _,_)
 | 
			
		||||
open import Data.Unit using (tt)
 | 
			
		||||
open import Data.Sum using (inj₁; inj₂)
 | 
			
		||||
open import Data.List using (List; _∷_; []; foldr)
 | 
			
		||||
open import Data.List.Membership.Propositional using () renaming (_∈_ to _∈ˡ_)
 | 
			
		||||
@ -38,7 +37,7 @@ instance
 | 
			
		||||
-- with keys strings. Use a bundle to avoid explicitly specifying operators.
 | 
			
		||||
-- It's helpful to export these via 'public' since consumers tend to
 | 
			
		||||
-- use various variable lattice operations.
 | 
			
		||||
module VariableValuesFiniteMap = Lattice.FiniteMap.WithKeys String L tt vars
 | 
			
		||||
module VariableValuesFiniteMap = Lattice.FiniteMap String L vars
 | 
			
		||||
open VariableValuesFiniteMap
 | 
			
		||||
    using ()
 | 
			
		||||
    renaming
 | 
			
		||||
@ -65,13 +64,13 @@ open IsLattice isLatticeᵛ
 | 
			
		||||
        ; ⊔-idemp to ⊔ᵛ-idemp
 | 
			
		||||
        )
 | 
			
		||||
    public
 | 
			
		||||
open Lattice.FiniteMap.IterProdIsomorphism String L _
 | 
			
		||||
open Lattice.FiniteMap.IterProdIsomorphism String L vars
 | 
			
		||||
    using ()
 | 
			
		||||
    renaming
 | 
			
		||||
        ( Provenance-union to Provenance-unionᵐ
 | 
			
		||||
        )
 | 
			
		||||
    public
 | 
			
		||||
open Lattice.FiniteMap.IterProdIsomorphism.WithUniqueKeysAndFixedHeight String L _ vars-Unique
 | 
			
		||||
open Lattice.FiniteMap.IterProdIsomorphism.WithUniqueKeysAndFixedHeight String L vars vars-Unique
 | 
			
		||||
    using ()
 | 
			
		||||
    renaming
 | 
			
		||||
        ( isFiniteHeightLattice to isFiniteHeightLatticeᵛ
 | 
			
		||||
@ -83,7 +82,7 @@ open Lattice.FiniteMap.IterProdIsomorphism.WithUniqueKeysAndFixedHeight String L
 | 
			
		||||
⊥ᵛ = Chain.Height.⊥ fixedHeightᵛ
 | 
			
		||||
 | 
			
		||||
-- Finally, the map we care about is (state -> (variables -> value)). Bring that in.
 | 
			
		||||
module StateVariablesFiniteMap = Lattice.FiniteMap.WithKeys State VariableValues tt states
 | 
			
		||||
module StateVariablesFiniteMap = Lattice.FiniteMap State VariableValues states
 | 
			
		||||
open StateVariablesFiniteMap
 | 
			
		||||
    using (_[_]; []-∈; m₁≼m₂⇒m₁[ks]≼m₂[ks]; m₁≈m₂⇒k∈m₁⇒k∈km₂⇒v₁≈v₂)
 | 
			
		||||
    renaming
 | 
			
		||||
@ -98,7 +97,7 @@ open StateVariablesFiniteMap
 | 
			
		||||
        ; m₁≼m₂⇒m₁[k]≼m₂[k] to m₁≼m₂⇒m₁[k]ᵐ≼m₂[k]ᵐ
 | 
			
		||||
        )
 | 
			
		||||
    public
 | 
			
		||||
open Lattice.FiniteMap.IterProdIsomorphism.WithUniqueKeysAndFixedHeight State VariableValues _ states-Unique
 | 
			
		||||
open Lattice.FiniteMap.IterProdIsomorphism.WithUniqueKeysAndFixedHeight State VariableValues states states-Unique
 | 
			
		||||
    using ()
 | 
			
		||||
    renaming
 | 
			
		||||
        ( isFiniteHeightLattice to isFiniteHeightLatticeᵐ
 | 
			
		||||
 | 
			
		||||
@ -9,10 +9,10 @@ module Lattice.FiniteMap (A : Set) (B : Set)
 | 
			
		||||
    {_≈₂_ : B → B → Set}
 | 
			
		||||
    {_⊔₂_ : B → B → B} {_⊓₂_ : B → B → B}
 | 
			
		||||
    {{≡-Decidable-A : IsDecidable {_} {A} _≡_}}
 | 
			
		||||
    {{lB : IsLattice B _≈₂_ _⊔₂_ _⊓₂_}} (dummy : ⊤) where
 | 
			
		||||
    {{lB : IsLattice B _≈₂_ _⊔₂_ _⊓₂_}} (ks : List A) where
 | 
			
		||||
 | 
			
		||||
open IsLattice lB using () renaming (_≼_ to _≼₂_)
 | 
			
		||||
open import Lattice.Map A B dummy as Map
 | 
			
		||||
open import Lattice.Map A B _ as Map
 | 
			
		||||
    using
 | 
			
		||||
        ( Map
 | 
			
		||||
        ; ⊔-equal-keys
 | 
			
		||||
@ -74,7 +74,7 @@ open import Showable using (Showable; show)
 | 
			
		||||
open import Isomorphism using (IsInverseˡ; IsInverseʳ)
 | 
			
		||||
open import Chain using (Height)
 | 
			
		||||
 | 
			
		||||
module WithKeys (ks : List A) where
 | 
			
		||||
private module WithKeys (ks : List A) where
 | 
			
		||||
    FiniteMap : Set
 | 
			
		||||
    FiniteMap = Σ Map (λ m → Map.keys m ≡ ks)
 | 
			
		||||
 | 
			
		||||
@ -253,9 +253,8 @@ module WithKeys (ks : List A) where
 | 
			
		||||
    ...   | yes k∈km₁ | no k∉km₂ = ⊥-elim (∈k-exclusive fm₁ fm₂ (k∈km₁ , k∉km₂))
 | 
			
		||||
    ...   | no k∉km₁ | yes k∈km₂ = ⊥-elim (∈k-exclusive fm₂ fm₁ (k∈km₂ , k∉km₁))
 | 
			
		||||
 | 
			
		||||
open WithKeys public
 | 
			
		||||
 | 
			
		||||
module IterProdIsomorphism where
 | 
			
		||||
    open WithKeys
 | 
			
		||||
    open import Data.Unit using (tt)
 | 
			
		||||
    open import Lattice.Unit using ()
 | 
			
		||||
        renaming
 | 
			
		||||
@ -267,7 +266,7 @@ module IterProdIsomorphism where
 | 
			
		||||
            ; ≈-equiv to ≈ᵘ-equiv
 | 
			
		||||
            ; fixedHeight to fixedHeightᵘ
 | 
			
		||||
            )
 | 
			
		||||
    open import Lattice.IterProd B ⊤ dummy
 | 
			
		||||
    open import Lattice.IterProd B ⊤ _
 | 
			
		||||
        as IP
 | 
			
		||||
        using (IterProd)
 | 
			
		||||
    open IsLattice lB using ()
 | 
			
		||||
@ -631,3 +630,5 @@ module IterProdIsomorphism where
 | 
			
		||||
        ⊥-contains-bottoms {k} {v} k,v∈⊥
 | 
			
		||||
            rewrite IP.⊥-built {length ks} {{fhB = fixedHeightᵘ}} =
 | 
			
		||||
            to-build uks k v k,v∈⊥
 | 
			
		||||
 | 
			
		||||
open WithKeys ks public
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user