Wrap generated graphs to ensure entry and exit nodes have no extra edges
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent
69d1ecebae
commit
734e82ff6d
|
@ -55,16 +55,16 @@ record Program : Set where
|
|||
rootStmt : Stmt
|
||||
|
||||
graph : Graph
|
||||
graph = buildCfg rootStmt
|
||||
graph = wrap (buildCfg rootStmt)
|
||||
|
||||
State : Set
|
||||
State = Graph.Index graph
|
||||
|
||||
initialState : State
|
||||
initialState = proj₁ (buildCfg-input rootStmt)
|
||||
initialState = proj₁ (wrap-input (buildCfg rootStmt))
|
||||
|
||||
finalState : State
|
||||
finalState = proj₁ (buildCfg-output rootStmt)
|
||||
finalState = proj₁ (wrap-output (buildCfg rootStmt))
|
||||
|
||||
private
|
||||
vars-Set : StringSet
|
||||
|
|
|
@ -112,6 +112,9 @@ singleton bss = record
|
|||
; outputs = zero ∷ []
|
||||
}
|
||||
|
||||
wrap : Graph → Graph
|
||||
wrap g = singleton [] ↦ g ↦ singleton []
|
||||
|
||||
buildCfg : Stmt → Graph
|
||||
buildCfg ⟨ bs₁ ⟩ = singleton (bs₁ ∷ [])
|
||||
buildCfg (s₁ then s₂) = buildCfg s₁ ↦ buildCfg s₂
|
||||
|
|
|
@ -18,22 +18,11 @@ open import Relation.Binary.PropositionalEquality as Eq using (_≡_; refl; sym)
|
|||
|
||||
open import Utils using (x∈xs⇒fx∈fxs; ∈-cartesianProduct; concat-∈)
|
||||
|
||||
wrap-input : ∀ (g : Graph) → Σ (Graph.Index (wrap g)) (λ idx → Graph.inputs (wrap g) ≡ idx ∷ [])
|
||||
wrap-input g = (_ , refl)
|
||||
|
||||
buildCfg-input : ∀ (s : Stmt) → let g = buildCfg s in Σ (Graph.Index g) (λ idx → Graph.inputs g ≡ idx ∷ [])
|
||||
buildCfg-input ⟨ bs₁ ⟩ = (zero , refl)
|
||||
buildCfg-input (s₁ then s₂)
|
||||
with (idx , p) ← buildCfg-input s₁ rewrite p = (_ , refl)
|
||||
buildCfg-input (if _ then s₁ else s₂) = (zero , refl)
|
||||
buildCfg-input (while _ repeat s)
|
||||
with (idx , p) ← buildCfg-input s rewrite p = (_ , refl)
|
||||
|
||||
buildCfg-output : ∀ (s : Stmt) → let g = buildCfg s in Σ (Graph.Index g) (λ idx → Graph.outputs g ≡ idx ∷ [])
|
||||
buildCfg-output ⟨ bs₁ ⟩ = (zero , refl)
|
||||
buildCfg-output (s₁ then s₂)
|
||||
with (idx , p) ← buildCfg-output s₂ rewrite p = (_ , refl)
|
||||
buildCfg-output (if _ then s₁ else s₂) = (_ , refl)
|
||||
buildCfg-output (while _ repeat s)
|
||||
with (idx , p) ← buildCfg-output s rewrite p = (_ , refl)
|
||||
wrap-output : ∀ (g : Graph) → Σ (Graph.Index (wrap g)) (λ idx → Graph.outputs (wrap g) ≡ idx ∷ [])
|
||||
wrap-output g = (_ , refl)
|
||||
|
||||
Trace-∙ˡ : ∀ {g₁ g₂ : Graph} {idx₁ idx₂ : Graph.Index g₁} {ρ₁ ρ₂ : Env} →
|
||||
Trace {g₁} idx₁ idx₂ ρ₁ ρ₂ →
|
||||
|
@ -224,6 +213,10 @@ EndToEndTrace-singleton ρ₁⇒ρ₂ = record
|
|||
EndToEndTrace-singleton[] : ∀ (ρ : Env) → EndToEndTrace {singleton []} ρ ρ
|
||||
EndToEndTrace-singleton[] env = EndToEndTrace-singleton []
|
||||
|
||||
EndToEndTrace-wrap : ∀ {g : Graph} {ρ₁ ρ₂ : Env} →
|
||||
EndToEndTrace {g} ρ₁ ρ₂ → EndToEndTrace {wrap g} ρ₁ ρ₂
|
||||
EndToEndTrace-wrap {g} {ρ₁} {ρ₂} etr = EndToEndTrace-singleton[] ρ₁ ++ etr ++ EndToEndTrace-singleton[] ρ₂
|
||||
|
||||
buildCfg-sufficient : ∀ {s : Stmt} {ρ₁ ρ₂ : Env} → ρ₁ , s ⇒ˢ ρ₂ →
|
||||
EndToEndTrace {buildCfg s} ρ₁ ρ₂
|
||||
buildCfg-sufficient (⇒ˢ-⟨⟩ ρ₁ ρ₂ bs ρ₁,bs⇒ρ₂) =
|
||||
|
|
Loading…
Reference in New Issue
Block a user