Almost prove correctness
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
		
							parent
							
								
									82027ecd04
								
							
						
					
					
						commit
						3d2a507f2f
					
				| @ -15,7 +15,7 @@ open import Data.Sum using (inj₁; inj₂) | |||||||
| open import Data.List using (List; _∷_; []; foldr; foldl; cartesianProduct; cartesianProductWith) | open import Data.List using (List; _∷_; []; foldr; foldl; cartesianProduct; cartesianProductWith) | ||||||
| open import Data.List.Membership.Propositional as MemProp using () renaming (_∈_ to _∈ˡ_) | open import Data.List.Membership.Propositional as MemProp using () renaming (_∈_ to _∈ˡ_) | ||||||
| open import Data.List.Relation.Unary.Any as Any using () | open import Data.List.Relation.Unary.Any as Any using () | ||||||
| open import Relation.Binary.PropositionalEquality using (_≡_; refl; sym; trans; subst) | open import Relation.Binary.PropositionalEquality using (_≡_; refl; cong; sym; trans; subst) | ||||||
| open import Relation.Nullary using (¬_; Dec; yes; no) | open import Relation.Nullary using (¬_; Dec; yes; no) | ||||||
| open import Data.Unit using (⊤) | open import Data.Unit using (⊤) | ||||||
| open import Function using (_∘_; flip) | open import Function using (_∘_; flip) | ||||||
| @ -73,6 +73,7 @@ module WithProg (prog : Program) where | |||||||
|         using () |         using () | ||||||
|         renaming |         renaming | ||||||
|             ( isFiniteHeightLattice to isFiniteHeightLatticeᵛ |             ( isFiniteHeightLattice to isFiniteHeightLatticeᵛ | ||||||
|  |             ; ⊥-contains-bottoms to ⊥ᵛ-contains-bottoms | ||||||
|             ) |             ) | ||||||
| 
 | 
 | ||||||
|     ≈ᵛ-dec = ≈ˡ-dec⇒≈ᵛ-dec ≈ˡ-dec |     ≈ᵛ-dec = ≈ˡ-dec⇒≈ᵛ-dec ≈ˡ-dec | ||||||
| @ -254,6 +255,8 @@ module WithProg (prog : Program) where | |||||||
|             ⟦_⟧ᵛ : VariableValues → Env → Set |             ⟦_⟧ᵛ : VariableValues → Env → Set | ||||||
|             ⟦_⟧ᵛ vs ρ = ∀ {k l} → (k , l) ∈ᵛ vs → ∀ {v} → (k , v) Language.∈ ρ → ⟦ l ⟧ˡ v |             ⟦_⟧ᵛ vs ρ = ∀ {k l} → (k , l) ∈ᵛ vs → ∀ {v} → (k , v) Language.∈ ρ → ⟦ l ⟧ˡ v | ||||||
| 
 | 
 | ||||||
|  |             ⟦⊥ᵛ⟧ᵛ∅ : ⟦ ⊥ᵛ ⟧ᵛ [] | ||||||
|  |             ⟦⊥ᵛ⟧ᵛ∅ _ () | ||||||
| 
 | 
 | ||||||
|             ⟦⟧ᵛ-respects-≈ᵛ : ∀ {vs₁ vs₂ : VariableValues} → vs₁ ≈ᵛ vs₂ → ⟦ vs₁ ⟧ᵛ ⇒ ⟦ vs₂ ⟧ᵛ |             ⟦⟧ᵛ-respects-≈ᵛ : ∀ {vs₁ vs₂ : VariableValues} → vs₁ ≈ᵛ vs₂ → ⟦ vs₁ ⟧ᵛ ⇒ ⟦ vs₂ ⟧ᵛ | ||||||
|             ⟦⟧ᵛ-respects-≈ᵛ {m₁ , _} {m₂ , _} |             ⟦⟧ᵛ-respects-≈ᵛ {m₁ , _} {m₂ , _} | ||||||
| @ -352,3 +355,14 @@ module WithProg (prog : Program) where | |||||||
|                             ⟦⟧ᵛ-foldr ⟦result-s₁⟧ρ s₁∈incomingStates |                             ⟦⟧ᵛ-foldr ⟦result-s₁⟧ρ s₁∈incomingStates | ||||||
|                     in |                     in | ||||||
|                         walkTrace ⟦joinForKey-s⟧ρ tr |                         walkTrace ⟦joinForKey-s⟧ρ tr | ||||||
|  | 
 | ||||||
