Commit d6811f2c authored by Christian Müller's avatar Christian Müller
Browse files

add owl, transformers, tests

parent 7c277482
......@@ -24,6 +24,9 @@ build
.settings/
/bin/
# Idea
.idea/
# Resulting ltl formulas
results/*.ltl
results/*.ppltl
......
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="EclipseModuleManager">
<libelement value="jar://$MODULE_DIR$/lib/com.microsoft.z3.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.3.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/com.typesafe.scala-logging/scala-logging_2.12/bundles/scala-logging_2.12-3.5.0.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.12.3.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.7.21.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.7.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/ch.qos.logback/logback-core/jars/logback-core-1.1.7.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/org.scalactic/scalactic_2.12/bundles/scalactic_2.12-3.0.4.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/org.scalatest/scalatest_2.12/bundles/scalatest_2.12-3.0.4.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/org.scala-lang.modules/scala-xml_2.12/bundles/scala-xml_2.12-1.0.5.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.12/bundles/scala-parser-combinators_2.12-1.0.5.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/org.scala-graph/graph-core_2.12/jars/graph-core_2.12-1.12.1.jar!/" />
<libelement value="jar://$USER_HOME$/.ivy2/cache/org.scala-graph/graph-dot_2.12/jars/graph-dot_2.12-1.12.1.jar!/" />
<conelement value="org.scala-ide.sdt.launching.SCALA_CONTAINER" />
<src_description expected_position="0">
<src_folder value="file://$MODULE_DIR$/src/main/scala" expected_position="0" />
<src_folder value="file://$MODULE_DIR$/src/test/scala" expected_position="1" />
</src_description>
</component>
<component name="NewModuleRootManager">
<output url="file://$MODULE_DIR$/bin" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/scala" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/scala" isTestSource="false" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library name="com.microsoft.z3.jar">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/com.microsoft.z3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="scala-library-2.12.3.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-library/docs/scala-library-2.12.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-library/srcs/scala-library-2.12.3-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="scala-logging_2.12-3.5.0.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/com.typesafe.scala-logging/scala-logging_2.12/bundles/scala-logging_2.12-3.5.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/com.typesafe.scala-logging/scala-logging_2.12/docs/scala-logging_2.12-3.5.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/com.typesafe.scala-logging/scala-logging_2.12/srcs/scala-logging_2.12-3.5.0-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="scala-reflect-2.12.3.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.12.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-reflect/docs/scala-reflect-2.12.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-reflect/srcs/scala-reflect-2.12.3-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="slf4j-api-1.7.21.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.7.21.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/org.slf4j/slf4j-api/docs/slf4j-api-1.7.21-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.slf4j/slf4j-api/srcs/slf4j-api-1.7.21-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="logback-classic-1.1.7.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/ch.qos.logback/logback-classic/docs/logback-classic-1.1.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/ch.qos.logback/logback-classic/srcs/logback-classic-1.1.7-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="logback-core-1.1.7.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/ch.qos.logback/logback-core/jars/logback-core-1.1.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/ch.qos.logback/logback-core/docs/logback-core-1.1.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/ch.qos.logback/logback-core/srcs/logback-core-1.1.7-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="scalactic_2.12-3.0.4.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scalactic/scalactic_2.12/bundles/scalactic_2.12-3.0.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scalactic/scalactic_2.12/docs/scalactic_2.12-3.0.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scalactic/scalactic_2.12/srcs/scalactic_2.12-3.0.4-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="scalatest_2.12-3.0.4.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scalatest/scalatest_2.12/bundles/scalatest_2.12-3.0.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scalatest/scalatest_2.12/docs/scalatest_2.12-3.0.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scalatest/scalatest_2.12/srcs/scalatest_2.12-3.0.4-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="scala-xml_2.12-1.0.5.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang.modules/scala-xml_2.12/bundles/scala-xml_2.12-1.0.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang.modules/scala-xml_2.12/docs/scala-xml_2.12-1.0.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang.modules/scala-xml_2.12/srcs/scala-xml_2.12-1.0.5-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="scala-parser-combinators_2.12-1.0.5.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.12/bundles/scala-parser-combinators_2.12-1.0.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.12/docs/scala-parser-combinators_2.12-1.0.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.12/srcs/scala-parser-combinators_2.12-1.0.5-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="graph-core_2.12-1.12.1.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-graph/graph-core_2.12/jars/graph-core_2.12-1.12.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-graph/graph-core_2.12/docs/graph-core_2.12-1.12.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-graph/graph-core_2.12/srcs/graph-core_2.12-1.12.1-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="graph-dot_2.12-1.12.1.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-graph/graph-dot_2.12/jars/graph-dot_2.12-1.12.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-graph/graph-dot_2.12/docs/graph-dot_2.12-1.12.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/org.scala-graph/graph-dot_2.12/srcs/graph-dot_2.12-1.12.1-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="inheritedJdk" />
<orderEntry type="library" name="org.scala-ide.sdt.launching.SCALA_CONTAINER" level="application" />
<orderEntry type="library" name="scala-sdk-2.12.4" level="application" />
<orderEntry type="library" name="owl-1.2.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="animal-sniffer-annotations-1.14" level="project" />
</component>
</module>
\ No newline at end of file
(!(u) & !(bf0) & !(bf1) & !(bf2) & !(bf3) & !(b0) & !(b1) & !(b2) & !(b3) & !(b4) & !(b5) & !(b6) & !(b7) & !(b8) & !(b9) & !(b10) & !(b11) & !(b12) & !(b13) & !(b14) & !(b15) & !(up) & G((u <-> !(Xu))) & G(((u -> ((bf0 <-> X(bf0)) & (bf1 <-> X(bf1)) & (bf2 <-> X(bf2)) & (bf3 <-> X(bf3)))) & ((!(bf0) & !(bf1) & !(bf2) & !(bf3)) -> X(((!(bf0) & !(bf1) & !(bf2) & !(bf3)) | (bf0 & !(bf1) & !(bf2) & !(bf3))))) & ((bf0 & !(bf1) & !(bf2) & !(bf3)) -> X(((!(bf0) & !(bf1) & !(bf2) & !(bf3)) | (bf0 & !(bf1) & !(bf2) & !(bf3)) | (!(bf0) & bf1 & !(bf2) & !(bf3))))) & ((!(bf0) & bf1 & !(bf2) & !(bf3)) -> X(((bf0 & !(bf1) & !(bf2) & !(bf3)) | (!(bf0) & bf1 & !(bf2) & !(bf3)) | (bf0 & bf1 & !(bf2) & !(bf3))))) & ((bf0 & bf1 & !(bf2) & !(bf3)) -> X(((!(bf0) & bf1 & !(bf2) & !(bf3)) | (bf0 & bf1 & !(bf2) & !(bf3)) | (!(bf0) & !(bf1) & bf2 & !(bf3))))) & ((!(bf0) & !(bf1) & bf2 & !(bf3)) -> X(((bf0 & bf1 & !(bf2) & !(bf3)) | (!(bf0) & !(bf1) & bf2 & !(bf3)) | (bf0 & !(bf1) & bf2 & !(bf3))))) & ((bf0 & !(bf1) & bf2 & !(bf3)) -> X(((!(bf0) & !(bf1) & bf2 & !(bf3)) | (bf0 & !(bf1) & bf2 & !(bf3)) | (!(bf0) & bf1 & bf2 & !(bf3))))) & ((!(bf0) & bf1 & bf2 & !(bf3)) -> X(((bf0 & !(bf1) & bf2 & !(bf3)) | (!(bf0) & bf1 & bf2 & !(bf3)) | (bf0 & bf1 & bf2 & !(bf3))))) & ((bf0 & bf1 & bf2 & !(bf3)) -> X(((!(bf0) & bf1 & bf2 & !(bf3)) | (bf0 & bf1 & bf2 & !(bf3)) | (!(bf0) & !(bf1) & !(bf2) & bf3)))) & ((!(bf0) & !(bf1) & !(bf2) & bf3) -> X(((bf0 & bf1 & bf2 & !(bf3)) | (!(bf0) & !(bf1) & !(bf2) & bf3) | (bf0 & !(bf1) & !(bf2) & bf3)))) & ((bf0 & !(bf1) & !(bf2) & bf3) -> X(((!(bf0) & !(bf1) & !(bf2) & bf3) | (bf0 & !(bf1) & !(bf2) & bf3) | (!(bf0) & bf1 & !(bf2) & bf3)))) & ((!(bf0) & bf1 & !(bf2) & bf3) -> X(((bf0 & !(bf1) & !(bf2) & bf3) | (!(bf0) & bf1 & !(bf2) & bf3) | (bf0 & bf1 & !(bf2) & bf3)))) & ((bf0 & bf1 & !(bf2) & bf3) -> X(((!(bf0) & bf1 & !(bf2) & bf3) | (bf0 & bf1 & !(bf2) & bf3) | (!(bf0) & !(bf1) & bf2 & bf3)))) & ((!(bf0) & !(bf1) & bf2 & bf3) -> X(((bf0 & bf1 & !(bf2) & bf3) | (!(bf0) & !(bf1) & bf2 & bf3) | (bf0 & !(bf1) & bf2 & bf3)))) & ((bf0 & !(bf1) & bf2 & bf3) -> X(((!(bf0) & !(bf1) & bf2 & bf3) | (bf0 & !(bf1) & bf2 & bf3) | (!(bf0) & bf1 & bf2 & bf3)))) & ((!(bf0) & bf1 & bf2 & bf3) -> X(((bf0 & !(bf1) & bf2 & bf3) | (!(bf0) & bf1 & bf2 & bf3) | (bf0 & bf1 & bf2 & bf3)))) & ((bf0 & bf1 & bf2 & bf3) -> X(((!(bf0) & bf1 & bf2 & bf3) | (bf0 & bf1 & bf2 & bf3)))))) & G(((!(u) -> ((b0 <-> X(b0)) & (b1 <-> X(b1)) & (b2 <-> X(b2)) & (b3 <-> X(b3)) & (b4 <-> X(b4)) & (b5 <-> X(b5)) & (b6 <-> X(b6)) & (b7 <-> X(b7)) & (b8 <-> X(b8)) & (b9 <-> X(b9)) & (b10 <-> X(b10)) & (b11 <-> X(b11)) & (b12 <-> X(b12)) & (b13 <-> X(b13)) & (b14 <-> X(b14)) & (b15 <-> X(b15)))) & ((b0 & !((!(bf0) & !(bf1) & !(bf2) & !(bf3)))) -> X(b0)) & ((b1 & !((bf0 & !(bf1) & !(bf2) & !(bf3)))) -> X(b1)) & ((b2 & !((!(bf0) & bf1 & !(bf2) & !(bf3)))) -> X(b2)) & ((b3 & !((bf0 & bf1 & !(bf2) & !(bf3)))) -> X(b3)) & ((b4 & !((!(bf0) & !(bf1) & bf2 & !(bf3)))) -> X(b4)) & ((b5 & !((bf0 & !(bf1) & bf2 & !(bf3)))) -> X(b5)) & ((b6 & !((!(bf0) & bf1 & bf2 & !(bf3)))) -> X(b6)) & ((b7 & !((bf0 & bf1 & bf2 & !(bf3)))) -> X(b7)) & ((b8 & !((!(bf0) & !(bf1) & !(bf2) & bf3))) -> X(b8)) & ((b9 & !((bf0 & !(bf1) & !(bf2) & bf3))) -> X(b9)) & ((b10 & !((!(bf0) & bf1 & !(bf2) & bf3))) -> X(b10)) & ((b11 & !((bf0 & bf1 & !(bf2) & bf3))) -> X(b11)) & ((b12 & !((!(bf0) & !(bf1) & bf2 & bf3))) -> X(b12)) & ((b13 & !((bf0 & !(bf1) & bf2 & bf3))) -> X(b13)) & ((b14 & !((!(bf0) & bf1 & bf2 & bf3))) -> X(b14)) & ((b15 & !((bf0 & bf1 & bf2 & bf3))) -> X(b15)))) & G((((!(bf0) & !(bf1) & !(bf2) & !(bf3) & X((!(bf0) & !(bf1) & !(bf2) & !(bf3)))) -> (up <-> X(up))) & ((bf0 & !(bf1) & !(bf2) & !(bf3) & X((bf0 & !(bf1) & !(bf2) & !(bf3)))) -> (up <-> X(up))) & ((!(bf0) & bf1 & !(bf2) & !(bf3) & X((!(bf0) & bf1 & !(bf2) & !(bf3)))) -> (up <-> X(up))) & ((bf0 & bf1 & !(bf2) & !(bf3) & X((bf0 & bf1 & !(bf2) & !(bf3)))) -> (up <-> X(up))) & ((!(bf0) & !(bf1) & bf2 & !(bf3) & X((!(bf0) & !(bf1) & bf2 & !(bf3)))) -> (up <-> X(up))) & ((bf0 & !(bf1) & bf2 & !(bf3) & X((bf0 & !(bf1) & bf2 & !(bf3)))) -> (up <-> X(up))) & ((!(bf0) & bf1 & bf2 & !(bf3) & X((!(bf0) & bf1 & bf2 & !(bf3)))) -> (up <-> X(up))) & ((bf0 & bf1 & bf2 & !(bf3) & X((bf0 & bf1 & bf2 & !(bf3)))) -> (up <-> X(up))) & ((!(bf0) & !(bf1) & !(bf2) & bf3 & X((!(bf0) & !(bf1) & !(bf2) & bf3))) -> (up <-> X(up))) & ((bf0 & !(bf1) & !(bf2) & bf3 & X((bf0 & !(bf1) & !(bf2) & bf3))) -> (up <-> X(up))) & ((!(bf0) & bf1 & !(bf2) & bf3 & X((!(bf0) & bf1 & !(bf2) & bf3))) -> (up <-> X(up))) & ((bf0 & bf1 & !(bf2) & bf3 & X((bf0 & bf1 & !(bf2) & bf3))) -> (up <-> X(up))) & ((!(bf0) & !(bf1) & bf2 & bf3 & X((!(bf0) & !(bf1) & bf2 & bf3))) -> (up <-> X(up))) & ((bf0 & !(bf1) & bf2 & bf3 & X((bf0 & !(bf1) & bf2 & bf3))) -> (up <-> X(up))) & ((!(bf0) & bf1 & bf2 & bf3 & X((!(bf0) & bf1 & bf2 & bf3))) -> (up <-> X(up))) & ((bf0 & bf1 & bf2 & bf3 & X((bf0 & bf1 & bf2 & bf3))) -> (up <-> X(up))) & ((!(bf0) & !(bf1) & !(bf2) & !(bf3) & X((bf0 & !(bf1) & !(bf2) & !(bf3)))) -> up) & ((bf0 & !(bf1) & !(bf2) & !(bf3) & X((!(bf0) & bf1 & !(bf2) & !(bf3)))) -> up) & ((!(bf0) & bf1 & !(bf2) & !(bf3) & X((bf0 & bf1 & !(bf2) & !(bf3)))) -> up) & ((bf0 & bf1 & !(bf2) & !(bf3) & X((!(bf0) & !(bf1) & bf2 & !(bf3)))) -> up) & ((!(bf0) & !(bf1) & bf2 & !(bf3) & X((bf0 & !(bf1) & bf2 & !(bf3)))) -> up) & ((bf0 & !(bf1) & bf2 & !(bf3) & X((!(bf0) & bf1 & bf2 & !(bf3)))) -> up) & ((!(bf0) & bf1 & bf2 & !(bf3) & X((bf0 & bf1 & bf2 & !(bf3)))) -> up) & ((bf0 & bf1 & bf2 & !(bf3) & X((!(bf0) & !(bf1) & !(bf2) & bf3))) -> up) & ((!(bf0) & !(bf1) & !(bf2) & bf3 & X((bf0 & !(bf1) & !(bf2) & bf3))) -> up) & ((bf0 & !(bf1) & !(bf2) & bf3 & X((!(bf0) & bf1 & !(bf2) & bf3))) -> up) & ((!(bf0) & bf1 & !(bf2) & bf3 & X((bf0 & bf1 & !(bf2) & bf3))) -> up) & ((bf0 & bf1 & !(bf2) & bf3 & X((!(bf0) & !(bf1) & bf2 & bf3))) -> up) & ((!(bf0) & !(bf1) & bf2 & bf3 & X((bf0 & !(bf1) & bf2 & bf3))) -> up) & ((bf0 & !(bf1) & bf2 & bf3 & X((!(bf0) & bf1 & bf2 & bf3))) -> up) & ((!(bf0) & bf1 & bf2 & bf3 & X((bf0 & bf1 & bf2 & bf3))) -> up) & ((bf0 & !(bf1) & !(bf2) & !(bf3) & X((!(bf0) & !(bf1) & !(bf2) & !(bf3)))) -> !(up)) & ((!(bf0) & bf1 & !(bf2) & !(bf3) & X((bf0 & !(bf1) & !(bf2) & !(bf3)))) -> !(up)) & ((bf0 & bf1 & !(bf2) & !(bf3) & X((!(bf0) & bf1 & !(bf2) & !(bf3)))) -> !(up)) & ((!(bf0) & !(bf1) & bf2 & !(bf3) & X((bf0 & bf1 & !(bf2) & !(bf3)))) -> !(up)) & ((bf0 & !(bf1) & bf2 & !(bf3) & X((!(bf0) & !(bf1) & bf2 & !(bf3)))) -> !(up)) & ((!(bf0) & bf1 & bf2 & !(bf3) & X((bf0 & !(bf1) & bf2 & !(bf3)))) -> !(up)) & ((bf0 & bf1 & bf2 & !(bf3) & X((!(bf0) & bf1 & bf2 & !(bf3)))) -> !(up)) & ((!(bf0) & !(bf1) & !(bf2) & bf3 & X((bf0 & bf1 & bf2 & !(bf3)))) -> !(up)) & ((bf0 & !(bf1) & !(bf2) & bf3 & X((!(bf0) & !(bf1) & !(bf2) & bf3))) -> !(up)) & ((!(bf0) & bf1 & !(bf2) & bf3 & X((bf0 & !(bf1) & !(bf2) & bf3))) -> !(up)) & ((bf0 & bf1 & !(bf2) & bf3 & X((!(bf0) & bf1 & !(bf2) & bf3))) -> !(up)) & ((!(bf0) & !(bf1) & bf2 & bf3 & X((bf0 & bf1 & !(bf2) & bf3))) -> !(up)) & ((bf0 & !(bf1) & bf2 & bf3 & X((!(bf0) & !(bf1) & bf2 & bf3))) -> !(up)) & ((!(bf0) & bf1 & bf2 & bf3 & X((bf0 & !(bf1) & bf2 & bf3))) -> !(up)) & ((bf0 & bf1 & bf2 & bf3 & X((!(bf0) & bf1 & bf2 & bf3))) -> !(up)))) & G((sb <-> (b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | b8 | b9 | b10 | b11 | b12 | b13 | b14 | b15))) & G((((!(bf0) & !(bf1) & !(bf2) & !(bf3) & !(sb)) -> ((!(bf0) & !(bf1) & !(bf2) & !(bf3)) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((bf0 & !(bf1) & !(bf2) & !(bf3) & !(sb)) -> ((bf0 & !(bf1) & !(bf2) & !(bf3)) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((!(bf0) & bf1 & !(bf2) & !(bf3) & !(sb)) -> ((!(bf0) & bf1 & !(bf2) & !(bf3)) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((bf0 & bf1 & !(bf2) & !(bf3) & !(sb)) -> ((bf0 & bf1 & !(bf2) & !(bf3)) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((!(bf0) & !(bf1) & bf2 & !(bf3) & !(sb)) -> ((!(bf0) & !(bf1) & bf2 & !(bf3)) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((bf0 & !(bf1) & bf2 & !(bf3) & !(sb)) -> ((bf0 & !(bf1) & bf2 & !(bf3)) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((!(bf0) & bf1 & bf2 & !(bf3) & !(sb)) -> ((!(bf0) & bf1 & bf2 & !(bf3)) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((bf0 & bf1 & bf2 & !(bf3) & !(sb)) -> ((bf0 & bf1 & bf2 & !(bf3)) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((!(bf0) & !(bf1) & !(bf2) & bf3 & !(sb)) -> ((!(bf0) & !(bf1) & !(bf2) & bf3) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((bf0 & !(bf1) & !(bf2) & bf3 & !(sb)) -> ((bf0 & !(bf1) & !(bf2) & bf3) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((!(bf0) & bf1 & !(bf2) & bf3 & !(sb)) -> ((!(bf0) & bf1 & !(bf2) & bf3) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((bf0 & bf1 & !(bf2) & bf3 & !(sb)) -> ((bf0 & bf1 & !(bf2) & bf3) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((!(bf0) & !(bf1) & bf2 & bf3 & !(sb)) -> ((!(bf0) & !(bf1) & bf2 & bf3) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((bf0 & !(bf1) & bf2 & bf3 & !(sb)) -> ((bf0 & !(bf1) & bf2 & bf3) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((!(bf0) & bf1 & bf2 & bf3 & !(sb)) -> ((!(bf0) & bf1 & bf2 & bf3) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))) & ((bf0 & bf1 & bf2 & bf3 & !(sb)) -> ((bf0 & bf1 & bf2 & bf3) U (sb V (F((!(bf0) & !(bf1) & !(bf2) & !(bf3))) & !(up))))))) & G(((b0 -> F((!(bf0) & !(bf1) & !(bf2) & !(bf3)))) & (b1 -> F((bf0 & !(bf1) & !(bf2) & !(bf3)))) & (b2 -> F((!(bf0) & bf1 & !(bf2) & !(bf3)))) & (b3 -> F((bf0 & bf1 & !(bf2) & !(bf3)))) & (b4 -> F((!(bf0) & !(bf1) & bf2 & !(bf3)))) & (b5 -> F((bf0 & !(bf1) & bf2 & !(bf3)))) & (b6 -> F((!(bf0) & bf1 & bf2 & !(bf3)))) & (b7 -> F((bf0 & bf1 & bf2 & !(bf3)))) & (b8 -> F((!(bf0) & !(bf1) & !(bf2) & bf3))) & (b9 -> F((bf0 & !(bf1) & !(bf2) & bf3))) & (b10 -> F((!(bf0) & bf1 & !(bf2) & bf3))) & (b11 -> F((bf0 & bf1 & !(bf2) & bf3))) & (b12 -> F((!(bf0) & !(bf1) & bf2 & bf3))) & (b13 -> F((bf0 & !(bf1) & bf2 & bf3))) & (b14 -> F((!(bf0) & bf1 & bf2 & bf3))) & (b15 -> F((bf0 & bf1 & bf2 & bf3)))))) & (G F b0) & (G F b1) & (G F b2) & (G F b3) & (G F b4) & (G F b5) & (G F b6) & (G F b7) & (G F b8) & (G F b9) & (G F b10) & (G F b11) & (G F b12) & (G F b13) & (G F b14) & (G F b15)
# Invariants Tool
This is an implementation accompanying the anonymous submission 47.
It can be used to verify and infer universal invariants for workflows.
## Prerequisites
The tool is built to be run by the JVM.
It needs an installed Z3 SMT Solver on the machine. There are bindings included for version 4.5.1, which can be replaced by specifying an additional classpath entry containing the new bindings.
## Usage
It can be called with `java -jar invariants.jar [--causal] [--elimChoice] FILE`
It will then try to parse the FILE to a workflow specification, build an equality invariant for a single relation (namely the one mentioned as TARGET in the specification) and try to infer the strongest universal invariant that implies this invariant.
When finished, all intermediate proving steps will be documented in the `results` folder and can be visualized by using the included `renderpngs.sh` script.
## Timings
The given implementation may differ from the time indicated in the paper for various reasons.
This release version will always build the invariant for just the target relation, instead of the conjunction over all relations.
The numbers in the paper have been produced by comparing the sum of all separate runtimes for all possible target relations with the invariant that is a conjunction for all target relations, choosing the minimum.
Also, depending on the workflow, the `elimChoice` configuration variable may improve runtimes significantly in some cases.
Workflow
forallmay x:A,p:P
True → Conf += (x,p)
forallmay x:A,p:P
!Conf(x,p) → Assign += (x,p)
forall x:A,p:P,r:R
(Assign(x,p) ∧ O(x,p,r)) → Review += (x,p,r)
loop {
forall x:A,y:A,p:P,r:R (Assign(x,p) ∧ Review(y,p,r)) → Read += (x,p,r)
forallmay x:A,p:P,r:R (Assign(x,p)) → Review += (x,p,r)
}
Declassify
O(x:A,p:P,r:R): ¬ Conf(xt:A,p:P)
Target
Read(xt:A, pt:P, rt:R)
Workflow
forallmay x:A,p:P
True → Conf += (x,p)
forallmay x:A,p:P
!Conf(x,p) → Assign += (x,p)
forall x:A,y:A,p:P,q:P
(Assign(x,p) ∧ Assign(y,p) ∧ Conf(x,q) ∧ !Conf(y,q)) → Assign -= (y,p)
forall x:A,p:P,r:R
(Assign(x,p) ∧ O(x,p,r)) → Review += (x,p,r)
loop {
forall x:A,y:A,p:P,r:R (Assign(x,p) ∧ Review(y,p,r)) → Read += (x,r)
forallmay x:A,p:P,r:R (Assign(x,p)) → Review += (x,p,r)
}
Declassify
O(x:A,p:P,r:R): ¬ Conf(xt:A,p:P)
Target
Read(xt:A, rt:R)
Workflow
forallmay x:X,p:P
True -> Conf += (x,p)
forallmay x:X,p:P
!Conf(x,p) -> Assign += (x,p)
forall x:X,p:P,r:R
(Assign(x,p) ∧ O(x,p,r)) -> Read += (x,p,r)
forallmay y:X,x:X,p:P
(Assign(x,p) ∧ Assign(y,p)) -> Comm += (x,y,p)
Declassify
O(x:X,p:P,r:R): ¬ Conf(a:X,p:P)
Target
Comm(a:X, b:X, pp:P)
Workflow
forallmay x:X,p:P
True -> Conf += (x,p)
forallmay x:X,p:P
!Conf(x,p) -> Assign += (x,p)
forall x:X,y:X,p:P,q:P
(Conf(x,p) ∧ ¬ Conf(y,p) ∧ Assign(x,q) ∧ Assign(y,q)) -> Assign -= (y,q)
forall x:X,p:P,r:R
(Assign(x,p) ∧ O(x,p,r)) -> Read += (x,p,r)
forallmay y:X,x:X,p:P
(Assign(x,p) ∧ Assign(y,p)) -> Comm += (x,y,p)
Declassify
O(x:X,p:P,r:R): ¬ Conf(a:X,p:P)
Target
Comm(a:X, b:X, pp:P)
Workflow
forallmay x,s
O(s) -> R += (x,s)
Target
R(x,s)
Workflow
forall x
True -> R += (x)
forall x,s
O(x,s) -> S += (x)
Declassify
O(x,s): R(xt)
Target
S(xt)
Workflow
forall x:X,s:S
O(s) -> R += (x,s)
Target
R(x:X,s:S)
Workflow
forallmay x,s O(s) -> Q += (x,s)
loop {
forall x,y,s R(y,s) -> S += (x,y,s)
forall x,s Q(x,s) -> R += (x,s)
}
Target
S(x,y,s)
Workflow
forall x,s
O(x,s) -> R += (x,s)
Target
R(x,s)
shopt -s nullglob
TIMEOUT=1m
for FILE in results/*.dot
do
NAME=$(basename ${FILE} .dot)
DIR=$(dirname "${FILE}")
PIC="${DIR}/${NAME}.png"
echo "Rendering ${FILE} to ${PIC}"
if
timeout ${TIMEOUT} time -p dot -Tpng < ${FILE} >> ${PIC}
then
echo "Finished successfully"
else
echo "Timeout after ${TIMEOUT}"
fi
done
......@@ -2,9 +2,9 @@ name := "LoopingWorkflows"
version := "0.1"
scalaVersion := "2.12.3"
scalaVersion := "2.12.6"
EclipseKeys.withBundledScalaContainers := false
// EclipseKeys.withBundledScalaContainers := false
libraryDependencies ++= Seq(
"com.typesafe.scala-logging" %% "scala-logging" % "3.5.0",
......
Workflow
forall x,s
True -> R -= (x)
forall x,s
O(x,s) -> R += (x)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment