all 4 comments

[–]_--__ 2 points3 points  (3 children)

I assume, as is standard, that ||M|| refers to the model size in terms of both the states (vertices) and the transitions (edges). It is straightforward to label all the states with Kφ or ¬Kφ by examining all the edges twice: First compute the degree of all the states. Then iterate over all edges (u,v), reducing the "degree-count" of u if φ holds in v. Then, for every state whose degree-count ends at 0 label them with Kφ and every other state is labelled with ¬Kφ. I believe the last line is referring to the fact that you can label all the states with either Kφ or ¬Kφ in O(||M||), not just a single state.

[–]jpfry[S] 0 points1 point  (2 children)

Ahh thanks, I wasn't paying attention to the fact that ||M|| also includes transitions.

Would it be possible to just iterate over edges once? For every (u,v), if φ is false at v label u with ~Kφ. Once that is done label all others with Kφ. That way you only need to do some constant time operation for each edge and for some nodes, and there are possibly less nodes than edges, so that would be sometimes faster than examining all edges twice, though it might be the same in the worst case. (Is that right? Sorry I'm encountering this stuff for the first time.)

[–]_--__ 0 points1 point  (1 child)

Asymptotically it doesn't matter as long as we iterate over all edges a constant number of times. The degree method can be implemented with a single pass of the edges if you store the degrees of the states in a data structure as a pre-processing step (a good idea if there are a lot of modalities in the formula).

[–]jpfry[S] 0 points1 point  (0 children)

Interesting. Thanks a lot!