|  |                 postulate initialState-pred-∅ : incoming initialState ≡ [] | ||||||
|  | 
 | ||||||
|  |                 joinForKey-initialState-⊥ᵛ : joinForKey initialState result ≡ ⊥ᵛ | ||||||
|  |                 joinForKey-initialState-⊥ᵛ = cong (λ ins → foldr _⊔ᵛ_ ⊥ᵛ (result [ ins ])) initialState-pred-∅ | ||||||
|  | 
 | ||||||
|  |                 ⟦joinAll-initialState⟧ᵛ∅ : ⟦ joinForKey initialState result ⟧ᵛ [] | ||||||
|  |                 ⟦joinAll-initialState⟧ᵛ∅ = subst (λ vs → ⟦ vs ⟧ᵛ []) (sym joinForKey-initialState-⊥ᵛ) ⟦⊥ᵛ⟧ᵛ∅ | ||||||
|  | 
 | ||||||
|  |                 analyze-correct : ∀ {ρ : Env} → [] , rootStmt ⇒ˢ ρ → ⟦ variablesAt finalState result ⟧ᵛ ρ | ||||||
|  |                 analyze-correct {ρ} ∅,s⇒ρ = walkTrace {initialState} {finalState} {[]} {ρ} ⟦joinAll-initialState⟧ᵛ∅ (trace ∅,s⇒ρ) | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ open import Data.Fin.Properties as FinProp using (suc-injective) | |||||||
| open import Data.List as List using (List; []; _∷_) | open import Data.List as List using (List; []; _∷_) | ||||||
| open import Data.List.Membership.Propositional as ListMem using () | open import Data.List.Membership.Propositional as ListMem using () | ||||||
| open import Data.List.Membership.Propositional.Properties as ListMemProp using (∈-filter⁺) | open import Data.List.Membership.Propositional.Properties as ListMemProp using (∈-filter⁺) | ||||||
|  | open import Data.List.Relation.Unary.Any as RelAny using () | ||||||
| open import Data.Nat using (ℕ; suc) | open import Data.Nat using (ℕ; suc) | ||||||
| open import Data.Product using (_,_; Σ; proj₁; proj₂) | open import Data.Product using (_,_; Σ; proj₁; proj₂) | ||||||
| open import Data.Product.Properties as ProdProp using () | open import Data.Product.Properties as ProdProp using () | ||||||
| @ -42,6 +43,11 @@ record Program : Set where | |||||||
|     finalState : State |     finalState : State | ||||||
|     finalState = proj₁ (wrap-output (buildCfg rootStmt)) |     finalState = proj₁ (wrap-output (buildCfg rootStmt)) | ||||||
| 
 | 
 | ||||||
|  |     trace : ∀ {ρ : Env} → [] , rootStmt ⇒ˢ ρ → Trace {graph} initialState finalState [] ρ | ||||||
|  |     trace {ρ} ∅,s⇒ρ | ||||||
|  |         with MkEndToEndTrace idx₁ (RelAny.here refl) idx₂ (RelAny.here refl) tr | ||||||
|  |              ← EndToEndTrace-wrap (buildCfg-sufficient ∅,s⇒ρ) = tr | ||||||
|  | 
 | ||||||
|     private |     private | ||||||
|         vars-Set : StringSet |         vars-Set : StringSet | ||||||
|         vars-Set = Stmt-vars rootStmt |         vars-Set = Stmt-vars rootStmt | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user