12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- module Span where
- open import Prelude
- open import Star
- open import Modal
- data SpanView {A : Set}{R : Rel A}(p : {a b : A} -> R a b -> Bool) :
- EdgePred (Star R) where
- oneFalse : {a b c d : A}(xs : Star R a b)(pxs : All (\x -> IsTrue (p x)) xs)
- (x : R b c)(¬px : IsFalse (p x))(ys : Star R c d) ->
- SpanView p (xs ++ x • ys)
- allTrue : {a b : A}{xs : Star R a b}(ts : All (\x -> IsTrue (p x)) xs) ->
- SpanView p xs
- span : {A : Set}{R : Rel A}(p : {a b : A} -> R a b -> Bool){a b : A}
- (xs : Star R a b) -> SpanView p xs
- span p ε = allTrue ε
- span p (x • xs) with inspect (p x)
- span p (x • xs) | itsFalse ¬px = oneFalse ε ε x ¬px xs
- span p (x • xs) | itsTrue px with span p xs
- span p (x • .(xs ++ y • ys)) | itsTrue px
- | oneFalse xs pxs y ¬py ys =
- oneFalse (x • xs) (check px • pxs) y ¬py ys
- span p (x • xs) | itsTrue px | allTrue pxs =
- allTrue (check px • pxs)
- _│_ : {A : Set}(R : Rel A)(P : EdgePred R) -> Rel A
- (R │ P) a b = Σ (R a b) P
- forget : {A : Set}{R : Rel A}{P : EdgePred R} -> Star (R │ P) =[ id ]=> Star R
- forget = map id fst
- data SpanView' {A : Set}{R : Rel A}(p : {a b : A} -> R a b -> Bool) :
- EdgePred (Star R) where
- oneFalse' : {a b c d : A}(xs : Star (R │ \{a b} x -> IsTrue (p x)) a b)
- (x : R b c)(¬px : IsFalse (p x))(ys : Star R c d) ->
- SpanView' p (forget xs ++ x • ys)
- allTrue' : {a b : A}(xs : Star (R │ \{a b} x -> IsTrue (p x)) a b) ->
- SpanView' p (forget xs)
- span' : {A : Set}{R : Rel A}(p : {a b : A} -> R a b -> Bool){a b : A}
- (xs : Star R a b) -> SpanView' p xs
- span' p ε = allTrue' ε
- span' p (x • xs) with inspect (p x)
- span' p (x • xs) | itsFalse ¬px = oneFalse' ε x ¬px xs
- span' p (x • xs) | itsTrue px with span' p xs
- span' p (x • .(forget xs ++ y • ys)) | itsTrue px
- | oneFalse' xs y ¬py ys = oneFalse' ((x ,, px) • xs) y ¬py ys
- span' p (x • .(forget xs)) | itsTrue px
- | allTrue' xs = allTrue' ((x ,, px) • xs)
- -- Can't seem to define it as 'map Some.a (\x -> (_ ,, uncheck x))'
- all│ : {A : Set}{R : Rel A}{P : EdgePred R}{a b : A}{xs : Star R a b} ->
- All P xs -> Star (R │ P) a b
- all│ (check p • pxs) = (_ ,, p) • all│ pxs
- all│ ε = ε
|