Factor some code out into Utils
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent
f5457d8841
commit
c199e9616f
@ -124,28 +124,6 @@ buildCfg (s₁ then s₂) = buildCfg s₁ ↦ buildCfg s₂
|
|||||||
buildCfg (if _ then s₁ else s₂) = buildCfg s₁ ∙ buildCfg s₂
|
buildCfg (if _ then s₁ else s₂) = buildCfg s₁ ∙ buildCfg s₂
|
||||||
buildCfg (while _ repeat s) = loop (buildCfg s)
|
buildCfg (while _ repeat s) = loop (buildCfg s)
|
||||||
|
|
||||||
private
|
|
||||||
z≢sf : ∀ {n : ℕ} (f : Fin n) → ¬ (zero ≡ suc f)
|
|
||||||
z≢sf f ()
|
|
||||||
|
|
||||||
z≢mapsfs : ∀ {n : ℕ} (fs : List (Fin n)) → All (λ sf → ¬ zero ≡ sf) (List.map suc fs)
|
|
||||||
z≢mapsfs [] = []
|
|
||||||
z≢mapsfs (f ∷ fs') = z≢sf f ∷ z≢mapsfs fs'
|
|
||||||
|
|
||||||
finValues : ∀ (n : ℕ) → Σ (List (Fin n)) Unique
|
|
||||||
finValues 0 = ([] , Utils.empty)
|
|
||||||
finValues (suc n') =
|
|
||||||
let
|
|
||||||
(inds' , unids') = finValues n'
|
|
||||||
in
|
|
||||||
( zero ∷ List.map suc inds'
|
|
||||||
, push (z≢mapsfs inds') (Unique-map suc suc-injective unids')
|
|
||||||
)
|
|
||||||
|
|
||||||
finValues-complete : ∀ (n : ℕ) (f : Fin n) → f ListMem.∈ (proj₁ (finValues n))
|
|
||||||
finValues-complete (suc n') zero = RelAny.here refl
|
|
||||||
finValues-complete (suc n') (suc f') = RelAny.there (x∈xs⇒fx∈fxs suc (finValues-complete n' f'))
|
|
||||||
|
|
||||||
module _ (g : Graph) where
|
module _ (g : Graph) where
|
||||||
open import Data.Product.Properties as ProdProp using ()
|
open import Data.Product.Properties as ProdProp using ()
|
||||||
private _≟_ = ProdProp.≡-dec (FinProp._≟_ {Graph.size g})
|
private _≟_ = ProdProp.≡-dec (FinProp._≟_ {Graph.size g})
|
||||||
@ -154,13 +132,13 @@ module _ (g : Graph) where
|
|||||||
open import Data.List.Membership.DecPropositional (_≟_) using (_∈?_)
|
open import Data.List.Membership.DecPropositional (_≟_) using (_∈?_)
|
||||||
|
|
||||||
indices : List (Graph.Index g)
|
indices : List (Graph.Index g)
|
||||||
indices = proj₁ (finValues (Graph.size g))
|
indices = proj₁ (fins (Graph.size g))
|
||||||
|
|
||||||
indices-complete : ∀ (idx : (Graph.Index g)) → idx ListMem.∈ indices
|
indices-complete : ∀ (idx : (Graph.Index g)) → idx ListMem.∈ indices
|
||||||
indices-complete = finValues-complete (Graph.size g)
|
indices-complete = fins-complete (Graph.size g)
|
||||||
|
|
||||||
indices-Unique : Unique indices
|
indices-Unique : Unique indices
|
||||||
indices-Unique = proj₂ (finValues (Graph.size g))
|
indices-Unique = proj₂ (fins (Graph.size g))
|
||||||
|
|
||||||
predecessors : (Graph.Index g) → List (Graph.Index g)
|
predecessors : (Graph.Index g) → List (Graph.Index g)
|
||||||
predecessors idx = List.filter (λ idx' → (idx' , idx) ∈? (Graph.edges g)) indices
|
predecessors idx = List.filter (λ idx' → (idx' , idx) ∈? (Graph.edges g)) indices
|
||||||
|
|||||||
25
Utils.agda
25
Utils.agda
@ -1,8 +1,10 @@
|
|||||||
module Utils where
|
module Utils where
|
||||||
|
|
||||||
open import Agda.Primitive using () renaming (_⊔_ to _⊔ℓ_)
|
open import Agda.Primitive using () renaming (_⊔_ to _⊔ℓ_)
|
||||||
open import Data.Product as Prod using (_×_)
|
open import Data.Product as Prod using (Σ; _×_; _,_; proj₁; proj₂)
|
||||||
open import Data.Nat using (ℕ; suc)
|
open import Data.Nat using (ℕ; suc)
|
||||||
|
open import Data.Fin as Fin using (Fin; suc; zero)
|
||||||
|
open import Data.Fin.Properties using (suc-injective)
|
||||||
open import Data.List using (List; cartesianProduct; []; _∷_; _++_; foldr; filter) renaming (map to mapˡ)
|
open import Data.List using (List; cartesianProduct; []; _∷_; _++_; foldr; filter) renaming (map to mapˡ)
|
||||||
open import Data.List.Membership.Propositional using (_∈_)
|
open import Data.List.Membership.Propositional using (_∈_)
|
||||||
open import Data.List.Membership.Propositional.Properties as ListMemProp using ()
|
open import Data.List.Membership.Propositional.Properties as ListMemProp using ()
|
||||||
@ -106,3 +108,24 @@ _∧_ P Q a = P a × Q a
|
|||||||
|
|
||||||
it : ∀ {a} {A : Set a} {{_ : A}} → A
|
it : ∀ {a} {A : Set a} {{_ : A}} → A
|
||||||
it {{x}} = x
|
it {{x}} = x
|
||||||
|
|
||||||
|
z≢sf : ∀ {n : ℕ} (f : Fin n) → ¬ (Fin.zero ≡ Fin.suc f)
|
||||||
|
z≢sf f ()
|
||||||
|
|
||||||
|
z≢mapsfs : ∀ {n : ℕ} (fs : List (Fin n)) → All (λ sf → ¬ zero ≡ sf) (mapˡ suc fs)
|
||||||
|
z≢mapsfs [] = []
|
||||||
|
z≢mapsfs (f ∷ fs') = z≢sf f ∷ z≢mapsfs fs'
|
||||||
|
|
||||||
|
fins : ∀ (n : ℕ) → Σ (List (Fin n)) Unique
|
||||||
|
fins 0 = ([] , empty)
|
||||||
|
fins (suc n') =
|
||||||
|
let
|
||||||
|
(inds' , unids') = fins n'
|
||||||
|
in
|
||||||
|
( zero ∷ mapˡ suc inds'
|
||||||
|
, push (z≢mapsfs inds') (Unique-map suc suc-injective unids')
|
||||||
|
)
|
||||||
|
|
||||||
|
fins-complete : ∀ (n : ℕ) (f : Fin n) → f ∈ (proj₁ (fins n))
|
||||||
|
fins-complete (suc n') zero = here refl
|
||||||
|
fins-complete (suc n') (suc f') = there (x∈xs⇒fx∈fxs suc (fins-complete n' f'))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user