diff --git a/Jenkinsfile.deploy_website b/Jenkinsfile.deploy_website index dddd1d28332..28147aca44b 100644 --- a/Jenkinsfile.deploy_website +++ b/Jenkinsfile.deploy_website @@ -14,7 +14,6 @@ pipeline { tools { jdk 'JDK21' maven 'Maven 3.9.11' - maven 'Maven 3.9.11' } stages { stage('Checkout') { diff --git a/releaseScripts/default/benchexec/concurrency-witness-validation.xml b/releaseScripts/default/benchexec/concurrency-witness-validation.xml index 8adcc75e9f4..20b64d5e9d3 100644 --- a/releaseScripts/default/benchexec/concurrency-witness-validation.xml +++ b/releaseScripts/default/benchexec/concurrency-witness-validation.xml @@ -1,13 +1,19 @@ - + **/witness.yml + + ?> + + + + + + + + + + + + + + + + + + @@ -478,6 +503,16 @@ + + ../../../trunk/examples/svcomp/pthread-atomic/dekker.yml + ../../../trunk/examples/svcomp/properties/unreach-call.prp + + + ../../../trunk/examples/svcomp/pthread-atomic/*.yml + ../../../trunk/examples/svcomp/pthread-atomic/*-witness.yml + ../../../trunk/examples/svcomp/properties/unreach-call.prp + + diff --git a/releaseScripts/default/benchexec/og-benchmark-generator.xml b/releaseScripts/default/benchexec/og-benchmark-generator.xml new file mode 100644 index 00000000000..5edd5e6fa5b --- /dev/null +++ b/releaseScripts/default/benchexec/og-benchmark-generator.xml @@ -0,0 +1,52 @@ + + + /storage/repos/ultimate/releaseScripts/default/UAutomizer-linux/*.ats + + + + + + + + + ../../../trunk/examples/svcomp/Concurrency.set + ../../../trunk/examples/svcomp/properties/unreach-call.prp + + + + + + + + + ../../../trunk/examples/svcomp/Concurrency.set + ../../../trunk/examples/svcomp/properties/no-data-race.prp + + + + + + + + + + + + + ../../../trunk/examples/svcomp/Concurrency.set + ../../../trunk/examples/svcomp/properties/valid-memsafety.prp + + + + + + + + + ../../../trunk/examples/svcomp/Concurrency.set + ../../../trunk/examples/svcomp/properties/no-overflow.prp + + + + diff --git a/releaseScripts/default/benchexec/og-proof-generation.xml b/releaseScripts/default/benchexec/og-proof-generation.xml new file mode 100644 index 00000000000..054df95e47d --- /dev/null +++ b/releaseScripts/default/benchexec/og-proof-generation.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../../../trunk/examples/concurrent/OwickiGries/PetriPrograms/ReachSafety.*.ats + + + + ../../../trunk/examples/concurrent/OwickiGries/PetriPrograms/MemSafety.*.ats + + + + ../../../trunk/examples/concurrent/OwickiGries/PetriPrograms/NoDataRace.*.ats + + + + ../../../trunk/examples/concurrent/OwickiGries/PetriPrograms/NoOverflow.*.ats + + + + ../../../trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads*.ats + ../../../trunk/examples/concurrent/OwickiGries/PetriPrograms/ReachSafety.test-*.ats + + diff --git a/releaseScripts/default/benchexec/table-definitions/og-proof-generation.xml b/releaseScripts/default/benchexec/table-definitions/og-proof-generation.xml new file mode 100644 index 00000000000..a1dea035ac3 --- /dev/null +++ b/releaseScripts/default/benchexec/table-definitions/og-proof-generation.xml @@ -0,0 +1,376 @@ + + + + + + + + + + + + + + │ │ │ duration: (\d+) ms + + + + OwickiGriesTestSuite setup time: (\d+)ms + Complete Proof Computation Time: (\d+)ms + + + Computed Owicki-Gries annotation with (\d+) ghost variables + Computed Owicki-Gries annotation with.* (\d+) ghost updates + Computed Owicki-Gries annotation with.* overall size (\d+)$ + free variables mentioned in invariants: \(min: \d+, max: \d+, median: (\d+), avg: [\d\.]+\) + ghost variables mentioned in invariants: \(min: \d+, max: \d+, median: \d+, avg: ([\d\.]+)\) + + + + + + + + │ │ │ duration: (\d+) ms + + + Owicki-Gries validity check time \[ms\]: (\d+)(,|$) + + caught: .\[31m(.*).\[0m + + + + + + + + │ │ │ duration: (\d+) ms + + + Owicki-Gries Validation Time: (\d+)ms + + caught: .\[31m(.*).\[0m + + + + + + + + │ │ │ duration: (\d+) ms + + + + OwickiGriesTestSuite setup time: (\d+)ms + Complete Proof Computation Time: (\d+)ms + + + Constructing Owicki-Gries proof for Petri program that has (\d+) places + Constructing Owicki-Gries proof for Petri program that has .* (\d+) transitions + Constructing Owicki-Gries proof for Petri program that has .* (\d+) flow + Number of proof automata: (\d+)$ + + + EmpireComputation statistics:.* empire annotation size: (\d+), + Explored empire automaton has (\d+) states + Explored empire automaton has \d+ states and (\d+) transitions + EmpireComputation statistics:.* number of regions: (\d+), + EmpireComputation statistics:.* number of territories: (\d+), + EmpireComputation statistics:.* Min number of regions per territory: (\d+), + EmpireComputation statistics:.* Max number of regions per territory: (\d+), + EmpireComputation statistics:.* Median number of regions per territory: (\d+), + EmpireComputation statistics:.* Min number of places per region: (\d+), + EmpireComputation statistics:.* Max number of places per region: (\d+), + EmpireComputation statistics:.* Median number of places per region: (\d+), + + EmpireComputation time \[ms\]: (\d+), + EmpireToOwickiGries time \[ms\]: (\d+), + + + Computed Owicki-Gries annotation with (\d+) ghost variables + Computed Owicki-Gries annotation with.* (\d+) ghost updates + Computed Owicki-Gries annotation with.* overall size (\d+)$ + free variables mentioned in invariants: \(min: \d+, max: \d+, median: (\d+), avg: [\d\.]+\) + ghost variables mentioned in invariants: \(min: \d+, max: \d+, median: \d+, avg: ([\d\.]+)\) + + + + + + + + │ │ │ duration: (\d+) ms + + + Empire validity check time \[ms\]: (\d+), + Owicki-Gries validity check time \[ms\]: (\d+)(,|$) + + caught: .\[31m(.*).\[0m + + + + + + + + │ │ │ duration: (\d+) ms + + + Owicki-Gries Validation Time: (\d+)ms + + caught: .\[31m(.*).\[0m + + + + + + + + │ │ │ duration: (\d+) ms + + + + OwickiGriesTestSuite setup time: (\d+)ms + Complete Proof Computation Time: (\d+)ms + + + Explored empire automaton has (\d+) states + Explored empire automaton has \d+ states and (\d+) transitions + EmpireComputation time \[ms\]: (\d+), + EmpireToOwickiGries time \[ms\]: (\d+), + Focus computation time \[ms\]: (\d+)$ + + + Computed Owicki-Gries annotation with (\d+) ghost variables + Computed Owicki-Gries annotation with.* (\d+) ghost updates + Computed Owicki-Gries annotation with.* overall size (\d+)$ + free variables mentioned in invariants: \(min: \d+, max: \d+, median: (\d+), avg: [\d\.]+\) + ghost variables mentioned in invariants: \(min: \d+, max: \d+, median: \d+, avg: ([\d\.]+)\) + + + + + + + + │ │ │ duration: (\d+) ms + + + Empire validity check time \[ms\]: (\d+), + Owicki-Gries validity check time \[ms\]: (\d+)(,|$) + + caught: .\[31m(.*).\[0m + + + + + + + + │ │ │ duration: (\d+) ms + + + Owicki-Gries Validation Time: (\d+)ms + + caught: .\[31m(.*).\[0m + + + + + + + + │ │ │ duration: (\d+) ms + + + + OwickiGriesTestSuite setup time: (\d+)ms + Complete Proof Computation Time: (\d+)ms + + + Explored empire automaton has (\d+) states + Explored empire automaton has \d+ states and (\d+) transitions + EmpireComputation time \[ms\]: (\d+), + EmpireToOwickiGries time \[ms\]: (\d+), + Focus computation time \[ms\]: (\d+)$ + + + Computed Owicki-Gries annotation with (\d+) ghost variables + Computed Owicki-Gries annotation with.* (\d+) ghost updates + Computed Owicki-Gries annotation with.* overall size (\d+)$ + free variables mentioned in invariants: \(min: \d+, max: \d+, median: (\d+), avg: [\d\.]+\) + ghost variables mentioned in invariants: \(min: \d+, max: \d+, median: \d+, avg: ([\d\.]+)\) + + + + + + + + │ │ │ duration: (\d+) ms + + + Empire validity check time \[ms\]: (\d+), + Owicki-Gries validity check time \[ms\]: (\d+)(,|$) + + caught: .\[31m(.*).\[0m + + + + + + + + │ │ │ duration: (\d+) ms + + + Owicki-Gries Validation Time: (\d+)ms + + caught: .\[31m(.*).\[0m + + + + + + + + + + + + + Constructing Owicki-Gries proof for Petri program that has (\d+) places + Constructing Owicki-Gries proof for Petri program that has .* (\d+) transitions + Constructing Owicki-Gries proof for Petri program that has .* (\d+) flow + + Number of proof automata: (\d+)$ + Loopers in proof automata: min=(\d+), + Loopers in proof automata:.* max=(\d+), + Loopers in proof automata:.* median=(\d+)$ + + OwickiGriesTestSuite setup time: (\d+)ms + + + PetriOwickiGries Statistics:.* (\d+\.\d+)ms Crown empire time + PetriOwickiGries Empire Statistics:.* empire size: (\d+), + PetriOwickiGries Empire Statistics:.* empire law size: (\d+), + PetriOwickiGries Empire Statistics:.* empire annotation size: (\d+), + PetriOwickiGries Empire Statistics:.* number of regions: (\d+), + PetriOwickiGries Empire Statistics:.* Min number of regions per territory: (\d+), + PetriOwickiGries Empire Statistics:.* Max number of regions per territory: (\d+), + PetriOwickiGries Empire Statistics:.* Median number of regions per territory: (\d+), + PetriOwickiGries Empire Statistics:.* Min number of places per region: (\d+), + PetriOwickiGries Empire Statistics:.* Max number of places per region: (\d+), + PetriOwickiGries Empire Statistics:.* Median number of places per region: (\d+)$ + PetriOwickiGries Statistics:.* (\d+\.\d+)ms Empire validity check time + + + PetriOwickiGries Statistics:.* (\d+\.\d+)ms EmpireToOwickiGries time + Computed Owicki-Gries annotation with (\d+) ghost variables + Computed Owicki-Gries annotation with.* (\d+) ghost updates + Computed Owicki-Gries annotation with.* overall size (\d+)$ + PetriOwickiGries Statistics:.* (\d+\.\d+)ms Owicki-Gries validity check time + + + + + + + + + + + + Constructing Owicki-Gries proof for Petri program that has (\d+) places + Constructing Owicki-Gries proof for Petri program that has .* (\d+) transitions + Constructing Owicki-Gries proof for Petri program that has .* (\d+) flow + + Number of proof automata: (\d+)$ + Loopers in proof automata: min=(\d+), + Loopers in proof automata:.* max=(\d+), + Loopers in proof automata:.* median=(\d+)$ + + OwickiGriesTestSuite setup time: (\d+)ms + + + PetriOwickiGries Statistics:.* (\d+\.\d+)ms Crown empire time + PetriOwickiGries Empire Statistics:.* empire size: (\d+), + PetriOwickiGries Empire Statistics:.* empire law size: (\d+), + PetriOwickiGries Empire Statistics:.* empire annotation size: (\d+), + PetriOwickiGries Empire Statistics:.* number of regions: (\d+), + PetriOwickiGries Empire Statistics:.* Min number of regions per territory: (\d+), + PetriOwickiGries Empire Statistics:.* Max number of regions per territory: (\d+), + PetriOwickiGries Empire Statistics:.* Median number of regions per territory: (\d+), + PetriOwickiGries Empire Statistics:.* Min number of places per region: (\d+), + PetriOwickiGries Empire Statistics:.* Max number of places per region: (\d+), + PetriOwickiGries Empire Statistics:.* Median number of places per region: (\d+)$ + + + PetriOwickiGries Statistics:.* (\d+\.\d+)ms EmpireToOwickiGries time + Computed Owicki-Gries annotation with (\d+) ghost variables + Computed Owicki-Gries annotation with.* (\d+) ghost updates + Computed Owicki-Gries annotation with.* overall size (\d+)$ + + + + + + + + + + + + Constructing Owicki-Gries proof for Petri program that has (\d+) places + Constructing Owicki-Gries proof for Petri program that has .* (\d+) transitions + Constructing Owicki-Gries proof for Petri program that has .* (\d+) flow + + Number of proof automata: (\d+)$ + Loopers in proof automata: min=(\d+), + Loopers in proof automata:.* max=(\d+), + Loopers in proof automata:.* median=(\d+)$ + + OwickiGriesTestSuite setup time: (\d+)ms + + + Computed Floyd-Hoare proof with (\d+) non-trivial markings + Computed Floyd-Hoare proof with.* assertion size (\d+)$ + + + Computed Owicki-Gries annotation with (\d+) ghost variables + Computed Owicki-Gries annotation with.* (\d+) ghost updates + Computed Owicki-Gries annotation with.* overall size (\d+)$ + + + + + + + + + + + + Constructing Owicki-Gries proof for Petri program that has (\d+) places + Constructing Owicki-Gries proof for Petri program that has .* (\d+) transitions + Constructing Owicki-Gries proof for Petri program that has .* (\d+) flow + + Number of proof automata: (\d+)$ + Loopers in proof automata: min=(\d+), + Loopers in proof automata:.* max=(\d+), + Loopers in proof automata:.* median=(\d+)$ + + OwickiGriesTestSuite setup time: (\d+)ms + + + Computed Floyd-Hoare proof with (\d+) non-trivial markings + Computed Floyd-Hoare proof with.* assertion size (\d+)$ + + + Computed Owicki-Gries annotation with (\d+) ghost variables + Computed Owicki-Gries annotation with.* (\d+) ghost updates + Computed Owicki-Gries annotation with.* overall size (\d+)$ + +?> +
diff --git a/releaseScripts/default/run-test.sh b/releaseScripts/default/run-test.sh new file mode 100755 index 00000000000..baaf73b00f0 --- /dev/null +++ b/releaseScripts/default/run-test.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# This script can be used to run individual unit tests from the command line, +# without the complex steps performed by maven for each run. +# +# This requires the JUnit console runner, which can e.g. be downloaded from +# https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console-standalone/ +# Place it in this directory and, if necessary, adjust the variable JUNIT_JAR below. +# +# Execute ./makeFresh.sh first, and then invoke this script as follows: +# +# > ./run-test.sh +# +# where is the Ultimate project where the test is located (e.g. "Library-TraceCheckerUtilsTest"), +# is the fully qualified name of the class (e.g. "de.uni_freiburg.informatik.ultimate.lib.tracecheckerutils.owickigries.PetriOwickiGriesTestSuite"), +# and is the name of the test case (i.e., method) that you want to run. +# In the case where the tests in are generated dynamically from files, +# make sure to replace any symbols not allowed in method names (e.g. "."), +# and use the resulting name of the test case (e.g. "test_ats" instead of "test.ats"). + +JUNIT_JAR="junit-platform-console-standalone-1.9.3.jar" + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +PROJECT=$1 +CLASS=$2 +FILE=$3 +ASSERTIONS=$(if [[ -z $4 || "$4" == "true" ]]; then echo "-ea"; fi) + +cd "$SCRIPT_DIR/../../trunk/source/$PROJECT" + +METHOD=$(echo "$FILE" | tr . _) + +# collect class paths for all Ultimate projects +PROJECT_CLASS_PATHS=($(for dir in "$SCRIPT_DIR/../../trunk/source/"*"/target/classes"; do echo "-cp"; echo "$dir"; done)) + +PATH="$PATH:$SCRIPT_DIR/adds" java -Xmx8G -Xms4m $ASSERTIONS -jar "$SCRIPT_DIR/$JUNIT_JAR" ${PROJECT_CLASS_PATHS[@]} \ + -cp "$SCRIPT_DIR/../../trunk/source/BA_SiteRepository/target/repository/plugins/org.apache.commons.commons-io_2.16.1.jar" \ + --select-method "$CLASS#$METHOD" --details=verbose + diff --git a/releaseScripts/default/shell.py b/releaseScripts/default/shell.py new file mode 100644 index 00000000000..3e1cc9ba010 --- /dev/null +++ b/releaseScripts/default/shell.py @@ -0,0 +1,47 @@ +# This file can be used as benchexec tool info module to run arbitrary commands +# and scan the produced output to determine the result. +# For instance, combine it with ./run-test.sh to run individual unit tests with benchexec. +# +# As an example, see the usage in ./benchexec/og-proof-generation.xml . + +import benchexec.tools.template +import benchexec.result as result +import logging +import re +import shlex + +class Tool(benchexec.tools.template.BaseTool2): + """ + """ + + def executable(self, tool_locator): + return tool_locator.find_executable("run-test.sh") + + def name(self): + return "shell" + + def cmdline(self, executable, options, task, rlimits): + success_index = options.index('success') + self.success = options[success_index + 1] + failure_index = options.index('failure') + self.failure = options[failure_index + 1] + command_index = options.index('command') + command = options[command_index + 1] + return shlex.split(command) + + def determine_result(self, run): + for line in run.output: + if re.search(self.success, line) is not None: + return result.RESULT_DONE + if re.search(self.failure, line) is not None: + return result.RESULT_ERROR + return result.RESULT_UNKNOWN + + def get_value_from_output(self, output, identifier): + regex = re.compile(identifier) + for line in output: + match = regex.search(line) + if match and len(match.groups()) > 0: + return match.group(1) + logging.debug("Did not find a match with regex %s", identifier) + return None diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/04-mutex_28-base_nr.i_BEv2_AllErrorsAtOnce.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/04-mutex_28-base_nr.i_BEv2_AllErrorsAtOnce.ats new file mode 100644 index 00000000000..a230a74b99b --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/04-mutex_28-base_nr.i_BEv2_AllErrorsAtOnce.ats @@ -0,0 +1,413 @@ +// Testfile dumped by Ultimate at 2023/11/30 15:56:17 +// +// + +//@ variables (~daylight~0 Int) (~f~0.base Int) (~stderr~0.offset Int) (~global~0 Int) (t_funThread1of1ForFork0_thidvar0 Int) (~stdin~0.offset Int) (~f~0.offset Int) (|~#gm~0.offset| Int) (|#pthreadsForks| Int) (~__timezone~0 Int) (|#length| (Array Int Int)) (~tzname~0.offset (Array Int Int)) (|~#fm~0.offset| Int) (~__daylight~0 Int) (|#pthreadsMutex| (Array Int (Array Int Int))) (~tzname~0.base (Array Int Int)) (~__tzname~0.offset (Array Int Int)) (~stderr~0.base Int) (t_funThread1of1ForFork0_thidvar1 Int) (|~#gm~0.base| Int) (|~#fm~0.base| Int) (~stdout~0.offset Int) (~stdout~0.base Int) (~__tzname~0.base (Array Int Int)) (~stdin~0.base Int) (~timezone~0 Int) (|#StackHeapBarrier| Int) (|#valid| (Array Int Int)) (|#memory_int| (Array Int (Array Int Int))) (~sys_nerr~0 Int) (|write~int_#value| Int) (|write~int_#ptr.offset| Int) (|write~int_#sizeOfWrittenType| Int) (|write~int_#ptr.base| Int) (|#Ultimate.allocInit_ptrBase| Int) (|#Ultimate.allocInit_~size| Int) (|#PthreadsMutexUnlock_#inputPtr.offset| Int) (|#PthreadsMutexUnlock_#res| Int) (|#PthreadsMutexUnlock_#inputPtr.base| Int) (|t_funThread1of1ForFork0_#res#1.offset| Int) (|t_funThread1of1ForFork0_good_#t~post32#1| Int) (|t_funThread1of1ForFork0_#in~arg#1.base| Int) (|t_funThread1of1ForFork0_#t~nondet34#1| Int) (|t_funThread1of1ForFork0_~arg#1.base| Int) (|t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.offset| Int) (|t_funThread1of1ForFork0_~g~0#1.base| Int) (|t_funThread1of1ForFork0_#t~nondet35#1| Int) (|t_funThread1of1ForFork0_~arg#1.offset| Int) (|t_funThread1of1ForFork0_#in~arg#1.offset| Int) (|t_funThread1of1ForFork0_#res#1.base| Int) (|t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.base| Int) (|t_funThread1of1ForFork0_good_#t~nondet31#1| Int) (|t_funThread1of1ForFork0_good_#t~nondet33#1| Int) (|t_funThread1of1ForFork0_~g~0#1.offset| Int) (|#PthreadsMutexLock_#inputPtr.offset| Int) (|#PthreadsMutexLock_#res| Int) (|#PthreadsMutexLock_#inputPtr.base| Int) (|ULTIMATE.start_main_#t~pre36#1| Int) (|ULTIMATE.start_main_#t~nondet41#1| Int) (|ULTIMATE.start_main_#t~nondet39#1| Int) (|ULTIMATE.start_main_~#id~0#1.base| Int) (|ULTIMATE.start_main_#res#1| Int) (|ULTIMATE.start_main_#t~nondet37#1| Int) (|ULTIMATE.start_main_#t~nondet38#1| Int) (|ULTIMATE.start_#t~ret43#1| Int) (|ULTIMATE.start_main_#t~nondet42#1| Int) (|ULTIMATE.start_main_~#id~0#1.offset| Int) (|ULTIMATE.start_main_#t~nondet40#1| Int) (|write~init~int_#ptr.offset| Int) (|write~init~int_#sizeOfWrittenType| Int) (|write~init~int_#value| Int) (|write~init~int_#ptr.base| Int) (|t_fun_#t~nondet35#1| Int) (|t_fun_good_#t~nondet33#1| Int) (|t_fun_~arg#1.offset| Int) (|t_fun_~g~0#1.base| Int) (|t_fun_##fun~~TO~VOID_#in~#fp#1.offset| Int) (|t_fun_~arg#1.base| Int) (|t_fun_~g~0#1.offset| Int) (|t_fun_good_#t~post32#1| Int) (|t_fun_#t~nondet34#1| Int) (|t_fun_#in~arg#1.offset| Int) (|t_fun_#res#1.offset| Int) (|t_fun_#in~arg#1.base| Int) (|t_fun_good_#t~nondet31#1| Int) (|t_fun_#res#1.base| Int) (|t_fun_##fun~~TO~VOID_#in~#fp#1.base| Int) (|#Ultimate.allocOnStack_#res.base| Int) (|#Ultimate.allocOnStack_#res.offset| Int) (|#Ultimate.allocOnStack_~size| Int) (ULTIMATE.dealloc_~addr.offset Int) (ULTIMATE.dealloc_~addr.base Int) (~unnamed7~0~PTHREAD_PROCESS_PRIVATE Int) (~unnamed3~0~PTHREAD_PRIO_NONE Int) (~unnamed9~0~PTHREAD_CANCEL_ASYNCHRONOUS Int) (~unnamed2~0~PTHREAD_MUTEX_ROBUST Int) (~unnamed3~0~PTHREAD_PRIO_PROTECT Int) (~unnamed1~0~PTHREAD_MUTEX_RECURSIVE Int) (~unnamed3~0~PTHREAD_PRIO_INHERIT Int) (~unnamed4~0~PTHREAD_RWLOCK_DEFAULT_NP Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_READER_NP Int) (~unnamed0~0~PTHREAD_CREATE_JOINABLE Int) (~unnamed1~0~PTHREAD_MUTEX_ADAPTIVE_NP Int) (~unnamed2~0~PTHREAD_MUTEX_STALLED_NP Int) (~unnamed7~0~PTHREAD_PROCESS_SHARED Int) (~unnamed6~0~PTHREAD_SCOPE_SYSTEM Int) (~unnamed5~0~PTHREAD_EXPLICIT_SCHED Int) (~unnamed9~0~PTHREAD_CANCEL_DEFERRED Int) (~__codecvt_result~0~__codecvt_noconv Int) (|#funAddr~good.offset| Int) (~unnamed2~0~PTHREAD_MUTEX_STALLED Int) (|#funAddr~t_fun.offset| Int) (~unnamed1~0~PTHREAD_MUTEX_DEFAULT Int) (~unnamed8~0~PTHREAD_CANCEL_ENABLE Int) (|#funAddr~t_fun.base| Int) (~unnamed1~0~PTHREAD_MUTEX_NORMAL Int) (~unnamed2~0~PTHREAD_MUTEX_ROBUST_NP Int) (~unnamed0~0~PTHREAD_CREATE_DETACHED Int) (~unnamed1~0~PTHREAD_MUTEX_RECURSIVE_NP Int) (~unnamed5~0~PTHREAD_INHERIT_SCHED Int) (~unnamed1~0~PTHREAD_MUTEX_TIMED_NP Int) (~unnamed1~0~PTHREAD_MUTEX_ERRORCHECK_NP Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP Int) (~unnamed1~0~PTHREAD_MUTEX_ERRORCHECK Int) (~unnamed8~0~PTHREAD_CANCEL_DISABLE Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_WRITER_NP Int) (~__codecvt_result~0~__codecvt_error Int) (~__codecvt_result~0~__codecvt_partial Int) (~unnamed6~0~PTHREAD_SCOPE_PROCESS Int) (|#funAddr~good.base| Int) (~__codecvt_result~0~__codecvt_ok Int) +//@ semantics [1] {#pthreadsMutex,ULTIMATE.start_main_#t~nondet39#1} (and (= |ULTIMATE.start_main_#t~nondet39#1| 0) (= |#pthreadsMutex| (store |old(#pthreadsMutex)| |~#fm~0.base| (store (select |old(#pthreadsMutex)| |~#fm~0.base|) |~#fm~0.offset| 0)))) +//@ semantics [2] {~#gm~0.base,~#gm~0.offset} (and (= |~#gm~0.offset| 0) (= |~#gm~0.base| 1)) +//@ semantics [3] {~#fm~0.base,~#fm~0.offset} (and (= |~#fm~0.offset| 0) (= |~#fm~0.base| 2)) +//@ semantics [4] {~f~0.base,~f~0.offset} (and (= |#funAddr~good.offset| ~f~0.offset) (= |#funAddr~good.base| ~f~0.base)) +//@ semantics [5] {#pthreadsMutex,ULTIMATE.start_main_#t~nondet40#1} (let ((.cse0 (select |old(#pthreadsMutex)| |~#gm~0.base|))) (and (= |ULTIMATE.start_main_#t~nondet40#1| 0) (= (select .cse0 |~#gm~0.offset|) 0) (= (store |old(#pthreadsMutex)| |~#gm~0.base| (store .cse0 |~#gm~0.offset| 1)) |#pthreadsMutex|))) +//@ semantics [6] {} (< 0 |#StackHeapBarrier|) +//@ semantics [7] {~global~0} (= ~global~0 0) +//@ semantics [8] {ULTIMATE.start_main_~#id~0#1.base,ULTIMATE.start_main_~#id~0#1.offset} true +//@ semantics [9] {ULTIMATE.start_main_#t~nondet40#1} true +//@ semantics [10] {} (= (select (select |#memory_int| |~#gm~0.base|) (+ |~#gm~0.offset| 4)) 0) +//@ semantics [11] {ULTIMATE.start_main_~#id~0#1.base,#valid,#length,ULTIMATE.start_main_~#id~0#1.offset} (and (not (= |ULTIMATE.start_main_~#id~0#1.base| 0)) (= (select |old(#valid)| |ULTIMATE.start_main_~#id~0#1.base|) 0) (= (store |old(#length)| |ULTIMATE.start_main_~#id~0#1.base| 4) |#length|) (= |ULTIMATE.start_main_~#id~0#1.offset| 0) (< |#StackHeapBarrier| |ULTIMATE.start_main_~#id~0#1.base|) (= |#valid| (store |old(#valid)| |ULTIMATE.start_main_~#id~0#1.base| 1))) +//@ semantics [12] {ULTIMATE.start_main_#t~nondet38#1} true +//@ semantics [13] {} (= (select (select |#memory_int| |~#gm~0.base|) (+ |~#gm~0.offset| 8)) 0) +//@ semantics [14] {ULTIMATE.start_main_#t~nondet37#1} true +//@ semantics [15] {} (= (select (select |#memory_int| |~#fm~0.base|) (+ |~#fm~0.offset| 8)) 0) +//@ semantics [16] {} (= (select (select |#memory_int| |~#fm~0.base|) (+ |~#fm~0.offset| 16)) 0) +//@ semantics [17] {ULTIMATE.start_main_#res#1} true +//@ semantics [18] {ULTIMATE.start_main_#res#1} (= |ULTIMATE.start_main_#res#1| 0) +//@ semantics [19] {ULTIMATE.start_main_#t~pre36#1,ULTIMATE.start_main_#t~nondet41#1,ULTIMATE.start_main_#t~nondet39#1,ULTIMATE.start_main_~#id~0#1.base,ULTIMATE.start_main_#t~nondet37#1,ULTIMATE.start_main_#t~nondet38#1,ULTIMATE.start_main_#t~nondet42#1,ULTIMATE.start_main_~#id~0#1.offset,ULTIMATE.start_main_#t~nondet40#1} true +//@ semantics [20] {ULTIMATE.start_main_#t~pre36#1,ULTIMATE.start_main_#t~nondet41#1,ULTIMATE.start_main_#t~nondet39#1,ULTIMATE.start_main_~#id~0#1.base,ULTIMATE.start_main_#t~nondet37#1,ULTIMATE.start_main_#t~nondet38#1,ULTIMATE.start_main_#t~nondet42#1,ULTIMATE.start_main_~#id~0#1.offset,ULTIMATE.start_main_#t~nondet40#1} true +//@ semantics [21] {ULTIMATE.start_#t~ret43#1} (= |ULTIMATE.start_#t~ret43#1| |ULTIMATE.start_main_#res#1|) +//@ semantics [22] {} (= (select (select |#memory_int| |~#fm~0.base|) (+ |~#fm~0.offset| 4)) 0) +//@ semantics [23] {ULTIMATE.start_main_#t~pre36#1} (= |#pthreadsForks| |ULTIMATE.start_main_#t~pre36#1|) +//@ semantics [24] {} (= 0 (select (select |#memory_int| |~#fm~0.base|) (+ |~#fm~0.offset| 12))) +//@ semantics [25] {} (and (= (select |#length| 2) 24) (= (select |#valid| 2) 1)) +//@ semantics [26] {#pthreadsForks} (= (+ 1 |old(#pthreadsForks)|) |#pthreadsForks|) +//@ semantics [27] {} true +//@ semantics [28] {t_funThread1of1ForFork0_~arg#1.offset,t_funThread1of1ForFork0_~arg#1.base} (and (= |t_funThread1of1ForFork0_~arg#1.offset| |t_funThread1of1ForFork0_#in~arg#1.offset|) (= |t_funThread1of1ForFork0_#in~arg#1.base| |t_funThread1of1ForFork0_~arg#1.base|)) +//@ semantics [29] {t_funThread1of1ForFork0_~g~0#1.base,t_funThread1of1ForFork0_~g~0#1.offset} true +//@ semantics [30] {#pthreadsMutex,t_funThread1of1ForFork0_#t~nondet34#1} (let ((.cse0 (select |old(#pthreadsMutex)| |~#fm~0.base|))) (and (= (select .cse0 |~#fm~0.offset|) 0) (= 0 |t_funThread1of1ForFork0_#t~nondet34#1|) (= |#pthreadsMutex| (store |old(#pthreadsMutex)| |~#fm~0.base| (store .cse0 |~#fm~0.offset| 1))))) +//@ semantics [31] {t_funThread1of1ForFork0_#t~nondet34#1} true +//@ semantics [32] {t_funThread1of1ForFork0_~g~0#1.base,t_funThread1of1ForFork0_~g~0#1.offset} (and (= ~f~0.base |t_funThread1of1ForFork0_~g~0#1.base|) (= |t_funThread1of1ForFork0_~g~0#1.offset| ~f~0.offset)) +//@ semantics [33] {#pthreadsMutex,t_funThread1of1ForFork0_#t~nondet35#1} (and (= (store |old(#pthreadsMutex)| |~#fm~0.base| (store (select |old(#pthreadsMutex)| |~#fm~0.base|) |~#fm~0.offset| 0)) |#pthreadsMutex|) (= 0 |t_funThread1of1ForFork0_#t~nondet35#1|)) +//@ semantics [34] {t_funThread1of1ForFork0_#t~nondet35#1} true +//@ semantics [35] {t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.offset,t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.base} (and (= |t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.offset| |t_funThread1of1ForFork0_~g~0#1.offset|) (= |t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.base| |t_funThread1of1ForFork0_~g~0#1.base|)) +//@ semantics [36] {t_funThread1of1ForFork0_good_#t~post32#1,t_funThread1of1ForFork0_good_#t~nondet31#1,t_funThread1of1ForFork0_good_#t~nondet33#1} true +//@ semantics [37] {#pthreadsMutex,t_funThread1of1ForFork0_good_#t~nondet31#1} (let ((.cse0 (select |old(#pthreadsMutex)| |~#gm~0.base|))) (and (= |#pthreadsMutex| (store |old(#pthreadsMutex)| |~#gm~0.base| (store .cse0 |~#gm~0.offset| 1))) (= (select .cse0 |~#gm~0.offset|) 0) (= |t_funThread1of1ForFork0_good_#t~nondet31#1| 0))) +//@ semantics [38] {t_funThread1of1ForFork0_good_#t~nondet31#1} true +//@ semantics [39] {t_funThread1of1ForFork0_good_#t~post32#1} (= |t_funThread1of1ForFork0_good_#t~post32#1| ~global~0) +//@ semantics [40] {~global~0} (= (+ |t_funThread1of1ForFork0_good_#t~post32#1| 1) ~global~0) +//@ semantics [41] {t_funThread1of1ForFork0_good_#t~post32#1} true +//@ semantics [42] {#pthreadsMutex,t_funThread1of1ForFork0_good_#t~nondet33#1} (and (= |t_funThread1of1ForFork0_good_#t~nondet33#1| 0) (= |#pthreadsMutex| (store |old(#pthreadsMutex)| |~#gm~0.base| (store (select |old(#pthreadsMutex)| |~#gm~0.base|) |~#gm~0.offset| 0)))) +//@ semantics [43] {t_funThread1of1ForFork0_good_#t~nondet33#1} true +//@ semantics [44] {t_funThread1of1ForFork0_good_#t~post32#1,t_funThread1of1ForFork0_good_#t~nondet31#1,t_funThread1of1ForFork0_good_#t~nondet33#1} true +//@ semantics [45] {t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.offset,t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.base} true +//@ semantics [46] {t_funThread1of1ForFork0_#res#1.offset,t_funThread1of1ForFork0_#res#1.base} (and (= |t_funThread1of1ForFork0_#res#1.offset| 0) (= |t_funThread1of1ForFork0_#res#1.base| 0)) +//@ semantics [47] {} true +//@ semantics [48] {} true +//@ semantics [49] {t_funThread1of1ForFork0_#res#1.offset,t_funThread1of1ForFork0_good_#t~post32#1,t_funThread1of1ForFork0_#in~arg#1.base,t_funThread1of1ForFork0_#t~nondet34#1,t_funThread1of1ForFork0_~arg#1.base,t_funThread1of1ForFork0_thidvar1,t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.offset,t_funThread1of1ForFork0_thidvar0,t_funThread1of1ForFork0_~g~0#1.base,t_funThread1of1ForFork0_#t~nondet35#1,t_funThread1of1ForFork0_~arg#1.offset,t_funThread1of1ForFork0_#res#1.base,t_funThread1of1ForFork0_##fun~~TO~VOID_#in~#fp#1.base,t_funThread1of1ForFork0_#in~arg#1.offset,t_funThread1of1ForFork0_good_#t~nondet31#1,t_funThread1of1ForFork0_good_#t~nondet33#1,t_funThread1of1ForFork0_~g~0#1.offset} (and (= |t_funThread1of1ForFork0_#in~arg#1.base| 0) (= |t_funThread1of1ForFork0_#in~arg#1.offset| 0) (= t_funThread1of1ForFork0_thidvar0 |ULTIMATE.start_main_#t~pre36#1|) (= t_funThread1of1ForFork0_thidvar1 0)) +//@ semantics [50] {ULTIMATE.start_main_#t~nondet41#1} true +//@ semantics [51] {} (= (select (select |#memory_int| |~#gm~0.base|) (+ |~#gm~0.offset| 12)) 0) +//@ semantics [52] {} (= (select (select |#memory_int| |~#gm~0.base|) (+ |~#gm~0.offset| 16)) 0) +//@ semantics [53] {} (and (= (select |#length| 1) 24) (= (select |#valid| 1) 1)) +//@ semantics [54] {~f~0.base,~f~0.offset} (and (= |#funAddr~good.offset| ~f~0.offset) (= |#funAddr~good.base| ~f~0.base)) +//@ semantics [55] {} (= (select (select |#memory_int| |~#fm~0.base|) |~#fm~0.offset|) 0) +//@ semantics [56] {#memory_int} (and (= |#memory_int| (store |old(#memory_int)| |ULTIMATE.start_main_~#id~0#1.base| (store (select |old(#memory_int)| |ULTIMATE.start_main_~#id~0#1.base|) |ULTIMATE.start_main_~#id~0#1.offset| |ULTIMATE.start_main_#t~pre36#1|))) (<= (+ |ULTIMATE.start_main_~#id~0#1.offset| 4) (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (<= 0 |ULTIMATE.start_main_~#id~0#1.offset|) (= (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|) 1)) +//@ semantics [57] {} (not (= (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|) 1)) +//@ semantics [58] {} (or (< |ULTIMATE.start_main_~#id~0#1.offset| 0) (< (select |#length| |ULTIMATE.start_main_~#id~0#1.base|) (+ |ULTIMATE.start_main_~#id~0#1.offset| 4))) +//@ semantics [59] {#pthreadsMutex,ULTIMATE.start_main_#t~nondet38#1} (let ((.cse0 (select |old(#pthreadsMutex)| |~#fm~0.base|))) (and (= |ULTIMATE.start_main_#t~nondet38#1| 0) (= (select .cse0 |~#fm~0.offset|) 0) (= |#pthreadsMutex| (store |old(#pthreadsMutex)| |~#fm~0.base| (store .cse0 |~#fm~0.offset| 1))))) +//@ semantics [60] {} (= 0 (select (select |#memory_int| |~#gm~0.base|) |~#gm~0.offset|)) +//@ semantics [61] {#valid} (= |#valid| (store |old(#valid)| |ULTIMATE.start_main_~#id~0#1.base| 0)) +//@ semantics [62] {} (= (select |#valid| 0) 0) +//@ semantics [63] {#pthreadsMutex,ULTIMATE.start_main_#t~nondet42#1} (and (= |#pthreadsMutex| (store |old(#pthreadsMutex)| |~#gm~0.base| (store (select |old(#pthreadsMutex)| |~#gm~0.base|) |~#gm~0.offset| 0))) (= |ULTIMATE.start_main_#t~nondet42#1| 0)) +//@ semantics [64] {ULTIMATE.start_main_#t~nondet39#1} true +//@ semantics [65] {ULTIMATE.start_main_#t~nondet42#1} true +//@ semantics [66] {ULTIMATE.start_main_#t~pre36#1} true + + +PetriNet program = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" "[63]" "[64]" "[65]" "[66]" }, + places = {l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l10 l11 l12 l13 l14 l15 l16 l17 l18 l19 l20 l21 l22 l23 l24 l25 }, + transitions = { + ({l14 } "[26]" {l18 }) + ({l10 } "[51]" {l16 }) + ({l16 } "[52]" {l23 }) + ({l19 } "[53]" {l22 }) + ({l23 } "[54]" {l9 }) + ({l7 } "[55]" {l24 }) + ({l18 } "[57]" {l25 }) + ({l18 } "[58]" {l0 }) + ({l11 } "[60]" {l2 }) + ({l15 } "[62]" {l17 }) + ({l22 } "[2]" {l11 }) + ({l1 } "[3]" {l7 }) + ({l17 } "[6]" {l21 }) + ({l21 } "[7]" {l19 }) + ({l2 } "[10]" {l6 }) + ({l12 } "[11]" {l5 }) + ({l6 } "[13]" {l10 }) + ({l3 } "[15]" {l4 }) + ({l20 } "[16]" {l13 }) + ({l13 } "[17]" {l8 }) + ({l8 } "[19]" {l12 }) + ({l24 } "[22]" {l3 }) + ({l5 } "[23]" {l14 }) + ({l4 } "[24]" {l20 }) + ({l9 } "[25]" {l1 }) + }, + initialMarking = {l15 }, + acceptingPlaces = {l0 l25 } +); +FiniteAutomaton proof1 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" "[63]" "[64]" "[65]" "[66]" }, + states = {"(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "false" "true" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[2]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[3]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[4]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[6]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[7]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[9]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[10]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[12]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[13]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[14]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[15]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[16]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[17]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[18]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[21]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[22]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[23]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[24]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[26]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[27]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[28]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[29]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[50]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[51]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[31]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[52]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[32]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[34]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[35]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[54]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[36]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[55]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[38]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[39]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[57]" "false") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[40]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[58]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[41]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[43]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[44]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[60]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[45]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[46]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[47]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[48]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[64]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[65]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))" "[66]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + ("false" "[12]" "false") + ("false" "[13]" "false") + ("false" "[14]" "false") + ("false" "[15]" "false") + ("false" "[16]" "false") + ("false" "[17]" "false") + ("false" "[18]" "false") + ("false" "[21]" "false") + ("false" "[22]" "false") + ("false" "[23]" "false") + ("false" "[24]" "false") + ("false" "[26]" "false") + ("false" "[27]" "false") + ("false" "[28]" "false") + ("false" "[29]" "false") + ("false" "[50]" "false") + ("false" "[51]" "false") + ("false" "[31]" "false") + ("false" "[52]" "false") + ("false" "[32]" "false") + ("false" "[34]" "false") + ("false" "[35]" "false") + ("false" "[54]" "false") + ("false" "[36]" "false") + ("false" "[55]" "false") + ("false" "[38]" "false") + ("false" "[39]" "false") + ("false" "[40]" "false") + ("false" "[41]" "false") + ("false" "[43]" "false") + ("false" "[44]" "false") + ("false" "[60]" "false") + ("false" "[45]" "false") + ("false" "[46]" "false") + ("false" "[47]" "false") + ("false" "[48]" "false") + ("false" "[64]" "false") + ("false" "[65]" "false") + ("false" "[66]" "false") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[6]" "true") + ("true" "[7]" "true") + ("true" "[9]" "true") + ("true" "[10]" "true") + ("true" "[11]" "(= 1 (select |#valid| |ULTIMATE.start_main_~#id~0#1.base|))") + ("true" "[12]" "true") + ("true" "[13]" "true") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "true") + ("true" "[17]" "true") + ("true" "[18]" "true") + ("true" "[19]" "true") + ("true" "[21]" "true") + ("true" "[22]" "true") + ("true" "[23]" "true") + ("true" "[24]" "true") + ("true" "[25]" "true") + ("true" "[26]" "true") + ("true" "[27]" "true") + ("true" "[28]" "true") + ("true" "[29]" "true") + ("true" "[31]" "true") + ("true" "[32]" "true") + ("true" "[34]" "true") + ("true" "[35]" "true") + ("true" "[36]" "true") + ("true" "[38]" "true") + ("true" "[39]" "true") + ("true" "[40]" "true") + ("true" "[41]" "true") + ("true" "[43]" "true") + ("true" "[44]" "true") + ("true" "[45]" "true") + ("true" "[46]" "true") + ("true" "[47]" "true") + ("true" "[48]" "true") + ("true" "[50]" "true") + ("true" "[51]" "true") + ("true" "[52]" "true") + ("true" "[53]" "true") + ("true" "[54]" "true") + ("true" "[55]" "true") + ("true" "[60]" "true") + ("true" "[62]" "true") + ("true" "[64]" "true") + ("true" "[65]" "true") + ("true" "[66]" "true") + } +); +FiniteAutomaton proof2 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" "[63]" "[64]" "[65]" "[66]" }, + states = {"true" "false" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[6]" "true") + ("true" "[7]" "true") + ("true" "[9]" "true") + ("true" "[10]" "true") + ("true" "[11]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("true" "[12]" "true") + ("true" "[13]" "true") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "true") + ("true" "[17]" "true") + ("true" "[18]" "true") + ("true" "[19]" "true") + ("true" "[21]" "true") + ("true" "[22]" "true") + ("true" "[23]" "true") + ("true" "[24]" "true") + ("true" "[25]" "true") + ("true" "[26]" "true") + ("true" "[27]" "true") + ("true" "[28]" "true") + ("true" "[29]" "true") + ("true" "[31]" "true") + ("true" "[32]" "true") + ("true" "[34]" "true") + ("true" "[35]" "true") + ("true" "[36]" "true") + ("true" "[38]" "true") + ("true" "[39]" "true") + ("true" "[40]" "true") + ("true" "[41]" "true") + ("true" "[43]" "true") + ("true" "[44]" "true") + ("true" "[45]" "true") + ("true" "[46]" "true") + ("true" "[47]" "true") + ("true" "[48]" "true") + ("true" "[50]" "true") + ("true" "[51]" "true") + ("true" "[52]" "true") + ("true" "[53]" "true") + ("true" "[54]" "true") + ("true" "[55]" "true") + ("true" "[60]" "true") + ("true" "[62]" "true") + ("true" "[64]" "true") + ("true" "[65]" "true") + ("true" "[66]" "true") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + ("false" "[12]" "false") + ("false" "[13]" "false") + ("false" "[14]" "false") + ("false" "[15]" "false") + ("false" "[16]" "false") + ("false" "[17]" "false") + ("false" "[18]" "false") + ("false" "[21]" "false") + ("false" "[22]" "false") + ("false" "[23]" "false") + ("false" "[24]" "false") + ("false" "[26]" "false") + ("false" "[27]" "false") + ("false" "[28]" "false") + ("false" "[29]" "false") + ("false" "[50]" "false") + ("false" "[51]" "false") + ("false" "[31]" "false") + ("false" "[52]" "false") + ("false" "[32]" "false") + ("false" "[34]" "false") + ("false" "[35]" "false") + ("false" "[54]" "false") + ("false" "[36]" "false") + ("false" "[55]" "false") + ("false" "[38]" "false") + ("false" "[39]" "false") + ("false" "[40]" "false") + ("false" "[41]" "false") + ("false" "[43]" "false") + ("false" "[44]" "false") + ("false" "[60]" "false") + ("false" "[45]" "false") + ("false" "[46]" "false") + ("false" "[47]" "false") + ("false" "[62]" "false") + ("false" "[48]" "false") + ("false" "[64]" "false") + ("false" "[65]" "false") + ("false" "[66]" "false") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[2]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[3]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[4]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[6]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[7]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[9]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[10]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[12]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[13]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[14]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[15]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[16]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[17]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[18]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[21]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[22]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[23]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[24]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[26]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[27]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[28]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[29]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[50]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[51]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[31]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[52]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[32]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[34]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[35]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[54]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[36]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[55]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[38]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[39]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[40]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[58]" "false") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[41]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[43]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[44]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[60]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[45]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[46]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[47]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[62]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[48]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[64]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[65]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + ("(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))" "[66]" "(and (<= 4 (select |#length| |ULTIMATE.start_main_~#id~0#1.base|)) (= |ULTIMATE.start_main_~#id~0#1.offset| 0))") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/ConcurrencySafety.13-privatized_66-mine-W-init_true.i_BEv2_AllErrorsAtOnce.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/ConcurrencySafety.13-privatized_66-mine-W-init_true.i_BEv2_AllErrorsAtOnce.ats new file mode 100644 index 00000000000..19680935135 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/ConcurrencySafety.13-privatized_66-mine-W-init_true.i_BEv2_AllErrorsAtOnce.ats @@ -0,0 +1,217 @@ +// Testfile dumped by Ultimate at 2023/12/09 15:02:01 +// +// + +//@ variables (~__daylight~0 Int) (~tzname~0.base (Array Int Int)) (~daylight~0 Int) (~__tzname~0.offset (Array Int Int)) (~g~0 Int) (t_funThread1of1ForFork0_thidvar1 Int) (t_funThread1of1ForFork0_thidvar0 Int) (~__tzname~0.base (Array Int Int)) (~timezone~0 Int) (|#StackHeapBarrier| Int) (|#pthreadsForks| Int) (~__timezone~0 Int) (|#valid| (Array Int Int)) (|#memory_int| (Array Int (Array Int Int))) (|#length| (Array Int Int)) (~tzname~0.offset (Array Int Int)) (|write~int_#value| Int) (|write~int_#ptr.offset| Int) (|write~int_#sizeOfWrittenType| Int) (|write~int_#ptr.base| Int) (|#Ultimate.allocInit_ptrBase| Int) (|#Ultimate.allocInit_~size| Int) (|t_funThread1of1ForFork0_#in~arg.offset| Int) (t_funThread1of1ForFork0_~arg.offset Int) (|t_funThread1of1ForFork0_#in~arg.base| Int) (|t_funThread1of1ForFork0_#res.base| Int) (t_funThread1of1ForFork0_~arg.base Int) (|t_funThread1of1ForFork0_#res.offset| Int) (|ULTIMATE.start_main_~#id~0#1.base| Int) (|ULTIMATE.start___VERIFIER_assert_#in~cond#1| Int) (|ULTIMATE.start_main_#res#1| Int) (|ULTIMATE.start_#t~ret3#1| Int) (|ULTIMATE.start_main_#t~nondet2#1| Int) (|ULTIMATE.start_main_#t~pre1#1| Int) (|ULTIMATE.start_main_~#id~0#1.offset| Int) (|ULTIMATE.start___VERIFIER_assert_~cond#1| Int) (|write~init~int_#ptr.offset| Int) (|write~init~int_#sizeOfWrittenType| Int) (|write~init~int_#value| Int) (|write~init~int_#ptr.base| Int) (|t_fun_#in~arg.offset| Int) (|t_fun_#res.base| Int) (|t_fun_#res.offset| Int) (t_fun_~arg.base Int) (t_fun_~arg.offset Int) (|t_fun_#in~arg.base| Int) (|#Ultimate.allocOnStack_#res.base| Int) (|#Ultimate.allocOnStack_#res.offset| Int) (|#Ultimate.allocOnStack_~size| Int) (ULTIMATE.dealloc_~addr.offset Int) (ULTIMATE.dealloc_~addr.base Int) (~unnamed7~0~PTHREAD_PROCESS_PRIVATE Int) (~unnamed3~0~PTHREAD_PRIO_NONE Int) (~unnamed9~0~PTHREAD_CANCEL_ASYNCHRONOUS Int) (~unnamed2~0~PTHREAD_MUTEX_ROBUST Int) (~unnamed3~0~PTHREAD_PRIO_PROTECT Int) (~unnamed1~0~PTHREAD_MUTEX_RECURSIVE Int) (~unnamed3~0~PTHREAD_PRIO_INHERIT Int) (~unnamed4~0~PTHREAD_RWLOCK_DEFAULT_NP Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_READER_NP Int) (~unnamed0~0~PTHREAD_CREATE_JOINABLE Int) (~unnamed1~0~PTHREAD_MUTEX_ADAPTIVE_NP Int) (~unnamed2~0~PTHREAD_MUTEX_STALLED_NP Int) (~unnamed7~0~PTHREAD_PROCESS_SHARED Int) (~unnamed6~0~PTHREAD_SCOPE_SYSTEM Int) (~unnamed5~0~PTHREAD_EXPLICIT_SCHED Int) (~unnamed9~0~PTHREAD_CANCEL_DEFERRED Int) (~unnamed2~0~PTHREAD_MUTEX_STALLED Int) (|#funAddr~t_fun.offset| Int) (~unnamed1~0~PTHREAD_MUTEX_DEFAULT Int) (~unnamed8~0~PTHREAD_CANCEL_ENABLE Int) (|#funAddr~t_fun.base| Int) (~unnamed1~0~PTHREAD_MUTEX_NORMAL Int) (~unnamed2~0~PTHREAD_MUTEX_ROBUST_NP Int) (~unnamed0~0~PTHREAD_CREATE_DETACHED Int) (~unnamed1~0~PTHREAD_MUTEX_RECURSIVE_NP Int) (~unnamed5~0~PTHREAD_INHERIT_SCHED Int) (~unnamed1~0~PTHREAD_MUTEX_TIMED_NP Int) (~unnamed1~0~PTHREAD_MUTEX_ERRORCHECK_NP Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP Int) (~unnamed1~0~PTHREAD_MUTEX_ERRORCHECK Int) (~unnamed8~0~PTHREAD_CANCEL_DISABLE Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_WRITER_NP Int) (~unnamed6~0~PTHREAD_SCOPE_PROCESS Int) +//@ semantics [1] {ULTIMATE.start___VERIFIER_assert_#in~cond#1} true +//@ semantics [2] {} (and (= (select |#valid| 1) 1) (= 2 (select |#length| 1))) +//@ semantics [3] {ULTIMATE.start_main_~#id~0#1.base,ULTIMATE.start_main_#t~nondet2#1,ULTIMATE.start_main_#t~pre1#1,ULTIMATE.start_main_~#id~0#1.offset} true +//@ semantics [4] {ULTIMATE.start_main_#t~pre1#1} (= |ULTIMATE.start_main_#t~pre1#1| |#pthreadsForks|) +//@ semantics [5] {ULTIMATE.start_#t~ret3#1} (= |ULTIMATE.start_main_#res#1| |ULTIMATE.start_#t~ret3#1|) +//@ semantics [6] {ULTIMATE.start___VERIFIER_assert_~cond#1} true +//@ semantics [7] {ULTIMATE.start_main_~#id~0#1.base,ULTIMATE.start_main_#t~nondet2#1,ULTIMATE.start_main_#t~pre1#1,ULTIMATE.start_main_~#id~0#1.offset} true +//@ semantics [8] {} (= (select |#valid| 0) 0) +//@ semantics [9] {ULTIMATE.start_main_#t~pre1#1} true +//@ semantics [10] {ULTIMATE.start___VERIFIER_assert_~cond#1} (= |ULTIMATE.start___VERIFIER_assert_~cond#1| |ULTIMATE.start___VERIFIER_assert_#in~cond#1|) +//@ semantics [11] {~g~0} (= ~g~0 1) +//@ semantics [12] {ULTIMATE.start_main_~#id~0#1.base,#valid,#length,ULTIMATE.start_main_~#id~0#1.offset} (and (not (= |ULTIMATE.start_main_~#id~0#1.base| 0)) (= (select |old(#valid)| |ULTIMATE.start_main_~#id~0#1.base|) 0) (= (store |old(#length)| |ULTIMATE.start_main_~#id~0#1.base| 4) |#length|) (= |ULTIMATE.start_main_~#id~0#1.offset| 0) (< |#StackHeapBarrier| |ULTIMATE.start_main_~#id~0#1.base|) (= |#valid| (store |old(#valid)| |ULTIMATE.start_main_~#id~0#1.base| 1))) +//@ semantics [13] {} false +//@ semantics [14] {} true +//@ semantics [15] {t_funThread1of1ForFork0_~arg.offset,t_funThread1of1ForFork0_~arg.base} (and (= |t_funThread1of1ForFork0_#in~arg.base| t_funThread1of1ForFork0_~arg.base) (= t_funThread1of1ForFork0_~arg.offset |t_funThread1of1ForFork0_#in~arg.offset|)) +//@ semantics [16] {t_funThread1of1ForFork0_#res.base,t_funThread1of1ForFork0_#res.offset} (and (= |t_funThread1of1ForFork0_#res.offset| 0) (= |t_funThread1of1ForFork0_#res.base| 0)) +//@ semantics [17] {} true +//@ semantics [18] {} true +//@ semantics [19] {t_funThread1of1ForFork0_#in~arg.offset,t_funThread1of1ForFork0_~arg.offset,t_funThread1of1ForFork0_thidvar1,t_funThread1of1ForFork0_#res.base,t_funThread1of1ForFork0_#in~arg.base,t_funThread1of1ForFork0_~arg.base,t_funThread1of1ForFork0_thidvar0,t_funThread1of1ForFork0_#res.offset} (and (= |t_funThread1of1ForFork0_#in~arg.base| 0) (= t_funThread1of1ForFork0_thidvar1 0) (= |ULTIMATE.start_main_#t~pre1#1| t_funThread1of1ForFork0_thidvar0) (= |t_funThread1of1ForFork0_#in~arg.offset| 0)) +//@ semantics [20] {} true +//@ semantics [21] {} false +//@ semantics [22] {} (< 0 |#StackHeapBarrier|) +//@ semantics [23] {} (= (select (select |#memory_int| 1) 1) 0) +//@ semantics [24] {} (and (= 36 (select |#length| 2)) (= (select |#valid| 2) 1)) +//@ semantics [25] {~g~0} (= ~g~0 0) +//@ semantics [26] {ULTIMATE.start___VERIFIER_assert_#in~cond#1} (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| ~g~0) +//@ semantics [27] {ULTIMATE.start_main_~#id~0#1.base,ULTIMATE.start_main_~#id~0#1.offset} true +//@ semantics [28] {#memory_int} (= (store |old(#memory_int)| |ULTIMATE.start_main_~#id~0#1.base| (store (select |old(#memory_int)| |ULTIMATE.start_main_~#id~0#1.base|) |ULTIMATE.start_main_~#id~0#1.offset| |ULTIMATE.start_main_#t~pre1#1|)) |#memory_int|) +//@ semantics [29] {#valid} (= (store |old(#valid)| |ULTIMATE.start_main_~#id~0#1.base| 0) |#valid|) +//@ semantics [30] {} (= 48 (select (select |#memory_int| 1) 0)) +//@ semantics [31] {#pthreadsForks} (= (+ 1 |old(#pthreadsForks)|) |#pthreadsForks|) +//@ semantics [32] {ULTIMATE.start_main_#t~nondet2#1} true +//@ semantics [33] {ULTIMATE.start___VERIFIER_assert_~cond#1} true +//@ semantics [34] {} (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0) +//@ semantics [35] {} (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) +//@ semantics [36] {ULTIMATE.start_main_#res#1} (= |ULTIMATE.start_main_#res#1| 0) +//@ semantics [37] {ULTIMATE.start_main_#res#1} true + + +PetriNet program = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" }, + places = {l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l10 l11 l12 l13 l14 l15 l16 l17 l18 l19 l20 l21 l22 l23 l24 l25 l26 l27 l28 }, + transitions = { + ({l3 } "[20]" {l1 }) + ({l23 l15 } "[19]" {l21 l0 l16 }) + ({l20 } "[22]" {l24 }) + ({l17 } "[16]" {l4 }) + ({l5 } "[23]" {l9 }) + ({l9 } "[24]" {l10 }) + ({l10 } "[25]" {l25 }) + ({l19 } "[26]" {l8 }) + ({l26 } "[28]" {l23 }) + ({l13 } "[30]" {l5 }) + ({l4 } "[17]" {l6 }) + ({l14 } "[31]" {l26 }) + ({l22 } "[32]" {l18 }) + ({l8 } "[33]" {l27 }) + ({l7 } "[34]" {l3 }) + ({l0 } "[15]" {l17 }) + ({l25 } "[37]" {l28 }) + ({l24 } "[2]" {l13 }) + ({l28 } "[3]" {l11 }) + ({l12 } "[4]" {l14 }) + ({l2 } "[8]" {l20 }) + ({l21 } "[9]" {l22 }) + ({l27 } "[10]" {l7 }) + ({l18 } "[11]" {l19 }) + ({l11 } "[12]" {l12 }) + }, + initialMarking = {l2 l15 }, + acceptingPlaces = {l1 } +); +FiniteAutomaton proof1 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" }, + states = {"(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "false" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "true" "(= ~g~0 1)" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[2]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[3]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[4]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[5]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[7]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[8]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[9]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[12]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[14]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[15]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[16]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[17]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[18]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[20]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[22]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[23]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[24]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[27]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[28]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[29]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[30]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[31]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[32]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[34]" "false") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[36]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[37]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[7]" "false") + ("false" "[8]" "false") + ("false" "[9]" "false") + ("false" "[12]" "false") + ("false" "[14]" "false") + ("false" "[15]" "false") + ("false" "[16]" "false") + ("false" "[17]" "false") + ("false" "[18]" "false") + ("false" "[20]" "false") + ("false" "[22]" "false") + ("false" "[23]" "false") + ("false" "[24]" "false") + ("false" "[27]" "false") + ("false" "[28]" "false") + ("false" "[29]" "false") + ("false" "[30]" "false") + ("false" "[31]" "false") + ("false" "[32]" "false") + ("false" "[36]" "false") + ("false" "[37]" "false") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[2]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[3]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[4]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[5]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[7]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[8]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[9]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[10]" "(and (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 1) (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[12]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[14]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[15]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[16]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[17]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[18]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[20]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[22]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[23]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[24]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[27]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[28]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[29]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[30]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[31]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[32]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[33]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[36]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))" "[37]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[5]" "true") + ("true" "[7]" "true") + ("true" "[8]" "true") + ("true" "[9]" "true") + ("true" "[11]" "(= ~g~0 1)") + ("true" "[12]" "true") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "true") + ("true" "[17]" "true") + ("true" "[18]" "true") + ("true" "[19]" "true") + ("true" "[20]" "true") + ("true" "[22]" "true") + ("true" "[23]" "true") + ("true" "[24]" "true") + ("true" "[25]" "true") + ("true" "[27]" "true") + ("true" "[28]" "true") + ("true" "[29]" "true") + ("true" "[30]" "true") + ("true" "[31]" "true") + ("true" "[32]" "true") + ("true" "[36]" "true") + ("true" "[37]" "true") + ("(= ~g~0 1)" "[2]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[3]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[4]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[5]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[7]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[8]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[9]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[12]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[14]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[15]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[16]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[17]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[18]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[20]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[22]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[23]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[24]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[26]" "(and (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 1) (= ~g~0 1))") + ("(= ~g~0 1)" "[27]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[28]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[29]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[30]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[31]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[32]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[36]" "(= ~g~0 1)") + ("(= ~g~0 1)" "[37]" "(= ~g~0 1)") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/NoDataRace.rfi009_rmo.oepc.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/NoDataRace.rfi009_rmo.oepc.ats new file mode 100644 index 00000000000..47136ff46e3 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/NoDataRace.rfi009_rmo.oepc.ats @@ -0,0 +1,2375 @@ +// Testfile dumped by Ultimate at 2025/03/15 00:16:48 +// +// + +//@ variables (~daylight~0 Int) (|#race~main$tmp_guard0~0| Int) (P2Thread1of1ForFork1_thidvar3 Int) (~__unbuffered_p0_EAX$r_buff0_thd1~0 Int) (|#race~__unbuffered_p0_EAX$read_delayed~0| Int) (|#pthreadsForks| Int) (~__unbuffered_p0_EBX~0 Int) (|~#x~0.offset| Int) (~__unbuffered_p0_EAX$w_buff1~0 Int) (|#race~x$mem_tmp~0| Int) (~x$w_buff1~0 Int) (~x$r_buff1_thd2~0 Int) (~x$w_buff1_used~0 Int) (P2Thread1of1ForFork1_thidvar2 Int) (~__unbuffered_p0_EAX$r_buff1_thd2~0 Int) (~timezone~0 Int) (~weak$$choice0~0 Int) (|#race~weak$$choice2~0| Int) (P1Thread1of1ForFork0_thidvar2 Int) (|#race~__unbuffered_p1_EAX~0| Int) (|#race~x$r_buff0_thd1~0| Int) (~__unbuffered_cnt~0 Int) (~x$r_buff0_thd1~0 Int) (~__unbuffered_p0_EAX$w_buff0~0 Int) (~x$r_buff1_thd3~0 Int) (~x$mem_tmp~0 Int) (P0Thread1of1ForFork2_thidvar1 Int) (P2Thread1of1ForFork1_thidvar1 Int) (|#race~x$w_buff1~0| Int) (~__unbuffered_p0_EAX$flush_delayed~0 Int) (~tzname~0.offset (Array Int Int)) (~__unbuffered_p0_EAX$read_delayed~0 Int) (|#race~y~0| Int) (~__tzname~0.offset (Array Int Int)) (~__unbuffered_p0_EAX$w_buff0_used~0 Int) (~main$tmp_guard0~0 Int) (P0Thread1of1ForFork2_thidvar0 Int) (~x$r_buff1_thd0~0 Int) (|#race~__unbuffered_p0_EBX~0| Int) (~__unbuffered_p0_EAX$read_delayed_var~0.base Int) (~__tzname~0.base (Array Int Int)) (~__unbuffered_p0_EAX$r_buff1_thd0~0 Int) (~x$w_buff0_used~0 Int) (P2Thread1of1ForFork1_thidvar0 Int) (|#valid| (Array Int Int)) (~weak$$choice2~0 Int) (|#race~x$r_buff1_thd1~0| Int) (~x$read_delayed~0 Int) (~x$w_buff0~0 Int) (~x$flush_delayed~0 Int) (~x$r_buff1_thd1~0 Int) (~x$r_buff0_thd3~0 Int) (~__unbuffered_p0_EAX$r_buff1_thd3~0 Int) (|#race~x$flush_delayed~0| Int) (|#race~weak$$choice1~0| Int) (~__unbuffered_p0_EAX~0 Int) (~weak$$choice1~0 Int) (~__unbuffered_p1_EAX~0 Int) (~__timezone~0 Int) (|#race~x$r_buff0_thd2~0| Int) (|#length| (Array Int Int)) (|#race~x$w_buff1_used~0| Int) (|#race~x$r_buff1_thd0~0| Int) (~x$r_buff0_thd0~0 Int) (|#race~main$tmp_guard1~0| Int) (~__unbuffered_p0_EAX$r_buff0_thd0~0 Int) (~__unbuffered_p0_EAX$w_buff1_used~0 Int) (~x$read_delayed_var~0.base Int) (|#race~__unbuffered_p1_EBX~0| Int) (|#StackHeapBarrier| Int) (~__unbuffered_p0_EAX$mem_tmp~0 Int) (~__unbuffered_p0_EAX$r_buff0_thd3~0 Int) (|#race~x$r_buff1_thd3~0| Int) (|#race~x$r_buff0_thd0~0| Int) (|#race~__unbuffered_p0_EAX$read_delayed_var~0| Int) (~main$tmp_guard1~0 Int) (~__unbuffered_p0_EAX$r_buff1_thd1~0 Int) (P1Thread1of1ForFork0_thidvar1 Int) (|#race~x$w_buff0_used~0| Int) (~y~0 Int) (|#race~x$r_buff1_thd2~0| Int) (|#race~__unbuffered_cnt~0| Int) (~__daylight~0 Int) (|#race| (Array Int (Array Int Int))) (~tzname~0.base (Array Int Int)) (~__unbuffered_p1_EBX~0 Int) (~__unbuffered_p0_EAX$r_buff0_thd2~0 Int) (|#race~x$w_buff0~0| Int) (~x$r_buff0_thd2~0 Int) (~x$read_delayed_var~0.offset Int) (|#race~weak$$choice0~0| Int) (P1Thread1of1ForFork0_thidvar0 Int) (|#race~x$r_buff0_thd3~0| Int) (~__unbuffered_p0_EAX$read_delayed_var~0.offset Int) (|~#x~0.base| Int) (|#memory_int| (Array Int (Array Int Int))) (|#race~__unbuffered_p0_EAX~0| Int) (|P0_#t~short12| Bool) (|P0_#t~nondet79| Int) (|P0_#t~short10| Bool) (|P0_#t~nondet77| Int) (|P0_#t~mem8| Int) (|P0_#t~nondet71| Int) (|P0_#t~ite35| Int) (|P0_#t~ite16| Int) (|P0_#t~short40| Bool) (|P0_#t~short63| Bool) (|P0_#t~short65| Bool) (|P0_#t~short46| Bool) (|P0_#t~short67| Bool) (|P0_#t~short48| Bool) (P0_~arg.offset Int) (|P0_#t~ite33| Int) (|P0_#t~ite52| Int) (|P0_#t~nondet9| Int) (|P0_#t~nondet62| Int) (|P0_#t~short23| Bool) (|P0_#t~short21| Bool) (|P0_#t~nondet45| Int) (|P0_#in~arg.base| Int) (P0_~arg.base Int) (|P0_#t~ite24| Int) (|P0_#t~ite26| Int) (|P0_#t~ite68| Int) (|P0_#t~short50| Bool) (|P0_#t~short31| Bool) (|P0_#t~nondet3| Int) (|P0_#t~nondet36| Int) (|P0_#t~short54| Bool) (|P0_#t~short56| Bool) (|P0_#t~ite60| Int) (|P0_#t~nondet7| Int) (|P0_#t~ite43| Int) (|P0_#t~short37| Bool) (|P0_#t~short58| Bool) (|P0_#t~nondet5| Int) (|P0_#t~short39| Bool) (|P0_#in~arg.offset| Int) (|P0_#t~nondet74| Int) (|P0_#t~short15| Bool) (|P0_#t~nondet53| Int) (|P0_#t~nondet72| Int) (|P0_#t~short13| Bool) (|P0_#t~nondet78| Int) (|P0_#t~short11| Bool) (|P0_#res.base| Int) (|P0_#t~nondet70| Int) (|P0_#t~ite34| Int) (|P0_#t~ite59| Int) (|P0_#t~ite17| Int) (|P0_#t~short41| Bool) (|P0_#t~short64| Bool) (|P0_#t~short66| Bool) (|P0_#t~ite51| Int) (|P0_#t~nondet27| Int) (|P0_#t~short47| Bool) (|P0_#t~ite76| Int) (|P0_#t~short49| Bool) (|P0_#t~short29| Bool) (|P0_#t~short28| Bool) (|P0_#t~short22| Bool) (|P0_#t~short20| Bool) (|P0_#t~mem14| Int) (|P0_#t~mem75| Int) (|P0_#t~nondet80| Int) (|P0_#t~ite69| Int) (|P0_#t~mem73| Int) (|P0_#t~ite25| Int) (|P0_#res.offset| Int) (|P0_#t~short30| Bool) (|P0_#t~short32| Bool) (|P0_#t~ite61| Int) (|P0_#t~short55| Bool) (|P0_#t~nondet4| Int) (|P0_#t~short57| Bool) (|P0_#t~nondet18| Int) (|P0_#t~ite44| Int) (|P0_#t~short19| Bool) (|P0_#t~short38| Bool) (|P0_#t~nondet6| Int) (|P0_#t~ite42| Int) (|P2Thread1of1ForFork1_#t~short177| Bool) (|P2Thread1of1ForFork1_#t~ite179| Int) (|P2Thread1of1ForFork1_#t~short176| Bool) (|P2Thread1of1ForFork1_#t~short173| Bool) (|P2Thread1of1ForFork1_#t~short170| Bool) (|P2Thread1of1ForFork1_#t~ite171| Int) (|P2Thread1of1ForFork1_#t~nondet164| Int) (|P2Thread1of1ForFork1_#t~ite174| Int) (|P2Thread1of1ForFork1_#t~short159| Bool) (|P2Thread1of1ForFork1_#t~short178| Bool) (|P2Thread1of1ForFork1_#t~nondet167| Int) (|P2Thread1of1ForFork1_#t~nondet172| Int) (P2Thread1of1ForFork1_~arg.base Int) (|P2Thread1of1ForFork1_#res.offset| Int) (|P2Thread1of1ForFork1_#in~arg.offset| Int) (|P2Thread1of1ForFork1_#t~short165| Bool) (|P2Thread1of1ForFork1_#t~ite166| Int) (P2Thread1of1ForFork1_~arg.offset Int) (|P2Thread1of1ForFork1_#res.base| Int) (|P2Thread1of1ForFork1_#t~short160| Bool) (|P2Thread1of1ForFork1_#t~nondet175| Int) (|P2Thread1of1ForFork1_#t~nondet158| Int) (|P2Thread1of1ForFork1_#t~ite163| Int) (|P2Thread1of1ForFork1_#t~short169| Bool) (|P2Thread1of1ForFork1_#t~short168| Bool) (|P2Thread1of1ForFork1_#t~ite162| Int) (|P2Thread1of1ForFork1_#t~nondet180| Int) (|P2Thread1of1ForFork1_#t~mem161| Int) (|P2Thread1of1ForFork1_#t~nondet181| Int) (|P2Thread1of1ForFork1_#in~arg.base| Int) (|P1_#t~ite141| Int) (|P1_#t~short120| Bool) (|P1_#t~ite122| Int) (|P1_#t~nondet116| Int) (|P1_#t~short145| Bool) (|P1_#t~nondet156| Int) (|P1_#t~nondet98| Int) (|P1_#t~short101| Bool) (|P1_#t~short143| Bool) (|P1_#t~nondet133| Int) (|P1_#t~nondet152| Int) (|P1_#t~nondet150| Int) (|P1_#t~mem88| Int) (|P1_#t~ite105| Int) (|P1_#t~short103| Bool) (|P1_#t~short126| Bool) (|P1_#t~ite96| Int) (|P1_#t~short128| Bool) (|P1_#t~ite149| Int) (|P1_#t~short147| Bool) (P1_~arg.offset Int) (|P1_#t~ite124| Int) (|P1_#t~short109| Bool) (|P1_#t~nondet85| Int) (|P1_#t~ite131| Int) (|P1_#t~short130| Bool) (|P1_#t~ite154| Int) (|P1_#t~nondet83| Int) (|P1_#t~nondet89| Int) (|P1_#t~short111| Bool) (|P1_#t~short134| Bool) (|P1_#t~nondet87| Int) (|P1_#in~arg.base| Int) (|P1_#t~nondet81| Int) (|P1_#t~mem151| Int) (|P1_#t~mem153| Int) (P1_~arg.base Int) (|P1_#t~short92| Bool) (|P1_#t~short90| Bool) (|P1_#t~short138| Bool) (|P1_#t~ite139| Int) (|P1_#t~short117| Bool) (|P1_#t~short136| Bool) (|P1_#t~nondet107| Int) (|P1_#t~short119| Bool) (|P1_#t~ite114| Int) (|P1_#t~short100| Bool) (|P1_#t~short121| Bool) (|P1_#t~short146| Bool) (|P1_#t~nondet157| Int) (|P1_#t~ite140| Int) (|P1_#in~arg.offset| Int) (|P1_#t~short102| Bool) (|P1_#t~short144| Bool) (|P1_#t~nondet155| Int) (|P1_#res.base| Int) (|P1_#t~ite106| Int) (|P1_#t~ite97| Int) (|P1_#t~short127| Bool) (|P1_#t~short108| Bool) (|P1_#t~ite123| Int) (|P1_#t~short129| Bool) (|P1_#t~ite148| Int) (|P1_#t~ite104| Int) (|P1_#t~nondet84| Int) (|P1_#t~nondet125| Int) (|P1_#t~nondet82| Int) (|P1_#t~ite132| Int) (|P1_#t~short110| Bool) (|P1_#t~short135| Bool) (|P1_#t~nondet86| Int) (|P1_#t~short112| Bool) (|P1_#t~nondet142| Int) (|P1_#t~short91| Bool) (|P1_#t~mem94| Int) (|P1_#res.offset| Int) (|P1_#t~short95| Bool) (|P1_#t~short93| Bool) (|P1_#t~short99| Bool) (|P1_#t~short137| Bool) (|P1_#t~ite113| Int) (|P1_#t~short118| Bool) (|P1_#t~ite115| Int) (|#Ultimate.allocInit_ptrBase| Int) (|#Ultimate.allocInit_~size| Int) (|P2_#t~nondet158| Int) (|P2_#t~ite162| Int) (|P2_#t~ite163| Int) (|P2_#t~short160| Bool) (|P2_#in~arg.offset| Int) (|P2_#t~short165| Bool) (|P2_#t~nondet175| Int) (|P2_#res.base| Int) (|P2_#t~nondet172| Int) (|P2_#t~mem161| Int) (|P2_#t~short169| Bool) (|P2_#t~short168| Bool) (P2_~arg.offset Int) (|P2_#t~ite166| Int) (|P2_#t~short176| Bool) (|P2_#t~ite174| Int) (|P2_#t~short177| Bool) (|P2_#t~short178| Bool) (|P2_#t~nondet167| Int) (|P2_#t~ite171| Int) (|P2_#t~short173| Bool) (|P2_#t~nondet164| Int) (|P2_#in~arg.base| Int) (|P2_#res.offset| Int) (|P2_#t~short170| Bool) (P2_~arg.base Int) (|P2_#t~nondet180| Int) (|P2_#t~nondet181| Int) (|P2_#t~short159| Bool) (|P2_#t~ite179| Int) (|P1Thread1of1ForFork0_#t~nondet156| Int) (|P1Thread1of1ForFork0_#t~mem88| Int) (|P1Thread1of1ForFork0_#t~short138| Bool) (|P1Thread1of1ForFork0_#t~short117| Bool) (|P1Thread1of1ForFork0_#t~short136| Bool) (|P1Thread1of1ForFork0_#t~ite113| Int) (|P1Thread1of1ForFork0_#t~nondet107| Int) (|P1Thread1of1ForFork0_#t~ite115| Int) (|P1Thread1of1ForFork0_#t~short119| Bool) (|P1Thread1of1ForFork0_#t~nondet98| Int) (|P1Thread1of1ForFork0_#t~ite132| Int) (|P1Thread1of1ForFork0_#t~short130| Bool) (|P1Thread1of1ForFork0_#t~short134| Bool) (|P1Thread1of1ForFork0_#t~short90| Bool) (|P1Thread1of1ForFork0_#t~short111| Bool) (|P1Thread1of1ForFork0_#t~short92| Bool) (|P1Thread1of1ForFork0_#t~mem94| Int) (|P1Thread1of1ForFork0_#res.offset| Int) (|P1Thread1of1ForFork0_#t~ite105| Int) (|P1Thread1of1ForFork0_#t~short127| Bool) (|P1Thread1of1ForFork0_#t~ite149| Int) (|P1Thread1of1ForFork0_#t~ite97| Int) (|P1Thread1of1ForFork0_#t~ite124| Int) (|P1Thread1of1ForFork0_#t~short108| Bool) (|P1Thread1of1ForFork0_#t~short129| Bool) (|P1Thread1of1ForFork0_#in~arg.offset| Int) (|P1Thread1of1ForFork0_#t~nondet86| Int) (|P1Thread1of1ForFork0_#t~ite122| Int) (|P1Thread1of1ForFork0_#t~ite141| Int) (|P1Thread1of1ForFork0_#t~short146| Bool) (|P1Thread1of1ForFork0_#t~nondet82| Int) (|P1Thread1of1ForFork0_#t~short102| Bool) (|P1Thread1of1ForFork0_#t~short121| Bool) (|P1Thread1of1ForFork0_#t~short144| Bool) (|P1Thread1of1ForFork0_#t~nondet84| Int) (|P1Thread1of1ForFork0_#t~short100| Bool) (|P1Thread1of1ForFork0_#t~nondet155| Int) (|P1Thread1of1ForFork0_#t~nondet157| Int) (|P1Thread1of1ForFork0_#t~short99| Bool) (|P1Thread1of1ForFork0_#t~short137| Bool) (|P1Thread1of1ForFork0_#t~ite139| Int) (|P1Thread1of1ForFork0_#in~arg.base| Int) (|P1Thread1of1ForFork0_#t~short118| Bool) (|P1Thread1of1ForFork0_#t~ite114| Int) (|P1Thread1of1ForFork0_#t~short93| Bool) (|P1Thread1of1ForFork0_#t~ite154| Int) (|P1Thread1of1ForFork0_#t~nondet125| Int) (|P1Thread1of1ForFork0_#t~short95| Bool) (|P1Thread1of1ForFork0_#t~ite131| Int) (|P1Thread1of1ForFork0_#t~short135| Bool) (|P1Thread1of1ForFork0_#t~short112| Bool) (|P1Thread1of1ForFork0_#t~short110| Bool) (|P1Thread1of1ForFork0_#t~short91| Bool) (|P1Thread1of1ForFork0_#t~nondet142| Int) (|P1Thread1of1ForFork0_#t~nondet81| Int) (P1Thread1of1ForFork0_~arg.base Int) (|P1Thread1of1ForFork0_#t~mem151| Int) (|P1Thread1of1ForFork0_#t~mem153| Int) (|P1Thread1of1ForFork0_#t~ite96| Int) (|P1Thread1of1ForFork0_#t~short128| Bool) (|P1Thread1of1ForFork0_#t~ite106| Int) (|P1Thread1of1ForFork0_#t~short103| Bool) (|P1Thread1of1ForFork0_#t~short126| Bool) (|P1Thread1of1ForFork0_#t~short147| Bool) (P1Thread1of1ForFork0_~arg.offset Int) (|P1Thread1of1ForFork0_#t~short109| Bool) (|P1Thread1of1ForFork0_#t~ite148| Int) (|P1Thread1of1ForFork0_#t~ite123| Int) (|P1Thread1of1ForFork0_#t~ite104| Int) (|P1Thread1of1ForFork0_#t~nondet116| Int) (|P1Thread1of1ForFork0_#t~short120| Bool) (|P1Thread1of1ForFork0_#t~nondet87| Int) (|P1Thread1of1ForFork0_#t~nondet89| Int) (|P1Thread1of1ForFork0_#t~short101| Bool) (|P1Thread1of1ForFork0_#t~nondet150| Int) (|P1Thread1of1ForFork0_#t~ite140| Int) (|P1Thread1of1ForFork0_#res.base| Int) (|P1Thread1of1ForFork0_#t~short145| Bool) (|P1Thread1of1ForFork0_#t~nondet83| Int) (|P1Thread1of1ForFork0_#t~nondet133| Int) (|P1Thread1of1ForFork0_#t~nondet152| Int) (|P1Thread1of1ForFork0_#t~short143| Bool) (|P1Thread1of1ForFork0_#t~nondet85| Int) (|write~init~int_#ptr.offset| Int) (|write~init~int_#sizeOfWrittenType| Int) (|write~init~int_#value| Int) (|write~init~int_#ptr.base| Int) (|write~int_#value| Int) (|write~int_#ptr.offset| Int) (|write~int_#sizeOfWrittenType| Int) (|write~int_#ptr.base| Int) (|ULTIMATE.start_main_#t~ite204#1| Int) (|ULTIMATE.start_main_#t~nondet216#1| Int) (|ULTIMATE.start_main_#t~nondet188#1| Int) (|ULTIMATE.start_main_#t~short203#1| Bool) (|ULTIMATE.start_main_#t~ite192#1| Int) (|ULTIMATE.start_main_#t~pre182#1| Int) (|ULTIMATE.start_main_#t~nondet194#1| Int) (|ULTIMATE.start_main_#t~short206#1| Bool) (|ULTIMATE.start_main_#t~ite215#1| Int) (|ULTIMATE.start_main_#t~short207#1| Bool) (|ULTIMATE.start_main_#t~nondet210#1| Int) (|ULTIMATE.start_main_#t~short200#1| Bool) (|ULTIMATE.start_reach_error_#t~nondet0#1.offset| Int) (|ULTIMATE.start_main_#t~short189#1| Bool) (|ULTIMATE.start___VERIFIER_assert_#in~expression#1| Int) (|ULTIMATE.start_main_#t~nondet211#1| Int) (|ULTIMATE.start_main_#t~short208#1| Bool) (|ULTIMATE.start_#t~ret221#1| Int) (|ULTIMATE.start_main_#t~nondet187#1| Int) (|ULTIMATE.start_main_#t~mem191#1| Int) (|ULTIMATE.start_main_#t~nondet220#1| Int) (|ULTIMATE.start_main_#t~short217#1| Bool) (|ULTIMATE.start___VERIFIER_assert_~expression#1| Int) (|ULTIMATE.start_main_#t~ite209#1| Int) (|ULTIMATE.start_main_#t~pre186#1| Int) (|ULTIMATE.start_main_#t~ite196#1| Int) (|ULTIMATE.start_main_#t~nondet212#1| Int) (|ULTIMATE.start_main_#t~mem213#1| Int) (|ULTIMATE.start_main_#t~short218#1| Bool) (|ULTIMATE.start_main_#t~short195#1| Bool) (|ULTIMATE.start_assume_abort_if_not_~cond#1| Int) (|ULTIMATE.start_main_~t1750~0#1| Int) (|ULTIMATE.start_main_#t~nondet205#1| Int) (|ULTIMATE.start_main_#t~short219#1| Bool) (|ULTIMATE.start_main_#t~nondet185#1| Int) (|ULTIMATE.start_main_#res#1| Int) (|ULTIMATE.start_main_#t~short199#1| Bool) (|ULTIMATE.start_main_#t~short198#1| Bool) (|ULTIMATE.start_main_#t~ite214#1| Int) (|ULTIMATE.start_main_#t~ite201#1| Int) (|ULTIMATE.start_main_#t~short190#1| Bool) (|ULTIMATE.start_main_#t~nondet197#1| Int) (|ULTIMATE.start_main_#t~ite193#1| Int) (|ULTIMATE.start_main_#t~pre184#1| Int) (|ULTIMATE.start_main_~t1751~0#1| Int) (|ULTIMATE.start_main_#t~nondet202#1| Int) (|ULTIMATE.start_reach_error_#t~nondet0#1.base| Int) (|ULTIMATE.start_main_~t1749~0#1| Int) (|ULTIMATE.start_main_#t~nondet183#1| Int) (|ULTIMATE.start_assume_abort_if_not_#in~cond#1| Int) (|read~int_#sizeOfReadType| Int) (|read~int_#ptr.offset| Int) (|read~int_#ptr.base| Int) (|read~int_#value| Int) (|P0Thread1of1ForFork2_#t~ite33| Int) (|P0Thread1of1ForFork2_#t~nondet18| Int) (|P0Thread1of1ForFork2_#t~ite35| Int) (|P0Thread1of1ForFork2_#t~short40| Bool) (|P0Thread1of1ForFork2_#res.offset| Int) (|P0Thread1of1ForFork2_#t~mem8| Int) (|P0Thread1of1ForFork2_#t~nondet80| Int) (P0Thread1of1ForFork2_~arg.base Int) (|P0Thread1of1ForFork2_#t~short48| Bool) (|P0Thread1of1ForFork2_#t~short46| Bool) (|P0Thread1of1ForFork2_#t~short23| Bool) (|P0Thread1of1ForFork2_#t~short21| Bool) (|P0Thread1of1ForFork2_#t~short63| Bool) (P0Thread1of1ForFork2_~arg.offset Int) (|P0Thread1of1ForFork2_#t~ite16| Int) (|P0Thread1of1ForFork2_#t~short65| Bool) (|P0Thread1of1ForFork2_#t~short67| Bool) (|P0Thread1of1ForFork2_#t~short29| Bool) (|P0Thread1of1ForFork2_#t~ite52| Int) (|P0Thread1of1ForFork2_#t~ite44| Int) (|P0Thread1of1ForFork2_#t~nondet27| Int) (|P0Thread1of1ForFork2_#t~ite25| Int) (|P0Thread1of1ForFork2_#t~ite69| Int) (|P0Thread1of1ForFork2_#t~nondet71| Int) (|P0Thread1of1ForFork2_#t~short15| Bool) (|P0Thread1of1ForFork2_#t~short57| Bool) (|P0Thread1of1ForFork2_#t~short13| Bool) (|P0Thread1of1ForFork2_#t~short55| Bool) (|P0Thread1of1ForFork2_#t~short11| Bool) (|P0Thread1of1ForFork2_#t~short32| Bool) (|P0Thread1of1ForFork2_#t~nondet77| Int) (|P0Thread1of1ForFork2_#t~short30| Bool) (|P0Thread1of1ForFork2_#t~nondet79| Int) (|P0Thread1of1ForFork2_#t~nondet4| Int) (|P0Thread1of1ForFork2_#t~ite61| Int) (|P0Thread1of1ForFork2_#t~short19| Bool) (|P0Thread1of1ForFork2_#t~nondet6| Int) (|P0Thread1of1ForFork2_#t~short38| Bool) (|P0Thread1of1ForFork2_#t~ite42| Int) (|P0Thread1of1ForFork2_#t~ite34| Int) (|P0Thread1of1ForFork2_#t~ite76| Int) (|P0Thread1of1ForFork2_#t~ite59| Int) (|P0Thread1of1ForFork2_#t~nondet36| Int) (|P0Thread1of1ForFork2_#t~mem75| Int) (|P0Thread1of1ForFork2_#res.base| Int) (|P0Thread1of1ForFork2_#t~mem73| Int) (|P0Thread1of1ForFork2_#t~mem14| Int) (|P0Thread1of1ForFork2_#t~short47| Bool) (|P0Thread1of1ForFork2_#t~nondet62| Int) (|P0Thread1of1ForFork2_#in~arg.offset| Int) (|P0Thread1of1ForFork2_#t~short22| Bool) (|P0Thread1of1ForFork2_#t~short41| Bool) (|P0Thread1of1ForFork2_#t~short20| Bool) (|P0Thread1of1ForFork2_#t~nondet45| Int) (|P0Thread1of1ForFork2_#t~ite17| Int) (|P0Thread1of1ForFork2_#t~short64| Bool) (|P0Thread1of1ForFork2_#t~short66| Bool) (|P0Thread1of1ForFork2_#t~ite51| Int) (|P0Thread1of1ForFork2_#t~short49| Bool) (|P0Thread1of1ForFork2_#t~short28| Bool) (|P0Thread1of1ForFork2_#t~ite43| Int) (|P0Thread1of1ForFork2_#t~ite68| Int) (|P0Thread1of1ForFork2_#t~ite26| Int) (|P0Thread1of1ForFork2_#t~short50| Bool) (|P0Thread1of1ForFork2_#in~arg.base| Int) (|P0Thread1of1ForFork2_#t~short37| Bool) (|P0Thread1of1ForFork2_#t~nondet7| Int) (|P0Thread1of1ForFork2_#t~nondet70| Int) (|P0Thread1of1ForFork2_#t~short12| Bool) (|P0Thread1of1ForFork2_#t~nondet9| Int) (|P0Thread1of1ForFork2_#t~short56| Bool) (|P0Thread1of1ForFork2_#t~nondet72| Int) (|P0Thread1of1ForFork2_#t~short10| Bool) (|P0Thread1of1ForFork2_#t~short54| Bool) (|P0Thread1of1ForFork2_#t~nondet74| Int) (|P0Thread1of1ForFork2_#t~nondet53| Int) (|P0Thread1of1ForFork2_#t~short31| Bool) (|P0Thread1of1ForFork2_#t~nondet78| Int) (|P0Thread1of1ForFork2_#t~ite60| Int) (|P0Thread1of1ForFork2_#t~ite24| Int) (|P0Thread1of1ForFork2_#t~nondet3| Int) (|P0Thread1of1ForFork2_#t~short58| Bool) (|P0Thread1of1ForFork2_#t~short39| Bool) (|P0Thread1of1ForFork2_#t~nondet5| Int) (~unnamed7~0~PTHREAD_PROCESS_PRIVATE Int) (~unnamed3~0~PTHREAD_PRIO_NONE Int) (~unnamed9~0~PTHREAD_CANCEL_ASYNCHRONOUS Int) (~unnamed2~0~PTHREAD_MUTEX_ROBUST Int) (|#funAddr~P2.offset| Int) (~unnamed3~0~PTHREAD_PRIO_PROTECT Int) (|#funAddr~P1.offset| Int) (~unnamed1~0~PTHREAD_MUTEX_RECURSIVE Int) (~unnamed3~0~PTHREAD_PRIO_INHERIT Int) (~unnamed4~0~PTHREAD_RWLOCK_DEFAULT_NP Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_READER_NP Int) (~unnamed0~0~PTHREAD_CREATE_JOINABLE Int) (~unnamed1~0~PTHREAD_MUTEX_ADAPTIVE_NP Int) (~unnamed2~0~PTHREAD_MUTEX_STALLED_NP Int) (|#funAddr~P0.offset| Int) (~unnamed7~0~PTHREAD_PROCESS_SHARED Int) (~unnamed6~0~PTHREAD_SCOPE_SYSTEM Int) (~unnamed5~0~PTHREAD_EXPLICIT_SCHED Int) (~unnamed9~0~PTHREAD_CANCEL_DEFERRED Int) (~unnamed2~0~PTHREAD_MUTEX_STALLED Int) (|#funAddr~P2.base| Int) (~unnamed1~0~PTHREAD_MUTEX_DEFAULT Int) (~unnamed8~0~PTHREAD_CANCEL_ENABLE Int) (|#funAddr~P0.base| Int) (~unnamed1~0~PTHREAD_MUTEX_NORMAL Int) (~unnamed2~0~PTHREAD_MUTEX_ROBUST_NP Int) (~unnamed0~0~PTHREAD_CREATE_DETACHED Int) (~unnamed1~0~PTHREAD_MUTEX_RECURSIVE_NP Int) (|#funAddr~P1.base| Int) (~unnamed5~0~PTHREAD_INHERIT_SCHED Int) (~unnamed1~0~PTHREAD_MUTEX_TIMED_NP Int) (~unnamed1~0~PTHREAD_MUTEX_ERRORCHECK_NP Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP Int) (~unnamed1~0~PTHREAD_MUTEX_ERRORCHECK Int) (~unnamed8~0~PTHREAD_CANCEL_DISABLE Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_WRITER_NP Int) (~unnamed6~0~PTHREAD_SCOPE_PROCESS Int) +//@ semantics [1] {~__unbuffered_p0_EAX$w_buff0~0} (= ~__unbuffered_p0_EAX$w_buff0~0 0) +//@ semantics [2] {~__unbuffered_p0_EAX$r_buff0_thd2~0} (= ~__unbuffered_p0_EAX$r_buff0_thd2~0 0) +//@ semantics [3] {~__unbuffered_p0_EAX$read_delayed_var~0.offset,~__unbuffered_p0_EAX$read_delayed_var~0.base} (and (= ~__unbuffered_p0_EAX$read_delayed_var~0.offset 0) (= ~__unbuffered_p0_EAX$read_delayed_var~0.base 0)) +//@ semantics [4] {~x$w_buff0~0} (= 0 ~x$w_buff0~0) +//@ semantics [5] {~#x~0.offset,~#x~0.base} (and (= 3 |~#x~0.base|) (= |~#x~0.offset| 0)) +//@ semantics [6] {ULTIMATE.start___VERIFIER_assert_~expression#1} (= |ULTIMATE.start___VERIFIER_assert_~expression#1| |ULTIMATE.start___VERIFIER_assert_#in~expression#1|) +//@ semantics [7] {~x$r_buff1_thd3~0} (= ~x$r_buff1_thd3~0 0) +//@ semantics [8] {ULTIMATE.start_reach_error_#t~nondet0#1.offset,ULTIMATE.start_reach_error_#t~nondet0#1.base} true +//@ semantics [9] {~__unbuffered_p0_EAX$r_buff0_thd1~0} (= ~__unbuffered_p0_EAX$r_buff0_thd1~0 0) +//@ semantics [10] {~weak$$choice0~0} (= ~weak$$choice0~0 0) +//@ semantics [11] {ULTIMATE.start_main_#t~nondet183#1} true +//@ semantics [12] {~__unbuffered_p0_EAX$w_buff1_used~0} (= ~__unbuffered_p0_EAX$w_buff1_used~0 0) +//@ semantics [13] {} false +//@ semantics [14] {} true +//@ semantics [15] {} (= |ULTIMATE.start_assume_abort_if_not_~cond#1| 0) +//@ semantics [16] {} (not (= |ULTIMATE.start_assume_abort_if_not_~cond#1| 0)) +//@ semantics [17] {~__unbuffered_p0_EAX$r_buff1_thd2~0} (= ~__unbuffered_p0_EAX$r_buff1_thd2~0 0) +//@ semantics [18] {ULTIMATE.start_assume_abort_if_not_~cond#1} true +//@ semantics [19] {} false +//@ semantics [20] {~__unbuffered_p0_EAX$r_buff0_thd3~0} (= ~__unbuffered_p0_EAX$r_buff0_thd3~0 0) +//@ semantics [21] {~__unbuffered_p1_EBX~0} (= ~__unbuffered_p1_EBX~0 0) +//@ semantics [22] {ULTIMATE.start_reach_error_#t~nondet0#1.offset,ULTIMATE.start_reach_error_#t~nondet0#1.base} true +//@ semantics [23] {ULTIMATE.start___VERIFIER_assert_~expression#1} true +//@ semantics [24] {} false +//@ semantics [25] {#race~x$w_buff0_used~0} false +//@ semantics [26] {ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0} false +//@ semantics [27] {ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0} false +//@ semantics [28] {ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short190#1} false +//@ semantics [29] {ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short190#1,#race~x$r_buff1_thd0~0} false +//@ semantics [30] {ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0,#race~x$w_buff0~0} false +//@ semantics [31] {#race,ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short190#1,#race~x$r_buff1_thd0~0} [(|v_ULTIMATE.start_main_#t~short189#1_582| Bool) (|v_ULTIMATE.start_main_#t~short190#1_476| Bool)] (let ((.cse3 (not |v_ULTIMATE.start_main_#t~short189#1_582|)) (.cse8 (not |ULTIMATE.start_main_#t~short189#1|)) (.cse6 (+ 2 |~#x~0.offset|)) (.cse5 (+ |~#x~0.offset| 1)) (.cse7 (+ 3 |~#x~0.offset|)) (.cse1 (not |ULTIMATE.start_main_#t~short190#1|)) (.cse2 (not |v_ULTIMATE.start_main_#t~short190#1_476|))) (and (or (and |v_ULTIMATE.start_main_#t~short190#1_476| (let ((.cse0 (= (mod ~x$r_buff1_thd0~0 256) 0))) (or (and |ULTIMATE.start_main_#t~short190#1| (not .cse0)) (and .cse0 .cse1))) (= |#race~x$r_buff1_thd0~0| 0)) (and (= |old(#race~x$r_buff1_thd0~0)| |#race~x$r_buff1_thd0~0|) .cse2 (= |ULTIMATE.start_main_#t~short190#1| |v_ULTIMATE.start_main_#t~short190#1_476|))) (let ((.cse4 (= (mod ~x$w_buff0_used~0 256) 0))) (or (and .cse3 .cse4) (and |v_ULTIMATE.start_main_#t~short189#1_582| (not .cse4)))) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse5 0) .cse6 0) .cse7 0))) (= |#race~x$w_buff1_used~0| 0) (or (and (= |v_ULTIMATE.start_main_#t~short189#1_582| |ULTIMATE.start_main_#t~short189#1|) .cse3 (= |old(#race~x$r_buff0_thd0~0)| |#race~x$r_buff0_thd0~0|)) (and (= |#race~x$r_buff0_thd0~0| 0) |v_ULTIMATE.start_main_#t~short189#1_582| (let ((.cse9 (= 0 (mod ~x$r_buff0_thd0~0 256)))) (or (and .cse8 .cse9) (and (not .cse9) |ULTIMATE.start_main_#t~short189#1|))))) .cse8 (let ((.cse10 (select |#race| |~#x~0.base|))) (or (not (= (select .cse10 |~#x~0.offset|) 0)) (not (= (select .cse10 .cse6) 0)) (not (= (select .cse10 .cse5) 0)) (not (= (select .cse10 .cse7) 0)))) .cse1 (let ((.cse11 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and .cse11 .cse2) (and |v_ULTIMATE.start_main_#t~short190#1_476| (not .cse11)))) (= (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|) |ULTIMATE.start_main_#t~mem191#1|) (= |#race~x$w_buff0_used~0| 0))) +//@ semantics [32] {#race,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#memory_int,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff0~0} [(|v_ULTIMATE.start_main_#t~short189#1_584| Bool)] (let ((.cse2 (+ |~#x~0.offset| 1)) (.cse3 (+ 2 |~#x~0.offset|)) (.cse4 (+ 3 |~#x~0.offset|)) (.cse1 (not |v_ULTIMATE.start_main_#t~short189#1_584|))) (and (or (and (let ((.cse0 (= (mod ~x$r_buff0_thd0~0 256) 0))) (or (and |ULTIMATE.start_main_#t~short189#1| (not .cse0)) (and (not |ULTIMATE.start_main_#t~short189#1|) .cse0))) (= |#race~x$r_buff0_thd0~0| 0) |v_ULTIMATE.start_main_#t~short189#1_584|) (and (= |old(#race~x$r_buff0_thd0~0)| |#race~x$r_buff0_thd0~0|) (= |v_ULTIMATE.start_main_#t~short189#1_584| |ULTIMATE.start_main_#t~short189#1|) .cse1)) (= ~x$w_buff0~0 |ULTIMATE.start_main_#t~ite193#1|) (= |#race~x$w_buff0~0| 0) |ULTIMATE.start_main_#t~short189#1| (= (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| |ULTIMATE.start_main_#t~ite193#1|)) |#memory_int|) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| |ULTIMATE.start_main_#t~nondet194#1|) .cse2 |ULTIMATE.start_main_#t~nondet194#1|) .cse3 |ULTIMATE.start_main_#t~nondet194#1|) .cse4 |ULTIMATE.start_main_#t~nondet194#1|))) (= |#race~x$w_buff0_used~0| 0) (let ((.cse5 (select |#race| |~#x~0.base|))) (or (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse5 |~#x~0.offset|))) (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse5 .cse2))) (not (= (select .cse5 .cse3) |ULTIMATE.start_main_#t~nondet194#1|)) (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse5 .cse4))))) (let ((.cse6 (= (mod ~x$w_buff0_used~0 256) 0))) (or (and |v_ULTIMATE.start_main_#t~short189#1_584| (not .cse6)) (and .cse6 .cse1))))) +//@ semantics [33] {ULTIMATE.start_main_#t~mem191#1,#race,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short190#1} false +//@ semantics [34] {ULTIMATE.start_main_#t~mem191#1,#race,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short190#1} false +//@ semantics [35] {ULTIMATE.start_main_#t~mem191#1,#race,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short190#1} false +//@ semantics [36] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite196#1,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1} false +//@ semantics [37] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite196#1,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1} false +//@ semantics [38] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1} false +//@ semantics [39] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0} false +//@ semantics [40] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [41] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [42] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [43] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [44] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [45] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [46] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int} false +//@ semantics [47] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int} false +//@ semantics [48] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short206#1,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int} false +//@ semantics [49] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short206#1,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [50] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short206#1,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~short207#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [51] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short206#1,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~short207#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [52] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~ite209#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short206#1,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short207#1,ULTIMATE.start_main_#t~nondet210#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [53] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~ite209#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short206#1,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,#race~x$w_buff0~0,ULTIMATE.start_main_#t~ite201#1,~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short207#1,ULTIMATE.start_main_#t~nondet210#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} [(|v_ULTIMATE.start_main_#t~ite209#1_183| Int) (|v_ULTIMATE.start_main_#t~ite204#1_421| Int) (|v_#race~x$r_buff1_thd0~0_1040| Int) (|v_#race~x$w_buff1_used~0_16212| Int) (|v_#race~x$w_buff1_used~0_16213| Int) (|v_ULTIMATE.start_main_#t~short207#1_407| Bool) (|v_#race~x$w_buff1_used~0_16211| Int) (|v_ULTIMATE.start_main_#t~short200#1_635| Bool) (|v_ULTIMATE.start_main_#t~short189#1_586| Bool) (|v_ULTIMATE.start_main_#t~short199#1_622| Bool) (|v_ULTIMATE.start_main_#t~short200#1_634| Bool) (|v_ULTIMATE.start_main_#t~short189#1_587| Bool) (|v_ULTIMATE.start_main_#t~short199#1_621| Bool) (|v_ULTIMATE.start_main_#t~ite201#1_473| Int) (|v_#race~x$w_buff0_used~0_16919| Int) (|v_ULTIMATE.start_main_#t~short203#1_570| Bool) (|v_#race~x$r_buff1_thd0~0_1038| Int) (|v_ULTIMATE.start_main_#t~short203#1_571| Bool) (|v_#race~x$r_buff1_thd0~0_1039| Int) (|v_ULTIMATE.start_main_#t~short195#1_543| Bool) (|v_ULTIMATE.start_main_#t~short195#1_542| Bool) (|v_ULTIMATE.start_main_#t~short208#1_401| Bool) (|v_ULTIMATE.start_main_#t~short208#1_400| Bool) (|v_ULTIMATE.start_main_#t~ite196#1_425| Int) (|v_ULTIMATE.start_main_#t~short207#1_408| Bool) (|v_ULTIMATE.start_main_#t~short198#1_642| Bool) (|v_ULTIMATE.start_main_#t~short198#1_641| Bool) (|v_#race~x$r_buff0_thd0~0_1425| Int) (|v_#race~x$r_buff0_thd0~0_1424| Int) (|v_ULTIMATE.start_main_#t~short206#1_431| Bool) (|v_ULTIMATE.start_main_#t~short206#1_432| Bool) (|v_#race~x$r_buff0_thd0~0_1421| Int) (|v_#race~x$r_buff0_thd0~0_1420| Int) (|v_#race~x$r_buff0_thd0~0_1423| Int) (|v_#race~x$r_buff0_thd0~0_1422| Int)] (let ((.cse7 (select |#race| |~#x~0.base|)) (.cse29 (+ 3 |~#x~0.offset|)) (.cse27 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse13 (= (mod |old(~x$r_buff1_thd0~0)| 256) 0)) (.cse4 (= (mod |old(~x$r_buff0_thd0~0)| 256) 0)) (.cse1 (= (mod ~x$w_buff0_used~0 256) 0))) (let ((.cse10 (not |v_ULTIMATE.start_main_#t~short203#1_571|)) (.cse3 (not |v_ULTIMATE.start_main_#t~short198#1_641|)) (.cse0 (not .cse1)) (.cse5 (not |v_ULTIMATE.start_main_#t~short198#1_642|)) (.cse17 (not |v_ULTIMATE.start_main_#t~short200#1_635|)) (.cse26 (not |v_ULTIMATE.start_main_#t~short189#1_587|)) (.cse6 (not .cse4)) (.cse8 (+ 2 |~#x~0.offset|)) (.cse19 (not |v_ULTIMATE.start_main_#t~short203#1_570|)) (.cse16 (not |v_ULTIMATE.start_main_#t~short200#1_634|)) (.cse28 (+ |~#x~0.offset| 1)) (.cse24 (not |v_ULTIMATE.start_main_#t~short208#1_401|)) (.cse15 (not .cse13)) (.cse23 (not |v_ULTIMATE.start_main_#t~short208#1_400|)) (.cse21 (not |v_ULTIMATE.start_main_#t~short195#1_542|)) (.cse25 (not .cse27)) (.cse20 (not |v_ULTIMATE.start_main_#t~short195#1_543|)) (.cse2 (not |v_ULTIMATE.start_main_#t~short206#1_432|)) (.cse22 (not |v_ULTIMATE.start_main_#t~short206#1_431|)) (.cse9 (select .cse7 .cse29))) (and (or (and |v_ULTIMATE.start_main_#t~short206#1_432| .cse0) (and .cse1 .cse2)) (or (and (= |v_ULTIMATE.start_main_#t~short198#1_641| |v_ULTIMATE.start_main_#t~short198#1_642|) .cse3 (= |v_#race~x$r_buff0_thd0~0_1424| |v_#race~x$r_buff0_thd0~0_1420|)) (and |v_ULTIMATE.start_main_#t~short198#1_641| (or (and .cse4 .cse5) (and .cse6 |v_ULTIMATE.start_main_#t~short198#1_642|)) (= |v_#race~x$r_buff0_thd0~0_1420| 0))) (= (select .cse7 .cse8) .cse9) (or (and .cse1 .cse10) (and .cse0 |v_ULTIMATE.start_main_#t~short203#1_571|)) (let ((.cse11 (= |v_#race~x$r_buff1_thd0~0_1039| |old(#race~x$r_buff1_thd0~0)|))) (or (let ((.cse14 (not |v_ULTIMATE.start_main_#t~short199#1_622|)) (.cse12 (not |v_ULTIMATE.start_main_#t~short199#1_621|))) (and (or (and .cse11 .cse12 (= |v_ULTIMATE.start_main_#t~short199#1_622| |v_ULTIMATE.start_main_#t~short199#1_621|)) (and (or (and .cse13 .cse14) (and .cse15 |v_ULTIMATE.start_main_#t~short199#1_622|)) (= |v_#race~x$r_buff1_thd0~0_1039| 0) |v_ULTIMATE.start_main_#t~short199#1_621|)) (or (and .cse16 .cse14) (and |v_ULTIMATE.start_main_#t~short199#1_622| |v_ULTIMATE.start_main_#t~short200#1_634|)) (= |v_#race~x$w_buff1_used~0_16212| 0) .cse17 (let ((.cse18 (= (mod |old(~x$w_buff1_used~0)| 256) 0))) (or (and .cse12 .cse18) (and (not .cse18) |v_ULTIMATE.start_main_#t~short199#1_621|))))) (and (= |v_ULTIMATE.start_main_#t~short200#1_634| |v_ULTIMATE.start_main_#t~short200#1_635|) (= |old(ULTIMATE.start_main_#t~short199#1)| |v_ULTIMATE.start_main_#t~short199#1_622|) .cse11 (= |old(#race~x$w_buff1_used~0)| |v_#race~x$w_buff1_used~0_16212|) |v_ULTIMATE.start_main_#t~short200#1_635|))) (= |#race~x$w_buff0~0| 0) (or (and (= |v_#race~x$r_buff0_thd0~0_1421| 0) |v_ULTIMATE.start_main_#t~short203#1_571| (or (and |v_ULTIMATE.start_main_#t~short203#1_570| .cse6) (and .cse4 .cse19))) (and (= |v_ULTIMATE.start_main_#t~short203#1_570| |v_ULTIMATE.start_main_#t~short203#1_571|) (= |v_#race~x$r_buff0_thd0~0_1421| |v_#race~x$r_buff0_thd0~0_1420|) .cse10)) (or (and .cse1 .cse3) (and .cse0 |v_ULTIMATE.start_main_#t~short198#1_641|)) (or (and |v_ULTIMATE.start_main_#t~short195#1_542| (or (and .cse20 .cse4) (and |v_ULTIMATE.start_main_#t~short195#1_543| .cse6)) (= |v_#race~x$r_buff0_thd0~0_1424| 0)) (and (= |v_ULTIMATE.start_main_#t~short195#1_542| |v_ULTIMATE.start_main_#t~short195#1_543|) (= |v_#race~x$r_buff0_thd0~0_1425| |v_#race~x$r_buff0_thd0~0_1424|) .cse21)) (or (and .cse22 .cse23) (and |v_ULTIMATE.start_main_#t~short206#1_431| |v_ULTIMATE.start_main_#t~short208#1_400|)) (= ~x$w_buff0_used~0 (ite (= (mod |v_ULTIMATE.start_main_#t~ite196#1_425| 256) 0) 0 1)) (or (and (= |v_#race~x$r_buff1_thd0~0_1038| |v_#race~x$r_buff1_thd0~0_1040|) |v_ULTIMATE.start_main_#t~short208#1_401| (= |v_ULTIMATE.start_main_#t~ite209#1_183| 0)) (and .cse24 (= |old(~x$r_buff1_thd0~0)| |v_ULTIMATE.start_main_#t~ite209#1_183|) (= |v_#race~x$r_buff1_thd0~0_1038| 0))) (= ~x$r_buff1_thd0~0 (ite (= (mod |v_ULTIMATE.start_main_#t~ite209#1_183| 256) 0) 0 1)) |v_ULTIMATE.start_main_#t~short189#1_586| (or (and .cse25 |v_ULTIMATE.start_main_#t~short189#1_587|) (and .cse26 .cse27)) (or (and |v_ULTIMATE.start_main_#t~short198#1_642| |v_ULTIMATE.start_main_#t~short200#1_635|) (and .cse5 .cse17)) (or (and (= |v_ULTIMATE.start_main_#t~short189#1_586| |v_ULTIMATE.start_main_#t~short189#1_587|) .cse26 (= |v_#race~x$r_buff0_thd0~0_1425| |old(#race~x$r_buff0_thd0~0)|)) (and (or (and |v_ULTIMATE.start_main_#t~short189#1_586| .cse6) (and .cse4 (not |v_ULTIMATE.start_main_#t~short189#1_586|))) |v_ULTIMATE.start_main_#t~short189#1_587| (= |v_#race~x$r_buff0_thd0~0_1425| 0))) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| .cse9) .cse28 .cse9) .cse8 .cse9) .cse29 .cse9))) (or (and (= |old(~x$r_buff0_thd0~0)| |v_ULTIMATE.start_main_#t~ite204#1_421|) (= |v_#race~x$r_buff0_thd0~0_1422| 0) .cse19) (and |v_ULTIMATE.start_main_#t~short203#1_570| (= |v_#race~x$r_buff0_thd0~0_1422| |v_#race~x$r_buff0_thd0~0_1421|) (= |v_ULTIMATE.start_main_#t~ite204#1_421| 0))) (or (and (= |v_#race~x$w_buff1_used~0_16212| |v_#race~x$w_buff1_used~0_16211|) (= |v_ULTIMATE.start_main_#t~ite201#1_473| 0) |v_ULTIMATE.start_main_#t~short200#1_634|) (and .cse16 (= |v_ULTIMATE.start_main_#t~ite201#1_473| |old(~x$w_buff1_used~0)|) (= |v_#race~x$w_buff1_used~0_16211| 0))) (= (select .cse7 .cse28) .cse9) (= (ite (= (mod |v_ULTIMATE.start_main_#t~ite201#1_473| 256) 0) 0 1) ~x$w_buff1_used~0) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| ~x$w_buff0~0))) (= (ite (= (mod |v_ULTIMATE.start_main_#t~ite204#1_421| 256) 0) 0 1) ~x$r_buff0_thd0~0) (let ((.cse33 (= |v_#race~x$r_buff1_thd0~0_1039| |v_#race~x$r_buff1_thd0~0_1040|))) (or (let ((.cse32 (not |v_ULTIMATE.start_main_#t~short207#1_407|)) (.cse31 (not |v_ULTIMATE.start_main_#t~short207#1_408|))) (and (let ((.cse30 (= 0 (mod ~x$w_buff1_used~0 256)))) (or (and .cse30 .cse31) (and |v_ULTIMATE.start_main_#t~short207#1_408| (not .cse30)))) (or (and .cse24 .cse32) (and |v_ULTIMATE.start_main_#t~short207#1_407| |v_ULTIMATE.start_main_#t~short208#1_401|)) (= |#race~x$w_buff1_used~0| 0) (or (and (= |v_#race~x$r_buff1_thd0~0_1040| 0) |v_ULTIMATE.start_main_#t~short207#1_408| (or (and .cse13 .cse32) (and |v_ULTIMATE.start_main_#t~short207#1_407| .cse15))) (and (= |v_ULTIMATE.start_main_#t~short207#1_408| |v_ULTIMATE.start_main_#t~short207#1_407|) .cse33 .cse31)) .cse23)) (and (= |v_ULTIMATE.start_main_#t~short207#1_407| |old(ULTIMATE.start_main_#t~short207#1)|) (= |#race~x$w_buff1_used~0| |v_#race~x$w_buff1_used~0_16213|) .cse33 |v_ULTIMATE.start_main_#t~short208#1_400| (= |v_ULTIMATE.start_main_#t~short208#1_401| |v_ULTIMATE.start_main_#t~short208#1_400|)))) (= |#race~x$w_buff0_used~0| 0) (or (and .cse27 .cse21) (and |v_ULTIMATE.start_main_#t~short195#1_542| .cse25)) (let ((.cse34 (= |v_#race~x$w_buff0_used~0_16919| 0))) (or (and (= |v_ULTIMATE.start_main_#t~ite196#1_425| 0) |v_ULTIMATE.start_main_#t~short195#1_543| .cse34) (and .cse20 (= |old(~x$w_buff0_used~0)| |v_ULTIMATE.start_main_#t~ite196#1_425|) .cse34))) (or (and (= |v_#race~x$r_buff0_thd0~0_1423| |#race~x$r_buff0_thd0~0|) (= |v_ULTIMATE.start_main_#t~short206#1_432| |v_ULTIMATE.start_main_#t~short206#1_431|) .cse2) (and (= |#race~x$r_buff0_thd0~0| 0) |v_ULTIMATE.start_main_#t~short206#1_432| (let ((.cse35 (= (mod ~x$r_buff0_thd0~0 256) 0))) (or (and .cse35 .cse22) (and |v_ULTIMATE.start_main_#t~short206#1_431| (not .cse35)))))) (= (select .cse7 |~#x~0.offset|) .cse9)))) +//@ semantics [54] {#race,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$r_buff0_thd0~0,#memory_int,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet194#1,ULTIMATE.start_main_#t~ite192#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short190#1,#race~x$r_buff1_thd0~0} [(|v_ULTIMATE.start_main_#t~short190#1_478| Bool) (|v_ULTIMATE.start_main_#t~short189#1_590| Bool)] (let ((.cse3 (not |v_ULTIMATE.start_main_#t~short189#1_590|)) (.cse4 (not |ULTIMATE.start_main_#t~short189#1|)) (.cse8 (not |v_ULTIMATE.start_main_#t~short190#1_478|)) (.cse0 (+ |~#x~0.offset| 1)) (.cse2 (+ 3 |~#x~0.offset|)) (.cse1 (+ 2 |~#x~0.offset|))) (and |ULTIMATE.start_main_#t~short190#1| (= |#race~x$w_buff1~0| 0) (= |#race~x$w_buff1_used~0| 0) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| |ULTIMATE.start_main_#t~nondet194#1|) .cse0 |ULTIMATE.start_main_#t~nondet194#1|) .cse1 |ULTIMATE.start_main_#t~nondet194#1|) .cse2 |ULTIMATE.start_main_#t~nondet194#1|))) (or (and (= |v_ULTIMATE.start_main_#t~short189#1_590| |ULTIMATE.start_main_#t~short189#1|) (= |old(#race~x$r_buff0_thd0~0)| |#race~x$r_buff0_thd0~0|) .cse3) (and |v_ULTIMATE.start_main_#t~short189#1_590| (let ((.cse5 (= (mod ~x$r_buff0_thd0~0 256) 0))) (or (and .cse4 .cse5) (and |ULTIMATE.start_main_#t~short189#1| (not .cse5)))) (= |#race~x$r_buff0_thd0~0| 0))) (let ((.cse6 (= (mod ~x$w_buff0_used~0 256) 0))) (or (and |v_ULTIMATE.start_main_#t~short189#1_590| (not .cse6)) (and .cse6 .cse3))) (let ((.cse7 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and .cse7 .cse8) (and |v_ULTIMATE.start_main_#t~short190#1_478| (not .cse7)))) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| |ULTIMATE.start_main_#t~ite193#1|))) .cse4 (= |ULTIMATE.start_main_#t~ite193#1| |ULTIMATE.start_main_#t~ite192#1|) (or (and .cse8 (= |old(#race~x$r_buff1_thd0~0)| |#race~x$r_buff1_thd0~0|) (= |ULTIMATE.start_main_#t~short190#1| |v_ULTIMATE.start_main_#t~short190#1_478|)) (and |v_ULTIMATE.start_main_#t~short190#1_478| (= |#race~x$r_buff1_thd0~0| 0) (let ((.cse9 (= (mod ~x$r_buff1_thd0~0 256) 0))) (or (and .cse9 (not |ULTIMATE.start_main_#t~short190#1|)) (and |ULTIMATE.start_main_#t~short190#1| (not .cse9)))))) (= ~x$w_buff1~0 |ULTIMATE.start_main_#t~ite192#1|) (let ((.cse10 (select |#race| |~#x~0.base|))) (or (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse10 .cse0))) (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse10 |~#x~0.offset|))) (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse10 .cse2))) (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse10 .cse1))))) (= |#race~x$w_buff0_used~0| 0))) +//@ semantics [55] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [56] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [57] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [58] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [59] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [60] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [61] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [62] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [63] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [64] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [65] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [66] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [67] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff1~0,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [68] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int} false +//@ semantics [69] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int} false +//@ semantics [70] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short206#1,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int} false +//@ semantics [71] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short206#1,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [72] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short206#1,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~short207#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [73] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short206#1,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~short207#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [74] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~ite209#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short206#1,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short207#1,ULTIMATE.start_main_#t~nondet210#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [75] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~ite209#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff1~0,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short206#1,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short207#1,ULTIMATE.start_main_#t~nondet210#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} [(|v_ULTIMATE.start_main_#t~short203#1_574| Bool) (|v_ULTIMATE.start_main_#t~short203#1_575| Bool) (|v_#race~x$w_buff1_used~0_16218| Int) (|v_ULTIMATE.start_main_#t~ite209#1_185| Int) (|v_#race~x$w_buff1_used~0_16219| Int) (|v_#race~x$w_buff1_used~0_16217| Int) (|v_#race~x$r_buff1_thd0~0_1044| Int) (|v_ULTIMATE.start_main_#t~ite204#1_423| Int) (|v_ULTIMATE.start_main_#t~short190#1_480| Bool) (|v_ULTIMATE.start_main_#t~short199#1_626| Bool) (|v_ULTIMATE.start_main_#t~short199#1_625| Bool) (|v_ULTIMATE.start_main_#t~ite201#1_475| Int) (|v_ULTIMATE.start_main_#t~short200#1_639| Bool) (|v_#race~x$r_buff0_thd0~0_1436| Int) (|v_ULTIMATE.start_main_#t~short200#1_638| Bool) (|v_#race~x$r_buff0_thd0~0_1435| Int) (|v_#race~x$r_buff0_thd0~0_1437| Int) (|v_#race~x$r_buff0_thd0~0_1432| Int) (|v_#race~x$r_buff0_thd0~0_1434| Int) (|v_#race~x$r_buff0_thd0~0_1433| Int) (|v_#race~x$w_buff0_used~0_16921| Int) (|v_ULTIMATE.start_main_#t~short195#1_546| Bool) (|v_ULTIMATE.start_main_#t~short189#1_593| Bool) (|v_ULTIMATE.start_main_#t~short198#1_646| Bool) (|v_ULTIMATE.start_main_#t~short198#1_645| Bool) (|v_ULTIMATE.start_main_#t~short207#1_412| Bool) (|v_ULTIMATE.start_main_#t~short207#1_411| Bool) (|v_ULTIMATE.start_main_#t~short208#1_405| Bool) (|v_ULTIMATE.start_main_#t~short208#1_404| Bool) (|v_ULTIMATE.start_main_#t~short189#1_592| Bool) (|v_ULTIMATE.start_main_#t~short190#1_481| Bool) (|v_ULTIMATE.start_main_#t~ite196#1_427| Int) (|v_ULTIMATE.start_main_#t~short206#1_435| Bool) (|v_ULTIMATE.start_main_#t~short206#1_436| Bool) (|v_#race~x$r_buff1_thd0~0_1045| Int) (|v_#race~x$r_buff1_thd0~0_1046| Int) (|v_#race~x$r_buff1_thd0~0_1047| Int) (|v_ULTIMATE.start_main_#t~short195#1_547| Bool)] (let ((.cse1 (select |#race| |~#x~0.base|)) (.cse20 (+ 3 |~#x~0.offset|)) (.cse16 (= (mod |old(~x$r_buff0_thd0~0)| 256) 0)) (.cse10 (= 0 (mod ~x$w_buff0_used~0 256))) (.cse22 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse4 (= (mod |old(~x$r_buff1_thd0~0)| 256) 0)) (.cse26 (= (mod |old(~x$w_buff0_used~0)| 256) 0))) (let ((.cse7 (not |v_ULTIMATE.start_main_#t~short208#1_405|)) (.cse25 (not |v_ULTIMATE.start_main_#t~short189#1_593|)) (.cse11 (not |v_ULTIMATE.start_main_#t~short203#1_575|)) (.cse13 (not |v_ULTIMATE.start_main_#t~short203#1_574|)) (.cse18 (+ |~#x~0.offset| 1)) (.cse23 (not |v_ULTIMATE.start_main_#t~short190#1_480|)) (.cse14 (not |v_ULTIMATE.start_main_#t~short195#1_547|)) (.cse24 (not .cse26)) (.cse29 (not |v_ULTIMATE.start_main_#t~short206#1_436|)) (.cse28 (not |v_ULTIMATE.start_main_#t~short200#1_639|)) (.cse2 (not .cse4)) (.cse21 (not .cse22)) (.cse12 (not .cse10)) (.cse36 (not |v_ULTIMATE.start_main_#t~short200#1_638|)) (.cse27 (not |v_ULTIMATE.start_main_#t~short189#1_592|)) (.cse17 (not |v_ULTIMATE.start_main_#t~short195#1_546|)) (.cse8 (not |v_ULTIMATE.start_main_#t~short208#1_404|)) (.cse30 (not |v_ULTIMATE.start_main_#t~short206#1_435|)) (.cse37 (not |v_ULTIMATE.start_main_#t~short198#1_646|)) (.cse15 (not .cse16)) (.cse38 (not |v_ULTIMATE.start_main_#t~short198#1_645|)) (.cse0 (select .cse1 .cse20)) (.cse19 (+ 2 |~#x~0.offset|))) (and |v_ULTIMATE.start_main_#t~short190#1_481| (= .cse0 (select .cse1 |~#x~0.offset|)) (= |#race~x$w_buff1~0| 0) (let ((.cse6 (= |v_#race~x$r_buff1_thd0~0_1047| |v_#race~x$r_buff1_thd0~0_1045|))) (or (let ((.cse3 (not |v_ULTIMATE.start_main_#t~short207#1_412|)) (.cse5 (not |v_ULTIMATE.start_main_#t~short207#1_411|))) (and (or (and |v_ULTIMATE.start_main_#t~short207#1_411| (or (and |v_ULTIMATE.start_main_#t~short207#1_412| .cse2) (and .cse3 .cse4)) (= |v_#race~x$r_buff1_thd0~0_1045| 0)) (and (= |v_ULTIMATE.start_main_#t~short207#1_411| |v_ULTIMATE.start_main_#t~short207#1_412|) .cse5 .cse6)) (= |#race~x$w_buff1_used~0| 0) (or (and |v_ULTIMATE.start_main_#t~short207#1_412| |v_ULTIMATE.start_main_#t~short208#1_405|) (and .cse3 .cse7)) .cse8 (let ((.cse9 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and |v_ULTIMATE.start_main_#t~short207#1_411| (not .cse9)) (and .cse9 .cse5))))) (and (= |#race~x$w_buff1_used~0| |v_#race~x$w_buff1_used~0_16217|) (= |v_ULTIMATE.start_main_#t~short208#1_405| |v_ULTIMATE.start_main_#t~short208#1_404|) |v_ULTIMATE.start_main_#t~short208#1_404| (= |v_ULTIMATE.start_main_#t~short207#1_412| |old(ULTIMATE.start_main_#t~short207#1)|) .cse6))) (or (and (= |old(~x$r_buff1_thd0~0)| |v_ULTIMATE.start_main_#t~ite209#1_185|) (= |v_#race~x$r_buff1_thd0~0_1046| 0) .cse7) (and (= |v_#race~x$r_buff1_thd0~0_1046| |v_#race~x$r_buff1_thd0~0_1045|) |v_ULTIMATE.start_main_#t~short208#1_405| (= |v_ULTIMATE.start_main_#t~ite209#1_185| 0))) (or (and .cse10 .cse11) (and .cse12 |v_ULTIMATE.start_main_#t~short203#1_575|)) (or (and (= |old(~x$r_buff0_thd0~0)| |v_ULTIMATE.start_main_#t~ite204#1_423|) (= |v_#race~x$r_buff0_thd0~0_1437| 0) .cse13) (and (= |v_ULTIMATE.start_main_#t~ite204#1_423| 0) |v_ULTIMATE.start_main_#t~short203#1_574| (= |v_#race~x$r_buff0_thd0~0_1437| |v_#race~x$r_buff0_thd0~0_1436|))) (or (and (= |v_#race~x$r_buff0_thd0~0_1435| |v_#race~x$r_buff0_thd0~0_1432|) (= |v_ULTIMATE.start_main_#t~short195#1_546| |v_ULTIMATE.start_main_#t~short195#1_547|) .cse14) (and |v_ULTIMATE.start_main_#t~short195#1_547| (= |v_#race~x$r_buff0_thd0~0_1432| 0) (or (and |v_ULTIMATE.start_main_#t~short195#1_546| .cse15) (and .cse16 .cse17)))) (= (ite (= (mod |v_ULTIMATE.start_main_#t~ite201#1_475| 256) 0) 0 1) ~x$w_buff1_used~0) (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| .cse0) .cse18 .cse0) .cse19 .cse0) .cse20 .cse0)) |#race|) (or (and |v_ULTIMATE.start_main_#t~short190#1_480| .cse21) (and .cse22 .cse23)) (or (and |v_ULTIMATE.start_main_#t~short189#1_593| .cse24) (and .cse25 .cse26)) (or (and (= |v_ULTIMATE.start_main_#t~short189#1_592| |v_ULTIMATE.start_main_#t~short189#1_593|) (= |v_#race~x$r_buff0_thd0~0_1435| |old(#race~x$r_buff0_thd0~0)|) .cse25) (and |v_ULTIMATE.start_main_#t~short189#1_593| (= |v_#race~x$r_buff0_thd0~0_1435| 0) (or (and .cse15 |v_ULTIMATE.start_main_#t~short189#1_592|) (and .cse16 .cse27)))) (or (and (= |v_ULTIMATE.start_main_#t~short203#1_574| |v_ULTIMATE.start_main_#t~short203#1_575|) (= |v_#race~x$r_buff0_thd0~0_1436| |v_#race~x$r_buff0_thd0~0_1433|) .cse11) (and (or (and .cse15 |v_ULTIMATE.start_main_#t~short203#1_574|) (and .cse16 .cse13)) |v_ULTIMATE.start_main_#t~short203#1_575| (= |v_#race~x$r_buff0_thd0~0_1436| 0))) (or (and .cse28 (= |v_#race~x$w_buff1_used~0_16218| 0) (= |v_ULTIMATE.start_main_#t~ite201#1_475| |old(~x$w_buff1_used~0)|)) (and (= |v_#race~x$w_buff1_used~0_16219| |v_#race~x$w_buff1_used~0_16218|) (= |v_ULTIMATE.start_main_#t~ite201#1_475| 0) |v_ULTIMATE.start_main_#t~short200#1_639|)) (or (and .cse10 .cse29) (and |v_ULTIMATE.start_main_#t~short206#1_436| .cse12)) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| ~x$w_buff1~0))) (= .cse0 (select .cse1 .cse18)) (or (and |v_ULTIMATE.start_main_#t~short190#1_480| (= |v_#race~x$r_buff1_thd0~0_1044| 0) (or (and .cse4 (not |v_ULTIMATE.start_main_#t~short190#1_481|)) (and |v_ULTIMATE.start_main_#t~short190#1_481| .cse2))) (and .cse23 (= |v_#race~x$r_buff1_thd0~0_1044| |old(#race~x$r_buff1_thd0~0)|) (= |v_ULTIMATE.start_main_#t~short190#1_481| |v_ULTIMATE.start_main_#t~short190#1_480|))) (or (and .cse26 .cse14) (and |v_ULTIMATE.start_main_#t~short195#1_547| .cse24)) (or (and |v_ULTIMATE.start_main_#t~short206#1_436| (= |#race~x$r_buff0_thd0~0| 0) (let ((.cse31 (= (mod ~x$r_buff0_thd0~0 256) 0))) (or (and .cse30 .cse31) (and |v_ULTIMATE.start_main_#t~short206#1_435| (not .cse31))))) (and (= |v_#race~x$r_buff0_thd0~0_1434| |#race~x$r_buff0_thd0~0|) (= |v_ULTIMATE.start_main_#t~short206#1_436| |v_ULTIMATE.start_main_#t~short206#1_435|) .cse29)) (let ((.cse33 (= |v_#race~x$w_buff1_used~0_16219| 0)) (.cse32 (= |v_#race~x$r_buff1_thd0~0_1047| |v_#race~x$r_buff1_thd0~0_1044|))) (or (and (= |old(ULTIMATE.start_main_#t~short199#1)| |v_ULTIMATE.start_main_#t~short199#1_626|) .cse32 (= |v_ULTIMATE.start_main_#t~short200#1_638| |v_ULTIMATE.start_main_#t~short200#1_639|) .cse33 |v_ULTIMATE.start_main_#t~short200#1_638|) (let ((.cse34 (not |v_ULTIMATE.start_main_#t~short199#1_626|)) (.cse35 (not |v_ULTIMATE.start_main_#t~short199#1_625|))) (and (or (and .cse28 .cse34) (and |v_ULTIMATE.start_main_#t~short199#1_626| |v_ULTIMATE.start_main_#t~short200#1_639|)) .cse33 (or (and (or (and |v_ULTIMATE.start_main_#t~short199#1_626| .cse2) (and .cse34 .cse4)) (= |v_#race~x$r_buff1_thd0~0_1047| 0) |v_ULTIMATE.start_main_#t~short199#1_625|) (and (= |v_ULTIMATE.start_main_#t~short199#1_626| |v_ULTIMATE.start_main_#t~short199#1_625|) .cse32 .cse35)) .cse36 (or (and .cse21 |v_ULTIMATE.start_main_#t~short199#1_625|) (and .cse22 .cse35)))))) (= (ite (= (mod |v_ULTIMATE.start_main_#t~ite204#1_423| 256) 0) 0 1) ~x$r_buff0_thd0~0) (= (ite (= (mod |v_ULTIMATE.start_main_#t~ite209#1_185| 256) 0) 0 1) ~x$r_buff1_thd0~0) (or (and .cse12 |v_ULTIMATE.start_main_#t~short198#1_646|) (and .cse37 .cse10)) (= |#race~x$w_buff0_used~0| 0) (or (and |v_ULTIMATE.start_main_#t~short198#1_645| |v_ULTIMATE.start_main_#t~short200#1_638|) (and .cse36 .cse38)) .cse27 (let ((.cse39 (= |v_#race~x$w_buff0_used~0_16921| 0))) (or (and |v_ULTIMATE.start_main_#t~short195#1_546| (= |v_ULTIMATE.start_main_#t~ite196#1_427| 0) .cse39) (and .cse39 (= |old(~x$w_buff0_used~0)| |v_ULTIMATE.start_main_#t~ite196#1_427|) .cse17))) (or (and .cse8 .cse30) (and |v_ULTIMATE.start_main_#t~short206#1_435| |v_ULTIMATE.start_main_#t~short208#1_404|)) (= ~x$w_buff0_used~0 (ite (= (mod |v_ULTIMATE.start_main_#t~ite196#1_427| 256) 0) 0 1)) (or (and .cse37 (= |v_#race~x$r_buff0_thd0~0_1433| |v_#race~x$r_buff0_thd0~0_1432|) (= |v_ULTIMATE.start_main_#t~short198#1_645| |v_ULTIMATE.start_main_#t~short198#1_646|)) (and (or (and .cse15 |v_ULTIMATE.start_main_#t~short198#1_645|) (and .cse16 .cse38)) (= |v_#race~x$r_buff0_thd0~0_1433| 0) |v_ULTIMATE.start_main_#t~short198#1_646|)) (= .cse0 (select .cse1 .cse19))))) +//@ semantics [76] {#race,ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#memory_int,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet194#1,ULTIMATE.start_main_#t~ite192#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short190#1,#race~x$r_buff1_thd0~0} [(|v_ULTIMATE.start_main_#t~short189#1_596| Bool) (|v_ULTIMATE.start_main_#t~short190#1_484| Bool)] (let ((.cse0 (not |ULTIMATE.start_main_#t~short189#1|)) (.cse4 (+ |~#x~0.offset| 1)) (.cse5 (+ 2 |~#x~0.offset|)) (.cse6 (+ 3 |~#x~0.offset|)) (.cse7 (not |ULTIMATE.start_main_#t~short190#1|)) (.cse9 (not |v_ULTIMATE.start_main_#t~short190#1_484|)) (.cse8 (select |old(#memory_int)| |~#x~0.base|)) (.cse2 (not |v_ULTIMATE.start_main_#t~short189#1_596|))) (and .cse0 (= |ULTIMATE.start_main_#t~ite193#1| |ULTIMATE.start_main_#t~ite192#1|) (or (and (= |#race~x$r_buff0_thd0~0| 0) (let ((.cse1 (= (mod ~x$r_buff0_thd0~0 256) 0))) (or (and |ULTIMATE.start_main_#t~short189#1| (not .cse1)) (and .cse0 .cse1))) |v_ULTIMATE.start_main_#t~short189#1_596|) (and (= |v_ULTIMATE.start_main_#t~short189#1_596| |ULTIMATE.start_main_#t~short189#1|) .cse2 (= |old(#race~x$r_buff0_thd0~0)| |#race~x$r_buff0_thd0~0|))) (= |#race~x$w_buff0_used~0| 0) (let ((.cse3 (select |#race| |~#x~0.base|))) (or (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse3 .cse4))) (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse3 .cse5))) (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse3 |~#x~0.offset|))) (not (= |ULTIMATE.start_main_#t~nondet194#1| (select .cse3 .cse6))))) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| |ULTIMATE.start_main_#t~nondet194#1|) .cse4 |ULTIMATE.start_main_#t~nondet194#1|) .cse5 |ULTIMATE.start_main_#t~nondet194#1|) .cse6 |ULTIMATE.start_main_#t~nondet194#1|))) .cse7 (= |ULTIMATE.start_main_#t~mem191#1| (select .cse8 |~#x~0.offset|)) (= |#race~x$w_buff1_used~0| 0) (let ((.cse10 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and .cse9 .cse10) (and |v_ULTIMATE.start_main_#t~short190#1_484| (not .cse10)))) (or (and |v_ULTIMATE.start_main_#t~short190#1_484| (let ((.cse11 (= (mod ~x$r_buff1_thd0~0 256) 0))) (or (and .cse7 .cse11) (and |ULTIMATE.start_main_#t~short190#1| (not .cse11)))) (= |#race~x$r_buff1_thd0~0| 0)) (and (= |v_ULTIMATE.start_main_#t~short190#1_484| |ULTIMATE.start_main_#t~short190#1|) .cse9 (= |old(#race~x$r_buff1_thd0~0)| |#race~x$r_buff1_thd0~0|))) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store .cse8 |~#x~0.offset| |ULTIMATE.start_main_#t~ite193#1|))) (= |ULTIMATE.start_main_#t~mem191#1| |ULTIMATE.start_main_#t~ite192#1|) (let ((.cse12 (= (mod ~x$w_buff0_used~0 256) 0))) (or (and .cse12 .cse2) (and |v_ULTIMATE.start_main_#t~short189#1_596| (not .cse12)))))) +//@ semantics [77] {ULTIMATE.start_main_#t~mem191#1,#race,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,#race~x$r_buff0_thd0~0,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,ULTIMATE.start_main_#t~ite192#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short190#1,#race~x$r_buff1_thd0~0} false +//@ semantics [78] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [79] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [80] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [81] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [82] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [83] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [84] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [85] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [86] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [87] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [88] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [89] {ULTIMATE.start_main_#t~mem191#1,#race,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~ite192#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#race~x$w_buff0_used~0,#memory_int,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0} false +//@ semantics [90] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int} false +//@ semantics [91] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int} false +//@ semantics [92] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short206#1,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int} false +//@ semantics [93] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short206#1,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [94] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short206#1,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~short207#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [95] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short206#1,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~short207#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [96] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~ite209#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,#race~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short206#1,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short207#1,ULTIMATE.start_main_#t~nondet210#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} false +//@ semantics [97] {ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~ite209#1,#race~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~short195#1,#race~x$w_buff0_used~0,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~nondet194#1,#race~x$w_buff1_used~0,ULTIMATE.start_main_#t~short206#1,#race~x$r_buff1_thd0~0,#race,~x$r_buff0_thd0~0,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,~x$w_buff1_used~0,ULTIMATE.start_main_#t~ite201#1,~x$r_buff1_thd0~0,ULTIMATE.start_main_#t~short207#1,ULTIMATE.start_main_#t~nondet210#1,~x$w_buff0_used~0,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~nondet202#1,#memory_int,ULTIMATE.start_main_#t~short208#1} [(|v_ULTIMATE.start_main_#t~short195#1_550| Bool) (|v_ULTIMATE.start_main_#t~short203#1_578| Bool) (|v_ULTIMATE.start_main_#t~short195#1_551| Bool) (|v_ULTIMATE.start_main_#t~short203#1_579| Bool) (|v_ULTIMATE.start_main_#t~ite209#1_187| Int) (|v_ULTIMATE.start_main_#t~ite204#1_425| Int) (|v_ULTIMATE.start_main_#t~short208#1_409| Bool) (|v_ULTIMATE.start_main_#t~short208#1_408| Bool) (|v_ULTIMATE.start_main_#t~ite201#1_477| Int) (|v_ULTIMATE.start_main_#t~short198#1_650| Bool) (|v_ULTIMATE.start_main_#t~short199#1_629| Bool) (|v_ULTIMATE.start_main_#t~short206#1_440| Bool) (|v_#race~x$w_buff0_used~0_16923| Int) (|v_#race~x$r_buff1_thd0~0_1052| Int) (|v_#race~x$r_buff1_thd0~0_1053| Int) (|v_#race~x$w_buff1_used~0_16225| Int) (|v_#race~x$r_buff1_thd0~0_1054| Int) (|v_#race~x$r_buff1_thd0~0_1055| Int) (|v_#race~x$w_buff1_used~0_16223| Int) (|v_ULTIMATE.start_main_#t~short207#1_416| Bool) (|v_ULTIMATE.start_main_#t~short199#1_630| Bool) (|v_ULTIMATE.start_main_#t~short207#1_415| Bool) (|v_ULTIMATE.start_main_#t~short190#1_487| Bool) (|v_#race~x$w_buff1_used~0_16224| Int) (|v_ULTIMATE.start_main_#t~short190#1_486| Bool) (|v_ULTIMATE.start_main_#t~short198#1_649| Bool) (|v_ULTIMATE.start_main_#t~short200#1_642| Bool) (|v_ULTIMATE.start_main_#t~short206#1_439| Bool) (|v_ULTIMATE.start_main_#t~short200#1_643| Bool) (|v_ULTIMATE.start_main_#t~short189#1_598| Bool) (|v_ULTIMATE.start_main_#t~ite196#1_429| Int) (|v_ULTIMATE.start_main_#t~short189#1_599| Bool) (|v_#race~x$r_buff0_thd0~0_1447| Int) (|v_#race~x$r_buff0_thd0~0_1446| Int) (|v_#race~x$r_buff0_thd0~0_1449| Int) (|v_#race~x$r_buff0_thd0~0_1448| Int) (|v_#race~x$r_buff0_thd0~0_1445| Int) (|v_#race~x$r_buff0_thd0~0_1444| Int)] (let ((.cse10 (select |#race| |~#x~0.base|)) (.cse41 (+ 3 |~#x~0.offset|)) (.cse7 (= (mod |old(~x$r_buff0_thd0~0)| 256) 0)) (.cse2 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse31 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse21 (= (mod |old(~x$r_buff1_thd0~0)| 256) 0)) (.cse13 (= (mod |old(~x$w_buff0_used~0)| 256) 0))) (let ((.cse0 (not |v_ULTIMATE.start_main_#t~short195#1_550|)) (.cse14 (not .cse13)) (.cse8 (not |v_ULTIMATE.start_main_#t~short195#1_551|)) (.cse20 (not |v_ULTIMATE.start_main_#t~short208#1_408|)) (.cse24 (not |v_ULTIMATE.start_main_#t~short208#1_409|)) (.cse3 (not |v_ULTIMATE.start_main_#t~short206#1_439|)) (.cse26 (not |v_ULTIMATE.start_main_#t~short206#1_440|)) (.cse29 (not |v_ULTIMATE.start_main_#t~short190#1_487|)) (.cse30 (not |v_ULTIMATE.start_main_#t~short190#1_486|)) (.cse27 (not |v_ULTIMATE.start_main_#t~short200#1_643|)) (.cse23 (not .cse21)) (.cse32 (not .cse31)) (.cse25 (not |v_ULTIMATE.start_main_#t~short198#1_649|)) (.cse15 (not |v_ULTIMATE.start_main_#t~short203#1_578|)) (.cse4 (not .cse2)) (.cse16 (not |v_ULTIMATE.start_main_#t~short203#1_579|)) (.cse6 (not .cse7)) (.cse12 (not |v_ULTIMATE.start_main_#t~short189#1_599|)) (.cse11 (+ |~#x~0.offset| 1)) (.cse39 (+ 2 |~#x~0.offset|)) (.cse9 (select .cse10 .cse41)) (.cse35 (not |v_ULTIMATE.start_main_#t~short200#1_642|)) (.cse38 (not |v_ULTIMATE.start_main_#t~short198#1_650|)) (.cse40 (not |v_ULTIMATE.start_main_#t~short189#1_598|))) (and (let ((.cse1 (= |v_#race~x$w_buff0_used~0_16923| 0))) (or (and (= |old(~x$w_buff0_used~0)| |v_ULTIMATE.start_main_#t~ite196#1_429|) .cse0 .cse1) (and |v_ULTIMATE.start_main_#t~short195#1_550| .cse1 (= |v_ULTIMATE.start_main_#t~ite196#1_429| 0)))) (or (and .cse2 .cse3) (and |v_ULTIMATE.start_main_#t~short206#1_439| .cse4)) (= (store |old(#memory_int)| |~#x~0.base| (let ((.cse5 (select |old(#memory_int)| |~#x~0.base|))) (store .cse5 |~#x~0.offset| (select .cse5 |~#x~0.offset|)))) |#memory_int|) (or (and |v_ULTIMATE.start_main_#t~short195#1_551| (= |v_#race~x$r_buff0_thd0~0_1448| 0) (or (and |v_ULTIMATE.start_main_#t~short195#1_550| .cse6) (and .cse7 .cse0))) (and .cse8 (= |v_ULTIMATE.start_main_#t~short195#1_550| |v_ULTIMATE.start_main_#t~short195#1_551|) (= |v_#race~x$r_buff0_thd0~0_1449| |v_#race~x$r_buff0_thd0~0_1448|))) (= .cse9 (select .cse10 .cse11)) (or (and .cse12 .cse13) (and .cse14 |v_ULTIMATE.start_main_#t~short189#1_599|)) (or (and (= |v_#race~x$r_buff0_thd0~0_1445| 0) (or (and |v_ULTIMATE.start_main_#t~short203#1_578| .cse6) (and .cse7 .cse15)) |v_ULTIMATE.start_main_#t~short203#1_579|) (and (= |v_ULTIMATE.start_main_#t~short203#1_578| |v_ULTIMATE.start_main_#t~short203#1_579|) .cse16 (= |v_#race~x$r_buff0_thd0~0_1445| |v_#race~x$r_buff0_thd0~0_1444|))) (let ((.cse17 (= |v_#race~x$r_buff1_thd0~0_1055| |v_#race~x$r_buff1_thd0~0_1053|))) (or (and (= |v_#race~x$w_buff1_used~0_16223| |#race~x$w_buff1_used~0|) |v_ULTIMATE.start_main_#t~short208#1_408| (= |v_ULTIMATE.start_main_#t~short207#1_416| |old(ULTIMATE.start_main_#t~short207#1)|) .cse17 (= |v_ULTIMATE.start_main_#t~short208#1_409| |v_ULTIMATE.start_main_#t~short208#1_408|)) (let ((.cse19 (not |v_ULTIMATE.start_main_#t~short207#1_415|)) (.cse22 (not |v_ULTIMATE.start_main_#t~short207#1_416|))) (and (let ((.cse18 (= 0 (mod ~x$w_buff1_used~0 256)))) (or (and .cse18 .cse19) (and |v_ULTIMATE.start_main_#t~short207#1_415| (not .cse18)))) (= |#race~x$w_buff1_used~0| 0) .cse20 (or (and .cse19 (= |v_ULTIMATE.start_main_#t~short207#1_415| |v_ULTIMATE.start_main_#t~short207#1_416|) .cse17) (and (= |v_#race~x$r_buff1_thd0~0_1053| 0) (or (and .cse21 .cse22) (and .cse23 |v_ULTIMATE.start_main_#t~short207#1_416|)) |v_ULTIMATE.start_main_#t~short207#1_415|)) (or (and |v_ULTIMATE.start_main_#t~short207#1_416| |v_ULTIMATE.start_main_#t~short208#1_409|) (and .cse22 .cse24)))))) (or (and .cse2 .cse25) (and |v_ULTIMATE.start_main_#t~short198#1_649| .cse4)) (or (and |v_ULTIMATE.start_main_#t~short195#1_551| .cse14) (and .cse8 .cse13)) (or (and |v_ULTIMATE.start_main_#t~short206#1_440| |v_ULTIMATE.start_main_#t~short208#1_408|) (and .cse26 .cse20)) (= |#race~x$w_buff0_used~0| 0) (or (and (= |v_ULTIMATE.start_main_#t~ite209#1_187| 0) |v_ULTIMATE.start_main_#t~short208#1_409| (= |v_#race~x$r_buff1_thd0~0_1054| |v_#race~x$r_buff1_thd0~0_1053|)) (and .cse24 (= |v_#race~x$r_buff1_thd0~0_1054| 0) (= |old(~x$r_buff1_thd0~0)| |v_ULTIMATE.start_main_#t~ite209#1_187|))) (or (and (= |v_#race~x$w_buff1_used~0_16225| |v_#race~x$w_buff1_used~0_16224|) (= |v_ULTIMATE.start_main_#t~ite201#1_477| 0) |v_ULTIMATE.start_main_#t~short200#1_643|) (and (= |v_ULTIMATE.start_main_#t~ite201#1_477| |old(~x$w_buff1_used~0)|) (= |v_#race~x$w_buff1_used~0_16225| 0) .cse27)) (or (and (= |v_ULTIMATE.start_main_#t~short206#1_439| |v_ULTIMATE.start_main_#t~short206#1_440|) (= |v_#race~x$r_buff0_thd0~0_1447| |#race~x$r_buff0_thd0~0|) .cse3) (and |v_ULTIMATE.start_main_#t~short206#1_439| (= |#race~x$r_buff0_thd0~0| 0) (let ((.cse28 (= (mod ~x$r_buff0_thd0~0 256) 0))) (or (and |v_ULTIMATE.start_main_#t~short206#1_440| (not .cse28)) (and .cse26 .cse28))))) (= ~x$r_buff0_thd0~0 (ite (= (mod |v_ULTIMATE.start_main_#t~ite204#1_425| 256) 0) 0 1)) .cse29 (or (and (= |v_#race~x$r_buff1_thd0~0_1052| |old(#race~x$r_buff1_thd0~0)|) .cse30 (= |v_ULTIMATE.start_main_#t~short190#1_487| |v_ULTIMATE.start_main_#t~short190#1_486|)) (and |v_ULTIMATE.start_main_#t~short190#1_486| (or (and .cse21 .cse29) (and |v_ULTIMATE.start_main_#t~short190#1_487| .cse23)) (= |v_#race~x$r_buff1_thd0~0_1052| 0))) (= (select .cse10 |~#x~0.offset|) .cse9) (or (and .cse30 .cse31) (and |v_ULTIMATE.start_main_#t~short190#1_486| .cse32)) (= ~x$r_buff1_thd0~0 (ite (= (mod |v_ULTIMATE.start_main_#t~ite209#1_187| 256) 0) 0 1)) (let ((.cse33 (= |v_#race~x$r_buff1_thd0~0_1055| |v_#race~x$r_buff1_thd0~0_1052|)) (.cse34 (= |v_#race~x$w_buff1_used~0_16224| 0))) (or (and (= |v_ULTIMATE.start_main_#t~short199#1_630| |old(ULTIMATE.start_main_#t~short199#1)|) .cse33 (= |v_ULTIMATE.start_main_#t~short200#1_643| |v_ULTIMATE.start_main_#t~short200#1_642|) .cse34 |v_ULTIMATE.start_main_#t~short200#1_642|) (let ((.cse36 (not |v_ULTIMATE.start_main_#t~short199#1_630|)) (.cse37 (not |v_ULTIMATE.start_main_#t~short199#1_629|))) (and .cse35 (or (and |v_ULTIMATE.start_main_#t~short199#1_630| |v_ULTIMATE.start_main_#t~short200#1_643|) (and .cse36 .cse27)) (or (and (or (and .cse23 |v_ULTIMATE.start_main_#t~short199#1_630|) (and .cse21 .cse36)) |v_ULTIMATE.start_main_#t~short199#1_629| (= |v_#race~x$r_buff1_thd0~0_1055| 0)) (and (= |v_ULTIMATE.start_main_#t~short199#1_629| |v_ULTIMATE.start_main_#t~short199#1_630|) .cse37 .cse33)) (or (and .cse37 .cse31) (and .cse32 |v_ULTIMATE.start_main_#t~short199#1_629|)) .cse34)))) (or (and (= |v_#race~x$r_buff0_thd0~0_1444| 0) |v_ULTIMATE.start_main_#t~short198#1_649| (or (and |v_ULTIMATE.start_main_#t~short198#1_650| .cse6) (and .cse7 .cse38))) (and (= |v_#race~x$r_buff0_thd0~0_1448| |v_#race~x$r_buff0_thd0~0_1444|) .cse25 (= |v_ULTIMATE.start_main_#t~short198#1_649| |v_ULTIMATE.start_main_#t~short198#1_650|))) (= ~x$w_buff0_used~0 (ite (= (mod |v_ULTIMATE.start_main_#t~ite196#1_429| 256) 0) 0 1)) (or (and .cse15 (= |v_#race~x$r_buff0_thd0~0_1446| 0) (= |old(~x$r_buff0_thd0~0)| |v_ULTIMATE.start_main_#t~ite204#1_425|)) (and (= |v_ULTIMATE.start_main_#t~ite204#1_425| 0) |v_ULTIMATE.start_main_#t~short203#1_578| (= |v_#race~x$r_buff0_thd0~0_1446| |v_#race~x$r_buff0_thd0~0_1445|))) (= (ite (= (mod |v_ULTIMATE.start_main_#t~ite201#1_477| 256) 0) 0 1) ~x$w_buff1_used~0) (= .cse9 (select .cse10 .cse39)) (or (and |v_ULTIMATE.start_main_#t~short203#1_579| .cse4) (and .cse2 .cse16)) (or (and (or (and |v_ULTIMATE.start_main_#t~short189#1_598| .cse6) (and .cse7 .cse40)) |v_ULTIMATE.start_main_#t~short189#1_599| (= |v_#race~x$r_buff0_thd0~0_1449| 0)) (and .cse12 (= |v_ULTIMATE.start_main_#t~short189#1_599| |v_ULTIMATE.start_main_#t~short189#1_598|) (= |v_#race~x$r_buff0_thd0~0_1449| |old(#race~x$r_buff0_thd0~0)|))) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| .cse9) .cse11 .cse9) .cse39 .cse9) .cse41 .cse9))) (or (and |v_ULTIMATE.start_main_#t~short198#1_650| |v_ULTIMATE.start_main_#t~short200#1_642|) (and .cse35 .cse38)) .cse40))) +//@ semantics [98] {ULTIMATE.start_main_#t~pre182#1} (= |ULTIMATE.start_main_#t~pre182#1| |#pthreadsForks|) +//@ semantics [99] {~x$r_buff0_thd0~0} (= ~x$r_buff0_thd0~0 0) +//@ semantics [100] {ULTIMATE.start_main_~t1749~0#1} true +//@ semantics [101] {ULTIMATE.start_assume_abort_if_not_~cond#1} true +//@ semantics [102] {~x$r_buff1_thd2~0} (= ~x$r_buff1_thd2~0 0) +//@ semantics [103] {ULTIMATE.start_main_#t~pre184#1} (= |ULTIMATE.start_main_#t~pre184#1| |#pthreadsForks|) +//@ semantics [104] {ULTIMATE.start_assume_abort_if_not_#in~cond#1} true +//@ semantics [105] {~__unbuffered_p1_EAX~0} (= ~__unbuffered_p1_EAX~0 0) +//@ semantics [106] {ULTIMATE.start_main_#t~pre184#1} true +//@ semantics [107] {} (= (select |#valid| 0) 0) +//@ semantics [108] {~main$tmp_guard1~0} (= ~main$tmp_guard1~0 0) +//@ semantics [109] {#pthreadsForks} (= (+ 1 |old(#pthreadsForks)|) |#pthreadsForks|) +//@ semantics [110] {ULTIMATE.start_main_~t1750~0#1} (= |ULTIMATE.start_main_~t1750~0#1| |ULTIMATE.start_main_#t~pre184#1|) +//@ semantics [111] {ULTIMATE.start_assume_abort_if_not_~cond#1} (= |ULTIMATE.start_assume_abort_if_not_#in~cond#1| |ULTIMATE.start_assume_abort_if_not_~cond#1|) +//@ semantics [112] {#pthreadsForks} (= (+ 1 |old(#pthreadsForks)|) |#pthreadsForks|) +//@ semantics [113] {ULTIMATE.start_#t~ret221#1} (= |ULTIMATE.start_main_#res#1| |ULTIMATE.start_#t~ret221#1|) +//@ semantics [114] {ULTIMATE.start___VERIFIER_assert_~expression#1} true +//@ semantics [115] {} true +//@ semantics [116] {} (not (= |#race~main$tmp_guard0~0| 0)) +//@ semantics [117] {} (= |#race~main$tmp_guard0~0| 0) +//@ semantics [118] {ULTIMATE.start___VERIFIER_assert_#in~expression#1} true +//@ semantics [119] {#race~main$tmp_guard0~0} (= |#race~main$tmp_guard0~0| 0) +//@ semantics [120] {} false +//@ semantics [121] {~x$read_delayed_var~0.offset,~x$read_delayed_var~0.base} (and (= ~x$read_delayed_var~0.base 0) (= ~x$read_delayed_var~0.offset 0)) +//@ semantics [122] {} (and (= (select |#length| 2) 18) (= (select |#valid| 2) 1)) +//@ semantics [123] {ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~nondet220#1,ULTIMATE.start_main_#t~short217#1,ULTIMATE.start_main_#t~ite209#1,ULTIMATE.start_main_#t~pre186#1,ULTIMATE.start_main_#t~nondet216#1,ULTIMATE.start_main_#t~nondet188#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~nondet212#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~mem213#1,ULTIMATE.start_main_#t~pre182#1,ULTIMATE.start_main_#t~short218#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_~t1750~0#1,ULTIMATE.start_main_#t~nondet194#1,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~short219#1,ULTIMATE.start_main_#t~short206#1,ULTIMATE.start_main_#t~nondet185#1,ULTIMATE.start_main_#t~ite215#1,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite214#1,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~short207#1,ULTIMATE.start_main_#t~nondet210#1,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~pre184#1,ULTIMATE.start_main_~t1751~0#1,ULTIMATE.start_main_#t~nondet202#1,ULTIMATE.start_main_#t~nondet211#1,ULTIMATE.start_main_#t~short208#1,ULTIMATE.start_main_#t~nondet187#1,ULTIMATE.start_main_~t1749~0#1,ULTIMATE.start_main_#t~nondet183#1} true +//@ semantics [124] {~__unbuffered_p0_EAX$read_delayed~0} (= ~__unbuffered_p0_EAX$read_delayed~0 0) +//@ semantics [125] {~__unbuffered_p0_EAX$r_buff0_thd0~0} (= ~__unbuffered_p0_EAX$r_buff0_thd0~0 0) +//@ semantics [126] {#race~__unbuffered_cnt~0} false +//@ semantics [127] {#race~main$tmp_guard0~0,ULTIMATE.start_main_#t~nondet188#1,~main$tmp_guard0~0,#race~__unbuffered_cnt~0} false +//@ semantics [128] {#race~main$tmp_guard0~0,ULTIMATE.start_main_#t~nondet188#1,~main$tmp_guard0~0,#race~__unbuffered_cnt~0} (and (= ~main$tmp_guard0~0 (ite (= (ite (= 3 ~__unbuffered_cnt~0) 1 0) 0) 0 1)) (= |#race~__unbuffered_cnt~0| 0)) +//@ semantics [129] {~__unbuffered_p0_EAX$r_buff1_thd1~0} (= ~__unbuffered_p0_EAX$r_buff1_thd1~0 0) +//@ semantics [130] {~x$r_buff0_thd1~0} (= ~x$r_buff0_thd1~0 0) +//@ semantics [131] {~x$r_buff0_thd3~0} (= ~x$r_buff0_thd3~0 0) +//@ semantics [132] {ULTIMATE.start_main_~t1751~0#1} true +//@ semantics [133] {} (= 48 (select (select |#memory_int| 1) 0)) +//@ semantics [134] {~__unbuffered_p0_EBX~0} (= ~__unbuffered_p0_EBX~0 0) +//@ semantics [135] {} (and (= (select |#length| 3) 4) (= 1 (select |#valid| 3))) +//@ semantics [136] {~__unbuffered_p0_EAX$r_buff1_thd3~0} (= ~__unbuffered_p0_EAX$r_buff1_thd3~0 0) +//@ semantics [137] {~x$w_buff0_used~0} (= ~x$w_buff0_used~0 0) +//@ semantics [138] {~x$r_buff1_thd0~0} (= ~x$r_buff1_thd0~0 0) +//@ semantics [139] {ULTIMATE.start_main_~t1751~0#1} (= |ULTIMATE.start_main_#t~pre186#1| |ULTIMATE.start_main_~t1751~0#1|) +//@ semantics [140] {~y~0} (= ~y~0 0) +//@ semantics [141] {#race~main$tmp_guard1~0} (= |#race~main$tmp_guard1~0| 0) +//@ semantics [142] {~x$r_buff1_thd1~0} (= ~x$r_buff1_thd1~0 0) +//@ semantics [143] {ULTIMATE.start_assume_abort_if_not_#in~cond#1} (= |ULTIMATE.start_assume_abort_if_not_#in~cond#1| (mod ~main$tmp_guard0~0 256)) +//@ semantics [144] {~weak$$choice1~0} (= ~weak$$choice1~0 0) +//@ semantics [145] {#race~weak$$choice1~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,ULTIMATE.start_main_#t~nondet212#1} false +//@ semantics [146] {#race~weak$$choice1~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~nondet212#1} false +//@ semantics [147] {#race~weak$$choice1~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p0_EAX~0,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~nondet212#1} false +//@ semantics [148] {#race~weak$$choice1~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~nondet212#1} false +//@ semantics [149] {#race~weak$$choice1~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p0_EAX~0,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~nondet212#1} false +//@ semantics [150] {#race~weak$$choice1~0,~weak$$choice1~0,#race~__unbuffered_p0_EAX$read_delayed_var~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~nondet212#1} false +//@ semantics [151] {#race,ULTIMATE.start_main_#t~mem213#1,#race~weak$$choice1~0,~weak$$choice1~0,#race~__unbuffered_p0_EAX$read_delayed_var~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~nondet212#1} [(|v_ULTIMATE.start_main_#t~nondet211#1_101| Int)] (let ((.cse3 (+ ~__unbuffered_p0_EAX$read_delayed_var~0.offset 1)) (.cse1 (+ ~__unbuffered_p0_EAX$read_delayed_var~0.offset 2)) (.cse2 (+ ~__unbuffered_p0_EAX$read_delayed_var~0.offset 3))) (and (= ~weak$$choice1~0 (ite (= (mod |v_ULTIMATE.start_main_#t~nondet211#1_101| 256) 0) 0 1)) (not (= (mod ~__unbuffered_p0_EAX$read_delayed~0 256) 0)) (= |#race~__unbuffered_p0_EAX$read_delayed_var~0| 0) (not (= 0 (mod ~weak$$choice1~0 256))) (= |#race~__unbuffered_p0_EAX$read_delayed~0| 0) (or (= 1 |v_ULTIMATE.start_main_#t~nondet211#1_101|) (= 0 |v_ULTIMATE.start_main_#t~nondet211#1_101|)) (let ((.cse0 (select |#race| ~__unbuffered_p0_EAX$read_delayed_var~0.base))) (or (not (= (select .cse0 .cse1) 0)) (not (= (select .cse0 ~__unbuffered_p0_EAX$read_delayed_var~0.offset) 0)) (not (= (select .cse0 .cse2) 0)) (not (= (select .cse0 .cse3) 0)))) (= (select (select |#memory_int| ~__unbuffered_p0_EAX$read_delayed_var~0.base) ~__unbuffered_p0_EAX$read_delayed_var~0.offset) |ULTIMATE.start_main_#t~mem213#1|) (= |#race| (store |old(#race)| ~__unbuffered_p0_EAX$read_delayed_var~0.base (store (store (store (store (select |old(#race)| ~__unbuffered_p0_EAX$read_delayed_var~0.base) ~__unbuffered_p0_EAX$read_delayed_var~0.offset 0) .cse3 0) .cse1 0) .cse2 0))) (= |#race~weak$$choice1~0| 0))) +//@ semantics [152] {#race,ULTIMATE.start_main_#t~ite215#1,ULTIMATE.start_main_#t~nondet216#1,#race~__unbuffered_p0_EAX$read_delayed_var~0,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~ite214#1,ULTIMATE.start_main_#t~nondet212#1,ULTIMATE.start_main_#t~mem213#1,#race~weak$$choice1~0,~__unbuffered_p0_EAX~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p0_EAX~0} false +//@ semantics [153] {#race,ULTIMATE.start_main_#t~ite215#1,ULTIMATE.start_main_#t~nondet216#1,#race~__unbuffered_p0_EAX$read_delayed_var~0,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~ite214#1,ULTIMATE.start_main_#t~nondet212#1,ULTIMATE.start_main_#t~mem213#1,#race~weak$$choice1~0,~__unbuffered_p0_EAX~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p0_EAX~0} false +//@ semantics [154] {#race,ULTIMATE.start_main_#t~short217#1,ULTIMATE.start_main_#t~ite215#1,ULTIMATE.start_main_#t~nondet216#1,#race~__unbuffered_p0_EAX$read_delayed_var~0,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~ite214#1,ULTIMATE.start_main_#t~nondet212#1,#race~__unbuffered_p0_EBX~0,ULTIMATE.start_main_#t~mem213#1,#race~weak$$choice1~0,~__unbuffered_p0_EAX~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p0_EAX~0} false +//@ semantics [155] {#race,ULTIMATE.start_main_#t~short217#1,ULTIMATE.start_main_#t~ite215#1,ULTIMATE.start_main_#t~nondet216#1,#race~__unbuffered_p0_EAX$read_delayed_var~0,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~ite214#1,ULTIMATE.start_main_#t~nondet212#1,#race~__unbuffered_p0_EBX~0,ULTIMATE.start_main_#t~mem213#1,#race~weak$$choice1~0,ULTIMATE.start_main_#t~short218#1,~__unbuffered_p0_EAX~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p1_EAX~0,#race~__unbuffered_p0_EAX~0} false +//@ semantics [156] {#race,ULTIMATE.start_main_#t~short217#1,ULTIMATE.start_main_#t~ite215#1,ULTIMATE.start_main_#t~nondet216#1,#race~__unbuffered_p0_EAX$read_delayed_var~0,#race~__unbuffered_p0_EAX$read_delayed~0,ULTIMATE.start_main_#t~ite214#1,ULTIMATE.start_main_#t~nondet212#1,#race~__unbuffered_p0_EBX~0,#race~__unbuffered_p1_EBX~0,ULTIMATE.start_main_#t~mem213#1,#race~weak$$choice1~0,ULTIMATE.start_main_#t~short218#1,~__unbuffered_p0_EAX~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p1_EAX~0,#race~__unbuffered_p0_EAX~0,ULTIMATE.start_main_#t~short219#1} false +//@ semantics [157] {#race,ULTIMATE.start_main_#t~nondet220#1,ULTIMATE.start_main_#t~short217#1,ULTIMATE.start_main_#t~ite215#1,ULTIMATE.start_main_#t~nondet216#1,#race~main$tmp_guard1~0,#race~__unbuffered_p0_EAX$read_delayed_var~0,#race~__unbuffered_p0_EAX$read_delayed~0,~main$tmp_guard1~0,ULTIMATE.start_main_#t~ite214#1,ULTIMATE.start_main_#t~nondet212#1,#race~__unbuffered_p0_EBX~0,#race~__unbuffered_p1_EBX~0,ULTIMATE.start_main_#t~mem213#1,#race~weak$$choice1~0,ULTIMATE.start_main_#t~short218#1,~__unbuffered_p0_EAX~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p1_EAX~0,#race~__unbuffered_p0_EAX~0,ULTIMATE.start_main_#t~short219#1} false +//@ semantics [158] {#race,ULTIMATE.start_main_#t~nondet220#1,ULTIMATE.start_main_#t~short217#1,ULTIMATE.start_main_#t~ite215#1,ULTIMATE.start_main_#t~nondet216#1,#race~main$tmp_guard1~0,#race~__unbuffered_p0_EAX$read_delayed_var~0,#race~__unbuffered_p0_EAX$read_delayed~0,~main$tmp_guard1~0,ULTIMATE.start_main_#t~ite214#1,ULTIMATE.start_main_#t~nondet212#1,#race~__unbuffered_p0_EBX~0,#race~__unbuffered_p1_EBX~0,#race~weak$$choice1~0,ULTIMATE.start_main_#t~mem213#1,ULTIMATE.start_main_#t~short218#1,~__unbuffered_p0_EAX~0,~weak$$choice1~0,ULTIMATE.start_main_#t~nondet211#1,#race~__unbuffered_p1_EAX~0,#race~__unbuffered_p0_EAX~0,ULTIMATE.start_main_#t~short219#1} [(|v_ULTIMATE.start_main_#t~short218#1_163| Bool) (|v_ULTIMATE.start_main_#t~short218#1_164| Bool) (|v_ULTIMATE.start_main_#t~short217#1_169| Bool) (|v_ULTIMATE.start_main_#t~nondet211#1_103| Int) (|v_ULTIMATE.start_main_#t~short217#1_170| Bool) (|v_ULTIMATE.start_main_#t~ite214#1_149| Int) (|v_#race~__unbuffered_p0_EAX~0_728| Int) (|v_#race~weak$$choice1~0_185| Int) (|v_ULTIMATE.start_main_#t~short219#1_155| Bool) (|v_ULTIMATE.start_main_#t~mem213#1_172| Int) (|v_ULTIMATE.start_main_#t~short219#1_156| Bool)] (let ((.cse4 (not |v_ULTIMATE.start_main_#t~short218#1_164|)) (.cse2 (not |v_ULTIMATE.start_main_#t~short217#1_170|)) (.cse1 (not |v_ULTIMATE.start_main_#t~short217#1_169|)) (.cse3 (not |v_ULTIMATE.start_main_#t~short218#1_163|)) (.cse6 (not |v_ULTIMATE.start_main_#t~short219#1_155|)) (.cse9 (not |v_ULTIMATE.start_main_#t~short219#1_156|))) (and (or (and (let ((.cse0 (= ~__unbuffered_p0_EBX~0 0))) (or (and .cse0 |v_ULTIMATE.start_main_#t~short217#1_169|) (and .cse1 (not .cse0)))) (= |#race~__unbuffered_p0_EBX~0| 0) |v_ULTIMATE.start_main_#t~short217#1_170|) (and .cse2 (= |v_ULTIMATE.start_main_#t~short217#1_169| |v_ULTIMATE.start_main_#t~short217#1_170|) (= |old(#race~__unbuffered_p0_EBX~0)| |#race~__unbuffered_p0_EBX~0|))) (= |#race~__unbuffered_p0_EAX$read_delayed~0| 0) (or (and .cse3 (= |old(#race~__unbuffered_p1_EAX~0)| |#race~__unbuffered_p1_EAX~0|) (= |v_ULTIMATE.start_main_#t~short218#1_163| |v_ULTIMATE.start_main_#t~short218#1_164|)) (and |v_ULTIMATE.start_main_#t~short218#1_163| (= |#race~__unbuffered_p1_EAX~0| 0) (let ((.cse5 (= ~__unbuffered_p1_EAX~0 1))) (or (and .cse4 (not .cse5)) (and |v_ULTIMATE.start_main_#t~short218#1_164| .cse5))))) (or (and |v_ULTIMATE.start_main_#t~short218#1_164| |v_ULTIMATE.start_main_#t~short219#1_155|) (and .cse4 .cse6)) (let ((.cse7 (= ~__unbuffered_p0_EAX~0 1))) (or (and |v_ULTIMATE.start_main_#t~short217#1_170| .cse7) (and (not .cse7) .cse2))) (or (and |v_ULTIMATE.start_main_#t~short218#1_163| |v_ULTIMATE.start_main_#t~short217#1_169|) (and .cse1 .cse3)) (= |#race~__unbuffered_p0_EAX~0| 0) (= ~weak$$choice1~0 (ite (= (mod |v_ULTIMATE.start_main_#t~nondet211#1_103| 256) 0) 0 1)) (or (and .cse6 (= |v_ULTIMATE.start_main_#t~short219#1_155| |v_ULTIMATE.start_main_#t~short219#1_156|) (= |old(#race~__unbuffered_p1_EBX~0)| |#race~__unbuffered_p1_EBX~0|)) (and |v_ULTIMATE.start_main_#t~short219#1_155| (= |#race~__unbuffered_p1_EBX~0| 0) (let ((.cse8 (= ~__unbuffered_p1_EBX~0 0))) (or (and |v_ULTIMATE.start_main_#t~short219#1_156| .cse8) (and .cse9 (not .cse8)))))) (= (ite (= (ite .cse9 1 0) 0) 0 1) ~main$tmp_guard1~0) (or (= 0 |v_ULTIMATE.start_main_#t~nondet211#1_103|) (= 1 |v_ULTIMATE.start_main_#t~nondet211#1_103|)) (let ((.cse19 (= (mod ~__unbuffered_p0_EAX$read_delayed~0 256) 0)) (.cse10 (= |old(ULTIMATE.start_main_#t~mem213#1)| |v_ULTIMATE.start_main_#t~mem213#1_172|)) (.cse12 (= |#race| |old(#race)|)) (.cse13 (= |v_#race~__unbuffered_p0_EAX~0_728| 0)) (.cse14 (= |old(#race~__unbuffered_p0_EAX$read_delayed_var~0)| |#race~__unbuffered_p0_EAX$read_delayed_var~0|))) (or (and (= |v_ULTIMATE.start_main_#t~ite214#1_149| ~__unbuffered_p0_EAX~0) (= |#race~weak$$choice1~0| 0) (let ((.cse11 (= (mod ~weak$$choice1~0 256) 0))) (or (and .cse10 .cse11 .cse12 (= |v_ULTIMATE.start_main_#t~ite214#1_149| |old(~__unbuffered_p0_EAX~0)|) .cse13 .cse14) (let ((.cse15 (+ ~__unbuffered_p0_EAX$read_delayed_var~0.offset 1)) (.cse16 (+ ~__unbuffered_p0_EAX$read_delayed_var~0.offset 2)) (.cse18 (select |#race| ~__unbuffered_p0_EAX$read_delayed_var~0.base)) (.cse17 (+ ~__unbuffered_p0_EAX$read_delayed_var~0.offset 3))) (and (= |#race| (store |old(#race)| ~__unbuffered_p0_EAX$read_delayed_var~0.base (store (store (store (store (select |old(#race)| ~__unbuffered_p0_EAX$read_delayed_var~0.base) ~__unbuffered_p0_EAX$read_delayed_var~0.offset 0) .cse15 0) .cse16 0) .cse17 0))) (= |#race~__unbuffered_p0_EAX$read_delayed_var~0| 0) (= (select .cse18 .cse15) 0) (not .cse11) (= (select .cse18 ~__unbuffered_p0_EAX$read_delayed_var~0.offset) 0) (= |v_ULTIMATE.start_main_#t~mem213#1_172| (select (select |#memory_int| ~__unbuffered_p0_EAX$read_delayed_var~0.base) ~__unbuffered_p0_EAX$read_delayed_var~0.offset)) (= |v_ULTIMATE.start_main_#t~mem213#1_172| |v_ULTIMATE.start_main_#t~ite214#1_149|) (= 0 (select .cse18 .cse16)) (= |v_#race~__unbuffered_p0_EAX~0_728| |old(#race~__unbuffered_p0_EAX~0)|) (= (select .cse18 .cse17) 0))))) (not .cse19)) (and .cse19 (= |old(~__unbuffered_p0_EAX~0)| ~__unbuffered_p0_EAX~0) .cse10 .cse12 .cse13 .cse14 (= |v_#race~weak$$choice1~0_185| |#race~weak$$choice1~0|) (= |v_ULTIMATE.start_main_#t~ite214#1_149| |old(ULTIMATE.start_main_#t~ite214#1)|)))))) +//@ semantics [159] {#pthreadsForks} (= (+ 1 |old(#pthreadsForks)|) |#pthreadsForks|) +//@ semantics [160] {~x$flush_delayed~0} (= 0 ~x$flush_delayed~0) +//@ semantics [161] {ULTIMATE.start_main_#t~pre182#1} true +//@ semantics [162] {ULTIMATE.start_main_#t~nondet185#1} true +//@ semantics [163] {~x$w_buff1~0} (= 0 ~x$w_buff1~0) +//@ semantics [164] {~x$read_delayed~0} (= ~x$read_delayed~0 0) +//@ semantics [165] {~x$w_buff1_used~0} (= ~x$w_buff1_used~0 0) +//@ semantics [166] {~__unbuffered_p0_EAX$mem_tmp~0} (= ~__unbuffered_p0_EAX$mem_tmp~0 0) +//@ semantics [167] {~__unbuffered_p0_EAX$w_buff1~0} (= ~__unbuffered_p0_EAX$w_buff1~0 0) +//@ semantics [168] {~weak$$choice2~0} (= ~weak$$choice2~0 0) +//@ semantics [169] {} (< 0 |#StackHeapBarrier|) +//@ semantics [170] {} (= (select (select |#memory_int| 1) 1) 0) +//@ semantics [171] {~__unbuffered_cnt~0} (= ~__unbuffered_cnt~0 0) +//@ semantics [172] {~x$mem_tmp~0} (= ~x$mem_tmp~0 0) +//@ semantics [173] {~x$r_buff0_thd2~0} (= ~x$r_buff0_thd2~0 0) +//@ semantics [174] {~__unbuffered_p0_EAX~0} (= ~__unbuffered_p0_EAX~0 0) +//@ semantics [175] {ULTIMATE.start_main_#t~nondet187#1} true +//@ semantics [176] {~__unbuffered_p0_EAX$r_buff1_thd0~0} (= ~__unbuffered_p0_EAX$r_buff1_thd0~0 0) +//@ semantics [177] {ULTIMATE.start___VERIFIER_assert_#in~expression#1} (= |ULTIMATE.start___VERIFIER_assert_#in~expression#1| (mod ~main$tmp_guard1~0 256)) +//@ semantics [178] {ULTIMATE.start_main_~t1750~0#1} true +//@ semantics [179] {ULTIMATE.start_main_#res#1} (= |ULTIMATE.start_main_#res#1| 0) +//@ semantics [180] {} (= |ULTIMATE.start___VERIFIER_assert_~expression#1| 0) +//@ semantics [181] {} (not (= |ULTIMATE.start___VERIFIER_assert_~expression#1| 0)) +//@ semantics [182] {~__unbuffered_p0_EAX$w_buff0_used~0} (= ~__unbuffered_p0_EAX$w_buff0_used~0 0) +//@ semantics [183] {ULTIMATE.start_main_#t~pre186#1} true +//@ semantics [184] {} (and (= (select |#valid| 1) 1) (= (select |#length| 1) 2)) +//@ semantics [185] {~__unbuffered_p0_EAX$flush_delayed~0} (= ~__unbuffered_p0_EAX$flush_delayed~0 0) +//@ semantics [186] {} (not (= |#race~main$tmp_guard1~0| 0)) +//@ semantics [187] {} (= |#race~main$tmp_guard1~0| 0) +//@ semantics [188] {} (= (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|) 0) +//@ semantics [189] {ULTIMATE.start_main_#t~pre186#1} (= |ULTIMATE.start_main_#t~pre186#1| |#pthreadsForks|) +//@ semantics [190] {~main$tmp_guard0~0} (= ~main$tmp_guard0~0 0) +//@ semantics [191] {ULTIMATE.start_main_#res#1} true +//@ semantics [192] {ULTIMATE.start_main_#t~mem191#1,ULTIMATE.start_main_#t~ite204#1,ULTIMATE.start_main_#t~nondet220#1,ULTIMATE.start_main_#t~short217#1,ULTIMATE.start_main_#t~ite209#1,ULTIMATE.start_main_#t~pre186#1,ULTIMATE.start_main_#t~nondet216#1,ULTIMATE.start_main_#t~nondet188#1,ULTIMATE.start_main_#t~ite196#1,ULTIMATE.start_main_#t~short203#1,ULTIMATE.start_main_#t~nondet212#1,ULTIMATE.start_main_#t~ite192#1,ULTIMATE.start_main_#t~mem213#1,ULTIMATE.start_main_#t~pre182#1,ULTIMATE.start_main_#t~short218#1,ULTIMATE.start_main_#t~short195#1,ULTIMATE.start_main_~t1750~0#1,ULTIMATE.start_main_#t~nondet194#1,ULTIMATE.start_main_#t~nondet205#1,ULTIMATE.start_main_#t~short219#1,ULTIMATE.start_main_#t~short206#1,ULTIMATE.start_main_#t~nondet185#1,ULTIMATE.start_main_#t~ite215#1,ULTIMATE.start_main_#t~short199#1,ULTIMATE.start_main_#t~short198#1,ULTIMATE.start_main_#t~ite214#1,ULTIMATE.start_main_#t~ite201#1,ULTIMATE.start_main_#t~short207#1,ULTIMATE.start_main_#t~nondet210#1,ULTIMATE.start_main_#t~short190#1,ULTIMATE.start_main_#t~nondet197#1,ULTIMATE.start_main_#t~short200#1,ULTIMATE.start_main_#t~ite193#1,ULTIMATE.start_main_#t~short189#1,ULTIMATE.start_main_#t~pre184#1,ULTIMATE.start_main_~t1751~0#1,ULTIMATE.start_main_#t~nondet202#1,ULTIMATE.start_main_#t~nondet211#1,ULTIMATE.start_main_#t~short208#1,ULTIMATE.start_main_#t~nondet187#1,ULTIMATE.start_main_~t1749~0#1,ULTIMATE.start_main_#t~nondet183#1} true +//@ semantics [193] {ULTIMATE.start_main_~t1749~0#1} (= |ULTIMATE.start_main_#t~pre182#1| |ULTIMATE.start_main_~t1749~0#1|) +//@ semantics [194] {P0Thread1of1ForFork2_~arg.offset,P0Thread1of1ForFork2_~arg.base} (and (= P0Thread1of1ForFork2_~arg.base |P0Thread1of1ForFork2_#in~arg.base|) (= P0Thread1of1ForFork2_~arg.offset |P0Thread1of1ForFork2_#in~arg.offset|)) +//@ semantics [195] {~weak$$choice0~0,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~nondet3} false +//@ semantics [196] {~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [197] {~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [198] {~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,#race~weak$$choice2~0,#race~weak$$choice0~0,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [199] {#race,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,#race~weak$$choice2~0,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} [(|v_P0_#t~nondet3_631| Int) (|v_P0_#t~nondet5_829| Int)] (let ((.cse2 (+ |~#x~0.offset| 1)) (.cse3 (+ 2 |~#x~0.offset|)) (.cse1 (+ 3 |~#x~0.offset|))) (and (= |P0Thread1of1ForFork2_#t~mem8| (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|)) (= (ite (= (mod |v_P0_#t~nondet5_829| 256) 0) 0 1) ~weak$$choice2~0) (= (ite (= (mod |v_P0_#t~nondet3_631| 256) 0) 0 1) ~weak$$choice0~0) (let ((.cse0 (select |#race| |~#x~0.base|))) (or (not (= (select .cse0 .cse1) 0)) (not (= (select .cse0 .cse2) 0)) (not (= (select .cse0 |~#x~0.offset|) 0)) (not (= (select .cse0 .cse3) 0)))) (= (ite (= 0 (mod ~weak$$choice2~0 256)) 0 1) ~x$flush_delayed~0) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse2 0) .cse3 0) .cse1 0))) (or (= |v_P0_#t~nondet5_829| 1) (= |v_P0_#t~nondet5_829| 0)) (or (= |v_P0_#t~nondet3_631| 1) (= |v_P0_#t~nondet3_631| 0)) (= |#race~weak$$choice2~0| 0))) +//@ semantics [200] {#race,~x$flush_delayed~0,#race~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [201] {#race,~x$flush_delayed~0,#race~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [202] {#race,~x$flush_delayed~0,#race~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short11,#race~x$w_buff0_used~0,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [203] {#race,~x$flush_delayed~0,#race~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#race~x$w_buff0_used~0,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [204] {#race,~x$flush_delayed~0,#race~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short13,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#race~x$w_buff0_used~0,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [205] {#race,~x$flush_delayed~0,#race~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short13,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#race~x$w_buff0_used~0,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$w_buff1_used~0,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [206] {#race,~x$flush_delayed~0,#race~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short13,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#race~x$w_buff0_used~0,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$w_buff1_used~0,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [207] {~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [208] {~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [209] {~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [210] {~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} [(|v_P0_#t~nondet5_831| Int) (|v_P0_#t~short12_3193| Bool) (|v_P0_#t~short13_3256| Bool) (|v_P0_#t~short10_3149| Bool) (|v_P0_#t~nondet3_633| Int) (|v_#race~x$r_buff0_thd1~0_12178| Int) (|v_P0_#t~short11_3221| Bool)] (let ((.cse6 (= (mod ~x$r_buff0_thd1~0 256) 0))) (let ((.cse0 (+ |~#x~0.offset| 1)) (.cse2 (+ 3 |~#x~0.offset|)) (.cse1 (+ 2 |~#x~0.offset|)) (.cse7 (not |v_P0_#t~short11_3221|)) (.cse9 (not |P0Thread1of1ForFork2_#t~short11|)) (.cse14 (not |v_P0_#t~short13_3256|)) (.cse5 (not .cse6)) (.cse11 (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|))) (and (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse0 0) .cse1 0) .cse2 0))) (let ((.cse3 (= |old(#race~x$w_buff1_used~0)| |#race~x$w_buff1_used~0|))) (or (and .cse3 |v_P0_#t~short11_3221| (= |P0Thread1of1ForFork2_#t~short10| |old(P0Thread1of1ForFork2_#t~short10)|) (= |old(#race~x$r_buff0_thd1~0)| |v_#race~x$r_buff0_thd1~0_12178|) (= |v_P0_#t~short11_3221| |P0Thread1of1ForFork2_#t~short11|)) (let ((.cse4 (not |v_P0_#t~short10_3149|)) (.cse8 (not |P0Thread1of1ForFork2_#t~short10|))) (and (or (and .cse4 .cse5) (and |v_P0_#t~short10_3149| .cse6)) .cse7 (= |v_#race~x$r_buff0_thd1~0_12178| 0) (or (and |P0Thread1of1ForFork2_#t~short11| |P0Thread1of1ForFork2_#t~short10|) (and .cse8 .cse9)) (or (and .cse3 (= |v_P0_#t~short10_3149| |P0Thread1of1ForFork2_#t~short10|) .cse4) (and (let ((.cse10 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and .cse8 (not .cse10)) (and |P0Thread1of1ForFork2_#t~short10| .cse10))) (= |#race~x$w_buff1_used~0| 0) |v_P0_#t~short10_3149|)))))) (= |#race~weak$$choice2~0| 0) (= |#race~x$w_buff0_used~0| 0) (= |P0Thread1of1ForFork2_#t~mem14| .cse11) (let ((.cse12 (select |#race| |~#x~0.base|))) (or (not (= (select .cse12 .cse0) 0)) (not (= (select .cse12 .cse2) 0)) (not (= (select .cse12 .cse1) 0)) (not (= (select .cse12 |~#x~0.offset|) 0)))) (= (ite (= (mod |v_P0_#t~nondet5_831| 256) 0) 0 1) ~weak$$choice2~0) (= (ite (= (mod |v_P0_#t~nondet3_633| 256) 0) 0 1) ~weak$$choice0~0) (let ((.cse13 (= 0 (mod ~x$w_buff0_used~0 256)))) (or (and (not .cse13) .cse7) (and |v_P0_#t~short11_3221| .cse13))) (or (and .cse14 .cse9) (and |v_P0_#t~short13_3256| |P0Thread1of1ForFork2_#t~short11|)) (= ~x$flush_delayed~0 (ite (= (mod ~weak$$choice2~0 256) 0) 0 1)) (or (= |v_P0_#t~nondet3_633| 1) (= |v_P0_#t~nondet3_633| 0)) (let ((.cse17 (= |#race~x$r_buff1_thd1~0| |old(#race~x$r_buff1_thd1~0)|))) (or (let ((.cse15 (not |v_P0_#t~short12_3193|)) (.cse16 (not |P0Thread1of1ForFork2_#t~short12|))) (and .cse14 (= |#race~x$r_buff0_thd1~0| 0) (or (and |v_P0_#t~short12_3193| .cse6) (and .cse5 .cse15)) (or (and .cse16 (not |P0Thread1of1ForFork2_#t~short13|)) (and |P0Thread1of1ForFork2_#t~short13| |P0Thread1of1ForFork2_#t~short12|)) (or (and (= |v_P0_#t~short12_3193| |P0Thread1of1ForFork2_#t~short12|) .cse17 .cse15) (and (let ((.cse18 (= (mod ~x$r_buff1_thd1~0 256) 0))) (or (and .cse18 |P0Thread1of1ForFork2_#t~short12|) (and .cse16 (not .cse18)))) |v_P0_#t~short12_3193| (= |#race~x$r_buff1_thd1~0| 0))))) (and (= |old(P0Thread1of1ForFork2_#t~short12)| |P0Thread1of1ForFork2_#t~short12|) |v_P0_#t~short13_3256| (= |v_P0_#t~short13_3256| |P0Thread1of1ForFork2_#t~short13|) .cse17 (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12178|)))) |P0Thread1of1ForFork2_#t~short13| (or (= |v_P0_#t~nondet5_831| 1) (= |v_P0_#t~nondet5_831| 0)) (= ~x$mem_tmp~0 .cse11)))) +//@ semantics [211] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} [(|v_P0_#t~short12_3195| Bool) (|v_#race~x$r_buff0_thd1~0_12180| Int) (|v_#race~x$r_buff0_thd1~0_12181| Int) (|v_P0_#t~short13_3258| Bool) (|v_P0_#t~nondet3_635| Int) (|v_P0_#t~short15_3124| Bool) (|v_#race_10301| (Array Int (Array Int Int))) (|v_P0_#t~short10_3151| Bool) (|v_P0_#t~short11_3223| Bool) (|v_P0_#t~nondet5_833| Int)] (let ((.cse23 (select |old(#memory_int)| |~#x~0.base|)) (.cse16 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse13 (= (mod ~x$r_buff0_thd1~0 256) 0))) (let ((.cse17 (not |P0Thread1of1ForFork2_#t~short13|)) (.cse22 (not |v_P0_#t~short13_3258|)) (.cse24 (not |P0Thread1of1ForFork2_#t~short11|)) (.cse12 (not .cse13)) (.cse25 (not |v_P0_#t~short11_3223|)) (.cse15 (not .cse16)) (.cse6 (select .cse23 |~#x~0.offset|)) (.cse4 (select |v_#race_10301| |~#x~0.base|)) (.cse3 (+ |~#x~0.offset| 1)) (.cse1 (+ 2 |~#x~0.offset|)) (.cse2 (+ 3 |~#x~0.offset|))) (and (or (= |v_P0_#t~nondet3_635| 0) (= |v_P0_#t~nondet3_635| 1)) (= (ite (= (mod ~weak$$choice2~0 256) 0) 0 1) ~x$flush_delayed~0) (let ((.cse0 (select |#race| |~#x~0.base|))) (or (not (= (select .cse0 .cse1) |P0Thread1of1ForFork2_#t~nondet18|)) (not (= (select .cse0 .cse2) |P0Thread1of1ForFork2_#t~nondet18|)) (not (= (select .cse0 .cse3) |P0Thread1of1ForFork2_#t~nondet18|)) (not (= (select .cse0 |~#x~0.offset|) |P0Thread1of1ForFork2_#t~nondet18|)))) (= (ite (= (mod |v_P0_#t~nondet3_635| 256) 0) 0 1) ~weak$$choice0~0) (let ((.cse7 (= |old(#race~x$w_buff1~0)| |#race~x$w_buff1~0|)) (.cse10 (= |old(#race~x$w_buff0~0)| |#race~x$w_buff0~0|)) (.cse5 (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12180|)) (.cse8 (= |v_#race_10301| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse3 0) .cse1 0) .cse2 0)))) (.cse9 (= |#race~x$w_buff0_used~0| 0))) (or (and (= (select .cse4 .cse3) 0) (= (select .cse4 .cse1) 0) .cse5 (= |P0Thread1of1ForFork2_#t~mem14| .cse6) (= |P0Thread1of1ForFork2_#t~ite16| |old(P0Thread1of1ForFork2_#t~ite16)|) .cse7 (= (select .cse4 |~#x~0.offset|) 0) (= |P0Thread1of1ForFork2_#t~ite17| |P0Thread1of1ForFork2_#t~mem14|) .cse8 (= |P0Thread1of1ForFork2_#t~short15| |old(P0Thread1of1ForFork2_#t~short15)|) .cse9 |P0Thread1of1ForFork2_#t~short13| (= (select .cse4 .cse2) 0) .cse10) (let ((.cse11 (not |P0Thread1of1ForFork2_#t~short15|)) (.cse14 (not |v_P0_#t~short15_3124|))) (and (or (and .cse7 |P0Thread1of1ForFork2_#t~short15| (= |#race~x$w_buff0~0| 0) (= |P0Thread1of1ForFork2_#t~ite16| ~x$w_buff0~0)) (and .cse11 (= |#race~x$w_buff1~0| 0) (= |P0Thread1of1ForFork2_#t~ite16| ~x$w_buff1~0) .cse10)) (or (and (or (and |P0Thread1of1ForFork2_#t~short15| .cse12) (and .cse11 .cse13)) |v_P0_#t~short15_3124| (= |#race~x$r_buff0_thd1~0| 0)) (and .cse5 .cse14 (= |v_P0_#t~short15_3124| |P0Thread1of1ForFork2_#t~short15|))) (or (and |v_P0_#t~short15_3124| .cse15) (and .cse14 .cse16)) .cse8 (= |P0Thread1of1ForFork2_#t~mem14| |old(P0Thread1of1ForFork2_#t~mem14)|) (= |P0Thread1of1ForFork2_#t~ite17| |P0Thread1of1ForFork2_#t~ite16|) .cse9 .cse17)))) (let ((.cse18 (= |old(#race~x$r_buff1_thd1~0)| |#race~x$r_buff1_thd1~0|))) (or (and |v_P0_#t~short13_3258| .cse18 (= |v_#race~x$r_buff0_thd1~0_12181| |v_#race~x$r_buff0_thd1~0_12180|) (= |v_P0_#t~short13_3258| |P0Thread1of1ForFork2_#t~short13|) (= |P0Thread1of1ForFork2_#t~short12| |old(P0Thread1of1ForFork2_#t~short12)|)) (let ((.cse21 (not |P0Thread1of1ForFork2_#t~short12|)) (.cse19 (not |v_P0_#t~short12_3195|))) (and (or (and .cse19 .cse18 (= |v_P0_#t~short12_3195| |P0Thread1of1ForFork2_#t~short12|)) (and |v_P0_#t~short12_3195| (let ((.cse20 (= (mod ~x$r_buff1_thd1~0 256) 0))) (or (and .cse20 |P0Thread1of1ForFork2_#t~short12|) (and .cse21 (not .cse20)))) (= |#race~x$r_buff1_thd1~0| 0))) (or (and .cse21 .cse17) (and |P0Thread1of1ForFork2_#t~short13| |P0Thread1of1ForFork2_#t~short12|)) .cse22 (= |v_#race~x$r_buff0_thd1~0_12180| 0) (or (and .cse19 .cse12) (and |v_P0_#t~short12_3195| .cse13)))))) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store .cse23 |~#x~0.offset| |P0Thread1of1ForFork2_#t~ite17|))) (or (= |v_P0_#t~nondet5_833| 0) (= |v_P0_#t~nondet5_833| 1)) (or (and |v_P0_#t~short13_3258| |P0Thread1of1ForFork2_#t~short11|) (and .cse24 .cse22)) (let ((.cse27 (= |old(#race~x$w_buff1_used~0)| |#race~x$w_buff1_used~0|))) (or (let ((.cse26 (not |P0Thread1of1ForFork2_#t~short10|)) (.cse28 (not |v_P0_#t~short10_3151|))) (and .cse25 (or (and .cse24 .cse26) (and |P0Thread1of1ForFork2_#t~short11| |P0Thread1of1ForFork2_#t~short10|)) (= |v_#race~x$r_buff0_thd1~0_12181| 0) (or (and .cse27 (= |v_P0_#t~short10_3151| |P0Thread1of1ForFork2_#t~short10|) .cse28) (and (= |#race~x$w_buff1_used~0| 0) |v_P0_#t~short10_3151| (let ((.cse29 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and (not .cse29) .cse26) (and .cse29 |P0Thread1of1ForFork2_#t~short10|))))) (or (and |v_P0_#t~short10_3151| .cse13) (and .cse12 .cse28)))) (and (= |old(P0Thread1of1ForFork2_#t~short10)| |P0Thread1of1ForFork2_#t~short10|) (= |v_P0_#t~short11_3223| |P0Thread1of1ForFork2_#t~short11|) |v_P0_#t~short11_3223| .cse27 (= |old(#race~x$r_buff0_thd1~0)| |v_#race~x$r_buff0_thd1~0_12181|)))) (or (and .cse25 .cse15) (and |v_P0_#t~short11_3223| .cse16)) (= .cse6 ~x$mem_tmp~0) (= |#race~weak$$choice2~0| 0) (= |#race| (store |v_#race_10301| |~#x~0.base| (store (store (store (store .cse4 |~#x~0.offset| |P0Thread1of1ForFork2_#t~nondet18|) .cse3 |P0Thread1of1ForFork2_#t~nondet18|) .cse1 |P0Thread1of1ForFork2_#t~nondet18|) .cse2 |P0Thread1of1ForFork2_#t~nondet18|))) (= ~weak$$choice2~0 (ite (= (mod |v_P0_#t~nondet5_833| 256) 0) 0 1))))) +//@ semantics [212] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [213] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [214] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [215] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [216] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [217] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [218] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [219] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [220] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [221] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [222] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [223] {P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [224] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [225] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [226] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [227] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [228] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [229] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short31,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [230] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short31,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [231] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short31,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [232] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short31,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [233] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short31,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [234] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short31,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [235] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short31,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [236] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet18,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$mem_tmp~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short23,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite16,#race~x$w_buff1_used~0,#race,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite26,#race~x$mem_tmp~0,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short15,~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short11,#memory_int,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet4,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short19,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [237] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [238] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [239] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [240] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [241] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [242] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [243] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [244] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [245] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [246] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [247] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [248] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [249] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [250] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [251] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [252] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [253] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [254] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [255] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [256] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [257] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [258] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [259] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [260] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [261] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [262] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [263] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [264] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [265] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [266] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [267] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [268] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [269] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [270] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [271] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [272] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [273] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [274] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [275] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [276] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [277] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [278] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [279] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [280] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [281] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [282] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [283] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite69,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [284] {~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite69,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,P0Thread1of1ForFork2_#t~short15,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~short30,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~short66,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,#race~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [285] {P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short32,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite59,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~short64,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~ite43,~__unbuffered_p0_EAX$read_delayed_var~0.base,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$r_buff1_thd1~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,#race~__unbuffered_p0_EAX$read_delayed_var~0,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#t~short20,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~short31,~__unbuffered_p0_EAX$read_delayed_var~0.offset,#memory_int,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [286] {P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short32,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite59,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~short64,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~ite43,~__unbuffered_p0_EAX$read_delayed_var~0.base,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,~weak$$choice2~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,#race~__unbuffered_p0_EAX$read_delayed_var~0,P0Thread1of1ForFork2_#t~mem73,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#t~short20,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~short31,#memory_int,~__unbuffered_p0_EAX$read_delayed_var~0.offset,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} [(|v_P0_#t~short23_3240| Bool) (|v_P0_#t~ite52_2069| Int) (|v_P0_#t~short46_2872| Bool) (|v_P0_#t~short23_3241| Bool) (|v_P0_#t~short46_2871| Bool) (|v_P0_#t~ite42_2533| Int) (|v_P0_#t~short63_1932| Bool) (|v_P0_#t~short63_1931| Bool) (|v_P0_#t~short57_2459| Bool) (|v_P0_#t~short21_3338| Bool) (|v_P0_#t~short57_2458| Bool) (|v_P0_#t~short55_2551| Bool) (|v_P0_#t~short55_2552| Bool) (|v_P0_#t~ite61_1579| Int) (|v_P0_#t~ite69_1007| Int) (|v_P0_#t~short39_3090| Bool) (|v_P0_#t~short67_1605| Bool) (|v_P0_#t~short13_3261| Bool) (|v_P0_#t~short67_1606| Bool) (|v_P0_#t~nondet5_835| Int) (|v_P0_#t~short13_3260| Bool) (|v_P0_#t~short49_2826| Bool) (|v_P0_#t~short22_3366| Bool) (|v_P0_#t~short39_3089| Bool) (|v_P0_#t~short22_3367| Bool) (|v_P0_#t~short29_3381| Bool) (|v_P0_#t~short29_3382| Bool) (|v_P0_#t~short47_2911| Bool) (|v_P0_#t~short47_2912| Bool) (|v_#race~x$r_buff0_thd1~0_12205| Int) (|v_#race~x$w_buff0~0_7128| Int) (|v_P0_#t~short38_3197| Bool) (|v_#race~x$w_buff0~0_7127| Int) (|v_P0_#t~short41_2947| Bool) (|v_P0_#t~short38_3198| Bool) (|v_P0_#t~short41_2946| Bool) (|v_#race~x$r_buff0_thd1~0_12200| Int) (|v_#race~x$r_buff0_thd1~0_12201| Int) (|v_#race~x$r_buff0_thd1~0_12202| Int) (|v_#race~x$r_buff0_thd1~0_12203| Int) (|v_#race~x$r_buff0_thd1~0_12204| Int) (|v_P0_#t~short31_3329| Bool) (|v_#race~x$w_buff0_used~0_16990| Int) (|v_#race~x$r_buff1_thd1~0_7268| Int) (|v_P0_#t~short31_3328| Bool) (|v_#race~x$w_buff0_used~0_16991| Int) (|v_#race~x$r_buff1_thd1~0_7269| Int) (|v_P0_#t~short30_3293| Bool) (|v_#race~x$w_buff0_used~0_16992| Int) (|v_P0_#t~short30_3294| Bool) (|v_#race~x$w_buff0_used~0_16993| Int) (|v_P0_#t~ite44_2371| Int) (|v_#race~x$r_buff1_thd1~0_7267| Int) (|v_P0_#t~short48_2784| Bool) (|v_P0_#t~short48_2783| Bool) (|v_P0_#t~short65_1819| Bool) (|v_#race~x$w_buff0_used~0_16987| Int) (|v_#race~x$r_buff1_thd1~0_7271| Int) (|v_#race~x$w_buff0_used~0_16988| Int) (|v_#race~x$r_buff1_thd1~0_7272| Int) (|v_P0_#t~short37_3161| Bool) (|v_#race~x$w_buff0_used~0_16989| Int) (|v_#race~x$r_buff1_thd1~0_7273| Int) (|v_P0_#t~ite16_2719| Int) (|v_#race~x$r_buff1_thd1~0_7274| Int) (|v_P0_#t~short64_1983| Bool) (|v_#race~x$r_buff0_thd1~0_12184| Int) (|v_#race~x$r_buff1_thd1~0_7270| Int) (|v_#race~x$r_buff0_thd1~0_12185| Int) (|v_#race_10303| (Array Int (Array Int Int))) (|v_P0_#t~ite34_2709| Int) (|v_#race_10304| (Array Int (Array Int Int))) (|v_P0_#t~short21_3337| Bool) (|v_P0_#t~ite43_2523| Int) (|v_P0_#t~short65_1820| Bool) (|v_#race~x$r_buff0_thd1~0_12186| Int) (|v_P0_#t~short11_3225| Bool) (|v_#race~x$r_buff0_thd1~0_12187| Int) (|v_P0_#t~short11_3226| Bool) (|v_#race~x$r_buff0_thd1~0_12188| Int) (|v_P0_#t~nondet3_637| Int) (|v_#race~x$r_buff0_thd1~0_12189| Int) (|v_P0_#t~short37_3162| Bool) (|v_P0_#t~short19_3382| Bool) (|v_#race~x$r_buff0_thd1~0_12190| Int) (|v_#race~x$w_buff1_used~0_16317| Int) (|v_#race~x$r_buff0_thd1~0_12191| Int) (|v_#race~x$w_buff1_used~0_16318| Int) (|v_#race~x$r_buff0_thd1~0_12192| Int) (|v_#race~x$w_buff1_used~0_16315| Int) (|v_#race~x$r_buff0_thd1~0_12193| Int) (|v_#race~x$w_buff1_used~0_16316| Int) (|v_#race~x$r_buff0_thd1~0_12194| Int) (|v_#race~x$w_buff1_used~0_16313| Int) (|v_P0_#t~short19_3381| Bool) (|v_#race~x$r_buff0_thd1~0_12195| Int) (|v_#race~x$w_buff1_used~0_16314| Int) (|v_P0_#t~ite17_2575| Int) (|v_#race~x$r_buff0_thd1~0_12196| Int) (|v_#race~x$w_buff1_used~0_16311| Int) (|v_P0_#t~short15_3126| Bool) (|v_#race~x$w_buff1_used~0_16312| Int) (|v_P0_#t~short15_3127| Bool) (|v_P0_#t~ite60_1779| Int) (|v_P0_#t~short28_3350| Bool) (|v_#race~x$w_buff1~0_7611| Int) (|v_#race~x$w_buff1~0_7612| Int) (|v_#race~x$r_buff0_thd1~0_12197| Int) (|v_P0_#t~ite33_2721| Int) (|v_#race~x$r_buff0_thd1~0_12198| Int) (|v_#race~x$r_buff0_thd1~0_12199| Int) (|v_P0_#t~short64_1984| Bool) (|v_P0_#t~ite68_1229| Int) (|v_P0_#t~short54_2503| Bool) (|v_P0_#t~short54_2504| Bool) (|v_P0_#t~mem14_2744| Int) (|v_P0_#t~short56_2408| Bool) (|v_P0_#t~short56_2407| Bool) (|v_P0_#t~short50_2605| Bool) (|v_P0_#t~short50_2606| Bool) (|v_P0_#t~short10_3154| Bool) (|v_P0_#t~short66_1875| Bool) (|v_P0_#t~short20_3407| Bool) (|v_P0_#t~short66_1874| Bool) (|v_P0_#t~short20_3408| Bool) (|v_P0_#t~short10_3153| Bool) (|v_P0_#t~ite51_2243| Int) (|v_P0_#t~ite24_2799| Int) (|v_P0_#t~short49_2827| Bool) (|v_P0_#t~short12_3198| Bool) (|v_P0_#t~short12_3197| Bool) (|v_P0_#t~short28_3349| Bool) (|v_P0_#t~ite25_2787| Int) (|v_P0_#t~ite59_1789| Int) (|v_P0_#t~short58_2228| Bool) (|v_P0_#t~short58_2229| Bool) (|v_P0_#t~short40_3128| Bool) (|v_P0_#t~short40_3129| Bool) (|v_P0_#t~short32_3178| Bool) (|v_P0_#t~short32_3179| Bool)] (let ((.cse0 (= (mod ~weak$$choice2~0 256) 0)) (.cse13 (= (mod |old(~x$r_buff0_thd1~0)| 256) 0)) (.cse86 (= (mod ~x$w_buff1_used~0 256) 0)) (.cse37 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse25 (= (mod |old(~x$r_buff1_thd1~0)| 256) 0)) (.cse58 (select |v_#race_10303| |~#x~0.base|)) (.cse55 (+ |~#x~0.offset| 1)) (.cse16 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse8 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse133 (select |old(#memory_int)| |~#x~0.base|))) (let ((.cse52 (not |v_P0_#t~short11_3225|)) (.cse59 (select .cse133 |~#x~0.offset|)) (.cse53 (not |v_P0_#t~short11_3226|)) (.cse111 (not |v_P0_#t~short13_3260|)) (.cse68 (not |v_P0_#t~short13_3261|)) (.cse6 (not .cse8)) (.cse18 (not .cse16)) (.cse60 (select |v_#race_10304| |~#x~0.base|)) (.cse57 (+ 2 |~#x~0.offset|)) (.cse56 (+ 3 |~#x~0.offset|)) (.cse110 (select .cse58 .cse55)) (.cse27 (not .cse25)) (.cse38 (not .cse37)) (.cse87 (not .cse86)) (.cse12 (not .cse13)) (.cse29 (not .cse0))) (and (= ~x$w_buff0_used~0 (ite (= (mod |v_P0_#t~ite44_2371| 256) 0) 0 1)) (= |#race~weak$$choice2~0| 0) (let ((.cse28 (= |old(P0Thread1of1ForFork2_#t~short30)| |v_P0_#t~short30_3294|)) (.cse21 (= |old(P0Thread1of1ForFork2_#t~short28)| |v_P0_#t~short28_3350|)) (.cse24 (= |v_#race~x$r_buff1_thd1~0_7269| |v_#race~x$r_buff1_thd1~0_7268|)) (.cse1 (= |old(P0Thread1of1ForFork2_#t~ite33)| |v_P0_#t~ite33_2721|)) (.cse2 (= |old(P0Thread1of1ForFork2_#t~short32)| |v_P0_#t~short32_3179|)) (.cse15 (= |v_#race~x$w_buff1_used~0_16318| |v_#race~x$w_buff1_used~0_16313|)) (.cse4 (= |v_#race~x$w_buff1~0_7612| 0))) (or (let ((.cse20 (not |v_P0_#t~short29_3381|)) (.cse19 (not |v_P0_#t~short29_3382|)) (.cse22 (not |v_P0_#t~short31_3328|)) (.cse9 (not |v_P0_#t~short31_3329|))) (and (= ~x$w_buff1~0 |v_P0_#t~ite34_2709|) .cse0 (let ((.cse5 (= |v_#race~x$w_buff0_used~0_16989| 0)) (.cse3 (= |v_#race~x$r_buff0_thd1~0_12188| |v_#race~x$r_buff0_thd1~0_12187|))) (or (and (= |old(~x$w_buff1~0)| |v_P0_#t~ite34_2709|) .cse1 .cse2 |v_P0_#t~short31_3329| .cse3 .cse4 .cse5) (let ((.cse7 (not |v_P0_#t~short32_3178|)) (.cse11 (not |v_P0_#t~short32_3179|))) (and (or (and .cse6 |v_P0_#t~short32_3178|) (and .cse7 .cse8)) (= |v_P0_#t~ite33_2721| |v_P0_#t~ite34_2709|) .cse9 (let ((.cse10 (= |old(~x$w_buff1~0)| |v_P0_#t~ite33_2721|))) (or (and .cse10 .cse4 .cse11) (and .cse10 |v_P0_#t~short32_3179| .cse4))) .cse5 (or (and .cse7 .cse3 (= |v_P0_#t~short32_3178| |v_P0_#t~short32_3179|)) (and (= |v_#race~x$r_buff0_thd1~0_12188| 0) (or (and .cse12 |v_P0_#t~short32_3179|) (and .cse13 .cse11)) |v_P0_#t~short32_3178|)))))) (or (let ((.cse14 (not |v_P0_#t~short28_3349|)) (.cse17 (not |v_P0_#t~short28_3350|))) (and (or (and .cse13 |v_P0_#t~short28_3349|) (and .cse14 .cse12)) (or (and .cse14 .cse15 (= |v_P0_#t~short28_3349| |v_P0_#t~short28_3350|)) (and (or (and .cse16 |v_P0_#t~short28_3350|) (and .cse17 .cse18)) (= |v_#race~x$w_buff1_used~0_16318| 0) |v_P0_#t~short28_3349|)) (or (and .cse17 .cse19) (and |v_P0_#t~short28_3350| |v_P0_#t~short29_3382|)) (= |v_#race~x$r_buff0_thd1~0_12205| 0) .cse20)) (and (= |v_#race~x$r_buff0_thd1~0_12205| |v_#race~x$r_buff0_thd1~0_12193|) .cse21 |v_P0_#t~short29_3381| (= |v_P0_#t~short29_3381| |v_P0_#t~short29_3382|) .cse15)) (or (and .cse8 |v_P0_#t~short29_3381|) (and .cse6 .cse20)) (or (and |v_P0_#t~short29_3382| |v_P0_#t~short31_3328|) (and .cse22 .cse19)) (or (let ((.cse26 (not |v_P0_#t~short30_3294|)) (.cse23 (not |v_P0_#t~short30_3293|))) (and .cse22 (= |v_#race~x$r_buff0_thd1~0_12187| 0) (or (and .cse23 .cse24 (= |v_P0_#t~short30_3293| |v_P0_#t~short30_3294|)) (and (= |v_#race~x$r_buff1_thd1~0_7268| 0) |v_P0_#t~short30_3293| (or (and |v_P0_#t~short30_3294| .cse25) (and .cse26 .cse27)))) (or (and |v_P0_#t~short30_3294| |v_P0_#t~short31_3329|) (and .cse9 .cse26)) (or (and .cse13 |v_P0_#t~short30_3293|) (and .cse23 .cse12)))) (and .cse28 (= |v_#race~x$r_buff0_thd1~0_12205| |v_#race~x$r_buff0_thd1~0_12187|) .cse24 (= |v_P0_#t~short31_3328| |v_P0_#t~short31_3329|) |v_P0_#t~short31_3328|)))) (and (= |v_#race~x$r_buff0_thd1~0_12193| |v_#race~x$r_buff0_thd1~0_12188|) .cse28 (= |old(P0Thread1of1ForFork2_#t~short29)| |v_P0_#t~short29_3382|) .cse21 (= |old(P0Thread1of1ForFork2_#t~short31)| |v_P0_#t~short31_3329|) (= |old(~x$w_buff1~0)| ~x$w_buff1~0) (= |old(P0Thread1of1ForFork2_#t~ite34)| |v_P0_#t~ite34_2709|) .cse24 .cse1 .cse2 .cse15 (= |v_#race~x$w_buff0_used~0_16989| |v_#race~x$w_buff0_used~0_16993|) .cse4 .cse29))) (let ((.cse30 (= |old(P0Thread1of1ForFork2_#t~short48)| |v_P0_#t~short48_2784|)) (.cse32 (= |v_#race~x$r_buff1_thd1~0_7274| |v_#race~x$r_buff1_thd1~0_7272|)) (.cse31 (= |v_P0_#t~short50_2605| |old(P0Thread1of1ForFork2_#t~short50)|)) (.cse34 (= |v_#race~x$w_buff1_used~0_16317| 0)) (.cse33 (= |old(P0Thread1of1ForFork2_#t~short46)| |v_P0_#t~short46_2872|))) (or (and (= |v_#race~x$w_buff0_used~0_16992| |v_#race~x$w_buff0_used~0_16991|) .cse30 (= |v_#race~x$r_buff0_thd1~0_12189| |v_#race~x$r_buff0_thd1~0_12186|) .cse31 .cse32 (= |old(P0Thread1of1ForFork2_#t~short47)| |v_P0_#t~short47_2912|) .cse33 (= |v_P0_#t~ite51_2243| |old(P0Thread1of1ForFork2_#t~ite51)|) (= |old(P0Thread1of1ForFork2_#t~short49)| |v_P0_#t~short49_2827|) .cse34 (= |v_P0_#t~ite52_2069| |old(~x$w_buff1_used~0)|) .cse29) (let ((.cse35 (not |v_P0_#t~short49_2826|)) (.cse42 (not |v_P0_#t~short49_2827|)) (.cse39 (not |v_P0_#t~short47_2911|)) (.cse36 (not |v_P0_#t~short47_2912|))) (and .cse0 (= |v_P0_#t~ite51_2243| |v_P0_#t~ite52_2069|) (or (and .cse35 .cse36) (and |v_P0_#t~short47_2912| |v_P0_#t~short49_2826|)) (or (and .cse37 |v_P0_#t~short47_2911|) (and .cse38 .cse39)) (or (and .cse30 .cse32 (= |v_#race~x$r_buff0_thd1~0_12202| |v_#race~x$r_buff0_thd1~0_12198|) (= |v_P0_#t~short49_2827| |v_P0_#t~short49_2826|) |v_P0_#t~short49_2826|) (let ((.cse40 (not |v_P0_#t~short48_2783|)) (.cse41 (not |v_P0_#t~short48_2784|))) (and .cse35 (or (and .cse40 .cse12) (and .cse13 |v_P0_#t~short48_2783|)) (= |v_#race~x$r_buff0_thd1~0_12202| 0) (or (and .cse40 .cse32 (= |v_P0_#t~short48_2783| |v_P0_#t~short48_2784|)) (and (or (and .cse41 .cse27) (and .cse25 |v_P0_#t~short48_2784|)) (= |v_#race~x$r_buff1_thd1~0_7272| 0) |v_P0_#t~short48_2783|)) (or (and |v_P0_#t~short48_2784| |v_P0_#t~short49_2827|) (and .cse41 .cse42))))) (let ((.cse44 (= |v_#race~x$r_buff0_thd1~0_12202| |v_#race~x$r_buff0_thd1~0_12189|)) (.cse45 (= |v_#race~x$w_buff0_used~0_16992| 0))) (or (let ((.cse43 (not |v_P0_#t~short50_2606|))) (and (= |v_P0_#t~ite51_2243| 0) (= |v_#race~x$w_buff1_used~0_16317| |v_#race~x$w_buff1_used~0_16314|) (or (and |v_P0_#t~short50_2606| (or (and |v_P0_#t~short50_2605| .cse12) (and (not |v_P0_#t~short50_2605|) .cse13)) (= |v_#race~x$r_buff0_thd1~0_12189| 0)) (and .cse43 .cse44 (= |v_P0_#t~short50_2605| |v_P0_#t~short50_2606|))) .cse45 .cse42 (or (and |v_P0_#t~short50_2606| .cse38) (and .cse37 .cse43)))) (and (= |v_P0_#t~ite51_2243| |old(~x$w_buff1_used~0)|) .cse31 .cse44 .cse45 .cse34 |v_P0_#t~short49_2827|))) (let ((.cse46 (= |v_#race~x$w_buff1_used~0_16316| |v_#race~x$w_buff1_used~0_16314|))) (or (and .cse46 (= |v_P0_#t~short47_2911| |v_P0_#t~short47_2912|) .cse33 (= |v_#race~x$r_buff0_thd1~0_12198| |v_#race~x$r_buff0_thd1~0_12186|) |v_P0_#t~short47_2911|) (let ((.cse48 (not |v_P0_#t~short46_2871|)) (.cse47 (not |v_P0_#t~short46_2872|))) (and (or (and (= |v_#race~x$w_buff1_used~0_16314| 0) (or (and .cse16 |v_P0_#t~short46_2872|) (and .cse47 .cse18)) |v_P0_#t~short46_2871|) (and .cse48 .cse46 (= |v_P0_#t~short46_2871| |v_P0_#t~short46_2872|))) .cse39 (or (and .cse13 |v_P0_#t~short46_2871|) (and .cse48 .cse12)) (= |v_#race~x$r_buff0_thd1~0_12198| 0) (or (and .cse47 .cse36) (and |v_P0_#t~short46_2872| |v_P0_#t~short47_2912|)))))))))) (let ((.cse49 (= |old(#race~x$w_buff1_used~0)| |v_#race~x$w_buff1_used~0_16315|))) (or (let ((.cse51 (not |v_P0_#t~short10_3153|)) (.cse50 (not |v_P0_#t~short10_3154|))) (and (or (and .cse49 (= |v_P0_#t~short10_3154| |v_P0_#t~short10_3153|) .cse50) (and (= |v_#race~x$w_buff1_used~0_16315| 0) (or (and .cse51 .cse18) (and |v_P0_#t~short10_3153| .cse16)) |v_P0_#t~short10_3154|)) .cse52 (or (and |v_P0_#t~short10_3153| |v_P0_#t~short11_3226|) (and .cse51 .cse53)) (= |v_#race~x$r_buff0_thd1~0_12190| 0) (or (and |v_P0_#t~short10_3154| .cse13) (and .cse12 .cse50)))) (and .cse49 (= |v_P0_#t~short11_3225| |v_P0_#t~short11_3226|) |v_P0_#t~short11_3225| (= |old(#race~x$r_buff0_thd1~0)| |v_#race~x$r_buff0_thd1~0_12190|) (= |old(P0Thread1of1ForFork2_#t~short10)| |v_P0_#t~short10_3153|)))) (let ((.cse54 (select |#race| |~#x~0.base|))) (or (not (= (select .cse54 .cse55) 0)) (not (= (select .cse54 |~#x~0.offset|) 0)) (not (= (select .cse54 .cse56) 0)) (not (= 0 (select .cse54 .cse57))))) (or (and .cse52 .cse6) (and |v_P0_#t~short11_3225| .cse8)) (= (store |v_#race_10303| |~#x~0.base| (store (store (store (store .cse58 |~#x~0.offset| 0) .cse55 0) .cse57 0) .cse56 0)) |#race|) (let ((.cse61 (= |v_#race~x$w_buff0_used~0_16990| 0)) (.cse62 (= |v_#race~x$w_buff1~0_7611| |old(#race~x$w_buff1~0)|)) (.cse64 (= |v_#race~x$w_buff0~0_7128| |old(#race~x$w_buff0~0)|)) (.cse63 (= |v_#race_10304| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse55 0) .cse57 0) .cse56 0)))) (.cse65 (= |v_#race~x$r_buff0_thd1~0_12203| |v_#race~x$r_buff0_thd1~0_12184|))) (or (and (= .cse59 |v_P0_#t~mem14_2744|) (= (select .cse60 |~#x~0.offset|) 0) .cse61 |v_P0_#t~short13_3261| (= |old(P0Thread1of1ForFork2_#t~short15)| |v_P0_#t~short15_3127|) (= |v_P0_#t~ite16_2719| |old(P0Thread1of1ForFork2_#t~ite16)|) .cse62 (= (select .cse60 .cse55) 0) (= |v_P0_#t~ite17_2575| |v_P0_#t~mem14_2744|) .cse63 (= (select .cse60 .cse57) 0) (= (select .cse60 .cse56) 0) .cse64 .cse65) (let ((.cse67 (not |v_P0_#t~short15_3127|)) (.cse66 (not |v_P0_#t~short15_3126|))) (and (or (and .cse8 .cse66) (and |v_P0_#t~short15_3126| .cse6)) .cse61 (or (and (= |v_#race~x$w_buff0~0_7128| 0) |v_P0_#t~short15_3127| .cse62 (= |old(~x$w_buff0~0)| |v_P0_#t~ite16_2719|)) (and .cse67 (= |v_#race~x$w_buff1~0_7611| 0) .cse64 (= |v_P0_#t~ite16_2719| |old(~x$w_buff1~0)|))) (= |v_P0_#t~ite16_2719| |v_P0_#t~ite17_2575|) .cse63 .cse68 (or (and (or (and .cse67 .cse13) (and |v_P0_#t~short15_3127| .cse12)) |v_P0_#t~short15_3126| (= |v_#race~x$r_buff0_thd1~0_12184| 0)) (and .cse66 .cse65 (= |v_P0_#t~short15_3126| |v_P0_#t~short15_3127|))) (= |v_P0_#t~mem14_2744| |old(P0Thread1of1ForFork2_#t~mem14)|))))) (= ~__unbuffered_p0_EAX$read_delayed~0 1) (= ~x$r_buff1_thd1~0 (ite (= 0 (mod |v_P0_#t~ite69_1007| 256)) 0 1)) (= (ite (= (mod |v_P0_#t~nondet5_835| 256) 0) 0 1) ~weak$$choice2~0) (= (ite (= (mod |v_P0_#t~nondet3_637| 256) 0) 0 1) ~weak$$choice0~0) (or (= |v_P0_#t~nondet3_637| 1) (= |v_P0_#t~nondet3_637| 0)) (= |~#x~0.base| ~__unbuffered_p0_EAX$read_delayed_var~0.base) (let ((.cse85 (= |#race~x$w_buff1_used~0| |v_#race~x$w_buff1_used~0_16311|)) (.cse77 (= |v_P0_#t~short65_1819| |old(P0Thread1of1ForFork2_#t~short65)|)) (.cse69 (= |v_#race~x$r_buff1_thd1~0_7273| 0)) (.cse71 (= |v_P0_#t~short67_1605| |old(P0Thread1of1ForFork2_#t~short67)|)) (.cse89 (= |v_P0_#t~short63_1932| |old(P0Thread1of1ForFork2_#t~short63)|))) (or (let ((.cse75 (= 0 (mod ~x$r_buff0_thd1~0 256)))) (let ((.cse74 (not |v_P0_#t~short66_1875|)) (.cse81 (not |v_P0_#t~short66_1874|)) (.cse82 (not |v_P0_#t~short64_1983|)) (.cse76 (not .cse75)) (.cse88 (not |v_P0_#t~short64_1984|))) (and (let ((.cse70 (= |#race~x$w_buff0_used~0| 0)) (.cse72 (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12204|))) (or (and .cse69 |v_P0_#t~short66_1875| .cse70 .cse71 (= |v_P0_#t~ite68_1229| |old(~x$r_buff1_thd1~0)|) .cse72) (let ((.cse73 (not |v_P0_#t~short67_1606|))) (and (or (and .cse37 .cse73) (and .cse38 |v_P0_#t~short67_1606|)) (= |v_#race~x$r_buff1_thd1~0_7267| |v_#race~x$r_buff1_thd1~0_7273|) (= |v_P0_#t~ite68_1229| 0) .cse74 .cse70 (or (and (= |v_P0_#t~short67_1605| |v_P0_#t~short67_1606|) .cse73 .cse72) (and |v_P0_#t~short67_1606| (= |#race~x$r_buff0_thd1~0| 0) (or (and .cse75 (not |v_P0_#t~short67_1605|)) (and .cse76 |v_P0_#t~short67_1605|)))))))) .cse0 (let ((.cse78 (= |v_#race~x$r_buff1_thd1~0_7267| |v_#race~x$r_buff1_thd1~0_7271|))) (or (and (= |v_#race~x$r_buff0_thd1~0_12204| |v_#race~x$r_buff0_thd1~0_12200|) .cse77 |v_P0_#t~short66_1874| (= |v_P0_#t~short66_1874| |v_P0_#t~short66_1875|) .cse78) (let ((.cse80 (not |v_P0_#t~short65_1820|)) (.cse79 (not |v_P0_#t~short65_1819|))) (and (or (and |v_P0_#t~short65_1819| |v_P0_#t~short66_1875|) (and .cse79 .cse74)) (or (and .cse75 |v_P0_#t~short65_1820|) (and .cse76 .cse80)) .cse81 (= |v_#race~x$r_buff0_thd1~0_12204| 0) (or (and (= |v_P0_#t~short65_1819| |v_P0_#t~short65_1820|) .cse80 .cse78) (and |v_P0_#t~short65_1820| (= |v_#race~x$r_buff1_thd1~0_7267| 0) (or (and |v_P0_#t~short65_1819| .cse25) (and .cse79 .cse27)))))))) (or (and .cse82 .cse81) (and |v_P0_#t~short64_1983| |v_P0_#t~short66_1874|)) (= |v_P0_#t~ite68_1229| |v_P0_#t~ite69_1007|) (or (let ((.cse84 (not |v_P0_#t~short63_1931|)) (.cse83 (not |v_P0_#t~short63_1932|))) (and (= |v_#race~x$r_buff0_thd1~0_12200| 0) (or (and .cse82 .cse83) (and |v_P0_#t~short63_1932| |v_P0_#t~short64_1983|)) (or (and .cse75 |v_P0_#t~short63_1931|) (and .cse84 .cse76)) (or (and .cse85 .cse84 (= |v_P0_#t~short63_1931| |v_P0_#t~short63_1932|)) (and |v_P0_#t~short63_1931| (or (and |v_P0_#t~short63_1932| .cse86) (and .cse83 .cse87)) (= |#race~x$w_buff1_used~0| 0))) .cse88)) (and .cse85 (= |v_P0_#t~short64_1983| |v_P0_#t~short64_1984|) (= |v_#race~x$r_buff0_thd1~0_12200| |v_#race~x$r_buff0_thd1~0_12197|) |v_P0_#t~short64_1984| .cse89)) (or (and .cse38 .cse88) (and .cse37 |v_P0_#t~short64_1984|))))) (and .cse85 (= |#race~x$w_buff0_used~0| |v_#race~x$w_buff0_used~0_16987|) .cse77 .cse69 (= |old(P0Thread1of1ForFork2_#t~ite68)| |v_P0_#t~ite68_1229|) (= |v_P0_#t~ite69_1007| |old(~x$r_buff1_thd1~0)|) (= |v_P0_#t~short66_1875| |old(P0Thread1of1ForFork2_#t~short66)|) .cse71 (= |v_P0_#t~short64_1983| |old(P0Thread1of1ForFork2_#t~short64)|) .cse89 (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12197|) .cse29))) (= (ite (= (mod |v_P0_#t~ite61_1579| 256) 0) 0 1) ~x$r_buff0_thd1~0) (let ((.cse92 (= |v_P0_#t~ite24_2799| |old(P0Thread1of1ForFork2_#t~ite24)|)) (.cse93 (= |old(P0Thread1of1ForFork2_#t~short23)| |v_P0_#t~short23_3241|)) (.cse91 (= |v_#race~x$w_buff0~0_7127| 0)) (.cse95 (= |old(P0Thread1of1ForFork2_#t~short19)| |v_P0_#t~short19_3382|)) (.cse96 (= |v_#race~x$w_buff1_used~0_16315| |v_#race~x$w_buff1_used~0_16313|)) (.cse90 (= |v_#race~x$r_buff1_thd1~0_7269| |v_#race~x$r_buff1_thd1~0_7270|)) (.cse94 (= |old(P0Thread1of1ForFork2_#t~short21)| |v_P0_#t~short21_3338|))) (or (and (= |v_#race~x$r_buff0_thd1~0_12193| |v_#race~x$r_buff0_thd1~0_12184|) .cse90 (= |old(P0Thread1of1ForFork2_#t~short22)| |v_P0_#t~short22_3367|) .cse91 .cse92 (= |old(~x$w_buff0~0)| ~x$w_buff0~0) .cse93 .cse94 .cse95 .cse96 (= |v_P0_#t~ite25_2787| |old(P0Thread1of1ForFork2_#t~ite25)|) (= |old(P0Thread1of1ForFork2_#t~short20)| |v_P0_#t~short20_3407|) (= |v_#race~x$w_buff0_used~0_16993| |v_#race~x$w_buff0_used~0_16990|) .cse29) (let ((.cse104 (not |v_P0_#t~short20_3408|)) (.cse105 (not |v_P0_#t~short20_3407|)) (.cse107 (not |v_P0_#t~short22_3366|)) (.cse102 (not |v_P0_#t~short22_3367|))) (and (let ((.cse97 (= |v_#race~x$r_buff0_thd1~0_12193| |v_#race~x$r_buff0_thd1~0_12191|)) (.cse98 (= |v_#race~x$w_buff0_used~0_16993| 0))) (or (and .cse91 (= |old(~x$w_buff0~0)| |v_P0_#t~ite25_2787|) .cse92 |v_P0_#t~short22_3367| .cse93 .cse97 .cse98) (let ((.cse100 (not |v_P0_#t~short23_3241|)) (.cse101 (not |v_P0_#t~short23_3240|))) (and (let ((.cse99 (= |old(~x$w_buff0~0)| |v_P0_#t~ite24_2799|))) (or (and .cse99 .cse91 |v_P0_#t~short23_3241|) (and .cse99 .cse91 .cse100))) (or (and (= |v_P0_#t~short23_3240| |v_P0_#t~short23_3241|) .cse97 .cse101) (and (= |v_#race~x$r_buff0_thd1~0_12193| 0) |v_P0_#t~short23_3240| (or (and .cse12 |v_P0_#t~short23_3241|) (and .cse100 .cse13)))) (= |v_P0_#t~ite24_2799| |v_P0_#t~ite25_2787|) .cse102 (or (and |v_P0_#t~short23_3240| .cse6) (and .cse8 .cse101)) .cse98)))) .cse0 (or (and (= |v_P0_#t~short20_3407| |v_P0_#t~short20_3408|) |v_P0_#t~short20_3408| (= |v_#race~x$r_buff0_thd1~0_12192| |v_#race~x$r_buff0_thd1~0_12184|) .cse95 .cse96) (let ((.cse103 (not |v_P0_#t~short19_3381|)) (.cse106 (not |v_P0_#t~short19_3382|))) (and (or (and |v_P0_#t~short19_3381| .cse13) (and .cse12 .cse103)) .cse104 (or (and |v_P0_#t~short19_3382| |v_P0_#t~short20_3407|) (and .cse105 .cse106)) (or (and .cse103 (= |v_P0_#t~short19_3381| |v_P0_#t~short19_3382|) .cse96) (and (= |v_#race~x$w_buff1_used~0_16313| 0) |v_P0_#t~short19_3381| (or (and .cse106 .cse18) (and .cse16 |v_P0_#t~short19_3382|)))) (= |v_#race~x$r_buff0_thd1~0_12192| 0)))) (= ~x$w_buff0~0 |v_P0_#t~ite25_2787|) (or (and .cse8 |v_P0_#t~short20_3408|) (and .cse104 .cse6)) (or (and .cse105 .cse107) (and |v_P0_#t~short20_3407| |v_P0_#t~short22_3366|)) (or (let ((.cse108 (not |v_P0_#t~short21_3338|)) (.cse109 (not |v_P0_#t~short21_3337|))) (and .cse107 (or (and .cse102 .cse108) (and |v_P0_#t~short21_3338| |v_P0_#t~short22_3367|)) (or (and .cse90 .cse109 (= |v_P0_#t~short21_3337| |v_P0_#t~short21_3338|)) (and (= |v_#race~x$r_buff1_thd1~0_7269| 0) |v_P0_#t~short21_3337| (or (and |v_P0_#t~short21_3338| .cse25) (and .cse27 .cse108)))) (= |v_#race~x$r_buff0_thd1~0_12191| 0) (or (and |v_P0_#t~short21_3337| .cse13) (and .cse109 .cse12)))) (and .cse90 |v_P0_#t~short22_3366| .cse94 (= |v_#race~x$r_buff0_thd1~0_12192| |v_#race~x$r_buff0_thd1~0_12191|) (= |v_P0_#t~short22_3366| |v_P0_#t~short22_3367|))))))) (= .cse59 ~x$mem_tmp~0) (= |~#x~0.offset| ~__unbuffered_p0_EAX$read_delayed_var~0.offset) (= (select .cse58 |~#x~0.offset|) .cse110) (= (select .cse58 .cse57) .cse110) (or (and |v_P0_#t~short11_3226| |v_P0_#t~short13_3260|) (and .cse111 .cse53)) (= .cse110 (select .cse58 .cse56)) (let ((.cse113 (= |v_#race~x$r_buff1_thd1~0_7270| |old(#race~x$r_buff1_thd1~0)|))) (or (let ((.cse112 (not |v_P0_#t~short12_3198|)) (.cse114 (not |v_P0_#t~short12_3197|))) (and .cse111 (= |v_#race~x$r_buff0_thd1~0_12203| 0) (or (and |v_P0_#t~short12_3197| (or (and .cse27 .cse112) (and |v_P0_#t~short12_3198| .cse25)) (= |v_#race~x$r_buff1_thd1~0_7270| 0)) (and (= |v_P0_#t~short12_3198| |v_P0_#t~short12_3197|) .cse113 .cse114)) (or (and |v_P0_#t~short12_3198| |v_P0_#t~short13_3261|) (and .cse112 .cse68)) (or (and |v_P0_#t~short12_3197| .cse13) (and .cse12 .cse114)))) (and |v_P0_#t~short13_3260| (= |v_P0_#t~short13_3261| |v_P0_#t~short13_3260|) .cse113 (= |old(P0Thread1of1ForFork2_#t~short12)| |v_P0_#t~short12_3198|) (= |v_#race~x$r_buff0_thd1~0_12203| |v_#race~x$r_buff0_thd1~0_12190|)))) (= ~x$flush_delayed~0 (ite .cse0 0 1)) (let ((.cse115 (= |old(P0Thread1of1ForFork2_#t~short41)| |v_P0_#t~short41_2947|)) (.cse117 (= |v_P0_#t~ite42_2533| |old(P0Thread1of1ForFork2_#t~ite42)|)) (.cse118 (= |v_#race~x$w_buff0_used~0_16988| 0)) (.cse121 (= |v_P0_#t~short39_3090| |old(P0Thread1of1ForFork2_#t~short39)|)) (.cse120 (= |v_#race~x$r_buff1_thd1~0_7268| |v_#race~x$r_buff1_thd1~0_7274|)) (.cse116 (= |v_#race~x$w_buff1_used~0_16318| |v_#race~x$w_buff1_used~0_16316|)) (.cse119 (= |v_P0_#t~short37_3162| |old(P0Thread1of1ForFork2_#t~short37)|))) (or (and (= |v_#race~x$r_buff0_thd1~0_12188| |v_#race~x$r_buff0_thd1~0_12186|) .cse115 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite44_2371|) .cse116 .cse117 (= |old(P0Thread1of1ForFork2_#t~short40)| |v_P0_#t~short40_3128|) .cse118 (= |v_P0_#t~short38_3197| |old(P0Thread1of1ForFork2_#t~short38)|) .cse119 .cse120 (= |v_P0_#t~ite43_2523| |old(P0Thread1of1ForFork2_#t~ite43)|) .cse121 .cse29) (let ((.cse125 (not |v_P0_#t~short40_3128|)) (.cse127 (not |v_P0_#t~short40_3129|)) (.cse129 (not |v_P0_#t~short38_3198|)) (.cse130 (not |v_P0_#t~short38_3197|))) (and (let ((.cse124 (= |v_#race~x$r_buff0_thd1~0_12196| |v_#race~x$r_buff0_thd1~0_12186|))) (or (let ((.cse123 (not |v_P0_#t~short41_2947|)) (.cse122 (not |v_P0_#t~short41_2946|))) (and (or (and .cse6 |v_P0_#t~short41_2946|) (and .cse8 .cse122)) (or (and (= |v_P0_#t~ite42_2533| 0) .cse118 |v_P0_#t~short41_2947|) (and .cse118 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite42_2533|) .cse123)) (= |v_P0_#t~ite42_2533| |v_P0_#t~ite43_2523|) (or (and (= |v_#race~x$r_buff0_thd1~0_12186| 0) (or (and .cse13 .cse123) (and .cse12 |v_P0_#t~short41_2947|)) |v_P0_#t~short41_2946|) (and (= |v_P0_#t~short41_2946| |v_P0_#t~short41_2947|) .cse124 .cse122)) .cse125)) (and .cse115 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite43_2523|) .cse117 .cse124 .cse118 |v_P0_#t~short40_3128|))) .cse0 (or (and (= |v_P0_#t~short40_3128| |v_P0_#t~short40_3129|) (= |v_#race~x$r_buff0_thd1~0_12196| |v_#race~x$r_buff0_thd1~0_12195|) .cse120 |v_P0_#t~short40_3129| .cse121) (let ((.cse126 (not |v_P0_#t~short39_3089|)) (.cse128 (not |v_P0_#t~short39_3090|))) (and (or (and .cse13 |v_P0_#t~short39_3089|) (and .cse126 .cse12)) (= |v_#race~x$r_buff0_thd1~0_12196| 0) .cse127 (or (and .cse128 .cse125) (and |v_P0_#t~short39_3090| |v_P0_#t~short40_3128|)) (or (and .cse126 (= |v_P0_#t~short39_3089| |v_P0_#t~short39_3090|) .cse120) (and (or (and .cse25 |v_P0_#t~short39_3090|) (and .cse128 .cse27)) (= |v_#race~x$r_buff1_thd1~0_7274| 0) |v_P0_#t~short39_3089|))))) (= |v_P0_#t~ite43_2523| |v_P0_#t~ite44_2371|) (or (and .cse8 |v_P0_#t~short38_3198|) (and .cse129 .cse6)) (or (and .cse130 .cse127) (and |v_P0_#t~short38_3197| |v_P0_#t~short40_3129|)) (or (let ((.cse131 (not |v_P0_#t~short37_3161|)) (.cse132 (not |v_P0_#t~short37_3162|))) (and (= |v_#race~x$r_buff0_thd1~0_12195| 0) .cse129 (or (and .cse12 .cse131) (and .cse13 |v_P0_#t~short37_3161|)) (or (and |v_P0_#t~short37_3162| |v_P0_#t~short38_3197|) (and .cse132 .cse130)) (or (and .cse116 (= |v_P0_#t~short37_3161| |v_P0_#t~short37_3162|) .cse131) (and |v_P0_#t~short37_3161| (or (and .cse16 |v_P0_#t~short37_3162|) (and .cse132 .cse18)) (= |v_#race~x$w_buff1_used~0_16316| 0))))) (and .cse116 (= |v_#race~x$r_buff0_thd1~0_12195| |v_#race~x$r_buff0_thd1~0_12188|) |v_P0_#t~short38_3198| .cse119 (= |v_P0_#t~short38_3198| |v_P0_#t~short38_3197|))))))) (= (store |old(#memory_int)| |~#x~0.base| (store .cse133 |~#x~0.offset| |v_P0_#t~ite17_2575|)) |#memory_int|) (= (store |v_#race_10304| |~#x~0.base| (store (store (store (store .cse60 |~#x~0.offset| .cse110) .cse55 .cse110) .cse57 .cse110) .cse56 .cse110)) |v_#race_10303|) (= (ite (= (mod |v_P0_#t~ite52_2069| 256) 0) 0 1) ~x$w_buff1_used~0) (= (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|) |P0Thread1of1ForFork2_#t~mem73|) (or (= |v_P0_#t~nondet5_835| 0) (= |v_P0_#t~nondet5_835| 1)) (let ((.cse144 (= |v_P0_#t~short58_2229| |old(P0Thread1of1ForFork2_#t~short58)|)) (.cse134 (= |v_P0_#t~short56_2408| |old(P0Thread1of1ForFork2_#t~short56)|)) (.cse135 (= |v_#race~x$r_buff1_thd1~0_7272| |v_#race~x$r_buff1_thd1~0_7271|)) (.cse148 (= |v_P0_#t~short54_2504| |old(P0Thread1of1ForFork2_#t~short54)|)) (.cse145 (= |v_P0_#t~ite59_1789| |old(P0Thread1of1ForFork2_#t~ite59)|)) (.cse140 (= |v_#race~x$r_buff0_thd1~0_12201| 0)) (.cse149 (= |v_#race~x$w_buff1_used~0_16312| |v_#race~x$w_buff1_used~0_16311|))) (or (let ((.cse139 (not |v_P0_#t~short57_2459|)) (.cse138 (not |v_P0_#t~short57_2458|)) (.cse146 (not |v_P0_#t~short55_2552|)) (.cse147 (not |v_P0_#t~short55_2551|))) (and .cse0 (= |v_P0_#t~ite60_1779| |v_P0_#t~ite61_1579|) (or (and (= |v_P0_#t~short57_2459| |v_P0_#t~short57_2458|) .cse134 |v_P0_#t~short57_2458| .cse135 (= |v_#race~x$r_buff0_thd1~0_12194| |v_#race~x$r_buff0_thd1~0_12199|)) (let ((.cse136 (not |v_P0_#t~short56_2407|)) (.cse137 (not |v_P0_#t~short56_2408|))) (and (or (and .cse135 .cse136 (= |v_P0_#t~short56_2407| |v_P0_#t~short56_2408|)) (and |v_P0_#t~short56_2407| (= |v_#race~x$r_buff1_thd1~0_7271| 0) (or (and .cse137 .cse27) (and |v_P0_#t~short56_2408| .cse25)))) (or (and |v_P0_#t~short56_2407| .cse13) (and .cse12 .cse136)) .cse138 (= |v_#race~x$r_buff0_thd1~0_12199| 0) (or (and .cse137 .cse139) (and |v_P0_#t~short56_2408| |v_P0_#t~short57_2459|))))) (let ((.cse142 (= |v_#race~x$w_buff0_used~0_16987| 0))) (or (let ((.cse141 (not |v_P0_#t~short58_2229|)) (.cse143 (not |v_P0_#t~short58_2228|))) (and (or (and |v_P0_#t~short58_2229| (= |v_#race~x$r_buff0_thd1~0_12201| |v_#race~x$r_buff0_thd1~0_12185|) (= |v_P0_#t~ite59_1789| 0)) (and (= |v_P0_#t~ite59_1789| |old(~x$r_buff0_thd1~0)|) .cse140 .cse141)) .cse142 .cse139 (or (and |v_P0_#t~short58_2228| (or (and |v_P0_#t~short58_2229| .cse12) (and .cse13 .cse141)) (= |v_#race~x$r_buff0_thd1~0_12185| 0)) (and (= |v_P0_#t~short58_2229| |v_P0_#t~short58_2228|) (= |v_#race~x$r_buff0_thd1~0_12199| |v_#race~x$r_buff0_thd1~0_12185|) .cse143)) (= |v_P0_#t~ite59_1789| |v_P0_#t~ite60_1779|) (or (and .cse37 .cse143) (and .cse38 |v_P0_#t~short58_2228|)))) (and .cse144 |v_P0_#t~short57_2459| .cse142 .cse145 (= |v_P0_#t~ite60_1779| |old(~x$r_buff0_thd1~0)|) .cse140))) (or (and |v_P0_#t~short55_2552| |v_P0_#t~short57_2458|) (and .cse138 .cse146)) (or (and |v_P0_#t~short55_2551| .cse37) (and .cse38 .cse147)) (or (and |v_P0_#t~short55_2551| .cse148 (= |v_P0_#t~short55_2552| |v_P0_#t~short55_2551|) (= |v_#race~x$r_buff0_thd1~0_12194| |v_#race~x$r_buff0_thd1~0_12189|) .cse149) (let ((.cse150 (not |v_P0_#t~short54_2504|)) (.cse151 (not |v_P0_#t~short54_2503|))) (and (or (and .cse150 .cse146) (and |v_P0_#t~short54_2504| |v_P0_#t~short55_2552|)) (= |v_#race~x$r_buff0_thd1~0_12194| 0) .cse147 (or (and (= |v_P0_#t~short54_2504| |v_P0_#t~short54_2503|) .cse149 .cse151) (and |v_P0_#t~short54_2503| (or (and |v_P0_#t~short54_2504| .cse86) (and .cse150 .cse87)) (= |v_#race~x$w_buff1_used~0_16311| 0))) (or (and .cse12 .cse151) (and |v_P0_#t~short54_2503| .cse13))))))) (and .cse144 (= |v_#race~x$w_buff0_used~0_16987| |v_#race~x$w_buff0_used~0_16992|) .cse134 .cse135 .cse148 .cse145 (= |v_P0_#t~short57_2459| |old(P0Thread1of1ForFork2_#t~short57)|) (= |v_P0_#t~ite60_1779| |old(P0Thread1of1ForFork2_#t~ite60)|) (= |v_P0_#t~short55_2552| |old(P0Thread1of1ForFork2_#t~short55)|) .cse140 .cse149 (= |v_P0_#t~ite61_1579| |old(~x$r_buff0_thd1~0)|) .cse29)))))) +//@ semantics [287] {P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short32,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite59,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~short64,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~ite43,~__unbuffered_p0_EAX$read_delayed_var~0.base,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$r_buff1_thd1~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,#race~__unbuffered_p0_EAX$read_delayed_var~0,P0Thread1of1ForFork2_#t~mem73,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#t~short20,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet74,P0Thread1of1ForFork2_#t~short31,~__unbuffered_p0_EAX$read_delayed_var~0.offset,#memory_int,#race~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [288] {P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short32,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite59,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~short64,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~ite43,~__unbuffered_p0_EAX$read_delayed_var~0.base,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$r_buff1_thd1~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,#race~__unbuffered_p0_EAX$read_delayed_var~0,P0Thread1of1ForFork2_#t~mem73,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#t~short20,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet74,P0Thread1of1ForFork2_#t~short31,~__unbuffered_p0_EAX$read_delayed_var~0.offset,#memory_int,#race~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [289] {P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short32,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~mem75,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~short64,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~ite43,~__unbuffered_p0_EAX$read_delayed_var~0.base,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,~weak$$choice2~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,#race~__unbuffered_p0_EAX$read_delayed_var~0,P0Thread1of1ForFork2_#t~mem73,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#t~short20,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet74,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~short31,#memory_int,~__unbuffered_p0_EAX$read_delayed_var~0.offset,#race~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} [(|v_P0_#t~short46_2876| Bool) (|v_P0_#t~ite42_2535| Int) (|v_P0_#t~short46_2875| Bool) (|v_P0_#t~short67_1610| Bool) (|v_P0_#t~short63_1936| Bool) (|v_P0_#t~short63_1935| Bool) (|v_P0_#t~short23_3244| Bool) (|v_#race~x$w_buff0~0_7131| Int) (|v_P0_#t~short23_3245| Bool) (|v_P0_#t~ite61_1581| Int) (|v_P0_#t~short41_2951| Bool) (|v_#race~x$w_buff0~0_7132| Int) (|v_P0_#t~short21_3342| Bool) (|v_P0_#t~short21_3341| Bool) (|v_P0_#t~short55_2555| Bool) (|v_P0_#t~short47_2915| Bool) (|v_P0_#t~short55_2556| Bool) (|v_P0_#t~ite52_2071| Int) (|v_P0_#t~short47_2916| Bool) (|v_P0_#t~short13_3265| Bool) (|v_P0_#t~short39_3093| Bool) (|v_P0_#t~short13_3264| Bool) (|v_P0_#t~nondet5_837| Int) (|v_P0_#t~short39_3094| Bool) (|v_P0_#t~short67_1609| Bool) (|v_P0_#t~short57_2462| Bool) (|v_P0_#t~short57_2463| Bool) (|v_P0_#t~short41_2950| Bool) (|v_P0_#t~short29_3385| Bool) (|v_P0_#t~short29_3386| Bool) (|v_P0_#t~short50_2610| Bool) (|v_P0_#t~short11_3229| Bool) (|v_P0_#t~ite34_2711| Int) (|v_P0_#t~ite44_2373| Int) (|v_P0_#t~short30_3297| Bool) (|v_P0_#t~short30_3298| Bool) (|v_P0_#t~short12_3202| Bool) (|v_P0_#t~short12_3201| Bool) (|v_P0_#t~short22_3370| Bool) (|v_P0_#t~short22_3371| Bool) (|v_P0_#t~short31_3332| Bool) (|v_P0_#t~short11_3230| Bool) (|v_P0_#t~short31_3333| Bool) (|v_P0_#t~short48_2788| Bool) (|v_P0_#t~short48_2787| Bool) (|v_#race_10308| (Array Int (Array Int Int))) (|v_P0_#t~ite69_1009| Int) (|v_#race_10307| (Array Int (Array Int Int))) (|v_P0_#t~ite43_2525| Int) (|v_#race~x$r_buff0_thd1~0_12228| Int) (|v_#race~x$r_buff0_thd1~0_12229| Int) (|v_P0_#t~short65_1824| Bool) (|v_P0_#t~short65_1823| Bool) (|v_P0_#t~nondet3_639| Int) (|v_P0_#t~short37_3166| Bool) (|v_P0_#t~ite16_2721| Int) (|v_P0_#t~short37_3165| Bool) (|v_#race~x$r_buff1_thd1~0_7283| Int) (|v_P0_#t~short19_3385| Bool) (|v_#race~x$r_buff1_thd1~0_7284| Int) (|v_#race~x$r_buff1_thd1~0_7285| Int) (|v_P0_#t~ite68_1231| Int) (|v_P0_#t~ite17_2577| Int) (|v_P0_#t~ite24_2801| Int) (|v_P0_#t~short28_3354| Bool) (|v_#race~x$r_buff1_thd1~0_7286| Int) (|v_P0_#t~short28_3353| Bool) (|v_#race~x$r_buff1_thd1~0_7287| Int) (|v_#race~x$r_buff1_thd1~0_7288| Int) (|v_P0_#t~short66_1879| Bool) (|v_#race~x$r_buff1_thd1~0_7289| Int) (|v_P0_#t~short66_1878| Bool) (|v_#race~x$r_buff0_thd1~0_12238| Int) (|v_P0_#t~short38_3201| Bool) (|v_#race~x$r_buff0_thd1~0_12239| Int) (|v_P0_#t~short38_3202| Bool) (|v_#race~x$r_buff0_thd1~0_12230| Int) (|v_P0_#t~short64_1987| Bool) (|v_P0_#t~ite59_1791| Int) (|v_#race~x$r_buff0_thd1~0_12231| Int) (|v_#race~x$w_buff1~0_7615| Int) (|v_P0_#t~short54_2507| Bool) (|v_#race~x$r_buff0_thd1~0_12232| Int) (|v_P0_#t~short54_2508| Bool) (|v_#race~x$w_buff1~0_7616| Int) (|v_#race~x$r_buff0_thd1~0_12233| Int) (|v_P0_#t~ite33_2723| Int) (|v_#race~x$r_buff0_thd1~0_12234| Int) (|v_#race~x$r_buff0_thd1~0_12235| Int) (|v_P0_#t~short19_3386| Bool) (|v_#race~x$r_buff0_thd1~0_12236| Int) (|v_P0_#t~short64_1988| Bool) (|v_#race~x$r_buff0_thd1~0_12237| Int) (|v_P0_#t~short15_3130| Bool) (|v_#race~x$w_buff1_used~0_16328| Int) (|v_P0_#t~short15_3131| Bool) (|v_#race~x$w_buff1_used~0_16329| Int) (|v_#race~x$w_buff1_used~0_16327| Int) (|v_P0_#t~ite60_1781| Int) (|v_#race~x$r_buff1_thd1~0_7290| Int) (|v_#race~x$r_buff0_thd1~0_12240| Int) (|v_P0_#t~mem14_2746| Int) (|v_P0_#t~short20_3412| Bool) (|v_P0_#t~short20_3411| Bool) (|v_P0_#t~short50_2609| Bool) (|v_#race~x$r_buff0_thd1~0_12249| Int) (|v_P0_#t~short10_3157| Bool) (|v_P0_#t~short10_3158| Bool) (|v_#race~x$r_buff0_thd1~0_12241| Int) (|v_#race~x$r_buff0_thd1~0_12242| Int) (|v_#race~x$r_buff0_thd1~0_12243| Int) (|v_#race~x$r_buff0_thd1~0_12244| Int) (|v_P0_#t~short56_2412| Bool) (|v_#race~x$r_buff0_thd1~0_12245| Int) (|v_P0_#t~short56_2411| Bool) (|v_#race~x$r_buff0_thd1~0_12246| Int) (|v_#race~x$r_buff0_thd1~0_12247| Int) (|v_#race~x$r_buff0_thd1~0_12248| Int) (|v_#race~x$w_buff0_used~0_17006| Int) (|v_#race~x$w_buff0_used~0_17005| Int) (|v_P0_#t~short49_2830| Bool) (|v_P0_#t~short49_2831| Bool) (|v_#race~x$w_buff0_used~0_17007| Int) (|v_#race~x$w_buff1_used~0_16333| Int) (|v_#race~x$w_buff0_used~0_17002| Int) (|v_#race~x$w_buff1_used~0_16334| Int) (|v_#race~x$w_buff0_used~0_17001| Int) (|v_#race~x$w_buff1_used~0_16331| Int) (|v_#race~x$w_buff0_used~0_17004| Int) (|v_#race~x$w_buff1_used~0_16332| Int) (|v_#race~x$w_buff0_used~0_17003| Int) (|v_#race~x$w_buff1_used~0_16330| Int) (|v_P0_#t~short32_3183| Bool) (|v_P0_#t~short32_3182| Bool) (|v_P0_#t~short58_2233| Bool) (|v_P0_#t~short58_2232| Bool) (|v_P0_#t~short40_3132| Bool) (|v_P0_#t~short40_3133| Bool) (|v_P0_#t~ite25_2789| Int) (|v_P0_#t~ite51_2245| Int)] (let ((.cse29 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse15 (= (mod |old(~x$r_buff0_thd1~0)| 256) 0)) (.cse23 (= (mod |old(~x$r_buff1_thd1~0)| 256) 0)) (.cse17 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse31 (= (mod ~weak$$choice2~0 256) 0)) (.cse1 (select |v_#race_10308| |~#x~0.base|)) (.cse34 (+ |~#x~0.offset| 1)) (.cse53 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse45 (= (mod ~x$w_buff1_used~0 256) 0)) (.cse32 (select |old(#memory_int)| |~#x~0.base|))) (let ((.cse79 (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|)) (.cse77 (not |v_P0_#t~short11_3229|)) (.cse78 (select .cse32 |~#x~0.offset|)) (.cse83 (not |v_P0_#t~short13_3264|)) (.cse90 (select |v_#race_10307| |~#x~0.base|)) (.cse36 (+ 2 |~#x~0.offset|)) (.cse87 (not |v_P0_#t~short11_3230|)) (.cse84 (not |v_P0_#t~short13_3265|)) (.cse44 (not .cse45)) (.cse54 (not .cse53)) (.cse0 (select .cse1 .cse34)) (.cse35 (+ 3 |~#x~0.offset|)) (.cse4 (not .cse31)) (.cse16 (not .cse17)) (.cse24 (not .cse23)) (.cse13 (not .cse15)) (.cse30 (not .cse29))) (and (= (ite (= (mod |v_P0_#t~ite52_2071| 256) 0) 0 1) ~x$w_buff1_used~0) (or (= |v_P0_#t~nondet5_837| 0) (= |v_P0_#t~nondet5_837| 1)) (= .cse0 (select .cse1 |~#x~0.offset|)) (= (ite (= (mod |v_P0_#t~ite69_1009| 256) 0) 0 1) ~x$r_buff1_thd1~0) (let ((.cse3 (= |old(P0Thread1of1ForFork2_#t~short23)| |v_P0_#t~short23_3244|)) (.cse8 (= |v_P0_#t~ite24_2801| |old(P0Thread1of1ForFork2_#t~ite24)|)) (.cse6 (= |v_#race~x$w_buff0~0_7131| 0)) (.cse5 (= |v_#race~x$r_buff1_thd1~0_7287| |v_#race~x$r_buff1_thd1~0_7290|)) (.cse9 (= |old(P0Thread1of1ForFork2_#t~short21)| |v_P0_#t~short21_3342|)) (.cse2 (= |v_#race~x$w_buff1_used~0_16329| |v_#race~x$w_buff1_used~0_16327|)) (.cse7 (= |old(P0Thread1of1ForFork2_#t~short19)| |v_P0_#t~short19_3385|))) (or (and .cse2 (= |v_P0_#t~ite25_2789| |old(P0Thread1of1ForFork2_#t~ite25)|) .cse3 .cse4 .cse5 (= |v_#race~x$r_buff0_thd1~0_12233| |v_#race~x$r_buff0_thd1~0_12240|) (= |old(P0Thread1of1ForFork2_#t~short22)| |v_P0_#t~short22_3370|) (= |old(P0Thread1of1ForFork2_#t~short20)| |v_P0_#t~short20_3412|) .cse6 .cse7 .cse8 (= |old(~x$w_buff0~0)| ~x$w_buff0~0) (= |v_#race~x$w_buff0_used~0_17007| |v_#race~x$w_buff0_used~0_17005|) .cse9) (let ((.cse19 (not |v_P0_#t~short22_3370|)) (.cse20 (not |v_P0_#t~short20_3411|)) (.cse27 (not |v_P0_#t~short20_3412|)) (.cse25 (not |v_P0_#t~short22_3371|))) (and (let ((.cse10 (= |v_#race~x$r_buff0_thd1~0_12233| |v_#race~x$r_buff0_thd1~0_12245|)) (.cse11 (= |v_#race~x$w_buff0_used~0_17007| 0))) (or (and .cse10 .cse3 (= |old(~x$w_buff0~0)| |v_P0_#t~ite25_2789|) |v_P0_#t~short22_3370| .cse6 .cse8 .cse11) (let ((.cse12 (not |v_P0_#t~short23_3245|)) (.cse14 (not |v_P0_#t~short23_3244|))) (and (or (and (= |v_P0_#t~short23_3244| |v_P0_#t~short23_3245|) .cse10 .cse12) (and |v_P0_#t~short23_3245| (= |v_#race~x$r_buff0_thd1~0_12233| 0) (or (and .cse13 |v_P0_#t~short23_3244|) (and .cse14 .cse15)))) (or (and .cse16 |v_P0_#t~short23_3245|) (and .cse17 .cse12)) (let ((.cse18 (= |old(~x$w_buff0~0)| |v_P0_#t~ite24_2801|))) (or (and .cse18 .cse6 .cse14) (and .cse18 |v_P0_#t~short23_3244| .cse6))) .cse19 .cse11 (= |v_P0_#t~ite24_2801| |v_P0_#t~ite25_2789|))))) (or (and .cse17 |v_P0_#t~short20_3411|) (and .cse16 .cse20)) (or (let ((.cse21 (not |v_P0_#t~short21_3341|)) (.cse22 (not |v_P0_#t~short21_3342|))) (and (= |v_#race~x$r_buff0_thd1~0_12245| 0) (or (and |v_P0_#t~short21_3341| .cse15) (and .cse13 .cse21)) (or (and .cse22 .cse19) (and |v_P0_#t~short21_3342| |v_P0_#t~short22_3370|)) (or (and .cse5 .cse21 (= |v_P0_#t~short21_3341| |v_P0_#t~short21_3342|)) (and (or (and |v_P0_#t~short21_3342| .cse23) (and .cse22 .cse24)) (= |v_#race~x$r_buff1_thd1~0_7290| 0) |v_P0_#t~short21_3341|)) .cse25)) (and (= |v_P0_#t~short22_3370| |v_P0_#t~short22_3371|) .cse5 |v_P0_#t~short22_3371| (= |v_#race~x$r_buff0_thd1~0_12249| |v_#race~x$r_buff0_thd1~0_12245|) .cse9)) (= ~x$w_buff0~0 |v_P0_#t~ite25_2789|) (or (let ((.cse26 (not |v_P0_#t~short19_3385|)) (.cse28 (not |v_P0_#t~short19_3386|))) (and (or (and |v_P0_#t~short19_3385| |v_P0_#t~short20_3412|) (and .cse26 .cse27)) .cse20 (or (and |v_P0_#t~short19_3386| .cse15) (and .cse28 .cse13)) (or (and (= |v_#race~x$w_buff1_used~0_16329| 0) |v_P0_#t~short19_3386| (or (and |v_P0_#t~short19_3385| .cse29) (and .cse26 .cse30))) (and .cse2 .cse28 (= |v_P0_#t~short19_3385| |v_P0_#t~short19_3386|))) (= |v_#race~x$r_buff0_thd1~0_12249| 0))) (and .cse2 (= |v_#race~x$r_buff0_thd1~0_12240| |v_#race~x$r_buff0_thd1~0_12249|) |v_P0_#t~short20_3411| .cse7 (= |v_P0_#t~short20_3412| |v_P0_#t~short20_3411|))) (or (and .cse27 .cse25) (and |v_P0_#t~short20_3412| |v_P0_#t~short22_3371|)) .cse31)))) (= (store |old(#memory_int)| |~#x~0.base| (store .cse32 |~#x~0.offset| |v_P0_#t~ite17_2577|)) |#memory_int|) (let ((.cse33 (select |#race| |~#x~0.base|))) (or (not (= (select .cse33 |~#x~0.offset|) 0)) (not (= (select .cse33 .cse34) 0)) (not (= (select .cse33 .cse35) 0)) (not (= (select .cse33 .cse36) 0)))) (= |~#x~0.base| ~__unbuffered_p0_EAX$read_delayed_var~0.base) (let ((.cse52 (= |v_P0_#t~short65_1823| |old(P0Thread1of1ForFork2_#t~short65)|)) (.cse58 (= |v_P0_#t~short67_1609| |old(P0Thread1of1ForFork2_#t~short67)|)) (.cse37 (= |v_P0_#t~short63_1935| |old(P0Thread1of1ForFork2_#t~short63)|)) (.cse38 (= |#race~x$w_buff1_used~0| |v_#race~x$w_buff1_used~0_16332|)) (.cse59 (= |v_#race~x$r_buff1_thd1~0_7284| 0))) (or (let ((.cse39 (= (mod ~x$r_buff0_thd1~0 256) 0))) (let ((.cse46 (not |v_P0_#t~short64_1988|)) (.cse47 (not |v_P0_#t~short66_1879|)) (.cse43 (not |v_P0_#t~short64_1987|)) (.cse51 (not |v_P0_#t~short66_1878|)) (.cse41 (not .cse39))) (and (or (and |v_P0_#t~short64_1988| (= |v_P0_#t~short64_1987| |v_P0_#t~short64_1988|) (= |v_#race~x$r_buff0_thd1~0_12237| |v_#race~x$r_buff0_thd1~0_12248|) .cse37 .cse38) (let ((.cse42 (not |v_P0_#t~short63_1935|)) (.cse40 (not |v_P0_#t~short63_1936|))) (and (or (and |v_P0_#t~short63_1936| .cse39) (and .cse40 .cse41)) (or (and .cse42 .cse43) (and |v_P0_#t~short63_1935| |v_P0_#t~short64_1987|)) (or (and |v_P0_#t~short63_1936| (or (and .cse44 .cse42) (and |v_P0_#t~short63_1935| .cse45)) (= |#race~x$w_buff1_used~0| 0)) (and .cse40 (= |v_P0_#t~short63_1936| |v_P0_#t~short63_1935|) .cse38)) (= |v_#race~x$r_buff0_thd1~0_12248| 0) .cse46))) (let ((.cse50 (= |v_#race~x$r_buff1_thd1~0_7289| |v_#race~x$r_buff1_thd1~0_7285|))) (or (let ((.cse49 (not |v_P0_#t~short65_1824|)) (.cse48 (not |v_P0_#t~short65_1823|))) (and .cse47 (or (and (or (and .cse24 .cse48) (and |v_P0_#t~short65_1823| .cse23)) (= |v_#race~x$r_buff1_thd1~0_7289| 0) |v_P0_#t~short65_1824|) (and (= |v_P0_#t~short65_1823| |v_P0_#t~short65_1824|) .cse49 .cse50)) (or (and |v_P0_#t~short65_1824| .cse39) (and .cse49 .cse41)) (or (and |v_P0_#t~short65_1823| |v_P0_#t~short66_1878|) (and .cse51 .cse48)) (= |v_#race~x$r_buff0_thd1~0_12235| 0))) (and (= |v_P0_#t~short66_1878| |v_P0_#t~short66_1879|) |v_P0_#t~short66_1879| .cse52 .cse50 (= |v_#race~x$r_buff0_thd1~0_12235| |v_#race~x$r_buff0_thd1~0_12248|)))) (or (and |v_P0_#t~short64_1988| .cse53) (and .cse46 .cse54)) (= |v_P0_#t~ite68_1231| |v_P0_#t~ite69_1009|) (or (and .cse47 .cse43) (and |v_P0_#t~short64_1987| |v_P0_#t~short66_1879|)) (let ((.cse55 (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12235|)) (.cse57 (= |#race~x$w_buff0_used~0| 0))) (or (let ((.cse56 (not |v_P0_#t~short67_1610|))) (and (= |v_#race~x$r_buff1_thd1~0_7289| |v_#race~x$r_buff1_thd1~0_7284|) .cse51 (= |v_P0_#t~ite68_1231| 0) (or (and (or (and |v_P0_#t~short67_1609| .cse41) (and (not |v_P0_#t~short67_1609|) .cse39)) |v_P0_#t~short67_1610| (= |#race~x$r_buff0_thd1~0| 0)) (and .cse55 .cse56 (= |v_P0_#t~short67_1609| |v_P0_#t~short67_1610|))) .cse57 (or (and .cse56 .cse53) (and |v_P0_#t~short67_1610| .cse54)))) (and .cse55 |v_P0_#t~short66_1878| (= |v_P0_#t~ite68_1231| |old(~x$r_buff1_thd1~0)|) .cse57 .cse58 .cse59))) .cse31))) (and (= |v_P0_#t~ite68_1231| |old(P0Thread1of1ForFork2_#t~ite68)|) (= |v_P0_#t~short64_1987| |old(P0Thread1of1ForFork2_#t~short64)|) .cse4 (= |v_#race~x$w_buff0_used~0_17002| |#race~x$w_buff0_used~0|) (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12237|) .cse52 (= |v_P0_#t~short66_1878| |old(P0Thread1of1ForFork2_#t~short66)|) .cse58 .cse37 .cse38 .cse59 (= |v_P0_#t~ite69_1009| |old(~x$r_buff1_thd1~0)|)))) (let ((.cse60 (= |v_#race~x$w_buff1_used~0_16330| 0)) (.cse61 (= |v_P0_#t~short50_2610| |old(P0Thread1of1ForFork2_#t~short50)|)) (.cse63 (= |old(P0Thread1of1ForFork2_#t~short46)| |v_P0_#t~short46_2875|)) (.cse62 (= |old(P0Thread1of1ForFork2_#t~short48)| |v_P0_#t~short48_2787|)) (.cse64 (= |v_#race~x$r_buff1_thd1~0_7286| |v_#race~x$r_buff1_thd1~0_7283|))) (or (and (= |old(P0Thread1of1ForFork2_#t~short47)| |v_P0_#t~short47_2916|) (= |v_P0_#t~ite51_2245| |old(P0Thread1of1ForFork2_#t~ite51)|) .cse4 (= |v_P0_#t~ite52_2071| |old(~x$w_buff1_used~0)|) (= |v_#race~x$r_buff0_thd1~0_12243| |v_#race~x$r_buff0_thd1~0_12242|) .cse60 .cse61 .cse62 (= |v_#race~x$w_buff0_used~0_17006| |v_#race~x$w_buff0_used~0_17003|) .cse63 .cse64 (= |old(P0Thread1of1ForFork2_#t~short49)| |v_P0_#t~short49_2830|)) (let ((.cse65 (not |v_P0_#t~short47_2915|)) (.cse73 (not |v_P0_#t~short47_2916|)) (.cse74 (not |v_P0_#t~short49_2831|)) (.cse69 (not |v_P0_#t~short49_2830|))) (and (or (and .cse65 .cse54) (and .cse53 |v_P0_#t~short47_2915|)) (let ((.cse66 (= |v_#race~x$r_buff0_thd1~0_12232| |v_#race~x$r_buff0_thd1~0_12242|)) (.cse67 (= |v_#race~x$w_buff0_used~0_17006| 0))) (or (and .cse66 .cse60 .cse61 (= |v_P0_#t~ite51_2245| |old(~x$w_buff1_used~0)|) |v_P0_#t~short49_2830| .cse67) (let ((.cse68 (not |v_P0_#t~short50_2609|))) (and (or (and .cse53 .cse68) (and |v_P0_#t~short50_2609| .cse54)) (or (and |v_P0_#t~short50_2609| (or (and (not |v_P0_#t~short50_2610|) .cse15) (and |v_P0_#t~short50_2610| .cse13)) (= |v_#race~x$r_buff0_thd1~0_12242| 0)) (and .cse66 (= |v_P0_#t~short50_2610| |v_P0_#t~short50_2609|) .cse68)) (= |v_#race~x$w_buff1_used~0_16331| |v_#race~x$w_buff1_used~0_16330|) .cse69 (= |v_P0_#t~ite51_2245| 0) .cse67)))) (= |v_P0_#t~ite51_2245| |v_P0_#t~ite52_2071|) (let ((.cse71 (= |v_#race~x$w_buff1_used~0_16333| |v_#race~x$w_buff1_used~0_16331|))) (or (let ((.cse72 (not |v_P0_#t~short46_2876|)) (.cse70 (not |v_P0_#t~short46_2875|))) (and (or (and (or (and .cse70 .cse30) (and .cse29 |v_P0_#t~short46_2875|)) (= |v_#race~x$w_buff1_used~0_16331| 0) |v_P0_#t~short46_2876|) (and (= |v_P0_#t~short46_2875| |v_P0_#t~short46_2876|) .cse71 .cse72)) (= |v_#race~x$r_buff0_thd1~0_12241| 0) (or (and .cse13 .cse72) (and .cse15 |v_P0_#t~short46_2876|)) .cse65 (or (and .cse70 .cse73) (and |v_P0_#t~short46_2875| |v_P0_#t~short47_2916|)))) (and (= |v_#race~x$r_buff0_thd1~0_12243| |v_#race~x$r_buff0_thd1~0_12241|) (= |v_P0_#t~short47_2915| |v_P0_#t~short47_2916|) .cse71 .cse63 |v_P0_#t~short47_2915|))) (or (and .cse73 .cse74) (and |v_P0_#t~short47_2916| |v_P0_#t~short49_2831|)) (or (and .cse62 .cse64 (= |v_#race~x$r_buff0_thd1~0_12232| |v_#race~x$r_buff0_thd1~0_12241|) (= |v_P0_#t~short49_2830| |v_P0_#t~short49_2831|) |v_P0_#t~short49_2831|) (let ((.cse75 (not |v_P0_#t~short48_2788|)) (.cse76 (not |v_P0_#t~short48_2787|))) (and (or (and .cse13 .cse75) (and .cse15 |v_P0_#t~short48_2788|)) (= |v_#race~x$r_buff0_thd1~0_12232| 0) (or (and .cse75 .cse64 (= |v_P0_#t~short48_2787| |v_P0_#t~short48_2788|)) (and (or (and .cse23 |v_P0_#t~short48_2787|) (and .cse76 .cse24)) (= |v_#race~x$r_buff1_thd1~0_7283| 0) |v_P0_#t~short48_2788|)) .cse74 (or (and |v_P0_#t~short48_2787| |v_P0_#t~short49_2830|) (and .cse76 .cse69))))) .cse31)))) (or (and .cse17 |v_P0_#t~short11_3229|) (and .cse16 .cse77)) (= .cse78 ~x$mem_tmp~0) (= ~__unbuffered_p0_EAX~0 .cse79) (= |#race~x$flush_delayed~0| 0) (let ((.cse80 (= |v_#race~x$r_buff1_thd1~0_7287| |old(#race~x$r_buff1_thd1~0)|))) (or (and |v_P0_#t~short13_3265| .cse80 (= |v_P0_#t~short13_3265| |v_P0_#t~short13_3264|) (= |old(P0Thread1of1ForFork2_#t~short12)| |v_P0_#t~short12_3202|) (= |v_#race~x$r_buff0_thd1~0_12230| |v_#race~x$r_buff0_thd1~0_12229|)) (let ((.cse82 (not |v_P0_#t~short12_3202|)) (.cse81 (not |v_P0_#t~short12_3201|))) (and (or (and (= |v_P0_#t~short12_3202| |v_P0_#t~short12_3201|) .cse81 .cse80) (and (= |v_#race~x$r_buff1_thd1~0_7287| 0) |v_P0_#t~short12_3201| (or (and |v_P0_#t~short12_3202| .cse23) (and .cse82 .cse24)))) (or (and .cse83 .cse82) (and |v_P0_#t~short12_3202| |v_P0_#t~short13_3264|)) (= |v_#race~x$r_buff0_thd1~0_12230| 0) .cse84 (or (and |v_P0_#t~short12_3201| .cse15) (and .cse13 .cse81)))))) (= (ite (= (mod |v_P0_#t~nondet3_639| 256) 0) 0 1) ~weak$$choice0~0) (or (= |v_P0_#t~nondet3_639| 0) (= |v_P0_#t~nondet3_639| 1)) (= (ite (= (mod |v_P0_#t~nondet5_837| 256) 0) 0 1) ~weak$$choice2~0) (= |~#x~0.offset| ~__unbuffered_p0_EAX$read_delayed_var~0.offset) (= ~x$w_buff0_used~0 (ite (= (mod |v_P0_#t~ite44_2373| 256) 0) 0 1)) (= |P0Thread1of1ForFork2_#t~mem75| .cse79) (= (ite (= (mod |v_P0_#t~ite61_1581| 256) 0) 0 1) ~x$r_buff0_thd1~0) (= (select .cse1 .cse36) .cse0) (let ((.cse88 (= |old(#race~x$w_buff1_used~0)| |v_#race~x$w_buff1_used~0_16327|))) (or (let ((.cse86 (not |v_P0_#t~short10_3158|)) (.cse85 (not |v_P0_#t~short10_3157|))) (and (or (and |v_P0_#t~short10_3157| .cse15) (and .cse85 .cse13)) (or (and .cse86 .cse87) (and |v_P0_#t~short10_3158| |v_P0_#t~short11_3230|)) (= |v_#race~x$r_buff0_thd1~0_12229| 0) (or (and (or (and .cse86 .cse30) (and |v_P0_#t~short10_3158| .cse29)) |v_P0_#t~short10_3157| (= |v_#race~x$w_buff1_used~0_16327| 0)) (and .cse85 .cse88 (= |v_P0_#t~short10_3157| |v_P0_#t~short10_3158|))) .cse77)) (and .cse88 (= |old(P0Thread1of1ForFork2_#t~short10)| |v_P0_#t~short10_3158|) |v_P0_#t~short11_3229| (= |v_P0_#t~short11_3229| |v_P0_#t~short11_3230|) (= |old(#race~x$r_buff0_thd1~0)| |v_#race~x$r_buff0_thd1~0_12229|)))) (= ~__unbuffered_p0_EAX$read_delayed~0 1) (= (mod ~x$flush_delayed~0 256) 0) (let ((.cse89 (= |v_#race~x$w_buff0_used~0_17005| 0)) (.cse93 (= |v_#race~x$r_buff0_thd1~0_12230| |v_#race~x$r_buff0_thd1~0_12240|)) (.cse91 (= |v_#race_10307| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse34 0) .cse36 0) .cse35 0)))) (.cse92 (= |v_#race~x$w_buff1~0_7616| |old(#race~x$w_buff1~0)|)) (.cse94 (= |v_#race~x$w_buff0~0_7132| |old(#race~x$w_buff0~0)|))) (or (and .cse89 (= (select .cse90 .cse34) 0) (= (select .cse90 .cse36) 0) .cse91 (= .cse78 |v_P0_#t~mem14_2746|) (= (select .cse90 .cse35) 0) |v_P0_#t~short13_3264| (= |v_P0_#t~ite17_2577| |v_P0_#t~mem14_2746|) .cse92 (= |v_P0_#t~ite16_2721| |old(P0Thread1of1ForFork2_#t~ite16)|) (= (select .cse90 |~#x~0.offset|) 0) .cse93 (= |old(P0Thread1of1ForFork2_#t~short15)| |v_P0_#t~short15_3130|) .cse94) (let ((.cse95 (not |v_P0_#t~short15_3131|)) (.cse96 (not |v_P0_#t~short15_3130|))) (and .cse89 (or (and (= |v_P0_#t~short15_3131| |v_P0_#t~short15_3130|) .cse95 .cse93) (and |v_P0_#t~short15_3131| (= |v_#race~x$r_buff0_thd1~0_12240| 0) (or (and .cse96 .cse15) (and |v_P0_#t~short15_3130| .cse13)))) .cse83 .cse91 (= |v_P0_#t~ite16_2721| |v_P0_#t~ite17_2577|) (= |v_P0_#t~mem14_2746| |old(P0Thread1of1ForFork2_#t~mem14)|) (or (and .cse16 |v_P0_#t~short15_3131|) (and .cse17 .cse95)) (or (and (= |old(~x$w_buff0~0)| |v_P0_#t~ite16_2721|) |v_P0_#t~short15_3130| .cse92 (= |v_#race~x$w_buff0~0_7132| 0)) (and (= |v_P0_#t~ite16_2721| |old(~x$w_buff1~0)|) (= |v_#race~x$w_buff1~0_7616| 0) .cse96 .cse94)))))) (= |v_#race_10308| (store |v_#race_10307| |~#x~0.base| (store (store (store (store .cse90 |~#x~0.offset| .cse0) .cse34 .cse0) .cse36 .cse0) .cse35 .cse0))) (let ((.cse99 (= |old(P0Thread1of1ForFork2_#t~short41)| |v_P0_#t~short41_2950|)) (.cse102 (= |v_P0_#t~ite42_2535| |old(P0Thread1of1ForFork2_#t~ite42)|)) (.cse103 (= |v_#race~x$w_buff0_used~0_17004| 0)) (.cse97 (= |v_#race~x$r_buff1_thd1~0_7288| |v_#race~x$r_buff1_thd1~0_7286|)) (.cse98 (= |v_P0_#t~short39_3094| |old(P0Thread1of1ForFork2_#t~short39)|)) (.cse100 (= |v_P0_#t~short37_3165| |old(P0Thread1of1ForFork2_#t~short37)|)) (.cse101 (= |v_#race~x$w_buff1_used~0_16334| |v_#race~x$w_buff1_used~0_16333|))) (or (and (= |v_P0_#t~short38_3202| |old(P0Thread1of1ForFork2_#t~short38)|) .cse97 .cse98 .cse4 .cse99 .cse100 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite44_2373|) .cse101 (= |v_#race~x$r_buff0_thd1~0_12239| |v_#race~x$r_buff0_thd1~0_12243|) (= |old(P0Thread1of1ForFork2_#t~short40)| |v_P0_#t~short40_3133|) .cse102 (= |v_P0_#t~ite43_2525| |old(P0Thread1of1ForFork2_#t~ite43)|) .cse103) (let ((.cse108 (not |v_P0_#t~short40_3133|)) (.cse104 (not |v_P0_#t~short38_3201|)) (.cse114 (not |v_P0_#t~short38_3202|)) (.cse109 (not |v_P0_#t~short40_3132|))) (and (or (and .cse17 |v_P0_#t~short38_3201|) (and .cse16 .cse104)) (let ((.cse105 (= |v_#race~x$r_buff0_thd1~0_12244| |v_#race~x$r_buff0_thd1~0_12243|))) (or (and .cse99 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite43_2525|) .cse105 |v_P0_#t~short40_3133| .cse102 .cse103) (let ((.cse107 (not |v_P0_#t~short41_2950|)) (.cse106 (not |v_P0_#t~short41_2951|))) (and (or (and .cse16 |v_P0_#t~short41_2951|) (and .cse17 .cse106)) (or (and .cse103 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite42_2535|) .cse107) (and (= |v_P0_#t~ite42_2535| 0) |v_P0_#t~short41_2950| .cse103)) .cse108 (or (and (= |v_#race~x$r_buff0_thd1~0_12243| 0) (or (and .cse13 |v_P0_#t~short41_2950|) (and .cse15 .cse107)) |v_P0_#t~short41_2951|) (and (= |v_P0_#t~short41_2950| |v_P0_#t~short41_2951|) .cse106 .cse105)) (= |v_P0_#t~ite42_2535| |v_P0_#t~ite43_2525|))))) (or (let ((.cse111 (not |v_P0_#t~short39_3094|)) (.cse110 (not |v_P0_#t~short39_3093|))) (and .cse109 (or (and .cse13 .cse110) (and .cse15 |v_P0_#t~short39_3093|)) (= |v_#race~x$r_buff0_thd1~0_12244| 0) (or (and .cse108 .cse111) (and |v_P0_#t~short39_3094| |v_P0_#t~short40_3133|)) (or (and (or (and .cse24 .cse111) (and .cse23 |v_P0_#t~short39_3094|)) (= |v_#race~x$r_buff1_thd1~0_7286| 0) |v_P0_#t~short39_3093|) (and .cse97 (= |v_P0_#t~short39_3093| |v_P0_#t~short39_3094|) .cse110)))) (and .cse97 .cse98 (= |v_P0_#t~short40_3132| |v_P0_#t~short40_3133|) (= |v_#race~x$r_buff0_thd1~0_12234| |v_#race~x$r_buff0_thd1~0_12244|) |v_P0_#t~short40_3132|)) (= |v_P0_#t~ite43_2525| |v_P0_#t~ite44_2373|) (or (let ((.cse112 (not |v_P0_#t~short37_3166|)) (.cse113 (not |v_P0_#t~short37_3165|))) (and (= |v_#race~x$r_buff0_thd1~0_12234| 0) (or (and .cse112 .cse13) (and .cse15 |v_P0_#t~short37_3166|)) (or (and .cse112 (= |v_P0_#t~short37_3165| |v_P0_#t~short37_3166|) .cse101) (and (or (and .cse29 |v_P0_#t~short37_3165|) (and .cse113 .cse30)) |v_P0_#t~short37_3166| (= |v_#race~x$w_buff1_used~0_16333| 0))) .cse104 (or (and .cse113 .cse114) (and |v_P0_#t~short37_3165| |v_P0_#t~short38_3202|)))) (and (= |v_#race~x$r_buff0_thd1~0_12239| |v_#race~x$r_buff0_thd1~0_12234|) (= |v_P0_#t~short38_3202| |v_P0_#t~short38_3201|) .cse100 .cse101 |v_P0_#t~short38_3201|)) (or (and .cse114 .cse109) (and |v_P0_#t~short38_3202| |v_P0_#t~short40_3132|)) .cse31)))) (= |#race| (store |v_#race_10308| |~#x~0.base| (store (store (store (store .cse1 |~#x~0.offset| 0) .cse34 0) .cse36 0) .cse35 0))) (or (and |v_P0_#t~short11_3230| |v_P0_#t~short13_3265|) (and .cse87 .cse84)) (= ~x$flush_delayed~0 (ite .cse31 0 1)) (let ((.cse121 (= |v_P0_#t~short56_2412| |old(P0Thread1of1ForFork2_#t~short56)|)) (.cse117 (= |v_#race~x$w_buff1_used~0_16332| |v_#race~x$w_buff1_used~0_16328|)) (.cse120 (= |v_P0_#t~short54_2507| |old(P0Thread1of1ForFork2_#t~short54)|)) (.cse131 (= |v_P0_#t~short58_2233| |old(P0Thread1of1ForFork2_#t~short58)|)) (.cse122 (= |v_#race~x$r_buff1_thd1~0_7285| |v_#race~x$r_buff1_thd1~0_7283|)) (.cse132 (= |v_P0_#t~ite59_1791| |old(P0Thread1of1ForFork2_#t~ite59)|)) (.cse129 (= |v_#race~x$r_buff0_thd1~0_12247| 0))) (or (let ((.cse126 (not |v_P0_#t~short57_2463|)) (.cse119 (not |v_P0_#t~short55_2556|)) (.cse124 (not |v_P0_#t~short57_2462|)) (.cse118 (not |v_P0_#t~short55_2555|))) (and (or (let ((.cse115 (not |v_P0_#t~short54_2508|)) (.cse116 (not |v_P0_#t~short54_2507|))) (and (= |v_#race~x$r_buff0_thd1~0_12246| 0) (or (and .cse13 .cse115) (and |v_P0_#t~short54_2508| .cse15)) (or (and |v_P0_#t~short54_2508| (= |v_#race~x$w_buff1_used~0_16332| 0) (or (and .cse44 .cse116) (and |v_P0_#t~short54_2507| .cse45))) (and .cse117 (= |v_P0_#t~short54_2508| |v_P0_#t~short54_2507|) .cse115)) (or (and .cse118 .cse116) (and |v_P0_#t~short54_2507| |v_P0_#t~short55_2555|)) .cse119)) (and |v_P0_#t~short55_2556| .cse117 .cse120 (= |v_#race~x$r_buff0_thd1~0_12246| |v_#race~x$r_buff0_thd1~0_12242|) (= |v_P0_#t~short55_2556| |v_P0_#t~short55_2555|))) (or (and |v_P0_#t~short57_2462| .cse121 .cse122 (= |v_P0_#t~short57_2462| |v_P0_#t~short57_2463|) (= |v_#race~x$r_buff0_thd1~0_12246| |v_#race~x$r_buff0_thd1~0_12228|)) (let ((.cse123 (not |v_P0_#t~short56_2411|)) (.cse125 (not |v_P0_#t~short56_2412|))) (and (or (and |v_P0_#t~short56_2411| .cse15) (and .cse123 .cse13)) .cse124 (or (and |v_P0_#t~short56_2411| (or (and .cse125 .cse24) (and |v_P0_#t~short56_2412| .cse23)) (= |v_#race~x$r_buff1_thd1~0_7285| 0)) (and .cse123 .cse122 (= |v_P0_#t~short56_2411| |v_P0_#t~short56_2412|))) (= |v_#race~x$r_buff0_thd1~0_12228| 0) (or (and |v_P0_#t~short56_2412| |v_P0_#t~short57_2463|) (and .cse125 .cse126))))) (let ((.cse130 (= |v_#race~x$w_buff0_used~0_17002| 0))) (or (let ((.cse127 (not |v_P0_#t~short58_2233|)) (.cse128 (not |v_P0_#t~short58_2232|))) (and (or (and (or (and .cse127 .cse15) (and |v_P0_#t~short58_2233| .cse13)) |v_P0_#t~short58_2232| (= |v_#race~x$r_buff0_thd1~0_12238| 0)) (and .cse128 (= |v_#race~x$r_buff0_thd1~0_12238| |v_#race~x$r_buff0_thd1~0_12228|) (= |v_P0_#t~short58_2232| |v_P0_#t~short58_2233|))) (or (and |v_P0_#t~short58_2233| (= |v_#race~x$r_buff0_thd1~0_12238| |v_#race~x$r_buff0_thd1~0_12247|) (= |v_P0_#t~ite59_1791| 0)) (and .cse127 .cse129 (= |v_P0_#t~ite59_1791| |old(~x$r_buff0_thd1~0)|))) .cse130 (= |v_P0_#t~ite59_1791| |v_P0_#t~ite60_1781|) (or (and |v_P0_#t~short58_2232| .cse54) (and .cse128 .cse53)) .cse126)) (and |v_P0_#t~short57_2463| .cse131 .cse130 .cse132 .cse129 (= |v_P0_#t~ite60_1781| |old(~x$r_buff0_thd1~0)|)))) (= |v_P0_#t~ite60_1781| |v_P0_#t~ite61_1581|) (or (and .cse54 .cse119) (and |v_P0_#t~short55_2556| .cse53)) (or (and .cse124 .cse118) (and |v_P0_#t~short55_2555| |v_P0_#t~short57_2462|)) .cse31)) (and (= |v_#race~x$w_buff0_used~0_17006| |v_#race~x$w_buff0_used~0_17002|) .cse121 (= |v_P0_#t~ite60_1781| |old(P0Thread1of1ForFork2_#t~ite60)|) .cse117 .cse4 .cse120 .cse131 .cse122 (= |v_P0_#t~short57_2463| |old(P0Thread1of1ForFork2_#t~short57)|) .cse132 (= |v_P0_#t~short55_2555| |old(P0Thread1of1ForFork2_#t~short55)|) .cse129 (= |v_P0_#t~ite61_1581| |old(~x$r_buff0_thd1~0)|)))) (= |#race~weak$$choice2~0| 0) (= .cse0 (select .cse1 .cse35)) (let ((.cse137 (= |old(P0Thread1of1ForFork2_#t~short32)| |v_P0_#t~short32_3182|)) (.cse139 (= |v_P0_#t~ite33_2723| |old(P0Thread1of1ForFork2_#t~ite33)|)) (.cse138 (= |v_#race~x$w_buff1~0_7615| 0)) (.cse135 (= |old(P0Thread1of1ForFork2_#t~short30)| |v_P0_#t~short30_3298|)) (.cse134 (= |v_#race~x$r_buff1_thd1~0_7288| |v_#race~x$r_buff1_thd1~0_7290|)) (.cse133 (= |v_#race~x$w_buff1_used~0_16334| |v_#race~x$w_buff1_used~0_16329|)) (.cse136 (= |old(P0Thread1of1ForFork2_#t~short28)| |v_P0_#t~short28_3354|))) (or (and .cse133 (= |old(P0Thread1of1ForFork2_#t~short29)| |v_P0_#t~short29_3386|) (= |v_P0_#t~ite34_2711| |old(P0Thread1of1ForFork2_#t~ite34)|) .cse4 .cse134 .cse135 (= |old(P0Thread1of1ForFork2_#t~short31)| |v_P0_#t~short31_3332|) .cse136 (= |old(~x$w_buff1~0)| ~x$w_buff1~0) .cse137 (= |v_#race~x$w_buff0_used~0_17007| |v_#race~x$w_buff0_used~0_17001|) .cse138 .cse139 (= |v_#race~x$r_buff0_thd1~0_12239| |v_#race~x$r_buff0_thd1~0_12233|)) (let ((.cse144 (not |v_P0_#t~short31_3332|)) (.cse147 (not |v_P0_#t~short31_3333|)) (.cse148 (not |v_P0_#t~short29_3385|)) (.cse146 (not |v_P0_#t~short29_3386|))) (and (let ((.cse141 (= |v_#race~x$r_buff0_thd1~0_12239| |v_#race~x$r_buff0_thd1~0_12231|)) (.cse140 (= |v_#race~x$w_buff0_used~0_17001| 0))) (or (and (= |old(~x$w_buff1~0)| |v_P0_#t~ite34_2711|) .cse140 .cse137 .cse141 .cse138 |v_P0_#t~short31_3332| .cse139) (let ((.cse142 (not |v_P0_#t~short32_3183|)) (.cse143 (not |v_P0_#t~short32_3182|))) (and (or (and (= |v_P0_#t~short32_3182| |v_P0_#t~short32_3183|) .cse142 .cse141) (and (= |v_#race~x$r_buff0_thd1~0_12239| 0) |v_P0_#t~short32_3183| (or (and .cse13 |v_P0_#t~short32_3182|) (and .cse143 .cse15)))) .cse144 .cse140 (or (and .cse17 .cse142) (and .cse16 |v_P0_#t~short32_3183|)) (= |v_P0_#t~ite33_2723| |v_P0_#t~ite34_2711|) (let ((.cse145 (= |old(~x$w_buff1~0)| |v_P0_#t~ite33_2723|))) (or (and .cse143 .cse138 .cse145) (and .cse138 |v_P0_#t~short32_3182| .cse145))))))) (or (and |v_P0_#t~short29_3386| |v_P0_#t~short31_3333|) (and .cse146 .cse147)) (or (and .cse16 .cse148) (and .cse17 |v_P0_#t~short29_3385|)) (= ~x$w_buff1~0 |v_P0_#t~ite34_2711|) (or (and .cse134 .cse135 (= |v_P0_#t~short31_3332| |v_P0_#t~short31_3333|) |v_P0_#t~short31_3333| (= |v_#race~x$r_buff0_thd1~0_12236| |v_#race~x$r_buff0_thd1~0_12231|)) (let ((.cse149 (not |v_P0_#t~short30_3298|)) (.cse150 (not |v_P0_#t~short30_3297|))) (and (or (and (= |v_#race~x$r_buff1_thd1~0_7288| 0) (or (and |v_P0_#t~short30_3298| .cse23) (and .cse149 .cse24)) |v_P0_#t~short30_3297|) (and .cse134 .cse150 (= |v_P0_#t~short30_3297| |v_P0_#t~short30_3298|))) (or (and .cse144 .cse149) (and |v_P0_#t~short30_3298| |v_P0_#t~short31_3332|)) (= |v_#race~x$r_buff0_thd1~0_12231| 0) .cse147 (or (and |v_P0_#t~short30_3297| .cse15) (and .cse13 .cse150))))) .cse31 (or (let ((.cse151 (not |v_P0_#t~short28_3353|)) (.cse152 (not |v_P0_#t~short28_3354|))) (and .cse148 (or (and |v_P0_#t~short28_3353| .cse15) (and .cse13 .cse151)) (or (and |v_P0_#t~short28_3354| |v_P0_#t~short29_3386|) (and .cse146 .cse152)) (or (and .cse133 (= |v_P0_#t~short28_3353| |v_P0_#t~short28_3354|) .cse151) (and |v_P0_#t~short28_3353| (or (and .cse152 .cse30) (and .cse29 |v_P0_#t~short28_3354|)) (= |v_#race~x$w_buff1_used~0_16334| 0))) (= |v_#race~x$r_buff0_thd1~0_12236| 0))) (and .cse133 .cse136 (= |v_#race~x$r_buff0_thd1~0_12236| |v_#race~x$r_buff0_thd1~0_12233|) |v_P0_#t~short29_3385| (= |v_P0_#t~short29_3385| |v_P0_#t~short29_3386|)))))))))) +//@ semantics [290] {P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short32,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite59,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~short64,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~ite43,~__unbuffered_p0_EAX$read_delayed_var~0.base,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$r_buff1_thd1~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,#race~__unbuffered_p0_EAX$read_delayed_var~0,P0Thread1of1ForFork2_#t~mem73,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#t~short20,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet74,P0Thread1of1ForFork2_#t~short31,~__unbuffered_p0_EAX$read_delayed_var~0.offset,#memory_int,#race~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [291] {P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short32,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~mem75,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~short64,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~ite43,~__unbuffered_p0_EAX$read_delayed_var~0.base,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,~weak$$choice2~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~nondet77,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite76,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,#race~__unbuffered_p0_EAX$read_delayed_var~0,P0Thread1of1ForFork2_#t~mem73,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#t~short20,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet74,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~short31,#memory_int,~__unbuffered_p0_EAX$read_delayed_var~0.offset,#race~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} [(|v_P0_#t~short39_3098| Bool) (|v_P0_#t~short29_3390| Bool) (|v_P0_#t~ite42_2537| Int) (|v_P0_#t~short63_1939| Bool) (|v_#race~x$r_buff0_thd1~0_12272| Int) (|v_#race~x$r_buff0_thd1~0_12273| Int) (|v_P0_#t~short47_2920| Bool) (|v_P0_#t~short23_3248| Bool) (|v_#race_10313| (Array Int (Array Int Int))) (|v_P0_#t~short23_3249| Bool) (|v_#race_10312| (Array Int (Array Int Int))) (|v_#race_10311| (Array Int (Array Int Int))) (|v_#race~x$w_buff0_used~0_17020| Int) (|v_#race~x$w_buff1_used~0_16350| Int) (|v_#race~x$w_buff0_used~0_17021| Int) (|v_#race~x$w_buff0~0_7135| Int) (|v_P0_#t~short21_3346| Bool) (|v_P0_#t~short21_3345| Bool) (|v_P0_#t~short47_2919| Bool) (|v_P0_#t~short41_2954| Bool) (|v_P0_#t~short13_3269| Bool) (|v_P0_#t~short41_2955| Bool) (|v_P0_#t~short13_3268| Bool) (|v_#race~x$w_buff0~0_7136| Int) (|v_#race~x$r_buff0_thd1~0_12274| Int) (|v_#race~x$r_buff0_thd1~0_12275| Int) (|v_P0_#t~nondet5_839| Int) (|v_P0_#t~ite52_2073| Int) (|v_#race~x$r_buff0_thd1~0_12276| Int) (|v_#race~x$r_buff0_thd1~0_12277| Int) (|v_#race~x$r_buff0_thd1~0_12278| Int) (|v_#race~x$r_buff0_thd1~0_12279| Int) (|v_P0_#t~short39_3097| Bool) (|v_#race~x$r_buff0_thd1~0_12280| Int) (|v_#race~x$w_buff0_used~0_17017| Int) (|v_#race~x$r_buff0_thd1~0_12281| Int) (|v_#race~x$w_buff0_used~0_17016| Int) (|v_#race~x$r_buff0_thd1~0_12282| Int) (|v_#race~x$w_buff0_used~0_17019| Int) (|v_#race~x$r_buff0_thd1~0_12283| Int) (|v_#race~x$w_buff0_used~0_17018| Int) (|v_#race~x$r_buff0_thd1~0_12284| Int) (|v_P0_#t~short57_2466| Bool) (|v_P0_#t~short57_2467| Bool) (|v_P0_#t~short55_2559| Bool) (|v_#race~x$w_buff0_used~0_17015| Int) (|v_P0_#t~short63_1940| Bool) (|v_#race~x$r_buff0_thd1~0_12285| Int) (|v_#race~x$r_buff0_thd1~0_12286| Int) (|v_#race~x$r_buff0_thd1~0_12287| Int) (|v_#race~x$r_buff0_thd1~0_12288| Int) (|v_#race~x$r_buff0_thd1~0_12289| Int) (|v_P0_#t~short29_3389| Bool) (|v_P0_#t~short55_2560| Bool) (|v_P0_#t~short22_3375| Bool) (|v_P0_#t~nondet3_641| Int) (|v_P0_#t~nondet9_1730| Int) (|v_#race~x$r_buff0_thd1~0_12290| Int) (|v_P0_#t~short37_3170| Bool) (|v_#race~x$r_buff0_thd1~0_12291| Int) (|v_#race~x$r_buff0_thd1~0_12292| Int) (|v_P0_#t~short50_2613| Bool) (|v_#race~x$r_buff0_thd1~0_12293| Int) (|v_P0_#t~short50_2614| Bool) (|v_P0_#t~ite34_2713| Int) (|v_P0_#t~ite44_2375| Int) (|v_#race~x$r_buff1_thd1~0_7301| Int) (|v_#race~x$r_buff1_thd1~0_7302| Int) (|v_#race~x$r_buff1_thd1~0_7303| Int) (|v_#race~x$r_buff1_thd1~0_7304| Int) (|v_P0_#t~short12_3206| Bool) (|v_P0_#t~short12_3205| Bool) (|v_#race~x$r_buff1_thd1~0_7300| Int) (|v_P0_#t~short22_3374| Bool) (|v_P0_#t~short31_3336| Bool) (|v_P0_#t~short11_3233| Bool) (|v_P0_#t~short11_3234| Bool) (|v_P0_#t~short46_2880| Bool) (|v_P0_#t~ite69_1011| Int) (|v_P0_#t~short48_2791| Bool) (|v_P0_#t~short65_1827| Bool) (|v_#race~x$r_buff1_thd1~0_7305| Int) (|v_#race~x$r_buff1_thd1~0_7306| Int) (|v_P0_#t~ite43_2527| Int) (|v_P0_#t~short48_2792| Bool) (|v_P0_#t~short67_1613| Bool) (|v_P0_#t~short46_2879| Bool) (|v_P0_#t~short67_1614| Bool) (|v_P0_#t~short37_3169| Bool) (|v_P0_#t~ite16_2723| Int) (|v_P0_#t~short65_1828| Bool) (|v_P0_#t~short54_2511| Bool) (|v_P0_#t~short54_2512| Bool) (|v_P0_#t~ite68_1233| Int) (|v_P0_#t~short64_1992| Bool) (|v_P0_#t~short64_1991| Bool) (|v_P0_#t~ite24_2803| Int) (|v_P0_#t~short28_3358| Bool) (|v_P0_#t~short28_3357| Bool) (|v_P0_#t~short66_1883| Bool) (|v_P0_#t~short20_3416| Bool) (|v_P0_#t~short66_1882| Bool) (|v_P0_#t~ite59_1793| Int) (|v_P0_#t~short20_3415| Bool) (|v_P0_#t~short38_3205| Bool) (|v_P0_#t~short10_3161| Bool) (|v_P0_#t~short10_3162| Bool) (|v_P0_#t~ite33_2725| Int) (|v_#race~x$w_buff1~0_7619| Int) (|v_P0_#t~short19_3389| Bool) (|v_P0_#t~short38_3206| Bool) (|v_P0_#t~short19_3390| Bool) (|v_P0_#t~mem14_2748| Int) (|v_P0_#t~short15_3134| Bool) (|v_P0_#t~short15_3135| Bool) (|v_P0_#t~ite60_1783| Int) (|v_P0_#t~short31_3337| Bool) (|v_#race~x$r_buff1_thd1~0_7299| Int) (|v_#race~x$w_buff1~0_7620| Int) (|v_P0_#t~short56_2415| Bool) (|v_P0_#t~short49_2834| Bool) (|v_P0_#t~ite25_2791| Int) (|v_P0_#t~short49_2835| Bool) (|v_P0_#t~short56_2416| Bool) (|v_P0_#t~short32_3186| Bool) (|v_P0_#t~short58_2237| Bool) (|v_P0_#t~short58_2236| Bool) (|v_P0_#t~short40_3137| Bool) (|v_P0_#t~short32_3187| Bool) (|v_P0_#t~short30_3301| Bool) (|v_P0_#t~short30_3302| Bool) (|v_#race~x$w_buff1_used~0_16348| Int) (|v_P0_#t~short40_3136| Bool) (|v_#race~x$w_buff1_used~0_16349| Int) (|v_#race~x$w_buff1_used~0_16346| Int) (|v_#race~x$w_buff1_used~0_16347| Int) (|v_#race~x$w_buff1_used~0_16344| Int) (|v_#race~x$w_buff1_used~0_16345| Int) (|v_#race~x$w_buff1_used~0_16343| Int) (|v_P0_#t~ite61_1583| Int) (|v_P0_#t~ite51_2247| Int)] (let ((.cse37 (= (mod ~weak$$choice2~0 256) 0)) (.cse0 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse24 (= (mod |old(~x$r_buff0_thd1~0)| 256) 0)) (.cse35 (= (mod |old(~x$r_buff1_thd1~0)| 256) 0)) (.cse30 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse47 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse82 (= (mod ~x$w_buff1_used~0 256) 0)) (.cse10 (select |v_#race_10313| |~#x~0.base|)) (.cse6 (+ |~#x~0.offset| 1)) (.cse88 (select |old(#memory_int)| |~#x~0.base|))) (let ((.cse66 (select .cse88 |~#x~0.offset|)) (.cse65 (select |v_#race_10312| |~#x~0.base|)) (.cse11 (select .cse10 .cse6)) (.cse7 (select |v_#race_10311| |~#x~0.base|)) (.cse5 (+ 2 |~#x~0.offset|)) (.cse4 (+ 3 |~#x~0.offset|)) (.cse89 (not |v_P0_#t~short11_3234|)) (.cse1 (not |v_P0_#t~short11_3233|)) (.cse63 (not |v_P0_#t~short13_3269|)) (.cse90 (not |v_P0_#t~short13_3268|)) (.cse83 (not .cse82)) (.cse48 (not .cse47)) (.cse29 (not .cse30)) (.cse34 (not .cse35)) (.cse23 (not .cse24)) (.cse2 (not .cse0)) (.cse16 (not .cse37))) (and (or (and |v_P0_#t~short11_3233| .cse0) (and .cse1 .cse2)) (let ((.cse3 (select |#race| |~#x~0.base|))) (or (not (= (select .cse3 .cse4) |P0Thread1of1ForFork2_#t~nondet77|)) (not (= (select .cse3 |~#x~0.offset|) |P0Thread1of1ForFork2_#t~nondet77|)) (not (= (select .cse3 .cse5) |P0Thread1of1ForFork2_#t~nondet77|)) (not (= (select .cse3 .cse6) |P0Thread1of1ForFork2_#t~nondet77|)))) (let ((.cse8 (= |v_#race_10311| (store |v_#race_10313| |~#x~0.base| (store (store (store (store .cse10 |~#x~0.offset| 0) .cse6 0) .cse5 0) .cse4 0)))) (.cse9 (= (mod ~x$flush_delayed~0 256) 0))) (or (and (= |P0Thread1of1ForFork2_#t~ite76| |P0Thread1of1ForFork2_#t~mem75|) (= (select .cse7 .cse6) 0) (= (select .cse7 .cse5) 0) (= ~__unbuffered_p0_EAX~0 |P0Thread1of1ForFork2_#t~mem75|) (= (select .cse7 .cse4) 0) (= (select .cse7 |~#x~0.offset|) 0) .cse8 .cse9 (= |#race~x$mem_tmp~0| |v_P0_#t~nondet9_1730|)) (and (= |P0Thread1of1ForFork2_#t~mem75| |old(P0Thread1of1ForFork2_#t~mem75)|) .cse8 (= |P0Thread1of1ForFork2_#t~ite76| ~x$mem_tmp~0) (not .cse9) (= |#race~x$mem_tmp~0| 0)))) (= (ite (= (mod |v_P0_#t~nondet5_839| 256) 0) 0 1) ~weak$$choice2~0) (= (select .cse10 |~#x~0.offset|) .cse11) (let ((.cse13 (= |old(P0Thread1of1ForFork2_#t~short41)| |v_P0_#t~short41_2954|)) (.cse14 (= |v_P0_#t~ite42_2537| |old(P0Thread1of1ForFork2_#t~ite42)|)) (.cse17 (= |v_#race~x$w_buff0_used~0_17021| 0)) (.cse12 (= |v_P0_#t~short37_3170| |old(P0Thread1of1ForFork2_#t~short37)|)) (.cse18 (= |v_#race~x$w_buff1_used~0_16346| |v_#race~x$w_buff1_used~0_16344|)) (.cse19 (= |v_P0_#t~short39_3097| |old(P0Thread1of1ForFork2_#t~short39)|)) (.cse15 (= |v_#race~x$r_buff1_thd1~0_7299| |v_#race~x$r_buff1_thd1~0_7301|))) (or (and .cse12 .cse13 (= |v_#race~x$r_buff0_thd1~0_12293| |v_#race~x$r_buff0_thd1~0_12276|) .cse14 .cse15 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite44_2375|) .cse16 (= |v_P0_#t~ite43_2527| |old(P0Thread1of1ForFork2_#t~ite43)|) (= |old(P0Thread1of1ForFork2_#t~short40)| |v_P0_#t~short40_3136|) .cse17 (= |old(P0Thread1of1ForFork2_#t~short38)| |v_P0_#t~short38_3206|) .cse18 .cse19) (let ((.cse26 (not |v_P0_#t~short38_3205|)) (.cse21 (not |v_P0_#t~short40_3136|)) (.cse31 (not |v_P0_#t~short38_3206|)) (.cse36 (not |v_P0_#t~short40_3137|))) (and (let ((.cse22 (= |v_#race~x$r_buff0_thd1~0_12293| |v_#race~x$r_buff0_thd1~0_12280|))) (or (let ((.cse20 (not |v_P0_#t~short41_2955|)) (.cse25 (not |v_P0_#t~short41_2954|))) (and (or (and .cse2 |v_P0_#t~short41_2955|) (and .cse20 .cse0)) (= |v_P0_#t~ite42_2537| |v_P0_#t~ite43_2527|) .cse21 (or (and .cse20 (= |v_P0_#t~short41_2954| |v_P0_#t~short41_2955|) .cse22) (and (= |v_#race~x$r_buff0_thd1~0_12293| 0) (or (and .cse23 |v_P0_#t~short41_2954|) (and .cse24 .cse25)) |v_P0_#t~short41_2955|)) (or (and (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite42_2537|) .cse17 .cse25) (and (= |v_P0_#t~ite42_2537| 0) .cse17 |v_P0_#t~short41_2954|)))) (and .cse13 .cse14 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite43_2527|) .cse17 |v_P0_#t~short40_3136| .cse22))) (or (and .cse12 (= |v_#race~x$r_buff0_thd1~0_12279| |v_#race~x$r_buff0_thd1~0_12276|) (= |v_P0_#t~short38_3206| |v_P0_#t~short38_3205|) |v_P0_#t~short38_3205| .cse18) (let ((.cse27 (not |v_P0_#t~short37_3169|)) (.cse28 (not |v_P0_#t~short37_3170|))) (and .cse26 (or (and .cse23 .cse27) (and .cse24 |v_P0_#t~short37_3169|)) (or (and (= |v_P0_#t~short37_3169| |v_P0_#t~short37_3170|) .cse27 .cse18) (and (= |v_#race~x$w_buff1_used~0_16346| 0) (or (and .cse28 .cse29) (and .cse30 |v_P0_#t~short37_3170|)) |v_P0_#t~short37_3169|)) (= |v_#race~x$r_buff0_thd1~0_12279| 0) (or (and .cse31 .cse28) (and |v_P0_#t~short37_3170| |v_P0_#t~short38_3206|))))) (= |v_P0_#t~ite43_2527| |v_P0_#t~ite44_2375|) (or (and |v_P0_#t~short38_3205| .cse0) (and .cse26 .cse2)) (or (and (= |v_#race~x$r_buff0_thd1~0_12279| |v_#race~x$r_buff0_thd1~0_12280|) .cse15 (= |v_P0_#t~short40_3136| |v_P0_#t~short40_3137|) .cse19 |v_P0_#t~short40_3137|) (let ((.cse32 (not |v_P0_#t~short39_3097|)) (.cse33 (not |v_P0_#t~short39_3098|))) (and (or (and .cse32 .cse21) (and |v_P0_#t~short39_3097| |v_P0_#t~short40_3136|)) (= |v_#race~x$r_buff0_thd1~0_12280| 0) (or (and .cse23 .cse33) (and .cse24 |v_P0_#t~short39_3098|)) (or (and (or (and .cse32 .cse34) (and .cse35 |v_P0_#t~short39_3097|)) (= |v_#race~x$r_buff1_thd1~0_7301| 0) |v_P0_#t~short39_3098|) (and (= |v_P0_#t~short39_3097| |v_P0_#t~short39_3098|) .cse15 .cse33)) .cse36))) .cse37 (or (and |v_P0_#t~short38_3206| |v_P0_#t~short40_3137|) (and .cse31 .cse36)))))) (= |#race~weak$$choice2~0| 0) (let ((.cse38 (= |v_#race~x$r_buff1_thd1~0_7301| |v_#race~x$r_buff1_thd1~0_7305|)) (.cse39 (= |old(P0Thread1of1ForFork2_#t~short48)| |v_P0_#t~short48_2791|)) (.cse49 (= |v_#race~x$w_buff1_used~0_16350| 0)) (.cse50 (= |v_P0_#t~short50_2614| |old(P0Thread1of1ForFork2_#t~short50)|)) (.cse56 (= |old(P0Thread1of1ForFork2_#t~short46)| |v_P0_#t~short46_2879|))) (or (let ((.cse42 (not |v_P0_#t~short49_2835|)) (.cse52 (not |v_P0_#t~short47_2920|)) (.cse40 (not |v_P0_#t~short49_2834|)) (.cse53 (not |v_P0_#t~short47_2919|))) (and (or (and .cse38 .cse39 (= |v_#race~x$r_buff0_thd1~0_12292| |v_#race~x$r_buff0_thd1~0_12289|) (= |v_P0_#t~short49_2834| |v_P0_#t~short49_2835|) |v_P0_#t~short49_2834|) (let ((.cse41 (not |v_P0_#t~short48_2791|)) (.cse43 (not |v_P0_#t~short48_2792|))) (and .cse40 (or (and .cse41 .cse42) (and |v_P0_#t~short48_2791| |v_P0_#t~short49_2835|)) (or (and (= |v_P0_#t~short48_2791| |v_P0_#t~short48_2792|) .cse38 .cse43) (and (or (and .cse34 .cse41) (and .cse35 |v_P0_#t~short48_2791|)) (= |v_#race~x$r_buff1_thd1~0_7305| 0) |v_P0_#t~short48_2792|)) (or (and .cse23 .cse43) (and .cse24 |v_P0_#t~short48_2792|)) (= |v_#race~x$r_buff0_thd1~0_12292| 0)))) (= |v_P0_#t~ite51_2247| |v_P0_#t~ite52_2073|) (let ((.cse46 (= |v_#race~x$w_buff0_used~0_17015| 0)) (.cse45 (= |v_#race~x$r_buff0_thd1~0_12292| |v_#race~x$r_buff0_thd1~0_12272|))) (or (let ((.cse44 (not |v_P0_#t~short50_2613|))) (and (= |v_#race~x$w_buff1_used~0_16350| |v_#race~x$w_buff1_used~0_16343|) (or (and .cse44 (= |v_P0_#t~short50_2614| |v_P0_#t~short50_2613|) .cse45) (and |v_P0_#t~short50_2613| (or (and .cse23 |v_P0_#t~short50_2614|) (and .cse24 (not |v_P0_#t~short50_2614|))) (= |v_#race~x$r_buff0_thd1~0_12272| 0))) .cse46 (or (and .cse44 .cse47) (and |v_P0_#t~short50_2613| .cse48)) (= |v_P0_#t~ite51_2247| 0) .cse42)) (and .cse49 .cse46 .cse50 (= |v_P0_#t~ite51_2247| |old(~x$w_buff1_used~0)|) .cse45 |v_P0_#t~short49_2835|))) (let ((.cse55 (= |v_#race~x$w_buff1_used~0_16346| |v_#race~x$w_buff1_used~0_16343|))) (or (let ((.cse51 (not |v_P0_#t~short46_2880|)) (.cse54 (not |v_P0_#t~short46_2879|))) (and (or (and .cse24 |v_P0_#t~short46_2880|) (and .cse23 .cse51)) .cse52 (= |v_#race~x$r_buff0_thd1~0_12289| 0) (or (and .cse53 .cse54) (and |v_P0_#t~short46_2879| |v_P0_#t~short47_2919|)) (or (and .cse55 (= |v_P0_#t~short46_2879| |v_P0_#t~short46_2880|) .cse51) (and (or (and .cse54 .cse29) (and .cse30 |v_P0_#t~short46_2879|)) (= |v_#race~x$w_buff1_used~0_16343| 0) |v_P0_#t~short46_2880|)))) (and .cse55 (= |v_#race~x$r_buff0_thd1~0_12293| |v_#race~x$r_buff0_thd1~0_12289|) (= |v_P0_#t~short47_2919| |v_P0_#t~short47_2920|) .cse56 |v_P0_#t~short47_2920|))) .cse37 (or (and .cse47 |v_P0_#t~short47_2920|) (and .cse52 .cse48)) (or (and .cse40 .cse53) (and |v_P0_#t~short47_2919| |v_P0_#t~short49_2834|)))) (and (= |old(P0Thread1of1ForFork2_#t~short49)| |v_P0_#t~short49_2835|) (= |old(P0Thread1of1ForFork2_#t~short47)| |v_P0_#t~short47_2919|) .cse38 .cse39 (= |v_#race~x$w_buff0_used~0_17018| |v_#race~x$w_buff0_used~0_17015|) .cse49 .cse16 (= |v_P0_#t~ite51_2247| |old(P0Thread1of1ForFork2_#t~ite51)|) (= |v_#race~x$r_buff0_thd1~0_12293| |v_#race~x$r_buff0_thd1~0_12272|) .cse50 (= |v_P0_#t~ite52_2073| |old(~x$w_buff1_used~0)|) .cse56))) (let ((.cse62 (= |v_#race~x$r_buff0_thd1~0_12282| |v_#race~x$r_buff0_thd1~0_12285|)) (.cse60 (= |v_#race~x$w_buff0_used~0_17020| 0)) (.cse57 (= |v_#race~x$w_buff0~0_7135| |old(#race~x$w_buff0~0)|)) (.cse59 (= |v_#race~x$w_buff1~0_7620| |old(#race~x$w_buff1~0)|)) (.cse64 (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse6 0) .cse5 0) .cse4 0)) |v_#race_10312|))) (or (let ((.cse58 (not |v_P0_#t~short15_3135|)) (.cse61 (not |v_P0_#t~short15_3134|))) (and (= |v_P0_#t~ite16_2723| ~__unbuffered_p0_EAX~0) (or (and (= |v_P0_#t~ite16_2723| |old(~x$w_buff1~0)|) .cse57 .cse58 (= |v_#race~x$w_buff1~0_7620| 0)) (and |v_P0_#t~short15_3135| (= |v_#race~x$w_buff0~0_7135| 0) (= |old(~x$w_buff0~0)| |v_P0_#t~ite16_2723|) .cse59)) .cse60 (= |v_P0_#t~mem14_2748| |old(P0Thread1of1ForFork2_#t~mem14)|) (or (and .cse61 .cse0) (and |v_P0_#t~short15_3134| .cse2)) (or (and (or (and .cse24 .cse58) (and .cse23 |v_P0_#t~short15_3135|)) (= |v_#race~x$r_buff0_thd1~0_12282| 0) |v_P0_#t~short15_3134|) (and (= |v_P0_#t~short15_3135| |v_P0_#t~short15_3134|) .cse61 .cse62)) .cse63 .cse64)) (and (= (select .cse65 .cse5) 0) (= |old(P0Thread1of1ForFork2_#t~short15)| |v_P0_#t~short15_3135|) (= .cse66 |v_P0_#t~mem14_2748|) |v_P0_#t~short13_3269| (= ~__unbuffered_p0_EAX~0 |v_P0_#t~mem14_2748|) (= |v_P0_#t~ite16_2723| |old(P0Thread1of1ForFork2_#t~ite16)|) (= 0 (select .cse65 .cse6)) .cse62 .cse60 (= (select .cse65 |~#x~0.offset|) 0) .cse57 (= (select .cse65 .cse4) 0) .cse59 .cse64))) (= (ite (= (mod |v_P0_#t~ite61_1583| 256) 0) 0 1) ~x$r_buff0_thd1~0) (let ((.cse74 (= |v_P0_#t~short67_1614| |old(P0Thread1of1ForFork2_#t~short67)|)) (.cse78 (= |v_P0_#t~short63_1939| |old(P0Thread1of1ForFork2_#t~short63)|)) (.cse75 (= |v_#race~x$r_buff1_thd1~0_7303| 0)) (.cse79 (= |#race~x$w_buff1_used~0| |v_#race~x$w_buff1_used~0_16347|)) (.cse87 (= |v_P0_#t~short65_1828| |old(P0Thread1of1ForFork2_#t~short65)|))) (or (let ((.cse71 (= (mod ~x$r_buff0_thd1~0 256) 0))) (let ((.cse77 (not |v_P0_#t~short64_1991|)) (.cse67 (not |v_P0_#t~short64_1992|)) (.cse76 (not |v_P0_#t~short66_1882|)) (.cse68 (not |v_P0_#t~short66_1883|)) (.cse72 (not .cse71))) (and (or (and .cse48 .cse67) (and |v_P0_#t~short64_1992| .cse47)) (let ((.cse70 (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12291|)) (.cse73 (= |#race~x$w_buff0_used~0| 0))) (or (let ((.cse69 (not |v_P0_#t~short67_1613|))) (and (= |v_#race~x$r_buff1_thd1~0_7304| |v_#race~x$r_buff1_thd1~0_7303|) (= |v_P0_#t~ite68_1233| 0) .cse68 (or (and |v_P0_#t~short67_1613| .cse48) (and .cse47 .cse69)) (or (and (= |v_P0_#t~short67_1613| |v_P0_#t~short67_1614|) .cse70 .cse69) (and (= |#race~x$r_buff0_thd1~0| 0) |v_P0_#t~short67_1613| (or (and .cse71 (not |v_P0_#t~short67_1614|)) (and |v_P0_#t~short67_1614| .cse72)))) .cse73)) (and .cse74 .cse75 (= |v_P0_#t~ite68_1233| |old(~x$r_buff1_thd1~0)|) |v_P0_#t~short66_1883| .cse70 .cse73))) (or (and .cse76 .cse77) (and |v_P0_#t~short64_1991| |v_P0_#t~short66_1882|)) (= |v_P0_#t~ite68_1233| |v_P0_#t~ite69_1011|) (or (and .cse78 (= |v_P0_#t~short64_1991| |v_P0_#t~short64_1992|) |v_P0_#t~short64_1992| .cse79 (= |v_#race~x$r_buff0_thd1~0_12275| |v_#race~x$r_buff0_thd1~0_12287|)) (let ((.cse80 (not |v_P0_#t~short63_1939|)) (.cse81 (not |v_P0_#t~short63_1940|))) (and (or (and .cse80 .cse77) (and |v_P0_#t~short63_1939| |v_P0_#t~short64_1991|)) (or (and .cse81 .cse72) (and .cse71 |v_P0_#t~short63_1940|)) (or (and (= |#race~x$w_buff1_used~0| 0) |v_P0_#t~short63_1940| (or (and |v_P0_#t~short63_1939| .cse82) (and .cse80 .cse83))) (and .cse81 .cse79 (= |v_P0_#t~short63_1939| |v_P0_#t~short63_1940|))) (= |v_#race~x$r_buff0_thd1~0_12287| 0) .cse67))) (let ((.cse86 (= |v_#race~x$r_buff1_thd1~0_7304| |v_#race~x$r_buff1_thd1~0_7306|))) (or (let ((.cse85 (not |v_P0_#t~short65_1827|)) (.cse84 (not |v_P0_#t~short65_1828|))) (and .cse76 (or (and |v_P0_#t~short65_1828| |v_P0_#t~short66_1883|) (and .cse68 .cse84)) (or (and .cse71 |v_P0_#t~short65_1827|) (and .cse85 .cse72)) (= |v_#race~x$r_buff0_thd1~0_12291| 0) (or (and (= |v_P0_#t~short65_1828| |v_P0_#t~short65_1827|) .cse86 .cse85) (and (= |v_#race~x$r_buff1_thd1~0_7304| 0) |v_P0_#t~short65_1827| (or (and |v_P0_#t~short65_1828| .cse35) (and .cse34 .cse84)))))) (and .cse86 (= |v_#race~x$r_buff0_thd1~0_12291| |v_#race~x$r_buff0_thd1~0_12287|) |v_P0_#t~short66_1882| (= |v_P0_#t~short66_1882| |v_P0_#t~short66_1883|) .cse87))) .cse37))) (and .cse74 (= |v_P0_#t~short64_1991| |old(P0Thread1of1ForFork2_#t~short64)|) .cse78 .cse75 (= |v_P0_#t~ite68_1233| |old(P0Thread1of1ForFork2_#t~ite68)|) (= |v_P0_#t~short66_1883| |old(P0Thread1of1ForFork2_#t~short66)|) (= |v_P0_#t~ite69_1011| |old(~x$r_buff1_thd1~0)|) .cse79 .cse16 (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12275|) .cse87 (= |v_#race~x$w_buff0_used~0_17017| |#race~x$w_buff0_used~0|)))) (= .cse66 ~x$mem_tmp~0) (= |v_#race_10313| (store |v_#race_10312| |~#x~0.base| (store (store (store (store .cse65 |~#x~0.offset| .cse11) .cse6 .cse11) .cse5 .cse11) .cse4 .cse11))) (= (select .cse10 .cse4) .cse11) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store .cse88 |~#x~0.offset| |P0Thread1of1ForFork2_#t~ite76|))) (= ~__unbuffered_p0_EAX$read_delayed~0 1) (or (= |v_P0_#t~nondet5_839| 1) (= |v_P0_#t~nondet5_839| 0)) (= .cse11 (select .cse10 .cse5)) (or (and .cse89 .cse90) (and |v_P0_#t~short11_3234| |v_P0_#t~short13_3268|)) (= ~x$w_buff0_used~0 (ite (= (mod |v_P0_#t~ite44_2375| 256) 0) 0 1)) (= (ite (= (mod |v_P0_#t~ite69_1011| 256) 0) 0 1) ~x$r_buff1_thd1~0) (= |#race| (store |v_#race_10311| |~#x~0.base| (store (store (store (store .cse7 |~#x~0.offset| |P0Thread1of1ForFork2_#t~nondet77|) .cse6 |P0Thread1of1ForFork2_#t~nondet77|) .cse5 |P0Thread1of1ForFork2_#t~nondet77|) .cse4 |P0Thread1of1ForFork2_#t~nondet77|))) (let ((.cse93 (= |old(#race~x$w_buff1_used~0)| |v_#race~x$w_buff1_used~0_16345|))) (or (let ((.cse91 (not |v_P0_#t~short10_3161|)) (.cse92 (not |v_P0_#t~short10_3162|))) (and (or (and |v_P0_#t~short10_3161| .cse24) (and .cse23 .cse91)) (or (and |v_P0_#t~short10_3161| (or (and .cse92 .cse29) (and .cse30 |v_P0_#t~short10_3162|)) (= |v_#race~x$w_buff1_used~0_16345| 0)) (and .cse93 (= |v_P0_#t~short10_3161| |v_P0_#t~short10_3162|) .cse91)) (= |v_#race~x$r_buff0_thd1~0_12273| 0) (or (and |v_P0_#t~short10_3162| |v_P0_#t~short11_3234|) (and .cse89 .cse92)) .cse1)) (and (= |old(#race~x$r_buff0_thd1~0)| |v_#race~x$r_buff0_thd1~0_12273|) (= |v_P0_#t~short11_3234| |v_P0_#t~short11_3233|) .cse93 |v_P0_#t~short11_3233| (= |old(P0Thread1of1ForFork2_#t~short10)| |v_P0_#t~short10_3162|)))) (let ((.cse96 (= |old(P0Thread1of1ForFork2_#t~short28)| |v_P0_#t~short28_3358|)) (.cse98 (= |v_#race~x$w_buff1_used~0_16348| |v_#race~x$w_buff1_used~0_16344|)) (.cse94 (= |old(P0Thread1of1ForFork2_#t~short30)| |v_P0_#t~short30_3301|)) (.cse99 (= |v_#race~x$r_buff1_thd1~0_7299| |v_#race~x$r_buff1_thd1~0_7302|)) (.cse95 (= |v_P0_#t~ite33_2725| |old(P0Thread1of1ForFork2_#t~ite33)|)) (.cse97 (= |old(P0Thread1of1ForFork2_#t~short32)| |v_P0_#t~short32_3187|)) (.cse100 (= |v_#race~x$w_buff1~0_7619| 0))) (or (and .cse94 .cse95 (= |old(P0Thread1of1ForFork2_#t~short31)| |v_P0_#t~short31_3336|) .cse96 .cse97 (= |old(P0Thread1of1ForFork2_#t~short29)| |v_P0_#t~short29_3390|) .cse16 .cse98 (= |old(~x$w_buff1~0)| ~x$w_buff1~0) (= |v_#race~x$r_buff0_thd1~0_12277| |v_#race~x$r_buff0_thd1~0_12276|) (= |v_#race~x$w_buff0_used~0_17019| |v_#race~x$w_buff0_used~0_17016|) .cse99 (= |v_P0_#t~ite34_2713| |old(P0Thread1of1ForFork2_#t~ite34)|) .cse100) (let ((.cse101 (not |v_P0_#t~short29_3389|)) (.cse102 (not |v_P0_#t~short29_3390|)) (.cse103 (not |v_P0_#t~short31_3337|)) (.cse107 (not |v_P0_#t~short31_3336|))) (and (or (and |v_P0_#t~short29_3389| .cse0) (and .cse101 .cse2)) (or (and .cse102 .cse103) (and |v_P0_#t~short29_3390| |v_P0_#t~short31_3337|)) (= ~x$w_buff1~0 |v_P0_#t~ite34_2713|) (or (and (= |v_P0_#t~short29_3389| |v_P0_#t~short29_3390|) .cse96 |v_P0_#t~short29_3389| .cse98 (= |v_#race~x$r_buff0_thd1~0_12277| |v_#race~x$r_buff0_thd1~0_12283|)) (let ((.cse105 (not |v_P0_#t~short28_3358|)) (.cse104 (not |v_P0_#t~short28_3357|))) (and .cse101 (or (and (= |v_P0_#t~short28_3357| |v_P0_#t~short28_3358|) .cse98 .cse104) (and (= |v_#race~x$w_buff1_used~0_16344| 0) (or (and .cse30 |v_P0_#t~short28_3358|) (and .cse105 .cse29)) |v_P0_#t~short28_3357|)) (or (and .cse102 .cse105) (and |v_P0_#t~short28_3358| |v_P0_#t~short29_3390|)) (= |v_#race~x$r_buff0_thd1~0_12283| 0) (or (and .cse24 |v_P0_#t~short28_3357|) (and .cse23 .cse104))))) (or (let ((.cse108 (not |v_P0_#t~short30_3302|)) (.cse106 (not |v_P0_#t~short30_3301|))) (and (= |v_#race~x$r_buff0_thd1~0_12284| 0) (or (and |v_P0_#t~short30_3301| |v_P0_#t~short31_3336|) (and .cse106 .cse107)) .cse103 (or (and .cse24 |v_P0_#t~short30_3302|) (and .cse23 .cse108)) (or (and .cse108 (= |v_P0_#t~short30_3301| |v_P0_#t~short30_3302|) .cse99) (and (or (and .cse35 |v_P0_#t~short30_3301|) (and .cse34 .cse106)) (= |v_#race~x$r_buff1_thd1~0_7299| 0) |v_P0_#t~short30_3302|)))) (and .cse94 (= |v_P0_#t~short31_3336| |v_P0_#t~short31_3337|) |v_P0_#t~short31_3337| (= |v_#race~x$r_buff0_thd1~0_12284| |v_#race~x$r_buff0_thd1~0_12283|) .cse99)) (let ((.cse110 (= |v_#race~x$r_buff0_thd1~0_12276| |v_#race~x$r_buff0_thd1~0_12284|)) (.cse113 (= |v_#race~x$w_buff0_used~0_17019| 0))) (or (let ((.cse109 (not |v_P0_#t~short32_3187|)) (.cse111 (not |v_P0_#t~short32_3186|))) (and (= |v_P0_#t~ite33_2725| |v_P0_#t~ite34_2713|) .cse107 (or (and (or (and .cse23 |v_P0_#t~short32_3187|) (and .cse109 .cse24)) |v_P0_#t~short32_3186| (= |v_#race~x$r_buff0_thd1~0_12276| 0)) (and .cse110 .cse111 (= |v_P0_#t~short32_3187| |v_P0_#t~short32_3186|))) (let ((.cse112 (= |old(~x$w_buff1~0)| |v_P0_#t~ite33_2725|))) (or (and |v_P0_#t~short32_3187| .cse112 .cse100) (and .cse109 .cse112 .cse100))) .cse113 (or (and |v_P0_#t~short32_3186| .cse2) (and .cse111 .cse0)))) (and .cse95 .cse110 (= |old(~x$w_buff1~0)| |v_P0_#t~ite34_2713|) .cse97 .cse113 |v_P0_#t~short31_3336| .cse100))) .cse37)))) (= ~x$flush_delayed~0 (ite .cse37 0 1)) (= |~#x~0.offset| ~__unbuffered_p0_EAX$read_delayed_var~0.offset) (let ((.cse116 (= |old(#race~x$r_buff1_thd1~0)| |v_#race~x$r_buff1_thd1~0_7300|))) (or (let ((.cse114 (not |v_P0_#t~short12_3206|)) (.cse115 (not |v_P0_#t~short12_3205|))) (and (or (and .cse114 .cse63) (and |v_P0_#t~short12_3206| |v_P0_#t~short13_3269|)) (or (and |v_P0_#t~short12_3205| .cse24) (and .cse23 .cse115)) .cse90 (= |v_#race~x$r_buff0_thd1~0_12285| 0) (or (and |v_P0_#t~short12_3205| (= |v_#race~x$r_buff1_thd1~0_7300| 0) (or (and |v_P0_#t~short12_3206| .cse35) (and .cse34 .cse114))) (and (= |v_P0_#t~short12_3206| |v_P0_#t~short12_3205|) .cse116 .cse115)))) (and (= |v_#race~x$r_buff0_thd1~0_12273| |v_#race~x$r_buff0_thd1~0_12285|) (= |v_P0_#t~short13_3269| |v_P0_#t~short13_3268|) |v_P0_#t~short13_3268| .cse116 (= |old(P0Thread1of1ForFork2_#t~short12)| |v_P0_#t~short12_3206|)))) (let ((.cse124 (= |v_P0_#t~short58_2237| |old(P0Thread1of1ForFork2_#t~short58)|)) (.cse119 (= |v_#race~x$r_buff1_thd1~0_7306| |v_#race~x$r_buff1_thd1~0_7305|)) (.cse133 (= |v_#race~x$w_buff1_used~0_16349| |v_#race~x$w_buff1_used~0_16347|)) (.cse126 (= |v_#race~x$r_buff0_thd1~0_12290| 0)) (.cse122 (= |v_P0_#t~short56_2415| |old(P0Thread1of1ForFork2_#t~short56)|)) (.cse134 (= |v_P0_#t~short54_2511| |old(P0Thread1of1ForFork2_#t~short54)|)) (.cse127 (= |v_P0_#t~ite59_1793| |old(P0Thread1of1ForFork2_#t~ite59)|))) (or (let ((.cse118 (not |v_P0_#t~short57_2466|)) (.cse121 (not |v_P0_#t~short57_2467|)) (.cse123 (not |v_P0_#t~short55_2560|)) (.cse131 (not |v_P0_#t~short55_2559|))) (and (or (let ((.cse117 (not |v_P0_#t~short56_2416|)) (.cse120 (not |v_P0_#t~short56_2415|))) (and (or (and |v_P0_#t~short56_2416| .cse24) (and .cse23 .cse117)) (= |v_#race~x$r_buff0_thd1~0_12274| 0) .cse118 (or (and .cse117 .cse119 (= |v_P0_#t~short56_2415| |v_P0_#t~short56_2416|)) (and |v_P0_#t~short56_2416| (or (and |v_P0_#t~short56_2415| .cse35) (and .cse120 .cse34)) (= |v_#race~x$r_buff1_thd1~0_7306| 0))) (or (and |v_P0_#t~short56_2415| |v_P0_#t~short57_2467|) (and .cse121 .cse120)))) (and |v_P0_#t~short57_2466| .cse119 (= |v_P0_#t~short57_2466| |v_P0_#t~short57_2467|) (= |v_#race~x$r_buff0_thd1~0_12274| |v_#race~x$r_buff0_thd1~0_12281|) .cse122)) (or (and |v_P0_#t~short55_2560| |v_P0_#t~short57_2466|) (and .cse118 .cse123)) (let ((.cse125 (= |v_#race~x$w_buff0_used~0_17017| 0))) (or (and |v_P0_#t~short57_2467| .cse124 (= |v_P0_#t~ite60_1783| |old(~x$r_buff0_thd1~0)|) .cse125 .cse126 .cse127) (let ((.cse129 (not |v_P0_#t~short58_2237|)) (.cse128 (not |v_P0_#t~short58_2236|))) (and .cse121 (or (and (= |v_P0_#t~short58_2236| |v_P0_#t~short58_2237|) .cse128 (= |v_#race~x$r_buff0_thd1~0_12278| |v_#race~x$r_buff0_thd1~0_12274|)) (and |v_P0_#t~short58_2236| (= |v_#race~x$r_buff0_thd1~0_12278| 0) (or (and .cse24 .cse129) (and .cse23 |v_P0_#t~short58_2237|)))) (or (and |v_P0_#t~short58_2237| (= |v_#race~x$r_buff0_thd1~0_12290| |v_#race~x$r_buff0_thd1~0_12278|) (= |v_P0_#t~ite59_1793| 0)) (and (= |v_P0_#t~ite59_1793| |old(~x$r_buff0_thd1~0)|) .cse126 .cse129)) .cse125 (= |v_P0_#t~ite59_1793| |v_P0_#t~ite60_1783|) (or (and .cse47 .cse128) (and |v_P0_#t~short58_2236| .cse48)))))) (or (let ((.cse130 (not |v_P0_#t~short54_2512|)) (.cse132 (not |v_P0_#t~short54_2511|))) (and (or (and |v_P0_#t~short54_2512| .cse24) (and .cse23 .cse130)) .cse131 (or (and |v_P0_#t~short54_2512| (or (and .cse83 .cse132) (and |v_P0_#t~short54_2511| .cse82)) (= |v_#race~x$w_buff1_used~0_16347| 0)) (and .cse130 .cse133 (= |v_P0_#t~short54_2511| |v_P0_#t~short54_2512|))) (or (and |v_P0_#t~short54_2511| |v_P0_#t~short55_2560|) (and .cse132 .cse123)) (= |v_#race~x$r_buff0_thd1~0_12281| 0))) (and (= |v_P0_#t~short55_2559| |v_P0_#t~short55_2560|) |v_P0_#t~short55_2559| (= |v_#race~x$r_buff0_thd1~0_12272| |v_#race~x$r_buff0_thd1~0_12281|) .cse133 .cse134)) (or (and .cse131 .cse48) (and |v_P0_#t~short55_2559| .cse47)) .cse37 (= |v_P0_#t~ite60_1783| |v_P0_#t~ite61_1583|))) (and (= |v_P0_#t~ite61_1583| |old(~x$r_buff0_thd1~0)|) (= |v_P0_#t~short57_2467| |old(P0Thread1of1ForFork2_#t~short57)|) .cse124 (= |v_P0_#t~ite60_1783| |old(P0Thread1of1ForFork2_#t~ite60)|) (= |v_#race~x$w_buff0_used~0_17017| |v_#race~x$w_buff0_used~0_17015|) .cse119 .cse133 .cse16 (= |v_P0_#t~short55_2560| |old(P0Thread1of1ForFork2_#t~short55)|) .cse126 .cse122 .cse134 .cse127))) (= (ite (= (mod |v_P0_#t~ite52_2073| 256) 0) 0 1) ~x$w_buff1_used~0) (or (= |v_P0_#t~nondet3_641| 0) (= |v_P0_#t~nondet3_641| 1)) (= |#race~x$flush_delayed~0| 0) (= |~#x~0.base| ~__unbuffered_p0_EAX$read_delayed_var~0.base) (= (ite (= (mod |v_P0_#t~nondet3_641| 256) 0) 0 1) ~weak$$choice0~0) (let ((.cse139 (= |v_#race~x$w_buff1_used~0_16348| |v_#race~x$w_buff1_used~0_16345|)) (.cse153 (= |old(P0Thread1of1ForFork2_#t~short23)| |v_P0_#t~short23_3249|)) (.cse145 (= |v_#race~x$r_buff1_thd1~0_7302| |v_#race~x$r_buff1_thd1~0_7300|)) (.cse140 (= |old(P0Thread1of1ForFork2_#t~short19)| |v_P0_#t~short19_3389|)) (.cse146 (= |old(P0Thread1of1ForFork2_#t~short21)| |v_P0_#t~short21_3345|)) (.cse149 (= |v_#race~x$w_buff0~0_7136| 0)) (.cse154 (= |v_P0_#t~ite24_2803| |old(P0Thread1of1ForFork2_#t~ite24)|))) (or (let ((.cse136 (not |v_P0_#t~short20_3415|)) (.cse137 (not |v_P0_#t~short20_3416|)) (.cse141 (not |v_P0_#t~short22_3374|)) (.cse143 (not |v_P0_#t~short22_3375|))) (and (or (let ((.cse138 (not |v_P0_#t~short19_3389|)) (.cse135 (not |v_P0_#t~short19_3390|))) (and (or (and |v_P0_#t~short19_3390| .cse24) (and .cse23 .cse135)) .cse136 (or (and .cse137 .cse138) (and |v_P0_#t~short19_3389| |v_P0_#t~short20_3416|)) (or (and (or (and .cse138 .cse29) (and .cse30 |v_P0_#t~short19_3389|)) |v_P0_#t~short19_3390| (= |v_#race~x$w_buff1_used~0_16348| 0)) (and .cse139 (= |v_P0_#t~short19_3389| |v_P0_#t~short19_3390|) .cse135)) (= |v_#race~x$r_buff0_thd1~0_12288| 0))) (and .cse139 (= |v_#race~x$r_buff0_thd1~0_12282| |v_#race~x$r_buff0_thd1~0_12288|) (= |v_P0_#t~short20_3416| |v_P0_#t~short20_3415|) |v_P0_#t~short20_3415| .cse140)) (or (and |v_P0_#t~short20_3415| .cse0) (and .cse136 .cse2)) (or (and .cse137 .cse141) (and |v_P0_#t~short20_3416| |v_P0_#t~short22_3374|)) (or (let ((.cse142 (not |v_P0_#t~short21_3345|)) (.cse144 (not |v_P0_#t~short21_3346|))) (and (or (and |v_P0_#t~short21_3345| |v_P0_#t~short22_3375|) (and .cse142 .cse143)) (or (and (= |v_#race~x$r_buff1_thd1~0_7302| 0) |v_P0_#t~short21_3346| (or (and .cse34 .cse142) (and |v_P0_#t~short21_3345| .cse35))) (and .cse144 .cse145 (= |v_P0_#t~short21_3345| |v_P0_#t~short21_3346|))) (= |v_#race~x$r_buff0_thd1~0_12286| 0) .cse141 (or (and .cse23 .cse144) (and .cse24 |v_P0_#t~short21_3346|)))) (and |v_P0_#t~short22_3374| .cse145 (= |v_P0_#t~short22_3375| |v_P0_#t~short22_3374|) .cse146 (= |v_#race~x$r_buff0_thd1~0_12288| |v_#race~x$r_buff0_thd1~0_12286|))) (= ~x$w_buff0~0 |v_P0_#t~ite25_2791|) (let ((.cse147 (= |v_#race~x$w_buff0_used~0_17016| 0)) (.cse151 (= |v_#race~x$r_buff0_thd1~0_12277| |v_#race~x$r_buff0_thd1~0_12286|))) (or (let ((.cse150 (not |v_P0_#t~short23_3249|)) (.cse152 (not |v_P0_#t~short23_3248|))) (and .cse147 (= |v_P0_#t~ite24_2803| |v_P0_#t~ite25_2791|) (let ((.cse148 (= |old(~x$w_buff0~0)| |v_P0_#t~ite24_2803|))) (or (and |v_P0_#t~short23_3249| .cse148 .cse149) (and .cse150 .cse148 .cse149))) (or (and (or (and .cse150 .cse24) (and .cse23 |v_P0_#t~short23_3249|)) (= |v_#race~x$r_buff0_thd1~0_12277| 0) |v_P0_#t~short23_3248|) (and .cse151 (= |v_P0_#t~short23_3248| |v_P0_#t~short23_3249|) .cse152)) (or (and |v_P0_#t~short23_3248| .cse2) (and .cse152 .cse0)) .cse143)) (and .cse147 .cse151 (= |old(~x$w_buff0~0)| |v_P0_#t~ite25_2791|) .cse153 |v_P0_#t~short22_3375| .cse149 .cse154))) .cse37)) (and .cse139 (= |old(~x$w_buff0~0)| ~x$w_buff0~0) (= |v_#race~x$w_buff0_used~0_17016| |v_#race~x$w_buff0_used~0_17020|) (= |old(P0Thread1of1ForFork2_#t~short22)| |v_P0_#t~short22_3375|) (= |v_#race~x$r_buff0_thd1~0_12277| |v_#race~x$r_buff0_thd1~0_12282|) .cse16 .cse153 (= |v_P0_#t~ite25_2791| |old(P0Thread1of1ForFork2_#t~ite25)|) .cse145 .cse140 .cse146 (= |old(P0Thread1of1ForFork2_#t~short20)| |v_P0_#t~short20_3416|) .cse149 .cse154)))))) +//@ semantics [292] {P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short32,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~mem75,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~short64,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~ite43,~__unbuffered_p0_EAX$read_delayed_var~0.base,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~ite24,~weak$$choice2~0,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,P0Thread1of1ForFork2_#t~mem8,~x$r_buff1_thd1~0,#race~x$flush_delayed~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~nondet77,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite76,P0Thread1of1ForFork2_#t~nondet36,#race~__unbuffered_p0_EAX$read_delayed_var~0,P0Thread1of1ForFork2_#t~mem73,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#t~short20,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet74,P0Thread1of1ForFork2_#t~short31,#memory_int,~__unbuffered_p0_EAX$read_delayed_var~0.offset,P0Thread1of1ForFork2_#t~nondet78,#race~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} false +//@ semantics [293] {P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~short40,#race~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~ite25,#race~x$mem_tmp~0,~x$w_buff1~0,~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet71,~weak$$choice0~0,#race~weak$$choice2~0,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short32,#race~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~nondet4,~x$r_buff0_thd1~0,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~mem75,~x$mem_tmp~0,P0Thread1of1ForFork2_#t~mem14,#race~x$w_buff1~0,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~short64,~__unbuffered_p0_EAX$read_delayed~0,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~ite43,~__unbuffered_p0_EAX$read_delayed_var~0.base,~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~nondet53,~weak$$choice2~0,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet3,#race~x$r_buff1_thd1~0,~x$w_buff0~0,P0Thread1of1ForFork2_#t~ite35,~x$flush_delayed~0,~x$r_buff1_thd1~0,P0Thread1of1ForFork2_#t~mem8,#race~x$flush_delayed~0,~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,#race~x$w_buff1_used~0,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~nondet77,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite76,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~nondet36,#race~__unbuffered_p0_EAX$read_delayed_var~0,P0Thread1of1ForFork2_#t~mem73,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#t~short20,#race~x$w_buff0_used~0,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~short28,#race,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,#race~x$w_buff0~0,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,#race~weak$$choice0~0,P0Thread1of1ForFork2_#t~nondet74,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~short31,#memory_int,~__unbuffered_p0_EAX$read_delayed_var~0.offset,P0Thread1of1ForFork2_#t~nondet78,#race~__unbuffered_p0_EAX~0,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} [(|v_P0_#t~ite42_2539| Int) (|v_#race_10319| (Array Int (Array Int Int))) (|v_P0_#t~short29_3394| Bool) (|v_#race~x$w_buff1_used~0_16359| Int) (|v_#race~x$w_buff0_used~0_17029| Int) (|v_P0_#t~short29_3393| Bool) (|v_P0_#t~short47_2923| Bool) (|v_#race_10318| (Array Int (Array Int Int))) (|v_#race_10317| (Array Int (Array Int Int))) (|v_#race~x$r_buff0_thd1~0_12316| Int) (|v_#race~x$r_buff0_thd1~0_12317| Int) (|v_#race~x$r_buff0_thd1~0_12318| Int) (|v_#race~x$r_buff0_thd1~0_12319| Int) (|v_#race~x$w_buff0~0_7139| Int) (|v_P0_#t~short41_2958| Bool) (|v_P0_#t~short65_1831| Bool) (|v_P0_#t~short65_1832| Bool) (|v_P0_#t~short41_2959| Bool) (|v_P0_#t~ite52_2075| Int) (|v_P0_#t~short30_3305| Bool) (|v_P0_#t~short30_3306| Bool) (|v_P0_#t~nondet5_841| Int) (|v_P0_#t~short23_3252| Bool) (|v_P0_#t~short23_3253| Bool) (|v_#race~x$w_buff1_used~0_16366| Int) (|v_P0_#t~short63_1944| Bool) (|v_#race~x$w_buff1_used~0_16364| Int) (|v_P0_#t~short63_1943| Bool) (|v_#race~x$w_buff1_used~0_16365| Int) (|v_#race~x$w_buff1_used~0_16362| Int) (|v_P0_#t~short21_3349| Bool) (|v_#race~x$w_buff1_used~0_16363| Int) (|v_#race~x$w_buff1_used~0_16360| Int) (|v_#race~x$w_buff1_used~0_16361| Int) (|v_#race~x$r_buff0_thd1~0_12326| Int) (|v_#race~x$r_buff0_thd1~0_12327| Int) (|v_P0_#t~short55_2563| Bool) (|v_#race~x$r_buff0_thd1~0_12328| Int) (|v_P0_#t~short55_2564| Bool) (|v_#race~x$r_buff0_thd1~0_12329| Int) (|v_P0_#t~mem75_560| Int) (|v_#race~x$r_buff0_thd1~0_12320| Int) (|v_#race~x$r_buff0_thd1~0_12321| Int) (|v_P0_#t~short21_3350| Bool) (|v_P0_#t~short13_3272| Bool) (|v_#race~x$r_buff0_thd1~0_12322| Int) (|v_P0_#t~short13_3273| Bool) (|v_#race~x$r_buff0_thd1~0_12323| Int) (|v_#race~x$r_buff0_thd1~0_12324| Int) (|v_#race~x$r_buff0_thd1~0_12325| Int) (|v_P0_#t~ite44_2377| Int) (|v_P0_#t~ite34_2715| Int) (|v_P0_#t~short22_3378| Bool) (|v_P0_#t~short22_3379| Bool) (|v_P0_#t~nondet3_643| Int) (|v_P0_#t~short50_2617| Bool) (|v_P0_#t~short50_2618| Bool) (|v_P0_#t~nondet9_1732| Int) (|v_#race~x$r_buff0_thd1~0_12337| Int) (|v_P0_#t~short11_3237| Bool) (|v_#race~x$r_buff0_thd1~0_12330| Int) (|v_P0_#t~short11_3238| Bool) (|v_#race~x$r_buff0_thd1~0_12331| Int) (|v_#race~x$r_buff0_thd1~0_12332| Int) (|v_#race~x$r_buff0_thd1~0_12333| Int) (|v_#race~x$r_buff0_thd1~0_12334| Int) (|v_P0_#t~short37_3173| Bool) (|v_#race~x$r_buff0_thd1~0_12335| Int) (|v_P0_#t~short37_3174| Bool) (|v_#race~x$r_buff0_thd1~0_12336| Int) (|v_P0_#t~short46_2883| Bool) (|v_P0_#t~short46_2884| Bool) (|v_P0_#t~short39_3101| Bool) (|v_P0_#t~short39_3102| Bool) (|v_P0_#t~ite76_349| Int) (|v_#race~x$w_buff0_used~0_17035| Int) (|v_#race~x$w_buff0_used~0_17034| Int) (|v_#race~x$r_buff1_thd1~0_7315| Int) (|v_#race~x$w_buff0_used~0_17031| Int) (|v_#race~x$w_buff0_used~0_17030| Int) (|v_P0_#t~short66_1887| Bool) (|v_#race~x$w_buff0_used~0_17033| Int) (|v_#race~x$w_buff0_used~0_17032| Int) (|v_P0_#t~ite69_1013| Int) (|v_P0_#t~short48_2795| Bool) (|v_P0_#t~ite43_2529| Int) (|v_P0_#t~ite16_2725| Int) (|v_P0_#t~short48_2796| Bool) (|v_P0_#t~short67_1617| Bool) (|v_P0_#t~short67_1618| Bool) (|v_P0_#t~ite68_1235| Int) (|v_#race~x$r_buff1_thd1~0_7320| Int) (|v_P0_#t~short20_3420| Bool) (|v_#race~x$r_buff1_thd1~0_7321| Int) (|v_P0_#t~ite24_2805| Int) (|v_#race~x$r_buff1_thd1~0_7322| Int) (|v_P0_#t~short10_3165| Bool) (|v_P0_#t~short10_3166| Bool) (|v_P0_#t~short66_1886| Bool) (|v_P0_#t~short20_3419| Bool) (|v_#race~x$r_buff1_thd1~0_7316| Int) (|v_P0_#t~ite59_1795| Int) (|v_#race~x$r_buff1_thd1~0_7317| Int) (|v_#race~x$r_buff1_thd1~0_7318| Int) (|v_#race~x$r_buff1_thd1~0_7319| Int) (|v_P0_#t~short38_3209| Bool) (|v_P0_#t~ite33_2727| Int) (|v_P0_#t~short19_3394| Bool) (|v_P0_#t~short19_3393| Bool) (|v_P0_#t~ite60_1785| Int) (|v_P0_#t~short12_3210| Bool) (|v_P0_#t~short15_3138| Bool) (|v_P0_#t~short15_3139| Bool) (|v_P0_#t~short28_3362| Bool) (|v_P0_#t~short28_3361| Bool) (|v_P0_#t~short31_3341| Bool) (|v_P0_#t~short12_3209| Bool) (|v_P0_#t~short31_3340| Bool) (|v_P0_#t~short32_3190| Bool) (|v_#race~x$w_buff1~0_7623| Int) (|v_P0_#t~short32_3191| Bool) (|v_#race~x$w_buff1~0_7624| Int) (|v_P0_#t~short64_1996| Bool) (|v_P0_#t~short58_2240| Bool) (|v_P0_#t~short64_1995| Bool) (|v_P0_#t~mem14_2750| Int) (|v_P0_#t~short58_2241| Bool) (|v_P0_#t~short57_2470| Bool) (|v_P0_#t~short40_3140| Bool) (|v_P0_#t~short40_3141| Bool) (|v_P0_#t~short56_2419| Bool) (|v_P0_#t~short57_2471| Bool) (|v_P0_#t~ite25_2793| Int) (|v_P0_#t~short56_2420| Bool) (|v_#race~x$w_buff0~0_7140| Int) (|v_P0_#t~ite51_2249| Int) (|v_P0_#t~ite61_1585| Int) (|v_P0_#t~short47_2924| Bool) (|v_P0_#t~short38_3210| Bool) (|v_P0_#t~short49_2838| Bool) (|v_P0_#t~short54_2515| Bool) (|v_P0_#t~short49_2839| Bool) (|v_P0_#t~short54_2516| Bool)] (let ((.cse51 (select |#race| |~#x~0.base|)) (.cse48 (select |old(#memory_int)| |~#x~0.base|)) (.cse6 (= (mod |old(~x$r_buff0_thd1~0)| 256) 0)) (.cse11 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse28 (= (mod ~weak$$choice2~0 256) 0)) (.cse9 (= (mod |old(~x$r_buff1_thd1~0)| 256) 0)) (.cse88 (= (mod ~x$w_buff1_used~0 256) 0)) (.cse92 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse106 (select |v_#race_10317| |~#x~0.base|)) (.cse109 (+ |~#x~0.offset| 1)) (.cse17 (= (mod |old(~x$w_buff1_used~0)| 256) 0))) (let ((.cse77 (not |v_P0_#t~short13_3272|)) (.cse100 (not |v_P0_#t~short11_3238|)) (.cse49 (not |v_P0_#t~short11_3237|)) (.cse112 (select |v_#race_10319| |~#x~0.base|)) (.cse15 (not .cse17)) (.cse105 (select .cse106 .cse109)) (.cse91 (not .cse92)) (.cse87 (not .cse88)) (.cse10 (not .cse9)) (.cse29 (not .cse28)) (.cse13 (not .cse11)) (.cse5 (not .cse6)) (.cse76 (not |v_P0_#t~short13_3273|)) (.cse104 (select .cse48 |~#x~0.offset|)) (.cse108 (select |v_#race_10318| |~#x~0.base|)) (.cse107 (+ 2 |~#x~0.offset|)) (.cse52 (+ 3 |~#x~0.offset|)) (.cse50 (select .cse51 .cse109))) (and (or (= |v_P0_#t~nondet5_841| 0) (= |v_P0_#t~nondet5_841| 1)) (let ((.cse26 (= |v_P0_#t~ite24_2805| |old(P0Thread1of1ForFork2_#t~ite24)|)) (.cse19 (= |old(P0Thread1of1ForFork2_#t~short19)| |v_P0_#t~short19_3393|)) (.cse2 (= |old(P0Thread1of1ForFork2_#t~short21)| |v_P0_#t~short21_3350|)) (.cse27 (= |old(P0Thread1of1ForFork2_#t~short23)| |v_P0_#t~short23_3252|)) (.cse18 (= |v_#race~x$w_buff1_used~0_16363| |v_#race~x$w_buff1_used~0_16361|)) (.cse24 (= |v_#race~x$w_buff0~0_7140| 0)) (.cse3 (= |v_#race~x$r_buff1_thd1~0_7318| |v_#race~x$r_buff1_thd1~0_7320|))) (or (let ((.cse1 (not |v_P0_#t~short22_3378|)) (.cse12 (not |v_P0_#t~short20_3420|)) (.cse0 (not |v_P0_#t~short20_3419|)) (.cse8 (not |v_P0_#t~short22_3379|))) (and (or (and |v_P0_#t~short20_3419| |v_P0_#t~short22_3378|) (and .cse0 .cse1)) (or (and (= |v_#race~x$r_buff0_thd1~0_12334| |v_#race~x$r_buff0_thd1~0_12333|) .cse2 |v_P0_#t~short22_3378| (= |v_P0_#t~short22_3378| |v_P0_#t~short22_3379|) .cse3) (let ((.cse7 (not |v_P0_#t~short21_3350|)) (.cse4 (not |v_P0_#t~short21_3349|))) (and (or (and .cse4 .cse5) (and .cse6 |v_P0_#t~short21_3349|)) .cse1 (or (and |v_P0_#t~short21_3350| |v_P0_#t~short22_3379|) (and .cse7 .cse8)) (= |v_#race~x$r_buff0_thd1~0_12333| 0) (or (and (= |v_#race~x$r_buff1_thd1~0_7320| 0) (or (and .cse9 |v_P0_#t~short21_3350|) (and .cse7 .cse10)) |v_P0_#t~short21_3349|) (and .cse4 (= |v_P0_#t~short21_3349| |v_P0_#t~short21_3350|) .cse3))))) (or (and |v_P0_#t~short20_3420| .cse11) (and .cse12 .cse13)) (or (let ((.cse14 (not |v_P0_#t~short19_3394|)) (.cse16 (not |v_P0_#t~short19_3393|))) (and (or (and .cse6 |v_P0_#t~short19_3394|) (and .cse14 .cse5)) (or (and (= |v_#race~x$w_buff1_used~0_16361| 0) |v_P0_#t~short19_3394| (or (and .cse15 .cse16) (and |v_P0_#t~short19_3393| .cse17))) (and .cse14 .cse18 (= |v_P0_#t~short19_3393| |v_P0_#t~short19_3394|))) (= |v_#race~x$r_buff0_thd1~0_12334| 0) .cse12 (or (and |v_P0_#t~short19_3393| |v_P0_#t~short20_3419|) (and .cse0 .cse16)))) (and .cse19 (= |v_#race~x$r_buff0_thd1~0_12334| |v_#race~x$r_buff0_thd1~0_12325|) |v_P0_#t~short20_3420| .cse18 (= |v_P0_#t~short20_3419| |v_P0_#t~short20_3420|))) (= ~x$w_buff0~0 |v_P0_#t~ite25_2793|) (let ((.cse21 (= |v_#race~x$w_buff0_used~0_17030| 0)) (.cse25 (= |v_#race~x$r_buff0_thd1~0_12337| |v_#race~x$r_buff0_thd1~0_12333|))) (or (let ((.cse22 (not |v_P0_#t~short23_3252|)) (.cse20 (not |v_P0_#t~short23_3253|))) (and (or (and |v_P0_#t~short23_3253| .cse13) (and .cse20 .cse11)) .cse21 .cse8 (let ((.cse23 (= |old(~x$w_buff0~0)| |v_P0_#t~ite24_2805|))) (or (and .cse22 .cse23 .cse24) (and .cse23 |v_P0_#t~short23_3252| .cse24))) (or (and |v_P0_#t~short23_3253| (= |v_#race~x$r_buff0_thd1~0_12337| 0) (or (and |v_P0_#t~short23_3252| .cse5) (and .cse6 .cse22))) (and .cse20 (= |v_P0_#t~short23_3253| |v_P0_#t~short23_3252|) .cse25)) (= |v_P0_#t~ite24_2805| |v_P0_#t~ite25_2793|))) (and .cse26 .cse21 .cse27 |v_P0_#t~short22_3379| .cse24 (= |old(~x$w_buff0~0)| |v_P0_#t~ite25_2793|) .cse25))) .cse28)) (and .cse26 .cse19 .cse29 .cse2 .cse27 (= |old(~x$w_buff0~0)| ~x$w_buff0~0) (= |v_P0_#t~ite25_2793| |old(P0Thread1of1ForFork2_#t~ite25)|) .cse18 .cse24 .cse3 (= |old(P0Thread1of1ForFork2_#t~short22)| |v_P0_#t~short22_3379|) (= |v_#race~x$w_buff0_used~0_17033| |v_#race~x$w_buff0_used~0_17030|) (= |v_#race~x$r_buff0_thd1~0_12337| |v_#race~x$r_buff0_thd1~0_12325|) (= |old(P0Thread1of1ForFork2_#t~short20)| |v_P0_#t~short20_3419|)))) (let ((.cse34 (= |old(P0Thread1of1ForFork2_#t~short37)| |v_P0_#t~short37_3174|)) (.cse30 (= |v_#race~x$w_buff1_used~0_16359| |v_#race~x$w_buff1_used~0_16360|)) (.cse33 (= |v_#race~x$r_buff1_thd1~0_7316| |v_#race~x$r_buff1_thd1~0_7322|)) (.cse35 (= |v_P0_#t~short39_3101| |old(P0Thread1of1ForFork2_#t~short39)|)) (.cse31 (= |v_P0_#t~ite42_2539| |old(P0Thread1of1ForFork2_#t~ite42)|)) (.cse36 (= |old(P0Thread1of1ForFork2_#t~short41)| |v_P0_#t~short41_2958|)) (.cse32 (= |v_#race~x$w_buff0_used~0_17029| 0))) (or (and .cse30 .cse29 .cse31 .cse32 .cse33 .cse34 .cse35 (= |v_P0_#t~ite43_2529| |old(P0Thread1of1ForFork2_#t~ite43)|) (= |old(P0Thread1of1ForFork2_#t~short40)| |v_P0_#t~short40_3141|) .cse36 (= |v_#race~x$r_buff0_thd1~0_12319| |v_#race~x$r_buff0_thd1~0_12318|) (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite44_2377|) (= |old(P0Thread1of1ForFork2_#t~short38)| |v_P0_#t~short38_3210|)) (let ((.cse39 (not |v_P0_#t~short38_3209|)) (.cse43 (not |v_P0_#t~short40_3141|)) (.cse40 (not |v_P0_#t~short38_3210|)) (.cse44 (not |v_P0_#t~short40_3140|))) (and (or (and .cse30 (= |v_P0_#t~short38_3209| |v_P0_#t~short38_3210|) .cse34 (= |v_#race~x$r_buff0_thd1~0_12318| |v_#race~x$r_buff0_thd1~0_12323|) |v_P0_#t~short38_3209|) (let ((.cse38 (not |v_P0_#t~short37_3173|)) (.cse37 (not |v_P0_#t~short37_3174|))) (and (or (and (or (and .cse15 .cse37) (and |v_P0_#t~short37_3174| .cse17)) (= |v_#race~x$w_buff1_used~0_16360| 0) |v_P0_#t~short37_3173|) (and (= |v_P0_#t~short37_3173| |v_P0_#t~short37_3174|) .cse30 .cse38)) (or (and .cse38 .cse5) (and .cse6 |v_P0_#t~short37_3173|)) .cse39 (or (and |v_P0_#t~short37_3174| |v_P0_#t~short38_3210|) (and .cse40 .cse37)) (= |v_#race~x$r_buff0_thd1~0_12323| 0)))) (or (and |v_P0_#t~short38_3209| .cse11) (and .cse39 .cse13)) (or (let ((.cse41 (not |v_P0_#t~short39_3101|)) (.cse42 (not |v_P0_#t~short39_3102|))) (and (= |v_#race~x$r_buff0_thd1~0_12324| 0) (or (and (or (and .cse41 .cse10) (and .cse9 |v_P0_#t~short39_3101|)) |v_P0_#t~short39_3102| (= |v_#race~x$r_buff1_thd1~0_7322| 0)) (and (= |v_P0_#t~short39_3101| |v_P0_#t~short39_3102|) .cse42 .cse33)) (or (and |v_P0_#t~short39_3101| |v_P0_#t~short40_3141|) (and .cse41 .cse43)) (or (and .cse6 |v_P0_#t~short39_3102|) (and .cse42 .cse5)) .cse44)) (and (= |v_P0_#t~short40_3140| |v_P0_#t~short40_3141|) .cse33 .cse35 (= |v_#race~x$r_buff0_thd1~0_12324| |v_#race~x$r_buff0_thd1~0_12323|) |v_P0_#t~short40_3140|)) (= |v_P0_#t~ite43_2529| |v_P0_#t~ite44_2377|) (let ((.cse45 (= |v_#race~x$r_buff0_thd1~0_12319| |v_#race~x$r_buff0_thd1~0_12324|))) (or (and .cse31 .cse32 .cse45 .cse36 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite43_2529|) |v_P0_#t~short40_3141|) (let ((.cse47 (not |v_P0_#t~short41_2958|)) (.cse46 (not |v_P0_#t~short41_2959|))) (and (or (and .cse45 .cse46 (= |v_P0_#t~short41_2959| |v_P0_#t~short41_2958|)) (and (or (and .cse6 .cse47) (and |v_P0_#t~short41_2958| .cse5)) (= |v_#race~x$r_buff0_thd1~0_12319| 0) |v_P0_#t~short41_2959|)) (or (and (= |v_P0_#t~ite42_2539| 0) .cse32 |v_P0_#t~short41_2958|) (and .cse32 (= |old(~x$w_buff0_used~0)| |v_P0_#t~ite42_2539|) .cse47)) (or (and .cse46 .cse11) (and |v_P0_#t~short41_2959| .cse13)) (= |v_P0_#t~ite42_2539| |v_P0_#t~ite43_2529|) .cse43)))) .cse28 (or (and .cse40 .cse44) (and |v_P0_#t~short38_3210| |v_P0_#t~short40_3140|)))))) (= |~#x~0.offset| ~__unbuffered_p0_EAX$read_delayed_var~0.offset) (= ~x$r_buff1_thd1~0 (ite (= (mod |v_P0_#t~ite69_1013| 256) 0) 0 1)) (= ~x$w_buff0_used~0 (ite (= (mod |v_P0_#t~ite44_2377| 256) 0) 0 1)) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store .cse48 |~#x~0.offset| |v_P0_#t~ite76_349|))) (or (and .cse49 .cse13) (and |v_P0_#t~short11_3237| .cse11)) (= .cse50 (select .cse51 .cse52)) (let ((.cse68 (= |v_#race~x$w_buff1_used~0_16359| |v_#race~x$w_buff1_used~0_16361|)) (.cse58 (= |old(P0Thread1of1ForFork2_#t~short30)| |v_P0_#t~short30_3306|)) (.cse65 (= |old(P0Thread1of1ForFork2_#t~short32)| |v_P0_#t~short32_3191|)) (.cse57 (= |v_#race~x$r_buff1_thd1~0_7316| |v_#race~x$r_buff1_thd1~0_7320|)) (.cse66 (= |v_P0_#t~ite33_2727| |old(P0Thread1of1ForFork2_#t~ite33)|)) (.cse69 (= |old(P0Thread1of1ForFork2_#t~short28)| |v_P0_#t~short28_3361|)) (.cse62 (= |v_#race~x$w_buff1~0_7624| 0))) (or (let ((.cse55 (not |v_P0_#t~short31_3341|)) (.cse67 (not |v_P0_#t~short29_3393|)) (.cse54 (not |v_P0_#t~short31_3340|)) (.cse72 (not |v_P0_#t~short29_3394|))) (and (or (let ((.cse56 (not |v_P0_#t~short30_3306|)) (.cse53 (not |v_P0_#t~short30_3305|))) (and (= |v_#race~x$r_buff0_thd1~0_12329| 0) (or (and .cse53 .cse5) (and .cse6 |v_P0_#t~short30_3305|)) .cse54 (or (and .cse55 .cse56) (and |v_P0_#t~short30_3306| |v_P0_#t~short31_3341|)) (or (and (= |v_#race~x$r_buff1_thd1~0_7316| 0) |v_P0_#t~short30_3305| (or (and .cse10 .cse56) (and .cse9 |v_P0_#t~short30_3306|))) (and (= |v_P0_#t~short30_3305| |v_P0_#t~short30_3306|) .cse53 .cse57)))) (and (= |v_#race~x$r_buff0_thd1~0_12330| |v_#race~x$r_buff0_thd1~0_12329|) .cse58 .cse57 |v_P0_#t~short31_3340| (= |v_P0_#t~short31_3340| |v_P0_#t~short31_3341|))) (let ((.cse64 (= |v_#race~x$r_buff0_thd1~0_12318| |v_#race~x$r_buff0_thd1~0_12329|)) (.cse59 (= |v_#race~x$w_buff0_used~0_17031| 0))) (or (let ((.cse63 (not |v_P0_#t~short32_3191|)) (.cse60 (not |v_P0_#t~short32_3190|))) (and .cse55 .cse59 (or (and .cse60 .cse11) (and |v_P0_#t~short32_3190| .cse13)) (let ((.cse61 (= |old(~x$w_buff1~0)| |v_P0_#t~ite33_2727|))) (or (and .cse61 .cse62 |v_P0_#t~short32_3191|) (and .cse63 .cse61 .cse62))) (or (and (= |v_#race~x$r_buff0_thd1~0_12318| 0) (or (and |v_P0_#t~short32_3191| .cse5) (and .cse6 .cse63)) |v_P0_#t~short32_3190|) (and .cse64 .cse60 (= |v_P0_#t~short32_3190| |v_P0_#t~short32_3191|))) (= |v_P0_#t~ite33_2727| |v_P0_#t~ite34_2715|))) (and .cse64 .cse59 .cse65 .cse66 (= |old(~x$w_buff1~0)| |v_P0_#t~ite34_2715|) .cse62 |v_P0_#t~short31_3341|))) (= ~x$w_buff1~0 |v_P0_#t~ite34_2715|) (or (and |v_P0_#t~short29_3393| .cse11) (and .cse67 .cse13)) .cse28 (or (and .cse68 (= |v_#race~x$r_buff0_thd1~0_12337| |v_#race~x$r_buff0_thd1~0_12330|) (= |v_P0_#t~short29_3394| |v_P0_#t~short29_3393|) .cse69 |v_P0_#t~short29_3393|) (let ((.cse71 (not |v_P0_#t~short28_3361|)) (.cse70 (not |v_P0_#t~short28_3362|))) (and (= |v_#race~x$r_buff0_thd1~0_12330| 0) (or (and .cse68 .cse70 (= |v_P0_#t~short28_3361| |v_P0_#t~short28_3362|)) (and |v_P0_#t~short28_3362| (or (and .cse15 .cse71) (and |v_P0_#t~short28_3361| .cse17)) (= |v_#race~x$w_buff1_used~0_16359| 0))) (or (and .cse72 .cse71) (and |v_P0_#t~short28_3361| |v_P0_#t~short29_3394|)) (or (and .cse6 |v_P0_#t~short28_3362|) (and .cse70 .cse5)) .cse67))) (or (and |v_P0_#t~short29_3394| |v_P0_#t~short31_3340|) (and .cse54 .cse72)))) (and .cse68 .cse29 .cse58 .cse65 (= |v_P0_#t~ite34_2715| |old(P0Thread1of1ForFork2_#t~ite34)|) .cse57 .cse66 .cse69 .cse62 (= |old(P0Thread1of1ForFork2_#t~short29)| |v_P0_#t~short29_3394|) (= |v_#race~x$r_buff0_thd1~0_12337| |v_#race~x$r_buff0_thd1~0_12318|) (= |old(P0Thread1of1ForFork2_#t~short31)| |v_P0_#t~short31_3341|) (= |v_#race~x$w_buff0_used~0_17031| |v_#race~x$w_buff0_used~0_17030|) (= ~x$w_buff1~0 |old(~x$w_buff1~0)|)))) (let ((.cse74 (= |old(#race~x$r_buff1_thd1~0)| |v_#race~x$r_buff1_thd1~0_7318|))) (or (let ((.cse73 (not |v_P0_#t~short12_3209|)) (.cse75 (not |v_P0_#t~short12_3210|))) (and (= |v_#race~x$r_buff0_thd1~0_12336| 0) (or (and .cse6 |v_P0_#t~short12_3209|) (and .cse73 .cse5)) (or (and .cse74 .cse73 (= |v_P0_#t~short12_3209| |v_P0_#t~short12_3210|)) (and (or (and .cse75 .cse10) (and .cse9 |v_P0_#t~short12_3210|)) |v_P0_#t~short12_3209| (= |v_#race~x$r_buff1_thd1~0_7318| 0))) (or (and .cse75 .cse76) (and |v_P0_#t~short12_3210| |v_P0_#t~short13_3273|)) .cse77)) (and (= |v_#race~x$r_buff0_thd1~0_12336| |v_#race~x$r_buff0_thd1~0_12332|) .cse74 |v_P0_#t~short13_3272| (= |v_P0_#t~short13_3272| |v_P0_#t~short13_3273|) (= |old(P0Thread1of1ForFork2_#t~short12)| |v_P0_#t~short12_3210|)))) (= ~__unbuffered_p0_EAX$read_delayed~0 1) (= |~#x~0.base| ~__unbuffered_p0_EAX$read_delayed_var~0.base) (= |#race~weak$$choice2~0| 0) (= (ite (= (mod |v_P0_#t~nondet5_841| 256) 0) 0 1) ~weak$$choice2~0) (= (ite (= (mod |v_P0_#t~ite52_2075| 256) 0) 0 1) ~x$w_buff1_used~0) (let ((.cse81 (= |v_P0_#t~short54_2515| |old(P0Thread1of1ForFork2_#t~short54)|)) (.cse83 (= |v_#race~x$w_buff1_used~0_16366| |v_#race~x$w_buff1_used~0_16362|)) (.cse82 (= |v_P0_#t~short56_2420| |old(P0Thread1of1ForFork2_#t~short56)|)) (.cse80 (= |v_#race~x$r_buff1_thd1~0_7317| |v_#race~x$r_buff1_thd1~0_7315|)) (.cse78 (= |v_P0_#t~ite59_1795| |old(P0Thread1of1ForFork2_#t~ite59)|)) (.cse84 (= |v_P0_#t~short58_2241| |old(P0Thread1of1ForFork2_#t~short58)|)) (.cse79 (= |v_#race~x$r_buff0_thd1~0_12322| 0))) (or (and .cse29 .cse78 (= |v_#race~x$w_buff0_used~0_17035| |v_#race~x$w_buff0_used~0_17034|) .cse79 (= |v_P0_#t~short55_2563| |old(P0Thread1of1ForFork2_#t~short55)|) .cse80 (= |v_P0_#t~ite61_1585| |old(~x$r_buff0_thd1~0)|) (= |v_P0_#t~short57_2471| |old(P0Thread1of1ForFork2_#t~short57)|) .cse81 (= |v_P0_#t~ite60_1785| |old(P0Thread1of1ForFork2_#t~ite60)|) .cse82 .cse83 .cse84) (let ((.cse90 (not |v_P0_#t~short55_2564|)) (.cse89 (not |v_P0_#t~short55_2563|)) (.cse93 (not |v_P0_#t~short57_2470|)) (.cse96 (not |v_P0_#t~short57_2471|))) (and (or (and |v_P0_#t~short55_2564| (= |v_P0_#t~short55_2563| |v_P0_#t~short55_2564|) .cse81 (= |v_#race~x$r_buff0_thd1~0_12335| |v_#race~x$r_buff0_thd1~0_12331|) .cse83) (let ((.cse86 (not |v_P0_#t~short54_2515|)) (.cse85 (not |v_P0_#t~short54_2516|))) (and (or (and .cse85 .cse83 (= |v_P0_#t~short54_2515| |v_P0_#t~short54_2516|)) (and |v_P0_#t~short54_2516| (= |v_#race~x$w_buff1_used~0_16362| 0) (or (and .cse86 .cse87) (and |v_P0_#t~short54_2515| .cse88)))) (or (and .cse89 .cse86) (and |v_P0_#t~short54_2515| |v_P0_#t~short55_2563|)) (= |v_#race~x$r_buff0_thd1~0_12335| 0) .cse90 (or (and .cse85 .cse5) (and .cse6 |v_P0_#t~short54_2516|))))) (= |v_P0_#t~ite60_1785| |v_P0_#t~ite61_1585|) (or (and .cse90 .cse91) (and |v_P0_#t~short55_2564| .cse92)) (or (and |v_P0_#t~short55_2563| |v_P0_#t~short57_2470|) (and .cse89 .cse93)) (or (and |v_P0_#t~short57_2470| .cse80 .cse82 (= |v_P0_#t~short57_2470| |v_P0_#t~short57_2471|) (= |v_#race~x$r_buff0_thd1~0_12335| |v_#race~x$r_buff0_thd1~0_12328|)) (let ((.cse95 (not |v_P0_#t~short56_2419|)) (.cse94 (not |v_P0_#t~short56_2420|))) (and (or (and |v_P0_#t~short56_2419| (= |v_#race~x$r_buff1_thd1~0_7315| 0) (or (and .cse94 .cse10) (and |v_P0_#t~short56_2420| .cse9))) (and .cse80 (= |v_P0_#t~short56_2419| |v_P0_#t~short56_2420|) .cse95)) (or (and .cse6 |v_P0_#t~short56_2419|) (and .cse95 .cse5)) (or (and |v_P0_#t~short56_2420| |v_P0_#t~short57_2471|) (and .cse94 .cse96)) (= |v_#race~x$r_buff0_thd1~0_12328| 0) .cse93))) .cse28 (let ((.cse97 (= |v_#race~x$w_buff0_used~0_17035| 0))) (or (and |v_P0_#t~short57_2471| .cse78 .cse97 .cse79 (= |v_P0_#t~ite60_1785| |old(~x$r_buff0_thd1~0)|) .cse84) (let ((.cse99 (not |v_P0_#t~short58_2240|)) (.cse98 (not |v_P0_#t~short58_2241|))) (and (= |v_P0_#t~ite59_1795| |v_P0_#t~ite60_1785|) (or (and |v_P0_#t~short58_2240| (or (and .cse6 .cse98) (and |v_P0_#t~short58_2241| .cse5)) (= |v_#race~x$r_buff0_thd1~0_12316| 0)) (and (= |v_#race~x$r_buff0_thd1~0_12316| |v_#race~x$r_buff0_thd1~0_12328|) .cse99 (= |v_P0_#t~short58_2240| |v_P0_#t~short58_2241|))) .cse97 (or (and .cse99 .cse92) (and |v_P0_#t~short58_2240| .cse91)) (or (and |v_P0_#t~short58_2241| (= |v_P0_#t~ite59_1795| 0) (= |v_#race~x$r_buff0_thd1~0_12316| |v_#race~x$r_buff0_thd1~0_12322|)) (and .cse79 (= |v_P0_#t~ite59_1795| |old(~x$r_buff0_thd1~0)|) .cse98)) .cse96)))))))) (or (and |v_P0_#t~short11_3238| |v_P0_#t~short13_3272|) (and .cse100 .cse77)) (let ((.cse101 (= |old(#race~x$w_buff1_used~0)| |v_#race~x$w_buff1_used~0_16363|))) (or (and (= |old(#race~x$r_buff0_thd1~0)| |v_#race~x$r_buff0_thd1~0_12332|) (= |v_P0_#t~short11_3238| |v_P0_#t~short11_3237|) .cse101 |v_P0_#t~short11_3237| (= |old(P0Thread1of1ForFork2_#t~short10)| |v_P0_#t~short10_3165|)) (let ((.cse102 (not |v_P0_#t~short10_3166|)) (.cse103 (not |v_P0_#t~short10_3165|))) (and (or (and .cse6 |v_P0_#t~short10_3166|) (and .cse102 .cse5)) (or (and |v_P0_#t~short10_3165| |v_P0_#t~short11_3238|) (and .cse103 .cse100)) (= |v_#race~x$r_buff0_thd1~0_12332| 0) (or (and .cse101 .cse102 (= |v_P0_#t~short10_3165| |v_P0_#t~short10_3166|)) (and |v_P0_#t~short10_3166| (or (and .cse15 .cse103) (and |v_P0_#t~short10_3165| .cse17)) (= |v_#race~x$w_buff1_used~0_16363| 0))) .cse49)))) (or (= |v_P0_#t~nondet3_643| 1) (= |v_P0_#t~nondet3_643| 0)) (= (ite (= (mod |v_P0_#t~ite61_1585| 256) 0) 0 1) ~x$r_buff0_thd1~0) (= .cse104 ~x$mem_tmp~0) (= (ite (= (mod |v_P0_#t~nondet3_643| 256) 0) 0 1) ~weak$$choice0~0) (= ~x$flush_delayed~0 0) (= .cse105 (select .cse106 .cse107)) (= (store |v_#race_10318| |~#x~0.base| (store (store (store (store .cse108 |~#x~0.offset| .cse105) .cse109 .cse105) .cse107 .cse105) .cse52 .cse105)) |v_#race_10317|) (let ((.cse110 (= (mod (ite .cse28 0 1) 256) 0)) (.cse111 (= |v_#race_10319| (store |v_#race_10317| |~#x~0.base| (store (store (store (store .cse106 |~#x~0.offset| 0) .cse109 0) .cse107 0) .cse52 0))))) (or (and (not .cse110) (= |v_P0_#t~ite76_349| ~x$mem_tmp~0) .cse111 (= |#race~x$mem_tmp~0| 0) (= |v_P0_#t~mem75_560| |old(P0Thread1of1ForFork2_#t~mem75)|)) (and (= (select .cse112 .cse109) 0) (= (select .cse112 .cse107) 0) (= |v_P0_#t~mem75_560| |v_P0_#t~ite76_349|) (= (select .cse112 |~#x~0.offset|) 0) (= |#race~x$mem_tmp~0| |v_P0_#t~nondet9_1732|) .cse110 (= (select .cse112 .cse52) 0) .cse111 (= |v_P0_#t~mem75_560| ~__unbuffered_p0_EAX~0)))) (= (select .cse106 |~#x~0.offset|) .cse105) (= |#race| (store |v_#race_10319| |~#x~0.base| (store (store (store (store .cse112 |~#x~0.offset| .cse50) .cse109 .cse50) .cse107 .cse50) .cse52 .cse50))) (= (select .cse51 .cse107) .cse50) (let ((.cse120 (= |v_P0_#t~short50_2617| |old(P0Thread1of1ForFork2_#t~short50)|)) (.cse113 (= |old(P0Thread1of1ForFork2_#t~short46)| |v_P0_#t~short46_2884|)) (.cse122 (= |v_#race~x$w_buff1_used~0_16364| 0)) (.cse126 (= |v_#race~x$r_buff1_thd1~0_7317| |v_#race~x$r_buff1_thd1~0_7322|)) (.cse127 (= |old(P0Thread1of1ForFork2_#t~short48)| |v_P0_#t~short48_2795|))) (or (let ((.cse117 (not |v_P0_#t~short47_2924|)) (.cse118 (not |v_P0_#t~short47_2923|)) (.cse124 (not |v_P0_#t~short49_2839|)) (.cse119 (not |v_P0_#t~short49_2838|))) (and (let ((.cse114 (= |v_#race~x$w_buff1_used~0_16365| |v_#race~x$w_buff1_used~0_16360|))) (or (and .cse113 .cse114 (= |v_#race~x$r_buff0_thd1~0_12319| |v_#race~x$r_buff0_thd1~0_12317|) (= |v_P0_#t~short47_2923| |v_P0_#t~short47_2924|) |v_P0_#t~short47_2923|) (let ((.cse116 (not |v_P0_#t~short46_2884|)) (.cse115 (not |v_P0_#t~short46_2883|))) (and (or (and .cse114 .cse115 (= |v_P0_#t~short46_2884| |v_P0_#t~short46_2883|)) (and (or (and .cse17 |v_P0_#t~short46_2884|) (and .cse15 .cse116)) (= |v_#race~x$w_buff1_used~0_16365| 0) |v_P0_#t~short46_2883|)) (= |v_#race~x$r_buff0_thd1~0_12317| 0) (or (and |v_P0_#t~short46_2884| |v_P0_#t~short47_2924|) (and .cse117 .cse116)) (or (and .cse6 |v_P0_#t~short46_2883|) (and .cse115 .cse5)) .cse118)))) (or (and .cse119 .cse117) (and |v_P0_#t~short47_2924| |v_P0_#t~short49_2838|)) .cse28 (= |v_P0_#t~ite51_2249| |v_P0_#t~ite52_2075|) (or (and .cse92 |v_P0_#t~short47_2923|) (and .cse91 .cse118)) (let ((.cse121 (= |v_#race~x$w_buff0_used~0_17034| 0)) (.cse123 (= |v_#race~x$r_buff0_thd1~0_12331| |v_#race~x$r_buff0_thd1~0_12320|))) (or (and .cse120 .cse121 .cse122 .cse123 (= |v_P0_#t~ite51_2249| |old(~x$w_buff1_used~0)|) |v_P0_#t~short49_2839|) (let ((.cse125 (not |v_P0_#t~short50_2618|))) (and .cse124 .cse121 (= |v_P0_#t~ite51_2249| 0) (or (and |v_P0_#t~short50_2618| .cse91) (and .cse125 .cse92)) (or (and |v_P0_#t~short50_2618| (= |v_#race~x$r_buff0_thd1~0_12331| 0) (or (and .cse6 (not |v_P0_#t~short50_2617|)) (and |v_P0_#t~short50_2617| .cse5))) (and .cse125 .cse123 (= |v_P0_#t~short50_2618| |v_P0_#t~short50_2617|))) (= |v_#race~x$w_buff1_used~0_16365| |v_#race~x$w_buff1_used~0_16364|))))) (or (and (= |v_P0_#t~short49_2838| |v_P0_#t~short49_2839|) (= |v_#race~x$r_buff0_thd1~0_12317| |v_#race~x$r_buff0_thd1~0_12320|) .cse126 .cse127 |v_P0_#t~short49_2838|) (let ((.cse129 (not |v_P0_#t~short48_2795|)) (.cse128 (not |v_P0_#t~short48_2796|))) (and (or (and .cse128 (= |v_P0_#t~short48_2796| |v_P0_#t~short48_2795|) .cse126) (and (or (and .cse9 |v_P0_#t~short48_2795|) (and .cse129 .cse10)) (= |v_#race~x$r_buff1_thd1~0_7317| 0) |v_P0_#t~short48_2796|)) (or (and |v_P0_#t~short48_2795| |v_P0_#t~short49_2839|) (and .cse129 .cse124)) .cse119 (or (and .cse6 |v_P0_#t~short48_2796|) (and .cse128 .cse5)) (= |v_#race~x$r_buff0_thd1~0_12320| 0)))))) (and (= |v_P0_#t~ite52_2075| |old(~x$w_buff1_used~0)|) .cse120 .cse29 .cse113 (= |v_#race~x$r_buff0_thd1~0_12331| |v_#race~x$r_buff0_thd1~0_12319|) .cse122 (= |v_P0_#t~ite51_2249| |old(P0Thread1of1ForFork2_#t~ite51)|) .cse126 .cse127 (= |old(P0Thread1of1ForFork2_#t~short49)| |v_P0_#t~short49_2839|) (= |v_#race~x$w_buff0_used~0_17034| |v_#race~x$w_buff0_used~0_17032|) (= |old(P0Thread1of1ForFork2_#t~short47)| |v_P0_#t~short47_2924|)))) (= (select .cse106 .cse52) .cse105) (let ((.cse148 (= |v_P0_#t~short65_1831| |old(P0Thread1of1ForFork2_#t~short65)|)) (.cse141 (= |v_P0_#t~short63_1944| |old(P0Thread1of1ForFork2_#t~short63)|)) (.cse139 (= |v_#race~x$r_buff1_thd1~0_7321| 0)) (.cse140 (= |v_P0_#t~short67_1618| |old(P0Thread1of1ForFork2_#t~short67)|)) (.cse142 (= |#race~x$w_buff1_used~0| |v_#race~x$w_buff1_used~0_16362|))) (or (let ((.cse135 (= (mod ~x$r_buff0_thd1~0 256) 0))) (let ((.cse130 (not |v_P0_#t~short64_1995|)) (.cse131 (not |v_P0_#t~short64_1996|)) (.cse132 (not |v_P0_#t~short66_1886|)) (.cse134 (not .cse135)) (.cse133 (not |v_P0_#t~short66_1887|))) (and (or (and .cse130 .cse91) (and |v_P0_#t~short64_1995| .cse92)) (or (and |v_P0_#t~short64_1996| |v_P0_#t~short66_1886|) (and .cse131 .cse132)) (let ((.cse138 (= |#race~x$w_buff0_used~0| 0)) (.cse136 (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12326|))) (or (let ((.cse137 (not |v_P0_#t~short67_1617|))) (and .cse133 (or (and (or (and .cse134 |v_P0_#t~short67_1618|) (and (not |v_P0_#t~short67_1618|) .cse135)) |v_P0_#t~short67_1617| (= |#race~x$r_buff0_thd1~0| 0)) (and (= |v_P0_#t~short67_1617| |v_P0_#t~short67_1618|) .cse136 .cse137)) (= |v_P0_#t~ite68_1235| 0) .cse138 (or (and |v_P0_#t~short67_1617| .cse91) (and .cse92 .cse137)) (= |v_#race~x$r_buff1_thd1~0_7319| |v_#race~x$r_buff1_thd1~0_7321|))) (and |v_P0_#t~short66_1887| .cse139 (= |v_P0_#t~ite68_1235| |old(~x$r_buff1_thd1~0)|) .cse138 .cse136 .cse140))) (or (and .cse141 |v_P0_#t~short64_1995| (= |v_#race~x$r_buff0_thd1~0_12327| |v_#race~x$r_buff0_thd1~0_12321|) .cse142 (= |v_P0_#t~short64_1995| |v_P0_#t~short64_1996|)) (let ((.cse144 (not |v_P0_#t~short63_1944|)) (.cse143 (not |v_P0_#t~short63_1943|))) (and (or (and .cse134 .cse143) (and |v_P0_#t~short63_1943| .cse135)) .cse130 (or (and .cse144 .cse131) (and |v_P0_#t~short63_1944| |v_P0_#t~short64_1996|)) (or (and (= |#race~x$w_buff1_used~0| 0) |v_P0_#t~short63_1943| (or (and .cse88 |v_P0_#t~short63_1944|) (and .cse144 .cse87))) (and .cse142 (= |v_P0_#t~short63_1943| |v_P0_#t~short63_1944|) .cse143)) (= |v_#race~x$r_buff0_thd1~0_12321| 0)))) .cse28 (= |v_P0_#t~ite68_1235| |v_P0_#t~ite69_1013|) (let ((.cse146 (= |v_#race~x$r_buff1_thd1~0_7319| |v_#race~x$r_buff1_thd1~0_7315|))) (or (let ((.cse145 (not |v_P0_#t~short65_1832|)) (.cse147 (not |v_P0_#t~short65_1831|))) (and (or (and .cse145 .cse146 (= |v_P0_#t~short65_1831| |v_P0_#t~short65_1832|)) (and (= |v_#race~x$r_buff1_thd1~0_7319| 0) (or (and .cse9 |v_P0_#t~short65_1831|) (and .cse147 .cse10)) |v_P0_#t~short65_1832|)) .cse132 (= |v_#race~x$r_buff0_thd1~0_12326| 0) (or (and |v_P0_#t~short65_1832| .cse135) (and .cse134 .cse145)) (or (and |v_P0_#t~short65_1831| |v_P0_#t~short66_1887|) (and .cse133 .cse147)))) (and .cse148 (= |v_P0_#t~short66_1887| |v_P0_#t~short66_1886|) |v_P0_#t~short66_1886| .cse146 (= |v_#race~x$r_buff0_thd1~0_12326| |v_#race~x$r_buff0_thd1~0_12321|))))))) (and .cse29 .cse148 .cse141 (= |v_P0_#t~ite68_1235| |old(P0Thread1of1ForFork2_#t~ite68)|) (= |v_P0_#t~short64_1996| |old(P0Thread1of1ForFork2_#t~short64)|) .cse139 (= |v_#race~x$w_buff0_used~0_17035| |#race~x$w_buff0_used~0|) (= |v_P0_#t~ite69_1013| |old(~x$r_buff1_thd1~0)|) .cse140 (= |#race~x$r_buff0_thd1~0| |v_#race~x$r_buff0_thd1~0_12327|) .cse142 (= |v_P0_#t~short66_1887| |old(P0Thread1of1ForFork2_#t~short66)|)))) (let ((.cse153 (= |v_#race~x$w_buff0~0_7139| |old(#race~x$w_buff0~0)|)) (.cse152 (= |v_#race~x$w_buff1~0_7623| |old(#race~x$w_buff1~0)|)) (.cse149 (= |v_#race_10318| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse109 0) .cse107 0) .cse52 0)))) (.cse151 (= |v_#race~x$w_buff0_used~0_17033| 0)) (.cse155 (= |v_#race~x$r_buff0_thd1~0_12336| |v_#race~x$r_buff0_thd1~0_12325|))) (or (let ((.cse150 (not |v_P0_#t~short15_3139|)) (.cse154 (not |v_P0_#t~short15_3138|))) (and (= |v_P0_#t~mem14_2750| |old(P0Thread1of1ForFork2_#t~mem14)|) (= |v_P0_#t~ite16_2725| ~__unbuffered_p0_EAX~0) .cse149 (or (and .cse150 .cse11) (and |v_P0_#t~short15_3139| .cse13)) .cse151 (or (and (= |old(~x$w_buff0~0)| |v_P0_#t~ite16_2725|) .cse152 |v_P0_#t~short15_3138| (= |v_#race~x$w_buff0~0_7139| 0)) (and .cse153 (= |v_#race~x$w_buff1~0_7623| 0) (= |v_P0_#t~ite16_2725| |old(~x$w_buff1~0)|) .cse154)) (or (and .cse150 .cse155 (= |v_P0_#t~short15_3139| |v_P0_#t~short15_3138|)) (and |v_P0_#t~short15_3139| (= |v_#race~x$r_buff0_thd1~0_12325| 0) (or (and |v_P0_#t~short15_3138| .cse5) (and .cse6 .cse154)))) .cse76)) (and (= ~__unbuffered_p0_EAX~0 |v_P0_#t~mem14_2750|) (= (select .cse108 |~#x~0.offset|) 0) .cse153 .cse152 |v_P0_#t~short13_3273| (= (select .cse108 .cse52) 0) .cse149 (= (select .cse108 .cse107) 0) (= .cse104 |v_P0_#t~mem14_2750|) .cse151 (= |old(P0Thread1of1ForFork2_#t~short15)| |v_P0_#t~short15_3138|) (= (select .cse108 .cse109) 0) .cse155 (= |v_P0_#t~ite16_2725| |old(P0Thread1of1ForFork2_#t~ite16)|)))) (= .cse50 (select .cse51 |~#x~0.offset|))))) +//@ semantics [294] {#race~y~0} false +//@ semantics [295] {#race~y~0,~__unbuffered_p0_EBX~0,P0Thread1of1ForFork2_#t~nondet79,#race~__unbuffered_p0_EBX~0} false +//@ semantics [296] {#race~y~0,~__unbuffered_p0_EBX~0,P0Thread1of1ForFork2_#t~nondet79,#race~__unbuffered_p0_EBX~0} (and (= |#race~y~0| 0) (= ~__unbuffered_p0_EBX~0 ~y~0)) +//@ semantics [297] {} true +//@ semantics [298] {#race~__unbuffered_cnt~0} false +//@ semantics [299] {~__unbuffered_cnt~0,P0Thread1of1ForFork2_#t~nondet80,#race~__unbuffered_cnt~0} false +//@ semantics [300] {~__unbuffered_cnt~0,P0Thread1of1ForFork2_#t~nondet80,#race~__unbuffered_cnt~0} (= (+ |old(~__unbuffered_cnt~0)| 1) ~__unbuffered_cnt~0) +//@ semantics [301] {P0Thread1of1ForFork2_#res.offset,P0Thread1of1ForFork2_#res.base} (and (= |P0Thread1of1ForFork2_#res.offset| 0) (= |P0Thread1of1ForFork2_#res.base| 0)) +//@ semantics [302] {} true +//@ semantics [303] {P1Thread1of1ForFork0_~arg.offset,P1Thread1of1ForFork0_~arg.base} (and (= P1Thread1of1ForFork0_~arg.offset |P1Thread1of1ForFork0_#in~arg.offset|) (= P1Thread1of1ForFork0_~arg.base |P1Thread1of1ForFork0_#in~arg.base|)) +//@ semantics [304] {#race~y~0,P1Thread1of1ForFork0_#t~nondet81,~y~0} false +//@ semantics [305] {#race~y~0,P1Thread1of1ForFork0_#t~nondet81,~y~0} (= ~y~0 1) +//@ semantics [306] {#race~y~0} false +//@ semantics [307] {#race~y~0,~__unbuffered_p1_EAX~0,#race~__unbuffered_p1_EAX~0,P1Thread1of1ForFork0_#t~nondet82} false +//@ semantics [308] {#race~y~0,~__unbuffered_p1_EAX~0,#race~__unbuffered_p1_EAX~0,P1Thread1of1ForFork0_#t~nondet82} (and (= ~y~0 ~__unbuffered_p1_EAX~0) (= |#race~y~0| 0)) +//@ semantics [309] {~weak$$choice0~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84} false +//@ semantics [310] {~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [311] {~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [312] {~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~nondet87,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [313] {#race,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~nondet87,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} [(|v_P1_#t~nondet83_619| Int) (|v_P1_#t~nondet85_813| Int)] (let ((.cse0 (+ |~#x~0.offset| 1)) (.cse1 (+ 2 |~#x~0.offset|)) (.cse2 (+ 3 |~#x~0.offset|))) (and (= (ite (= (mod |v_P1_#t~nondet85_813| 256) 0) 0 1) ~weak$$choice2~0) (= |P1Thread1of1ForFork0_#t~mem88| (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|)) (or (= |v_P1_#t~nondet83_619| 1) (= |v_P1_#t~nondet83_619| 0)) (= ~weak$$choice0~0 (ite (= (mod |v_P1_#t~nondet83_619| 256) 0) 0 1)) (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse0 0) .cse1 0) .cse2 0)) |#race|) (= 0 |#race~weak$$choice2~0|) (or (= |v_P1_#t~nondet85_813| 1) (= |v_P1_#t~nondet85_813| 0)) (let ((.cse3 (select |#race| |~#x~0.base|))) (or (not (= (select .cse3 |~#x~0.offset|) 0)) (not (= (select .cse3 .cse0) 0)) (not (= (select .cse3 .cse1) 0)) (not (= (select .cse3 .cse2) 0)))) (= ~x$flush_delayed~0 (ite (= (mod ~weak$$choice2~0 256) 0) 0 1)))) +//@ semantics [314] {#race,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$mem_tmp~0,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [315] {#race,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$mem_tmp~0,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [316] {#race,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$mem_tmp~0,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [317] {#race,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$mem_tmp~0,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~short90,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [318] {#race,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$mem_tmp~0,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short93,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~short90,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [319] {#race,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$mem_tmp~0,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short93,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,#race~x$r_buff1_thd2~0,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~short90,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~nondet85,P1Thread1of1ForFork0_#t~short92} false +//@ semantics [320] {#race,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$mem_tmp~0,~x$mem_tmp~0,#race~x$flush_delayed~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short93,#race~x$w_buff0_used~0,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,#race~x$r_buff1_thd2~0,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~short90,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~nondet85,P1Thread1of1ForFork0_#t~short92} false +//@ semantics [321] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [322] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [323] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,#race~x$w_buff0~0,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [324] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,~weak$$choice0~0,#race~weak$$choice2~0,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} [(|v_P1_#t~short92_3129| Bool) (|v_P1_#t~short90_3085| Bool) (|v_P1_#t~nondet85_815| Int) (|v_P1_#t~short91_3153| Bool) (|v_P1_#t~nondet83_621| Int) (|v_#race~x$r_buff0_thd2~0_11934| Int) (|v_P1_#t~short93_3188| Bool)] (let ((.cse10 (= (mod ~x$r_buff0_thd2~0 256) 0))) (let ((.cse2 (+ |~#x~0.offset| 1)) (.cse3 (+ 2 |~#x~0.offset|)) (.cse1 (+ 3 |~#x~0.offset|)) (.cse4 (not |v_P1_#t~short93_3188|)) (.cse5 (not |P1Thread1of1ForFork0_#t~short91|)) (.cse8 (not .cse10)) (.cse15 (not |v_P1_#t~short91_3153|)) (.cse12 (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|))) (and (let ((.cse0 (select |#race| |~#x~0.base|))) (or (not (= (select .cse0 |~#x~0.offset|) 0)) (not (= (select .cse0 .cse1) 0)) (not (= (select .cse0 .cse2) 0)) (not (= (select .cse0 .cse3) 0)))) (or (= |v_P1_#t~nondet85_815| 1) (= |v_P1_#t~nondet85_815| 0)) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse2 0) .cse3 0) .cse1 0))) (or (and |v_P1_#t~short93_3188| |P1Thread1of1ForFork0_#t~short91|) (and .cse4 .cse5)) (let ((.cse6 (= |#race~x$r_buff1_thd2~0| |old(#race~x$r_buff1_thd2~0)|))) (or (and (= |#race~x$r_buff0_thd2~0| |v_#race~x$r_buff0_thd2~0_11934|) (= |old(P1Thread1of1ForFork0_#t~short92)| |P1Thread1of1ForFork0_#t~short92|) |v_P1_#t~short93_3188| (= |v_P1_#t~short93_3188| |P1Thread1of1ForFork0_#t~short93|) .cse6) (let ((.cse7 (not |P1Thread1of1ForFork0_#t~short92|)) (.cse9 (not |v_P1_#t~short92_3129|))) (and (or (and .cse7 (not |P1Thread1of1ForFork0_#t~short93|)) (and |P1Thread1of1ForFork0_#t~short93| |P1Thread1of1ForFork0_#t~short92|)) .cse4 (or (and .cse8 .cse9) (and |v_P1_#t~short92_3129| .cse10)) (= |#race~x$r_buff0_thd2~0| 0) (or (and |v_P1_#t~short92_3129| (let ((.cse11 (= (mod ~x$r_buff1_thd2~0 256) 0))) (or (and |P1Thread1of1ForFork0_#t~short92| .cse11) (and (not .cse11) .cse7))) (= |#race~x$r_buff1_thd2~0| 0)) (and (= |v_P1_#t~short92_3129| |P1Thread1of1ForFork0_#t~short92|) .cse6 .cse9)))))) |P1Thread1of1ForFork0_#t~short93| (or (= |v_P1_#t~nondet83_621| 1) (= |v_P1_#t~nondet83_621| 0)) (= .cse12 ~x$mem_tmp~0) (= 0 |#race~weak$$choice2~0|) (= (ite (= (mod ~weak$$choice2~0 256) 0) 0 1) ~x$flush_delayed~0) (= (ite (= (mod |v_P1_#t~nondet85_815| 256) 0) 0 1) ~weak$$choice2~0) (let ((.cse13 (= |old(#race~x$w_buff1_used~0)| |#race~x$w_buff1_used~0|))) (or (and (= |v_P1_#t~short91_3153| |P1Thread1of1ForFork0_#t~short91|) (= |old(#race~x$r_buff0_thd2~0)| |v_#race~x$r_buff0_thd2~0_11934|) |v_P1_#t~short91_3153| .cse13 (= |old(P1Thread1of1ForFork0_#t~short90)| |P1Thread1of1ForFork0_#t~short90|)) (let ((.cse14 (not |P1Thread1of1ForFork0_#t~short90|)) (.cse16 (not |v_P1_#t~short90_3085|))) (and (or (and |P1Thread1of1ForFork0_#t~short91| |P1Thread1of1ForFork0_#t~short90|) (and .cse5 .cse14)) (= |v_#race~x$r_buff0_thd2~0_11934| 0) .cse15 (or (and .cse8 .cse16) (and |v_P1_#t~short90_3085| .cse10)) (or (and (= |#race~x$w_buff1_used~0| 0) |v_P1_#t~short90_3085| (let ((.cse17 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and (not .cse17) .cse14) (and |P1Thread1of1ForFork0_#t~short90| .cse17)))) (and (= |v_P1_#t~short90_3085| |P1Thread1of1ForFork0_#t~short90|) .cse13 .cse16)))))) (let ((.cse18 (= (mod ~x$w_buff0_used~0 256) 0))) (or (and |v_P1_#t~short91_3153| .cse18) (and .cse15 (not .cse18)))) (= (ite (= (mod |v_P1_#t~nondet83_621| 256) 0) 0 1) ~weak$$choice0~0) (= |#race~x$w_buff0_used~0| 0) (= .cse12 |P1Thread1of1ForFork0_#t~mem94|)))) +//@ semantics [325] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} [(|v_P1_#t~short95_3060| Bool) (|v_P1_#t~short93_3190| Bool) (|v_#race~x$r_buff0_thd2~0_11937| Int) (|v_P1_#t~nondet85_817| Int) (|v_P1_#t~nondet83_623| Int) (|v_P1_#t~short92_3131| Bool) (|v_P1_#t~short91_3155| Bool) (|v_#race_10323| (Array Int (Array Int Int))) (|v_#race~x$r_buff0_thd2~0_11936| Int) (|v_P1_#t~short90_3087| Bool)] (let ((.cse21 (= (mod ~x$r_buff0_thd2~0 256) 0)) (.cse9 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse10 (select |old(#memory_int)| |~#x~0.base|))) (let ((.cse0 (select .cse10 |~#x~0.offset|)) (.cse11 (select |v_#race_10323| |~#x~0.base|)) (.cse8 (not .cse9)) (.cse2 (+ |~#x~0.offset| 1)) (.cse4 (+ 2 |~#x~0.offset|)) (.cse3 (+ 3 |~#x~0.offset|)) (.cse7 (not |v_P1_#t~short91_3155|)) (.cse6 (not |P1Thread1of1ForFork0_#t~short91|)) (.cse5 (not |v_P1_#t~short93_3190|)) (.cse20 (not .cse21)) (.cse17 (not |P1Thread1of1ForFork0_#t~short93|))) (and (= ~x$flush_delayed~0 (ite (= (mod ~weak$$choice2~0 256) 0) 0 1)) (= .cse0 ~x$mem_tmp~0) (let ((.cse1 (select |#race| |~#x~0.base|))) (or (not (= (select .cse1 .cse2) |P1Thread1of1ForFork0_#t~nondet98|)) (not (= |P1Thread1of1ForFork0_#t~nondet98| (select .cse1 .cse3))) (not (= |P1Thread1of1ForFork0_#t~nondet98| (select .cse1 .cse4))) (not (= (select .cse1 |~#x~0.offset|) |P1Thread1of1ForFork0_#t~nondet98|)))) (or (and |v_P1_#t~short93_3190| |P1Thread1of1ForFork0_#t~short91|) (and .cse5 .cse6)) (= (ite (= (mod |v_P1_#t~nondet83_623| 256) 0) 0 1) ~weak$$choice0~0) (= 0 |#race~weak$$choice2~0|) (or (and .cse7 .cse8) (and |v_P1_#t~short91_3155| .cse9)) (or (= |v_P1_#t~nondet85_817| 1) (= |v_P1_#t~nondet85_817| 0)) (= (store |old(#memory_int)| |~#x~0.base| (store .cse10 |~#x~0.offset| |P1Thread1of1ForFork0_#t~ite97|)) |#memory_int|) (= |#race| (store |v_#race_10323| |~#x~0.base| (store (store (store (store .cse11 |~#x~0.offset| |P1Thread1of1ForFork0_#t~nondet98|) .cse2 |P1Thread1of1ForFork0_#t~nondet98|) .cse4 |P1Thread1of1ForFork0_#t~nondet98|) .cse3 |P1Thread1of1ForFork0_#t~nondet98|))) (= (ite (= (mod |v_P1_#t~nondet85_817| 256) 0) 0 1) ~weak$$choice2~0) (or (= |v_P1_#t~nondet83_623| 0) (= |v_P1_#t~nondet83_623| 1)) (let ((.cse12 (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse2 0) .cse4 0) .cse3 0)) |v_#race_10323|)) (.cse13 (= |old(#race~x$w_buff1~0)| |#race~x$w_buff1~0|)) (.cse15 (= |old(#race~x$w_buff0~0)| |#race~x$w_buff0~0|)) (.cse14 (= |#race~x$r_buff0_thd2~0| |v_#race~x$r_buff0_thd2~0_11936|)) (.cse16 (= |#race~x$w_buff0_used~0| 0))) (or (and .cse12 (= (select .cse11 .cse2) 0) (= |P1Thread1of1ForFork0_#t~mem94| |P1Thread1of1ForFork0_#t~ite97|) (= (select .cse11 |~#x~0.offset|) 0) (= |P1Thread1of1ForFork0_#t~ite96| |old(P1Thread1of1ForFork0_#t~ite96)|) (= (select .cse11 .cse4) 0) .cse13 (= .cse0 |P1Thread1of1ForFork0_#t~mem94|) .cse14 |P1Thread1of1ForFork0_#t~short93| .cse15 (= (select .cse11 .cse3) 0) .cse16 (= |old(P1Thread1of1ForFork0_#t~short95)| |P1Thread1of1ForFork0_#t~short95|)) (let ((.cse19 (not |P1Thread1of1ForFork0_#t~short95|)) (.cse18 (not |v_P1_#t~short95_3060|))) (and .cse17 .cse12 (= |P1Thread1of1ForFork0_#t~mem94| |old(P1Thread1of1ForFork0_#t~mem94)|) (or (and .cse18 .cse9) (and |v_P1_#t~short95_3060| .cse8)) (or (and |P1Thread1of1ForFork0_#t~short95| .cse13 (= |#race~x$w_buff0~0| 0) (= ~x$w_buff0~0 |P1Thread1of1ForFork0_#t~ite96|)) (and (= ~x$w_buff1~0 |P1Thread1of1ForFork0_#t~ite96|) (= |#race~x$w_buff1~0| 0) .cse15 .cse19)) (= |P1Thread1of1ForFork0_#t~ite97| |P1Thread1of1ForFork0_#t~ite96|) (or (and (or (and .cse20 |P1Thread1of1ForFork0_#t~short95|) (and .cse21 .cse19)) |v_P1_#t~short95_3060| (= |#race~x$r_buff0_thd2~0| 0)) (and (= |P1Thread1of1ForFork0_#t~short95| |v_P1_#t~short95_3060|) .cse18 .cse14)) .cse16)))) (let ((.cse25 (= |old(#race~x$w_buff1_used~0)| |#race~x$w_buff1_used~0|))) (or (let ((.cse23 (not |P1Thread1of1ForFork0_#t~short90|)) (.cse24 (not |v_P1_#t~short90_3087|))) (and .cse7 (or (and |v_P1_#t~short90_3087| (= |#race~x$w_buff1_used~0| 0) (let ((.cse22 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and (not .cse22) .cse23) (and |P1Thread1of1ForFork0_#t~short90| .cse22)))) (and (= |v_P1_#t~short90_3087| |P1Thread1of1ForFork0_#t~short90|) .cse24 .cse25)) (or (and .cse6 .cse23) (and |P1Thread1of1ForFork0_#t~short91| |P1Thread1of1ForFork0_#t~short90|)) (or (and .cse20 .cse24) (and |v_P1_#t~short90_3087| .cse21)) (= |v_#race~x$r_buff0_thd2~0_11937| 0))) (and |v_P1_#t~short91_3155| (= |old(P1Thread1of1ForFork0_#t~short90)| |P1Thread1of1ForFork0_#t~short90|) (= |v_P1_#t~short91_3155| |P1Thread1of1ForFork0_#t~short91|) (= |old(#race~x$r_buff0_thd2~0)| |v_#race~x$r_buff0_thd2~0_11937|) .cse25))) (let ((.cse26 (= |old(#race~x$r_buff1_thd2~0)| |#race~x$r_buff1_thd2~0|))) (or (and .cse26 |v_P1_#t~short93_3190| (= |old(P1Thread1of1ForFork0_#t~short92)| |P1Thread1of1ForFork0_#t~short92|) (= |v_P1_#t~short93_3190| |P1Thread1of1ForFork0_#t~short93|) (= |v_#race~x$r_buff0_thd2~0_11937| |v_#race~x$r_buff0_thd2~0_11936|)) (let ((.cse27 (not |v_P1_#t~short92_3131|)) (.cse29 (not |P1Thread1of1ForFork0_#t~short92|))) (and (= |v_#race~x$r_buff0_thd2~0_11936| 0) .cse5 (or (and .cse26 .cse27 (= |v_P1_#t~short92_3131| |P1Thread1of1ForFork0_#t~short92|)) (and |v_P1_#t~short92_3131| (= |#race~x$r_buff1_thd2~0| 0) (let ((.cse28 (= (mod ~x$r_buff1_thd2~0 256) 0))) (or (and .cse28 |P1Thread1of1ForFork0_#t~short92|) (and (not .cse28) .cse29))))) (or (and |v_P1_#t~short92_3131| .cse21) (and .cse27 .cse20)) (or (and |P1Thread1of1ForFork0_#t~short93| |P1Thread1of1ForFork0_#t~short92|) (and .cse17 .cse29))))))))) +//@ semantics [326] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [327] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$w_buff0_used~0,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [328] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [329] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [330] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [331] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [332] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$w_buff0_used~0,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [333] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [334] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [335] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [336] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [337] {~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [338] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [339] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [340] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$w_buff0_used~0,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [341] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [342] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [343] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [344] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [345] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$w_buff0_used~0,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [346] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [347] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [348] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [349] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [350] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$flush_delayed~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short92,#race,#race~x$mem_tmp~0,P1Thread1of1ForFork0_#t~mem94,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet86,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [351] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [352] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [353] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [354] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [355] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [356] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [357] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [358] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [359] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [360] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [361] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [362] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [363] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [364] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [365] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [366] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [367] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [368] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [369] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [370] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [371] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [372] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [373] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [374] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [375] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [376] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [377] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [378] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [379] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [380] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [381] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [382] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [383] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [384] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [385] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,#race~x$w_buff0~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [386] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [387] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [388] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [389] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [390] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [391] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [392] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [393] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [394] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,P1Thread1of1ForFork0_#t~short147,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [395] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [396] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [397] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$r_buff1_thd2~0,~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,P1Thread1of1ForFork0_#t~short147,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~nondet150,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [398] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$r_buff1_thd2~0,~x$w_buff1_used~0,~weak$$choice0~0,P1Thread1of1ForFork0_#t~ite105,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short110,#race,P1Thread1of1ForFork0_#t~nondet142,P1Thread1of1ForFork0_#t~mem151,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short147,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~nondet150,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet85,P1Thread1of1ForFork0_#t~short143} [(|v_#race~x$r_buff0_thd2~0_11959| Int) (|v_P1_#t~short147_1470| Bool) (|v_P1_#t~ite131_2135| Int) (|v_#race~x$r_buff0_thd2~0_11960| Int) (|v_P1_#t~short120_3029| Bool) (|v_#race~x$r_buff0_thd2~0_11961| Int) (|v_P1_#t~short119_2989| Bool) (|v_P1_#t~short129_2715| Bool) (|v_P1_#t~ite104_2727| Int) (|v_P1_#t~short128_2672| Bool) (|v_P1_#t~short128_2671| Bool) (|v_P1_#t~short120_3028| Bool) (|v_P1_#t~short129_2714| Bool) (|v_P1_#t~short126_2760| Bool) (|v_#race_10325| (Array Int (Array Int Int))) (|v_P1_#t~short118_3098| Bool) (|v_P1_#t~short118_3097| Bool) (|v_#race_10326| (Array Int (Array Int Int))) (|v_P1_#t~short92_3134| Bool) (|v_P1_#t~short92_3133| Bool) (|v_P1_#t~short147_1469| Bool) (|v_P1_#t~short99_3306| Bool) (|v_P1_#t~short130_2493| Bool) (|v_P1_#t~short99_3305| Bool) (|v_P1_#t~short130_2494| Bool) (|v_#race~x$w_buff0_used~0_17049| Int) (|v_#race~x$w_buff1_used~0_16379| Int) (|v_#race~x$w_buff0_used~0_17046| Int) (|v_#race~x$w_buff1_used~0_16377| Int) (|v_P1_#t~short143_1795| Bool) (|v_P1_#t~short127_2800| Bool) (|v_#race~x$w_buff0_used~0_17045| Int) (|v_#race~x$w_buff1_used~0_16378| Int) (|v_#race~x$w_buff0_used~0_17048| Int) (|v_#race~x$w_buff1_used~0_16375| Int) (|v_#race~x$w_buff0_used~0_17047| Int) (|v_#race~x$w_buff1_used~0_16376| Int) (|v_P1_#t~short143_1796| Bool) (|v_#race~x$w_buff0_used~0_17044| Int) (|v_P1_#t~short90_3089| Bool) (|v_#race~x$w_buff0_used~0_17043| Int) (|v_#race~x$w_buff1_used~0_16380| Int) (|v_P1_#t~short112_3090| Bool) (|v_P1_#t~nondet85_819| Int) (|v_#race~x$w_buff1_used~0_16381| Int) (|v_P1_#t~short112_3091| Bool) (|v_P1_#t~short137_2335| Bool) (|v_P1_#t~short137_2334| Bool) (|v_P1_#t~short90_3090| Bool) (|v_P1_#t~short145_1684| Bool) (|v_P1_#t~short145_1683| Bool) (|v_#race~x$r_buff0_thd2~0_11944| Int) (|v_#race~x$r_buff0_thd2~0_11945| Int) (|v_#race~x$r_buff0_thd2~0_11946| Int) (|v_#race~x$r_buff0_thd2~0_11947| Int) (|v_#race~x$r_buff0_thd2~0_11940| Int) (|v_P1_#t~ite122_2437| Int) (|v_#race~x$r_buff0_thd2~0_11941| Int) (|v_#race~x$r_buff0_thd2~0_11942| Int) (|v_#race~x$r_buff0_thd2~0_11943| Int) (|v_P1_#t~ite123_2427| Int) (|v_#race~x$r_buff0_thd2~0_11948| Int) (|v_#race~x$r_buff0_thd2~0_11949| Int) (|v_P1_#t~ite113_2637| Int) (|v_P1_#t~ite105_2715| Int) (|v_#race~x$w_buff1_used~0_16382| Int) (|v_P1_#t~ite124_2275| Int) (|v_P1_#t~ite96_2659| Int) (|v_#race~x$r_buff0_thd2~0_11950| Int) (|v_#race~x$r_buff0_thd2~0_11955| Int) (|v_#race~x$r_buff0_thd2~0_11956| Int) (|v_#race~x$r_buff0_thd2~0_11957| Int) (|v_#race~x$r_buff1_thd2~0_7090| Int) (|v_#race~x$r_buff0_thd2~0_11958| Int) (|v_#race~x$r_buff0_thd2~0_11951| Int) (|v_#race~x$r_buff0_thd2~0_11952| Int) (|v_#race~x$r_buff0_thd2~0_11953| Int) (|v_#race~x$r_buff0_thd2~0_11954| Int) (|v_#race~x$r_buff1_thd2~0_7086| Int) (|v_#race~x$r_buff1_thd2~0_7085| Int) (|v_P1_#t~short135_2428| Bool) (|v_#race~x$r_buff1_thd2~0_7088| Int) (|v_#race~x$r_buff1_thd2~0_7087| Int) (|v_P1_#t~ite97_2515| Int) (|v_#race~x$r_buff1_thd2~0_7084| Int) (|v_#race~x$r_buff1_thd2~0_7083| Int) (|v_P1_#t~short102_3290| Bool) (|v_P1_#t~short102_3291| Bool) (|v_#race~x$r_buff1_thd2~0_7089| Int) (|v_P1_#t~short135_2427| Bool) (|v_P1_#t~ite141_1459| Int) (|v_P1_#t~ite149_875| Int) (|v_P1_#t~ite140_1659| Int) (|v_P1_#t~short134_2379| Bool) (|v_P1_#t~short117_3062| Bool) (|v_P1_#t~short117_3061| Bool) (|v_P1_#t~short91_3157| Bool) (|v_P1_#t~nondet83_625| Int) (|v_P1_#t~short91_3158| Bool) (|v_P1_#t~ite139_1669| Int) (|v_P1_#t~short108_3262| Bool) (|v_P1_#t~short108_3261| Bool) (|v_P1_#t~short95_3062| Bool) (|v_P1_#t~short95_3063| Bool) (|v_P1_#t~ite132_1961| Int) (|v_P1_#t~mem94_2684| Int) (|v_#race~x$w_buff1~0_7627| Int) (|v_#race~x$w_buff1~0_7628| Int) (|v_P1_#t~ite114_2625| Int) (|v_P1_#t~short103_3165| Bool) (|v_P1_#t~short146_1738| Bool) (|v_P1_#t~short138_2105| Bool) (|v_P1_#t~short103_3164| Bool) (|v_P1_#t~short146_1739| Bool) (|v_P1_#t~short138_2104| Bool) (|v_P1_#t~short111_3240| Bool) (|v_P1_#t~short111_3241| Bool) (|v_P1_#t~short126_2759| Bool) (|v_P1_#t~short93_3192| Bool) (|v_P1_#t~short93_3193| Bool) (|v_P1_#t~short121_2847| Bool) (|v_P1_#t~short121_2846| Bool) (|v_P1_#t~short127_2799| Bool) (|v_P1_#t~short134_2380| Bool) (|v_P1_#t~ite148_1097| Int) (|v_P1_#t~short119_2990| Bool) (|v_#race~x$w_buff0~0_7144| Int) (|v_#race~x$w_buff0~0_7143| Int) (|v_P1_#t~short100_3331| Bool) (|v_P1_#t~short144_1847| Bool) (|v_P1_#t~short110_3206| Bool) (|v_P1_#t~short100_3332| Bool) (|v_P1_#t~short144_1848| Bool) (|v_P1_#t~short101_3261| Bool) (|v_P1_#t~short110_3205| Bool) (|v_P1_#t~short109_3293| Bool) (|v_P1_#t~short109_3294| Bool) (|v_P1_#t~short136_2283| Bool) (|v_P1_#t~short101_3262| Bool) (|v_P1_#t~short136_2284| Bool)] (let ((.cse69 (select |v_#race_10325| |~#x~0.base|)) (.cse60 (+ |~#x~0.offset| 1)) (.cse48 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse18 (= (mod ~weak$$choice2~0 256) 0)) (.cse3 (= (mod |old(~x$r_buff1_thd2~0)| 256) 0)) (.cse13 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse24 (= (mod ~x$w_buff1_used~0 256) 0)) (.cse28 (select |old(#memory_int)| |~#x~0.base|)) (.cse0 (= (mod |old(~x$r_buff0_thd2~0)| 256) 0)) (.cse41 (= (mod |old(~x$w_buff1_used~0)| 256) 0))) (let ((.cse42 (not .cse41)) (.cse65 (not |v_P1_#t~short93_3192|)) (.cse2 (not .cse0)) (.cse62 (select .cse28 |~#x~0.offset|)) (.cse125 (select |v_#race_10326| |~#x~0.base|)) (.cse23 (not .cse24)) (.cse12 (not .cse13)) (.cse5 (not .cse3)) (.cse27 (not .cse18)) (.cse53 (not |v_P1_#t~short91_3158|)) (.cse47 (not .cse48)) (.cse68 (select .cse69 .cse60)) (.cse61 (+ 2 |~#x~0.offset|)) (.cse59 (+ 3 |~#x~0.offset|)) (.cse55 (not |v_P1_#t~short91_3157|)) (.cse64 (not |v_P1_#t~short93_3193|))) (and (let ((.cse16 (= |v_P1_#t~short138_2104| |old(P1Thread1of1ForFork0_#t~short138)|)) (.cse9 (= |v_P1_#t~short136_2284| |old(P1Thread1of1ForFork0_#t~short136)|)) (.cse15 (= |v_#race~x$r_buff0_thd2~0_11957| 0)) (.cse19 (= |v_P1_#t~short134_2380| |old(P1Thread1of1ForFork0_#t~short134)|)) (.cse17 (= |old(P1Thread1of1ForFork0_#t~ite139)| |v_P1_#t~ite139_1669|)) (.cse20 (= |v_#race~x$w_buff1_used~0_16381| |v_#race~x$w_buff1_used~0_16382|)) (.cse6 (= |v_#race~x$r_buff1_thd2~0_7089| |v_#race~x$r_buff1_thd2~0_7084|))) (or (let ((.cse7 (not |v_P1_#t~short137_2334|)) (.cse25 (not |v_P1_#t~short135_2428|)) (.cse26 (not |v_P1_#t~short135_2427|)) (.cse8 (not |v_P1_#t~short137_2335|))) (and (or (let ((.cse1 (not |v_P1_#t~short136_2283|)) (.cse4 (not |v_P1_#t~short136_2284|))) (and (or (and |v_P1_#t~short136_2283| .cse0) (and .cse1 .cse2)) (= |v_#race~x$r_buff0_thd2~0_11961| 0) (or (and (= |v_#race~x$r_buff1_thd2~0_7084| 0) |v_P1_#t~short136_2283| (or (and |v_P1_#t~short136_2284| .cse3) (and .cse4 .cse5))) (and (= |v_P1_#t~short136_2283| |v_P1_#t~short136_2284|) .cse1 .cse6)) (or (and .cse7 .cse4) (and |v_P1_#t~short136_2284| |v_P1_#t~short137_2334|)) .cse8)) (and .cse9 (= |v_P1_#t~short137_2334| |v_P1_#t~short137_2335|) |v_P1_#t~short137_2335| (= |v_#race~x$r_buff0_thd2~0_11961| |v_#race~x$r_buff0_thd2~0_11960|) .cse6)) (let ((.cse14 (= |v_#race~x$w_buff0_used~0_17048| 0))) (or (let ((.cse10 (not |v_P1_#t~short138_2105|)) (.cse11 (not |v_P1_#t~short138_2104|))) (and (or (and (= |v_#race~x$r_buff0_thd2~0_11961| |v_#race~x$r_buff0_thd2~0_11958|) (= |v_P1_#t~short138_2104| |v_P1_#t~short138_2105|) .cse10) (and (or (and .cse11 .cse0) (and .cse2 |v_P1_#t~short138_2104|)) |v_P1_#t~short138_2105| (= |v_#race~x$r_buff0_thd2~0_11958| 0))) .cse7 (or (and .cse12 |v_P1_#t~short138_2105|) (and .cse13 .cse10)) .cse14 (= |v_P1_#t~ite139_1669| |v_P1_#t~ite140_1659|) (or (and .cse15 .cse11 (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite139_1669|)) (and (= |v_#race~x$r_buff0_thd2~0_11958| |v_#race~x$r_buff0_thd2~0_11957|) (= |v_P1_#t~ite139_1669| 0) |v_P1_#t~short138_2104|)))) (and .cse16 .cse15 .cse17 |v_P1_#t~short137_2334| .cse14 (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite140_1659|)))) .cse18 (or (and .cse19 |v_P1_#t~short135_2428| (= |v_P1_#t~short135_2428| |v_P1_#t~short135_2427|) .cse20 (= |v_#race~x$r_buff0_thd2~0_11960| |v_#race~x$r_buff0_thd2~0_11941|)) (let ((.cse21 (not |v_P1_#t~short134_2379|)) (.cse22 (not |v_P1_#t~short134_2380|))) (and (or (and (= |v_P1_#t~short134_2379| |v_P1_#t~short134_2380|) .cse21 .cse20) (and (or (and .cse22 .cse23) (and .cse24 |v_P1_#t~short134_2380|)) (= |v_#race~x$w_buff1_used~0_16382| 0) |v_P1_#t~short134_2379|)) (= |v_#race~x$r_buff0_thd2~0_11960| 0) (or (and .cse2 .cse21) (and |v_P1_#t~short134_2379| .cse0)) .cse25 (or (and .cse22 .cse26) (and |v_P1_#t~short134_2380| |v_P1_#t~short135_2427|))))) (= |v_P1_#t~ite140_1659| |v_P1_#t~ite141_1459|) (or (and .cse13 |v_P1_#t~short135_2428|) (and .cse12 .cse25)) (or (and |v_P1_#t~short135_2427| |v_P1_#t~short137_2335|) (and .cse26 .cse8)))) (and .cse16 .cse9 .cse15 (= |v_P1_#t~short137_2334| |old(P1Thread1of1ForFork0_#t~short137)|) .cse19 .cse17 .cse20 (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite141_1459|) .cse27 .cse6 (= |old(P1Thread1of1ForFork0_#t~ite140)| |v_P1_#t~ite140_1659|) (= |v_P1_#t~short135_2427| |old(P1Thread1of1ForFork0_#t~short135)|) (= |v_#race~x$w_buff0_used~0_17049| |v_#race~x$w_buff0_used~0_17048|)))) (= (ite (= (mod |v_P1_#t~ite149_875| 256) 0) 0 1) ~x$r_buff1_thd2~0) (= (store |old(#memory_int)| |~#x~0.base| (store .cse28 |~#x~0.offset| |v_P1_#t~ite97_2515|)) |#memory_int|) (let ((.cse29 (= |v_P1_#t~short101_3261| |old(P1Thread1of1ForFork0_#t~short101)|)) (.cse35 (= |v_#race~x$w_buff1_used~0_16378| |v_#race~x$w_buff1_used~0_16375|)) (.cse51 (= |v_P1_#t~short103_3164| |old(P1Thread1of1ForFork0_#t~short103)|)) (.cse50 (= |v_#race~x$w_buff0~0_7143| 0)) (.cse52 (= |old(P1Thread1of1ForFork0_#t~ite104)| |v_P1_#t~ite104_2727|)) (.cse36 (= |v_P1_#t~short99_3305| |old(P1Thread1of1ForFork0_#t~short99)|)) (.cse30 (= |v_#race~x$r_buff1_thd2~0_7087| |v_#race~x$r_buff1_thd2~0_7085|))) (or (let ((.cse33 (not |v_P1_#t~short102_3291|)) (.cse40 (not |v_P1_#t~short100_3332|)) (.cse34 (not |v_P1_#t~short102_3290|)) (.cse38 (not |v_P1_#t~short100_3331|))) (and (= ~x$w_buff0~0 |v_P1_#t~ite105_2715|) (or (and .cse29 (= |v_#race~x$r_buff0_thd2~0_11945| |v_#race~x$r_buff0_thd2~0_11944|) (= |v_P1_#t~short102_3290| |v_P1_#t~short102_3291|) |v_P1_#t~short102_3291| .cse30) (let ((.cse32 (not |v_P1_#t~short101_3262|)) (.cse31 (not |v_P1_#t~short101_3261|))) (and (or (and (or (and .cse31 .cse5) (and .cse3 |v_P1_#t~short101_3261|)) (= |v_#race~x$r_buff1_thd2~0_7085| 0) |v_P1_#t~short101_3262|) (and .cse32 (= |v_P1_#t~short101_3261| |v_P1_#t~short101_3262|) .cse30)) (= |v_#race~x$r_buff0_thd2~0_11944| 0) .cse33 (or (and |v_P1_#t~short101_3262| .cse0) (and .cse2 .cse32)) (or (and .cse34 .cse31) (and |v_P1_#t~short101_3261| |v_P1_#t~short102_3290|))))) (or (and (= |v_#race~x$r_buff0_thd2~0_11945| |v_#race~x$r_buff0_thd2~0_11948|) .cse35 |v_P1_#t~short100_3331| (= |v_P1_#t~short100_3331| |v_P1_#t~short100_3332|) .cse36) (let ((.cse39 (not |v_P1_#t~short99_3305|)) (.cse37 (not |v_P1_#t~short99_3306|))) (and (or (and |v_P1_#t~short99_3306| .cse0) (and .cse2 .cse37)) (= |v_#race~x$r_buff0_thd2~0_11945| 0) .cse38 (or (and |v_P1_#t~short99_3305| |v_P1_#t~short100_3332|) (and .cse39 .cse40)) (or (and |v_P1_#t~short99_3306| (or (and .cse41 |v_P1_#t~short99_3305|) (and .cse39 .cse42)) (= |v_#race~x$w_buff1_used~0_16378| 0)) (and .cse35 .cse37 (= |v_P1_#t~short99_3305| |v_P1_#t~short99_3306|)))))) (or (and |v_P1_#t~short100_3332| |v_P1_#t~short102_3291|) (and .cse33 .cse40)) .cse18 (let ((.cse43 (= |v_#race~x$w_buff0_used~0_17047| 0)) (.cse46 (= |v_#race~x$r_buff0_thd2~0_11944| |v_#race~x$r_buff0_thd2~0_11951|))) (or (let ((.cse45 (not |v_P1_#t~short103_3165|)) (.cse44 (not |v_P1_#t~short103_3164|))) (and .cse43 (or (and (= |v_#race~x$r_buff0_thd2~0_11951| 0) (or (and .cse2 |v_P1_#t~short103_3164|) (and .cse44 .cse0)) |v_P1_#t~short103_3165|) (and (= |v_P1_#t~short103_3164| |v_P1_#t~short103_3165|) .cse45 .cse46)) (or (and .cse47 |v_P1_#t~short103_3165|) (and .cse45 .cse48)) .cse34 (= |v_P1_#t~ite104_2727| |v_P1_#t~ite105_2715|) (let ((.cse49 (= |old(~x$w_buff0~0)| |v_P1_#t~ite104_2727|))) (or (and .cse49 .cse44 .cse50) (and .cse49 .cse50 |v_P1_#t~short103_3164|))))) (and .cse43 .cse51 .cse50 (= |old(~x$w_buff0~0)| |v_P1_#t~ite105_2715|) .cse46 |v_P1_#t~short102_3290| .cse52))) (or (and .cse48 |v_P1_#t~short100_3331|) (and .cse47 .cse38)))) (and .cse29 .cse35 .cse51 (= |v_#race~x$w_buff0_used~0_17047| |v_#race~x$w_buff0_used~0_17046|) (= |old(~x$w_buff0~0)| ~x$w_buff0~0) .cse50 .cse27 (= |v_#race~x$r_buff0_thd2~0_11948| |v_#race~x$r_buff0_thd2~0_11951|) (= |old(P1Thread1of1ForFork0_#t~ite105)| |v_P1_#t~ite105_2715|) .cse52 .cse36 (= |v_P1_#t~short100_3332| |old(P1Thread1of1ForFork0_#t~short100)|) .cse30 (= |v_P1_#t~short102_3290| |old(P1Thread1of1ForFork0_#t~short102)|)))) (let ((.cse57 (= |v_#race~x$w_buff1_used~0_16375| |old(#race~x$w_buff1_used~0)|))) (or (let ((.cse54 (not |v_P1_#t~short90_3090|)) (.cse56 (not |v_P1_#t~short90_3089|))) (and .cse53 (or (and .cse54 .cse2) (and |v_P1_#t~short90_3090| .cse0)) (or (and .cse55 .cse56) (and |v_P1_#t~short90_3089| |v_P1_#t~short91_3157|)) (= |v_#race~x$r_buff0_thd2~0_11959| 0) (or (and .cse54 .cse57 (= |v_P1_#t~short90_3089| |v_P1_#t~short90_3090|)) (and |v_P1_#t~short90_3090| (= |v_#race~x$w_buff1_used~0_16375| 0) (or (and .cse41 |v_P1_#t~short90_3089|) (and .cse42 .cse56)))))) (and (= |v_P1_#t~short90_3089| |old(P1Thread1of1ForFork0_#t~short90)|) |v_P1_#t~short91_3158| (= |old(#race~x$r_buff0_thd2~0)| |v_#race~x$r_buff0_thd2~0_11959|) .cse57 (= |v_P1_#t~short91_3157| |v_P1_#t~short91_3158|)))) (let ((.cse58 (select |#race| |~#x~0.base|))) (or (not (= (select .cse58 .cse59) 0)) (not (= (select .cse58 .cse60) 0)) (not (= (select .cse58 |~#x~0.offset|) 0)) (not (= (select .cse58 .cse61) 0)))) (= ~x$mem_tmp~0 .cse62) (= (ite .cse18 0 1) ~x$flush_delayed~0) (= 0 |#race~weak$$choice2~0|) (let ((.cse63 (= |old(#race~x$r_buff1_thd2~0)| |v_#race~x$r_buff1_thd2~0_7087|))) (or (and (= |v_#race~x$r_buff0_thd2~0_11959| |v_#race~x$r_buff0_thd2~0_11955|) |v_P1_#t~short93_3193| (= |v_P1_#t~short92_3133| |old(P1Thread1of1ForFork0_#t~short92)|) .cse63 (= |v_P1_#t~short93_3192| |v_P1_#t~short93_3193|)) (let ((.cse66 (not |v_P1_#t~short92_3133|)) (.cse67 (not |v_P1_#t~short92_3134|))) (and .cse64 (or (and |v_P1_#t~short92_3133| |v_P1_#t~short93_3192|) (and .cse65 .cse66)) (or (and |v_P1_#t~short92_3134| .cse0) (and .cse67 .cse2)) (= |v_#race~x$r_buff0_thd2~0_11955| 0) (or (and (or (and |v_P1_#t~short92_3133| .cse3) (and .cse66 .cse5)) (= |v_#race~x$r_buff1_thd2~0_7087| 0) |v_P1_#t~short92_3134|) (and .cse67 .cse63 (= |v_P1_#t~short92_3133| |v_P1_#t~short92_3134|))))))) (= .cse68 (select .cse69 .cse61)) (= ~weak$$choice2~0 (ite (= (mod |v_P1_#t~nondet85_819| 256) 0) 0 1)) (let ((.cse86 (= |v_#race~x$w_buff1_used~0_16379| |v_#race~x$w_buff1_used~0_16378|)) (.cse74 (= |v_#race~x$w_buff1~0_7627| 0)) (.cse78 (= |v_P1_#t~ite113_2637| |old(P1Thread1of1ForFork0_#t~ite113)|)) (.cse80 (= |v_#race~x$r_buff1_thd2~0_7086| |v_#race~x$r_buff1_thd2~0_7085|)) (.cse87 (= |old(P1Thread1of1ForFork0_#t~short108)| |v_P1_#t~short108_3262|)) (.cse79 (= |old(P1Thread1of1ForFork0_#t~short112)| |v_P1_#t~short112_3091|)) (.cse81 (= |old(P1Thread1of1ForFork0_#t~short110)| |v_P1_#t~short110_3206|))) (or (let ((.cse71 (not |v_P1_#t~short111_3240|)) (.cse82 (not |v_P1_#t~short111_3241|)) (.cse85 (not |v_P1_#t~short109_3293|)) (.cse70 (not |v_P1_#t~short109_3294|))) (and .cse18 (or (and .cse47 .cse70) (and .cse48 |v_P1_#t~short109_3294|)) (let ((.cse77 (= |v_#race~x$r_buff0_thd2~0_11949| |v_#race~x$r_buff0_thd2~0_11954|)) (.cse73 (= |v_#race~x$w_buff0_used~0_17044| 0))) (or (let ((.cse75 (not |v_P1_#t~short112_3091|)) (.cse72 (not |v_P1_#t~short112_3090|))) (and .cse71 (or (and .cse47 |v_P1_#t~short112_3090|) (and .cse72 .cse48)) .cse73 (let ((.cse76 (= |v_P1_#t~ite113_2637| |old(~x$w_buff1~0)|))) (or (and .cse74 .cse75 .cse76) (and .cse74 .cse76 |v_P1_#t~short112_3091|))) (or (and (= |v_#race~x$r_buff0_thd2~0_11954| 0) (or (and .cse75 .cse0) (and .cse2 |v_P1_#t~short112_3091|)) |v_P1_#t~short112_3090|) (and .cse72 .cse77 (= |v_P1_#t~short112_3091| |v_P1_#t~short112_3090|))) (= |v_P1_#t~ite113_2637| |v_P1_#t~ite114_2625|))) (and .cse74 .cse78 .cse77 .cse79 .cse73 (= |v_P1_#t~ite114_2625| |old(~x$w_buff1~0)|) |v_P1_#t~short111_3240|))) (= |v_P1_#t~ite114_2625| ~x$w_buff1~0) (or (and (= |v_P1_#t~short111_3241| |v_P1_#t~short111_3240|) (= |v_#race~x$r_buff0_thd2~0_11949| |v_#race~x$r_buff0_thd2~0_11952|) .cse80 .cse81 |v_P1_#t~short111_3241|) (let ((.cse83 (not |v_P1_#t~short110_3205|)) (.cse84 (not |v_P1_#t~short110_3206|))) (and .cse82 (= |v_#race~x$r_buff0_thd2~0_11949| 0) (or (and .cse0 |v_P1_#t~short110_3205|) (and .cse83 .cse2)) (or (and |v_P1_#t~short110_3206| |v_P1_#t~short111_3240|) (and .cse71 .cse84)) (or (and (= |v_P1_#t~short110_3206| |v_P1_#t~short110_3205|) .cse83 .cse80) (and (= |v_#race~x$r_buff1_thd2~0_7086| 0) (or (and .cse84 .cse5) (and .cse3 |v_P1_#t~short110_3206|)) |v_P1_#t~short110_3205|))))) (or (and .cse82 .cse85) (and |v_P1_#t~short109_3293| |v_P1_#t~short111_3241|)) (or (and .cse86 .cse87 (= |v_P1_#t~short109_3293| |v_P1_#t~short109_3294|) (= |v_#race~x$r_buff0_thd2~0_11952| |v_#race~x$r_buff0_thd2~0_11951|) |v_P1_#t~short109_3294|) (let ((.cse88 (not |v_P1_#t~short108_3262|)) (.cse89 (not |v_P1_#t~short108_3261|))) (and (or (and |v_P1_#t~short108_3262| |v_P1_#t~short109_3293|) (and .cse85 .cse88)) (or (and (= |v_#race~x$w_buff1_used~0_16379| 0) |v_P1_#t~short108_3261| (or (and .cse41 |v_P1_#t~short108_3262|) (and .cse42 .cse88))) (and .cse86 .cse89 (= |v_P1_#t~short108_3261| |v_P1_#t~short108_3262|))) (= |v_#race~x$r_buff0_thd2~0_11952| 0) (or (and |v_P1_#t~short108_3261| .cse0) (and .cse2 .cse89)) .cse70))))) (and (= |v_P1_#t~ite114_2625| |old(P1Thread1of1ForFork0_#t~ite114)|) .cse86 .cse74 .cse78 (= |old(~x$w_buff1~0)| ~x$w_buff1~0) .cse80 (= |old(P1Thread1of1ForFork0_#t~short111)| |v_P1_#t~short111_3240|) .cse87 .cse79 .cse81 .cse27 (= |v_#race~x$w_buff0_used~0_17047| |v_#race~x$w_buff0_used~0_17044|) (= |v_#race~x$r_buff0_thd2~0_11954| |v_#race~x$r_buff0_thd2~0_11951|) (= |old(P1Thread1of1ForFork0_#t~short109)| |v_P1_#t~short109_3293|)))) (let ((.cse94 (= |v_#race~x$r_buff1_thd2~0_7090| |v_#race~x$r_buff1_thd2~0_7089|)) (.cse101 (= |v_#race~x$w_buff1_used~0_16380| 0)) (.cse102 (= |v_P1_#t~short130_2494| |old(P1Thread1of1ForFork0_#t~short130)|)) (.cse97 (= |v_P1_#t~short128_2672| |old(P1Thread1of1ForFork0_#t~short128)|)) (.cse103 (= |v_P1_#t~short126_2759| |old(P1Thread1of1ForFork0_#t~short126)|))) (or (let ((.cse91 (not |v_P1_#t~short129_2715|)) (.cse96 (not |v_P1_#t~short129_2714|)) (.cse90 (not |v_P1_#t~short127_2799|)) (.cse92 (not |v_P1_#t~short127_2800|))) (and (or (and .cse90 .cse91) (and |v_P1_#t~short127_2799| |v_P1_#t~short129_2715|)) (= |v_P1_#t~ite131_2135| |v_P1_#t~ite132_1961|) (or (and .cse12 .cse92) (and |v_P1_#t~short127_2800| .cse13)) .cse18 (or (let ((.cse95 (not |v_P1_#t~short128_2671|)) (.cse93 (not |v_P1_#t~short128_2672|))) (and (or (and |v_P1_#t~short128_2671| (= |v_#race~x$r_buff1_thd2~0_7089| 0) (or (and .cse93 .cse5) (and |v_P1_#t~short128_2672| .cse3))) (and .cse94 (= |v_P1_#t~short128_2671| |v_P1_#t~short128_2672|) .cse95)) (or (and |v_P1_#t~short128_2671| .cse0) (and .cse2 .cse95)) (= |v_#race~x$r_buff0_thd2~0_11940| 0) .cse91 (or (and |v_P1_#t~short128_2672| |v_P1_#t~short129_2714|) (and .cse93 .cse96)))) (and .cse94 |v_P1_#t~short129_2715| .cse97 (= |v_#race~x$r_buff0_thd2~0_11942| |v_#race~x$r_buff0_thd2~0_11940|) (= |v_P1_#t~short129_2714| |v_P1_#t~short129_2715|))) (let ((.cse98 (= |v_#race~x$w_buff0_used~0_17049| 0)) (.cse99 (= |v_#race~x$r_buff0_thd2~0_11941| |v_#race~x$r_buff0_thd2~0_11940|))) (or (let ((.cse100 (not |v_P1_#t~short130_2493|))) (and .cse98 .cse96 (or (and .cse99 (= |v_P1_#t~short130_2494| |v_P1_#t~short130_2493|) .cse100) (and (or (and .cse2 |v_P1_#t~short130_2494|) (and .cse0 (not |v_P1_#t~short130_2494|))) |v_P1_#t~short130_2493| (= |v_#race~x$r_buff0_thd2~0_11941| 0))) (= |v_#race~x$w_buff1_used~0_16377| |v_#race~x$w_buff1_used~0_16380|) (= |v_P1_#t~ite131_2135| 0) (or (and .cse13 .cse100) (and .cse12 |v_P1_#t~short130_2493|)))) (and .cse98 .cse99 |v_P1_#t~short129_2714| .cse101 .cse102 (= |v_P1_#t~ite131_2135| |old(~x$w_buff1_used~0)|)))) (let ((.cse104 (= |v_#race~x$w_buff1_used~0_16377| |v_#race~x$w_buff1_used~0_16376|))) (or (and |v_P1_#t~short127_2800| (= |v_#race~x$r_buff0_thd2~0_11942| |v_#race~x$r_buff0_thd2~0_11950|) .cse103 (= |v_P1_#t~short127_2800| |v_P1_#t~short127_2799|) .cse104) (let ((.cse105 (not |v_P1_#t~short126_2760|)) (.cse106 (not |v_P1_#t~short126_2759|))) (and (= |v_#race~x$r_buff0_thd2~0_11942| 0) (or (and .cse105 .cse2) (and |v_P1_#t~short126_2760| .cse0)) (or (and .cse90 .cse106) (and |v_P1_#t~short126_2759| |v_P1_#t~short127_2799|)) (or (and .cse105 (= |v_P1_#t~short126_2759| |v_P1_#t~short126_2760|) .cse104) (and |v_P1_#t~short126_2760| (or (and .cse41 |v_P1_#t~short126_2759|) (and .cse42 .cse106)) (= |v_#race~x$w_buff1_used~0_16377| 0))) .cse92)))))) (and .cse94 .cse101 .cse102 .cse97 (= |v_P1_#t~ite131_2135| |old(P1Thread1of1ForFork0_#t~ite131)|) (= |v_#race~x$w_buff0_used~0_17049| |v_#race~x$w_buff0_used~0_17043|) (= |v_P1_#t~short129_2714| |old(P1Thread1of1ForFork0_#t~short129)|) .cse27 .cse103 (= |v_P1_#t~short127_2799| |old(P1Thread1of1ForFork0_#t~short127)|) (= |v_P1_#t~ite132_1961| |old(~x$w_buff1_used~0)|) (= |v_#race~x$r_buff0_thd2~0_11941| |v_#race~x$r_buff0_thd2~0_11950|)))) (let ((.cse117 (= |v_#race~x$r_buff1_thd2~0_7090| |v_#race~x$r_buff1_thd2~0_7086|)) (.cse119 (= |v_P1_#t~short119_2989| |old(P1Thread1of1ForFork0_#t~short119)|)) (.cse121 (= |v_P1_#t~short117_3062| |old(P1Thread1of1ForFork0_#t~short117)|)) (.cse110 (= |v_#race~x$w_buff0_used~0_17045| 0)) (.cse111 (= |v_P1_#t~ite122_2437| |old(P1Thread1of1ForFork0_#t~ite122)|)) (.cse112 (= |v_P1_#t~short121_2847| |old(P1Thread1of1ForFork0_#t~short121)|)) (.cse122 (= |v_#race~x$w_buff1_used~0_16379| |v_#race~x$w_buff1_used~0_16376|))) (or (let ((.cse115 (not |v_P1_#t~short120_3029|)) (.cse108 (not |v_P1_#t~short120_3028|)) (.cse107 (not |v_P1_#t~short118_3098|)) (.cse120 (not |v_P1_#t~short118_3097|))) (and (or (and |v_P1_#t~short118_3098| |v_P1_#t~short120_3028|) (and .cse107 .cse108)) (let ((.cse109 (= |v_#race~x$r_buff0_thd2~0_11947| |v_#race~x$r_buff0_thd2~0_11950|))) (or (and |v_P1_#t~short120_3029| .cse109 .cse110 .cse111 .cse112 (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite123_2427|)) (let ((.cse113 (not |v_P1_#t~short121_2847|)) (.cse114 (not |v_P1_#t~short121_2846|))) (and (or (and (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite122_2437|) .cse110 .cse113) (and |v_P1_#t~short121_2847| .cse110 (= |v_P1_#t~ite122_2437| 0))) (= |v_P1_#t~ite122_2437| |v_P1_#t~ite123_2427|) (or (and |v_P1_#t~short121_2846| (= |v_#race~x$r_buff0_thd2~0_11950| 0) (or (and |v_P1_#t~short121_2847| .cse2) (and .cse113 .cse0))) (and (= |v_P1_#t~short121_2846| |v_P1_#t~short121_2847|) .cse109 .cse114)) .cse115 (or (and .cse114 .cse48) (and .cse47 |v_P1_#t~short121_2846|)))))) (= |v_P1_#t~ite123_2427| |v_P1_#t~ite124_2275|) .cse18 (or (let ((.cse116 (not |v_P1_#t~short119_2989|)) (.cse118 (not |v_P1_#t~short119_2990|))) (and (or (and .cse115 .cse116) (and |v_P1_#t~short119_2989| |v_P1_#t~short120_3029|)) (or (and .cse117 (= |v_P1_#t~short119_2990| |v_P1_#t~short119_2989|) .cse118) (and |v_P1_#t~short119_2990| (= |v_#race~x$r_buff1_thd2~0_7090| 0) (or (and .cse5 .cse116) (and |v_P1_#t~short119_2989| .cse3)))) (or (and |v_P1_#t~short119_2990| .cse0) (and .cse118 .cse2)) .cse108 (= |v_#race~x$r_buff0_thd2~0_11947| 0))) (and .cse117 |v_P1_#t~short120_3028| (= |v_P1_#t~short120_3029| |v_P1_#t~short120_3028|) .cse119 (= |v_#race~x$r_buff0_thd2~0_11947| |v_#race~x$r_buff0_thd2~0_11953|))) (or (and |v_P1_#t~short118_3097| .cse48) (and .cse47 .cse120)) (or (and |v_P1_#t~short118_3097| .cse121 (= |v_P1_#t~short118_3097| |v_P1_#t~short118_3098|) (= |v_#race~x$r_buff0_thd2~0_11954| |v_#race~x$r_buff0_thd2~0_11953|) .cse122) (let ((.cse123 (not |v_P1_#t~short117_3061|)) (.cse124 (not |v_P1_#t~short117_3062|))) (and (or (and .cse123 .cse2) (and |v_P1_#t~short117_3061| .cse0)) (or (and .cse107 .cse124) (and |v_P1_#t~short117_3062| |v_P1_#t~short118_3098|)) .cse120 (= |v_#race~x$r_buff0_thd2~0_11953| 0) (or (and .cse123 (= |v_P1_#t~short117_3061| |v_P1_#t~short117_3062|) .cse122) (and |v_P1_#t~short117_3061| (or (and .cse42 .cse124) (and |v_P1_#t~short117_3062| .cse41)) (= |v_#race~x$w_buff1_used~0_16376| 0)))))))) (and (= |v_#race~x$r_buff0_thd2~0_11954| |v_#race~x$r_buff0_thd2~0_11950|) .cse117 (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite124_2275|) (= |v_P1_#t~short120_3029| |old(P1Thread1of1ForFork0_#t~short120)|) .cse119 (= |v_P1_#t~short118_3098| |old(P1Thread1of1ForFork0_#t~short118)|) .cse121 .cse110 (= |v_P1_#t~ite123_2427| |old(P1Thread1of1ForFork0_#t~ite123)|) .cse111 .cse27 .cse112 .cse122))) (or (= |v_P1_#t~nondet83_625| 1) (= |v_P1_#t~nondet83_625| 0)) (= |P1Thread1of1ForFork0_#t~mem151| (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|)) (= |v_#race_10325| (store |v_#race_10326| |~#x~0.base| (store (store (store (store .cse125 |~#x~0.offset| .cse68) .cse60 .cse68) .cse61 .cse68) .cse59 .cse68))) (let ((.cse132 (= |v_#race~x$r_buff0_thd2~0_11948| |v_#race~x$r_buff0_thd2~0_11955|)) (.cse126 (= |v_#race~x$w_buff0_used~0_17046| 0)) (.cse127 (= |old(#race~x$w_buff0~0)| |v_#race~x$w_buff0~0_7144|)) (.cse130 (= |v_#race_10326| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse60 0) .cse61 0) .cse59 0)))) (.cse129 (= |old(#race~x$w_buff1~0)| |v_#race~x$w_buff1~0_7628|))) (or (let ((.cse128 (not |v_P1_#t~short95_3063|)) (.cse131 (not |v_P1_#t~short95_3062|))) (and .cse65 .cse126 (= |v_P1_#t~ite96_2659| |v_P1_#t~ite97_2515|) (or (and .cse127 (= |v_P1_#t~ite96_2659| |old(~x$w_buff1~0)|) .cse128 (= |v_#race~x$w_buff1~0_7628| 0)) (and |v_P1_#t~short95_3063| (= |v_#race~x$w_buff0~0_7144| 0) (= |old(~x$w_buff0~0)| |v_P1_#t~ite96_2659|) .cse129)) (= |old(P1Thread1of1ForFork0_#t~mem94)| |v_P1_#t~mem94_2684|) .cse130 (or (and .cse47 |v_P1_#t~short95_3062|) (and .cse131 .cse48)) (or (and (= |v_#race~x$r_buff0_thd2~0_11948| 0) |v_P1_#t~short95_3062| (or (and |v_P1_#t~short95_3063| .cse2) (and .cse128 .cse0))) (and .cse131 .cse132 (= |v_P1_#t~short95_3062| |v_P1_#t~short95_3063|))))) (and (= (select .cse125 |~#x~0.offset|) 0) (= (select .cse125 .cse60) 0) (= (select .cse125 .cse61) 0) (= |v_P1_#t~ite96_2659| |old(P1Thread1of1ForFork0_#t~ite96)|) .cse132 .cse126 (= |v_P1_#t~mem94_2684| .cse62) .cse127 |v_P1_#t~short93_3192| (= |v_P1_#t~short95_3063| |old(P1Thread1of1ForFork0_#t~short95)|) .cse130 (= |v_P1_#t~ite97_2515| |v_P1_#t~mem94_2684|) .cse129 (= (select .cse125 .cse59) 0)))) (= ~x$r_buff0_thd2~0 (ite (= (mod |v_P1_#t~ite141_1459| 256) 0) 0 1)) (= ~x$w_buff0_used~0 (ite (= (mod |v_P1_#t~ite124_2275| 256) 0) 0 1)) (let ((.cse142 (= |v_#race~x$r_buff1_thd2~0_7083| 0)) (.cse135 (= |v_#race~x$w_buff1_used~0_16382| |#race~x$w_buff1_used~0|)) (.cse141 (= |old(P1Thread1of1ForFork0_#t~short143)| |v_P1_#t~short143_1796|)) (.cse145 (= |old(P1Thread1of1ForFork0_#t~short147)| |v_P1_#t~short147_1470|)) (.cse149 (= |old(P1Thread1of1ForFork0_#t~short145)| |v_P1_#t~short145_1684|))) (or (let ((.cse138 (= (mod ~x$r_buff0_thd2~0 256) 0))) (let ((.cse133 (not |v_P1_#t~short144_1848|)) (.cse140 (not |v_P1_#t~short144_1847|)) (.cse139 (not .cse138)) (.cse147 (not |v_P1_#t~short146_1739|)) (.cse134 (not |v_P1_#t~short146_1738|))) (and (or (and .cse133 .cse134) (and |v_P1_#t~short144_1848| |v_P1_#t~short146_1738|)) (or (let ((.cse136 (not |v_P1_#t~short143_1795|)) (.cse137 (not |v_P1_#t~short143_1796|))) (and (or (and .cse135 (= |v_P1_#t~short143_1796| |v_P1_#t~short143_1795|) .cse136) (and |v_P1_#t~short143_1795| (or (and .cse24 |v_P1_#t~short143_1796|) (and .cse23 .cse137)) (= |#race~x$w_buff1_used~0| 0))) (or (and .cse138 |v_P1_#t~short143_1795|) (and .cse139 .cse136)) .cse140 (= |v_#race~x$r_buff0_thd2~0_11956| 0) (or (and .cse133 .cse137) (and |v_P1_#t~short143_1796| |v_P1_#t~short144_1848|)))) (and .cse135 (= |v_P1_#t~short144_1847| |v_P1_#t~short144_1848|) .cse141 |v_P1_#t~short144_1847| (= |v_#race~x$r_buff0_thd2~0_11943| |v_#race~x$r_buff0_thd2~0_11956|))) .cse18 (or (and .cse12 .cse140) (and .cse13 |v_P1_#t~short144_1847|)) (let ((.cse143 (= |#race~x$r_buff0_thd2~0| |v_#race~x$r_buff0_thd2~0_11946|)) (.cse144 (= |#race~x$w_buff0_used~0| 0))) (or (and .cse142 (= |old(~x$r_buff1_thd2~0)| |v_P1_#t~ite148_1097|) |v_P1_#t~short146_1739| .cse143 .cse144 .cse145) (let ((.cse146 (not |v_P1_#t~short147_1469|))) (and (= 0 |v_P1_#t~ite148_1097|) (= |v_#race~x$r_buff1_thd2~0_7088| |v_#race~x$r_buff1_thd2~0_7083|) (or (and (= |#race~x$r_buff0_thd2~0| 0) (or (and .cse138 (not |v_P1_#t~short147_1470|)) (and .cse139 |v_P1_#t~short147_1470|)) |v_P1_#t~short147_1469|) (and .cse146 .cse143 (= |v_P1_#t~short147_1469| |v_P1_#t~short147_1470|))) .cse144 (or (and .cse12 |v_P1_#t~short147_1469|) (and .cse146 .cse13)) .cse147)))) (= |v_P1_#t~ite149_875| |v_P1_#t~ite148_1097|) (let ((.cse148 (= |v_#race~x$r_buff1_thd2~0_7088| |v_#race~x$r_buff1_thd2~0_7084|))) (or (and (= |v_P1_#t~short146_1738| |v_P1_#t~short146_1739|) (= |v_#race~x$r_buff0_thd2~0_11946| |v_#race~x$r_buff0_thd2~0_11956|) |v_P1_#t~short146_1738| .cse148 .cse149) (let ((.cse150 (not |v_P1_#t~short145_1683|)) (.cse151 (not |v_P1_#t~short145_1684|))) (and (or (and .cse139 .cse150) (and .cse138 |v_P1_#t~short145_1683|)) (or (and .cse148 .cse150 (= |v_P1_#t~short145_1684| |v_P1_#t~short145_1683|)) (and (or (and .cse151 .cse5) (and |v_P1_#t~short145_1684| .cse3)) |v_P1_#t~short145_1683| (= |v_#race~x$r_buff1_thd2~0_7088| 0))) (or (and |v_P1_#t~short145_1684| |v_P1_#t~short146_1739|) (and .cse151 .cse147)) (= |v_#race~x$r_buff0_thd2~0_11946| 0) .cse134))))))) (and (= |#race~x$r_buff0_thd2~0| |v_#race~x$r_buff0_thd2~0_11943|) (= |#race~x$w_buff0_used~0| |v_#race~x$w_buff0_used~0_17048|) .cse142 .cse135 (= |old(P1Thread1of1ForFork0_#t~short144)| |v_P1_#t~short144_1848|) (= |old(P1Thread1of1ForFork0_#t~ite148)| |v_P1_#t~ite148_1097|) (= |v_P1_#t~ite149_875| |old(~x$r_buff1_thd2~0)|) .cse141 (= |old(P1Thread1of1ForFork0_#t~short146)| |v_P1_#t~short146_1739|) .cse145 .cse27 .cse149))) (or (and .cse53 .cse47) (and |v_P1_#t~short91_3158| .cse48)) (= (select .cse69 .cse59) .cse68) (= (ite (= (mod |v_P1_#t~ite132_1961| 256) 0) 0 1) ~x$w_buff1_used~0) (= .cse68 (select .cse69 |~#x~0.offset|)) (= (ite (= (mod |v_P1_#t~nondet83_625| 256) 0) 0 1) ~weak$$choice0~0) (= |#race| (store |v_#race_10325| |~#x~0.base| (store (store (store (store .cse69 |~#x~0.offset| 0) .cse60 0) .cse61 0) .cse59 0))) (or (and |v_P1_#t~short91_3157| |v_P1_#t~short93_3193|) (and .cse55 .cse64)) (or (= |v_P1_#t~nondet85_819| 0) (= |v_P1_#t~nondet85_819| 1))))) +//@ semantics [399] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$r_buff1_thd2~0,~x$w_buff1_used~0,#race~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~mem151,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,P1Thread1of1ForFork0_#t~short147,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~nondet150,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet152,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [400] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$r_buff1_thd2~0,~x$w_buff1_used~0,#race~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~mem151,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,P1Thread1of1ForFork0_#t~short147,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~nondet150,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet152,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [401] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$r_buff1_thd2~0,~x$w_buff1_used~0,#race~__unbuffered_p1_EBX~0,~weak$$choice0~0,P1Thread1of1ForFork0_#t~ite105,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short110,#race,P1Thread1of1ForFork0_#t~nondet142,~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~mem151,P1Thread1of1ForFork0_#t~mem153,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short147,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~nondet150,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet152,P1Thread1of1ForFork0_#t~nondet85,P1Thread1of1ForFork0_#t~short143} [(|v_P1_#t~short147_1473| Bool) (|v_P1_#t~short147_1474| Bool) (|v_P1_#t~ite131_2137| Int) (|v_P1_#t~short129_2719| Bool) (|v_P1_#t~ite104_2729| Int) (|v_P1_#t~short129_2718| Bool) (|v_P1_#t~short110_3210| Bool) (|v_P1_#t~short144_1851| Bool) (|v_P1_#t~short128_2676| Bool) (|v_P1_#t~short144_1852| Bool) (|v_P1_#t~short128_2675| Bool) (|v_#race_10329| (Array Int (Array Int Int))) (|v_P1_#t~short92_3138| Bool) (|v_P1_#t~short121_2851| Bool) (|v_P1_#t~short92_3137| Bool) (|v_P1_#t~short121_2850| Bool) (|v_#race_10330| (Array Int (Array Int Int))) (|v_P1_#t~nondet85_821| Int) (|v_P1_#t~short126_2763| Bool) (|v_P1_#t~short126_2764| Bool) (|v_P1_#t~short130_2497| Bool) (|v_P1_#t~short143_1799| Bool) (|v_P1_#t~short99_3309| Bool) (|v_P1_#t~short130_2498| Bool) (|v_P1_#t~short127_2803| Bool) (|v_P1_#t~short127_2804| Bool) (|v_P1_#t~short90_3094| Bool) (|v_P1_#t~short145_1688| Bool) (|v_P1_#t~ite122_2439| Int) (|v_P1_#t~short145_1687| Bool) (|v_#race~x$w_buff1~0_7631| Int) (|v_#race~x$w_buff1~0_7632| Int) (|v_P1_#t~short90_3093| Bool) (|v_P1_#t~short137_2339| Bool) (|v_P1_#t~short137_2338| Bool) (|v_P1_#t~short99_3310| Bool) (|v_P1_#t~short112_3094| Bool) (|v_P1_#t~short112_3095| Bool) (|v_#race~x$r_buff1_thd2~0_7099| Int) (|v_P1_#t~ite113_2639| Int) (|v_P1_#t~ite96_2661| Int) (|v_P1_#t~short135_2432| Bool) (|v_P1_#t~short135_2431| Bool) (|v_P1_#t~ite124_2277| Int) (|v_P1_#t~ite105_2717| Int) (|v_P1_#t~ite123_2429| Int) (|v_#race~x$w_buff1_used~0_16391| Int) (|v_#race~x$r_buff0_thd2~0_12003| Int) (|v_#race~x$w_buff1_used~0_16392| Int) (|v_#race~x$r_buff0_thd2~0_12002| Int) (|v_#race~x$r_buff0_thd2~0_12005| Int) (|v_#race~x$r_buff0_thd2~0_12004| Int) (|v_#race~x$r_buff0_thd2~0_12001| Int) (|v_#race~x$r_buff0_thd2~0_12000| Int) (|v_P1_#t~short118_3102| Bool) (|v_P1_#t~short118_3101| Bool) (|v_P1_#t~short102_3294| Bool) (|v_P1_#t~short91_3161| Bool) (|v_P1_#t~short102_3295| Bool) (|v_P1_#t~short91_3162| Bool) (|v_#race~x$w_buff1_used~0_16397| Int) (|v_#race~x$w_buff1_used~0_16398| Int) (|v_#race~x$w_buff1_used~0_16395| Int) (|v_P1_#t~ite97_2517| Int) (|v_#race~x$w_buff0_used~0_17063| Int) (|v_#race~x$w_buff1_used~0_16396| Int) (|v_#race~x$w_buff1_used~0_16393| Int) (|v_#race~x$w_buff1_used~0_16394| Int) (|v_P1_#t~ite149_877| Int) (|v_P1_#t~short117_3066| Bool) (|v_P1_#t~short117_3065| Bool) (|v_P1_#t~nondet83_627| Int) (|v_P1_#t~ite141_1461| Int) (|v_P1_#t~short108_3266| Bool) (|v_P1_#t~short108_3265| Bool) (|v_P1_#t~short143_1800| Bool) (|v_#race~x$w_buff0_used~0_17057| Int) (|v_P1_#t~short95_3066| Bool) (|v_P1_#t~short95_3067| Bool) (|v_#race~x$w_buff0_used~0_17059| Int) (|v_#race~x$w_buff0_used~0_17058| Int) (|v_#race~x$w_buff0_used~0_17060| Int) (|v_P1_#t~ite132_1963| Int) (|v_#race~x$w_buff0_used~0_17062| Int) (|v_#race~x$w_buff0_used~0_17061| Int) (|v_P1_#t~mem94_2686| Int) (|v_P1_#t~ite114_2627| Int) (|v_P1_#t~short111_3244| Bool) (|v_#race~x$r_buff1_thd2~0_7105| Int) (|v_#race~x$r_buff1_thd2~0_7104| Int) (|v_P1_#t~short103_3168| Bool) (|v_P1_#t~short138_2109| Bool) (|v_P1_#t~short111_3245| Bool) (|v_#race~x$r_buff1_thd2~0_7106| Int) (|v_P1_#t~short138_2108| Bool) (|v_#race~x$r_buff1_thd2~0_7101| Int) (|v_#race~x$r_buff1_thd2~0_7100| Int) (|v_#race~x$r_buff1_thd2~0_7103| Int) (|v_#race~x$r_buff1_thd2~0_7102| Int) (|v_P1_#t~short103_3169| Bool) (|v_#race~x$r_buff0_thd2~0_11988| Int) (|v_#race~x$r_buff0_thd2~0_11989| Int) (|v_#race~x$r_buff0_thd2~0_11984| Int) (|v_P1_#t~ite139_1671| Int) (|v_#race~x$r_buff0_thd2~0_11985| Int) (|v_#race~x$r_buff0_thd2~0_11986| Int) (|v_P1_#t~short93_3196| Bool) (|v_#race~x$r_buff0_thd2~0_11987| Int) (|v_P1_#t~short93_3197| Bool) (|v_P1_#t~short101_3266| Bool) (|v_P1_#t~short146_1742| Bool) (|v_P1_#t~short146_1743| Bool) (|v_P1_#t~ite148_1099| Int) (|v_P1_#t~short119_2994| Bool) (|v_P1_#t~short134_2384| Bool) (|v_P1_#t~short119_2993| Bool) (|v_P1_#t~short134_2383| Bool) (|v_#race~x$r_buff0_thd2~0_11991| Int) (|v_P1_#t~short100_3335| Bool) (|v_#race~x$r_buff0_thd2~0_11992| Int) (|v_P1_#t~short100_3336| Bool) (|v_#race~x$r_buff0_thd2~0_11993| Int) (|v_#race~x$r_buff0_thd2~0_11994| Int) (|v_P1_#t~short110_3209| Bool) (|v_#race~x$w_buff0~0_7148| Int) (|v_#race~x$w_buff0~0_7147| Int) (|v_#race~x$r_buff0_thd2~0_11990| Int) (|v_#race~x$r_buff0_thd2~0_11999| Int) (|v_P1_#t~short120_3033| Bool) (|v_P1_#t~short136_2287| Bool) (|v_P1_#t~short120_3032| Bool) (|v_P1_#t~short136_2288| Bool) (|v_P1_#t~short101_3265| Bool) (|v_P1_#t~ite140_1661| Int) (|v_#race~x$r_buff0_thd2~0_11995| Int) (|v_#race~x$r_buff0_thd2~0_11996| Int) (|v_#race~x$r_buff0_thd2~0_11997| Int) (|v_P1_#t~short109_3297| Bool) (|v_#race~x$r_buff0_thd2~0_11998| Int) (|v_P1_#t~short109_3298| Bool)] (let ((.cse18 (select |v_#race_10330| |~#x~0.base|)) (.cse3 (+ |~#x~0.offset| 1)) (.cse20 (= (mod ~weak$$choice2~0 256) 0)) (.cse14 (= (mod |old(~x$r_buff0_thd2~0)| 256) 0)) (.cse17 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse23 (= (mod |old(~x$r_buff1_thd2~0)| 256) 0)) (.cse40 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse61 (= (mod ~x$w_buff1_used~0 256) 0)) (.cse32 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse88 (select |old(#memory_int)| |~#x~0.base|))) (let ((.cse4 (select .cse88 |~#x~0.offset|)) (.cse11 (not |v_P1_#t~short93_3196|)) (.cse68 (not |v_P1_#t~short93_3197|)) (.cse31 (not .cse32)) (.cse60 (not .cse61)) (.cse6 (select |v_#race_10329| |~#x~0.base|)) (.cse2 (+ 2 |~#x~0.offset|)) (.cse19 (not |v_P1_#t~short91_3162|)) (.cse69 (not |v_P1_#t~short91_3161|)) (.cse41 (not .cse40)) (.cse25 (not .cse23)) (.cse16 (not .cse17)) (.cse13 (not .cse14)) (.cse44 (not .cse20)) (.cse109 (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|)) (.cse108 (select .cse18 .cse3)) (.cse1 (+ 3 |~#x~0.offset|))) (and (let ((.cse0 (select |#race| |~#x~0.base|))) (or (not (= (select .cse0 |~#x~0.offset|) 0)) (not (= (select .cse0 .cse1) 0)) (not (= (select .cse0 .cse2) 0)) (not (= (select .cse0 .cse3) 0)))) (= (ite (= (mod |v_P1_#t~ite132_1963| 256) 0) 0 1) ~x$w_buff1_used~0) (= .cse4 ~x$mem_tmp~0) (let ((.cse5 (= |old(#race~x$w_buff0~0)| |v_#race~x$w_buff0~0_7148|)) (.cse7 (= |old(#race~x$w_buff1~0)| |v_#race~x$w_buff1~0_7631|)) (.cse8 (= |v_#race~x$w_buff0_used~0_17060| 0)) (.cse9 (= |v_#race~x$r_buff0_thd2~0_11987| |v_#race~x$r_buff0_thd2~0_11990|)) (.cse10 (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse3 0) .cse2 0) .cse1 0)) |v_#race_10329|))) (or (and .cse5 (= (select .cse6 .cse2) 0) .cse7 .cse8 |v_P1_#t~short93_3196| (= |v_P1_#t~short95_3067| |old(P1Thread1of1ForFork0_#t~short95)|) (= (select .cse6 |~#x~0.offset|) 0) (= (select .cse6 .cse1) 0) (= (select .cse6 .cse3) 0) .cse9 (= |v_P1_#t~ite96_2661| |old(P1Thread1of1ForFork0_#t~ite96)|) (= .cse4 |v_P1_#t~mem94_2686|) .cse10 (= |v_P1_#t~ite97_2517| |v_P1_#t~mem94_2686|)) (let ((.cse12 (not |v_P1_#t~short95_3067|)) (.cse15 (not |v_P1_#t~short95_3066|))) (and .cse11 (or (and .cse5 (= |v_P1_#t~ite96_2661| |old(~x$w_buff1~0)|) .cse12 (= |v_#race~x$w_buff1~0_7631| 0)) (and .cse7 (= |old(~x$w_buff0~0)| |v_P1_#t~ite96_2661|) (= |v_#race~x$w_buff0~0_7148| 0) |v_P1_#t~short95_3067|)) .cse8 (or (and |v_P1_#t~short95_3066| (= |v_#race~x$r_buff0_thd2~0_11990| 0) (or (and .cse13 |v_P1_#t~short95_3067|) (and .cse12 .cse14))) (and (= |v_P1_#t~short95_3066| |v_P1_#t~short95_3067|) .cse9 .cse15)) (= |old(P1Thread1of1ForFork0_#t~mem94)| |v_P1_#t~mem94_2686|) (or (and |v_P1_#t~short95_3066| .cse16) (and .cse15 .cse17)) (= |v_P1_#t~ite96_2661| |v_P1_#t~ite97_2517|) .cse10)))) (= ~x$r_buff0_thd2~0 (ite (= (mod |v_P1_#t~ite141_1461| 256) 0) 0 1)) (= |#race| (store |v_#race_10330| |~#x~0.base| (store (store (store (store .cse18 |~#x~0.offset| 0) .cse3 0) .cse2 0) .cse1 0))) (or (and |v_P1_#t~short91_3162| .cse17) (and .cse19 .cse16)) (or (= |v_P1_#t~nondet85_821| 1) (= |v_P1_#t~nondet85_821| 0)) (= (ite .cse20 0 1) ~x$flush_delayed~0) (let ((.cse43 (= |v_P1_#t~short126_2764| |old(P1Thread1of1ForFork0_#t~short126)|)) (.cse36 (= |v_P1_#t~short130_2497| |old(P1Thread1of1ForFork0_#t~short130)|)) (.cse37 (= |v_#race~x$w_buff1_used~0_16395| 0)) (.cse22 (= |v_#race~x$r_buff1_thd2~0_7105| |v_#race~x$r_buff1_thd2~0_7099|)) (.cse28 (= |v_P1_#t~short128_2675| |old(P1Thread1of1ForFork0_#t~short128)|))) (or (let ((.cse26 (not |v_P1_#t~short129_2718|)) (.cse27 (not |v_P1_#t~short129_2719|)) (.cse29 (not |v_P1_#t~short127_2803|)) (.cse30 (not |v_P1_#t~short127_2804|))) (and (or (let ((.cse21 (not |v_P1_#t~short128_2676|)) (.cse24 (not |v_P1_#t~short128_2675|))) (and (or (and .cse13 .cse21) (and |v_P1_#t~short128_2676| .cse14)) (= |v_#race~x$r_buff0_thd2~0_12004| 0) (or (and (= |v_P1_#t~short128_2675| |v_P1_#t~short128_2676|) .cse21 .cse22) (and (= |v_#race~x$r_buff1_thd2~0_7105| 0) |v_P1_#t~short128_2676| (or (and .cse23 |v_P1_#t~short128_2675|) (and .cse24 .cse25)))) .cse26 (or (and .cse27 .cse24) (and |v_P1_#t~short128_2675| |v_P1_#t~short129_2719|)))) (and |v_P1_#t~short129_2718| (= |v_#race~x$r_buff0_thd2~0_12004| |v_#race~x$r_buff0_thd2~0_12001|) .cse22 (= |v_P1_#t~short129_2719| |v_P1_#t~short129_2718|) .cse28)) (or (and .cse29 .cse26) (and |v_P1_#t~short127_2803| |v_P1_#t~short129_2718|)) (= |v_P1_#t~ite131_2137| |v_P1_#t~ite132_1963|) (or (and .cse30 .cse31) (and |v_P1_#t~short127_2804| .cse32)) (let ((.cse33 (= |v_#race~x$r_buff0_thd2~0_12004| |v_#race~x$r_buff0_thd2~0_11985|)) (.cse35 (= |v_#race~x$w_buff0_used~0_17061| 0))) (or (let ((.cse34 (not |v_P1_#t~short130_2498|))) (and (or (and (= |v_#race~x$r_buff0_thd2~0_11985| 0) |v_P1_#t~short130_2498| (or (and .cse14 (not |v_P1_#t~short130_2497|)) (and .cse13 |v_P1_#t~short130_2497|))) (and .cse33 (= |v_P1_#t~short130_2498| |v_P1_#t~short130_2497|) .cse34)) (= |v_#race~x$w_buff1_used~0_16398| |v_#race~x$w_buff1_used~0_16395|) .cse27 (or (and |v_P1_#t~short130_2498| .cse31) (and .cse34 .cse32)) .cse35 (= |v_P1_#t~ite131_2137| 0))) (and .cse36 |v_P1_#t~short129_2719| .cse33 .cse37 .cse35 (= |v_P1_#t~ite131_2137| |old(~x$w_buff1_used~0)|)))) (let ((.cse42 (= |v_#race~x$w_buff1_used~0_16398| |v_#race~x$w_buff1_used~0_16392|))) (or (let ((.cse38 (not |v_P1_#t~short126_2764|)) (.cse39 (not |v_P1_#t~short126_2763|))) (and (= |v_#race~x$r_buff0_thd2~0_12001| 0) (or (and .cse29 .cse38) (and |v_P1_#t~short126_2764| |v_P1_#t~short127_2803|)) (or (and |v_P1_#t~short126_2763| .cse14) (and .cse13 .cse39)) (or (and |v_P1_#t~short126_2763| (or (and |v_P1_#t~short126_2764| .cse40) (and .cse41 .cse38)) (= |v_#race~x$w_buff1_used~0_16398| 0)) (and .cse39 .cse42 (= |v_P1_#t~short126_2763| |v_P1_#t~short126_2764|))) .cse30)) (and .cse43 |v_P1_#t~short127_2804| (= |v_#race~x$r_buff0_thd2~0_12001| |v_#race~x$r_buff0_thd2~0_11998|) (= |v_P1_#t~short127_2803| |v_P1_#t~short127_2804|) .cse42))) .cse20)) (and .cse43 (= |v_P1_#t~short129_2719| |old(P1Thread1of1ForFork0_#t~short129)|) .cse36 (= |v_P1_#t~short127_2803| |old(P1Thread1of1ForFork0_#t~short127)|) (= |v_P1_#t~ite131_2137| |old(P1Thread1of1ForFork0_#t~ite131)|) (= |v_#race~x$r_buff0_thd2~0_11985| |v_#race~x$r_buff0_thd2~0_11998|) .cse37 (= |v_#race~x$w_buff0_used~0_17058| |v_#race~x$w_buff0_used~0_17061|) .cse22 .cse44 (= |v_P1_#t~ite132_1963| |old(~x$w_buff1_used~0)|) .cse28))) (let ((.cse51 (= |v_P1_#t~short136_2287| |old(P1Thread1of1ForFork0_#t~short136)|)) (.cse47 (= |v_#race~x$r_buff1_thd2~0_7105| |v_#race~x$r_buff1_thd2~0_7101|)) (.cse48 (= |v_P1_#t~short134_2383| |old(P1Thread1of1ForFork0_#t~short134)|)) (.cse49 (= |v_#race~x$w_buff1_used~0_16397| |v_#race~x$w_buff1_used~0_16394|)) (.cse45 (= |v_#race~x$r_buff0_thd2~0_11984| 0)) (.cse46 (= |v_P1_#t~short138_2108| |old(P1Thread1of1ForFork0_#t~short138)|)) (.cse50 (= |old(P1Thread1of1ForFork0_#t~ite139)| |v_P1_#t~ite139_1671|))) (or (and (= |v_#race~x$w_buff0_used~0_17061| |v_#race~x$w_buff0_used~0_17063|) (= |v_P1_#t~short137_2339| |old(P1Thread1of1ForFork0_#t~short137)|) .cse45 (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite141_1461|) (= |old(P1Thread1of1ForFork0_#t~ite140)| |v_P1_#t~ite140_1661|) .cse46 .cse47 .cse48 .cse49 .cse44 (= |v_P1_#t~short135_2432| |old(P1Thread1of1ForFork0_#t~short135)|) .cse50 .cse51) (let ((.cse52 (not |v_P1_#t~short137_2338|)) (.cse53 (not |v_P1_#t~short135_2432|)) (.cse56 (not |v_P1_#t~short137_2339|)) (.cse57 (not |v_P1_#t~short135_2431|))) (and (or (and |v_P1_#t~short135_2432| |v_P1_#t~short137_2338|) (and .cse52 .cse53)) (= |v_P1_#t~ite140_1661| |v_P1_#t~ite141_1461|) (or (and .cse47 (= |v_#race~x$r_buff0_thd2~0_11997| |v_#race~x$r_buff0_thd2~0_11995|) (= |v_P1_#t~short137_2338| |v_P1_#t~short137_2339|) |v_P1_#t~short137_2338| .cse51) (let ((.cse55 (not |v_P1_#t~short136_2287|)) (.cse54 (not |v_P1_#t~short136_2288|))) (and (or (and .cse47 (= |v_P1_#t~short136_2287| |v_P1_#t~short136_2288|) .cse54) (and (or (and .cse25 .cse55) (and .cse23 |v_P1_#t~short136_2287|)) |v_P1_#t~short136_2288| (= |v_#race~x$r_buff1_thd2~0_7101| 0))) (or (and |v_P1_#t~short136_2287| |v_P1_#t~short137_2339|) (and .cse56 .cse55)) (= |v_#race~x$r_buff0_thd2~0_11997| 0) .cse52 (or (and .cse13 .cse54) (and |v_P1_#t~short136_2288| .cse14))))) (or (let ((.cse58 (not |v_P1_#t~short134_2384|)) (.cse59 (not |v_P1_#t~short134_2383|))) (and (= |v_#race~x$r_buff0_thd2~0_11995| 0) .cse57 (or (and |v_P1_#t~short134_2384| .cse14) (and .cse13 .cse58)) (or (and .cse49 .cse58 (= |v_P1_#t~short134_2384| |v_P1_#t~short134_2383|)) (and |v_P1_#t~short134_2384| (or (and .cse59 .cse60) (and .cse61 |v_P1_#t~short134_2383|)) (= |v_#race~x$w_buff1_used~0_16397| 0))) (or (and .cse59 .cse53) (and |v_P1_#t~short134_2383| |v_P1_#t~short135_2432|)))) (and (= |v_#race~x$r_buff0_thd2~0_11985| |v_#race~x$r_buff0_thd2~0_11995|) (= |v_P1_#t~short135_2431| |v_P1_#t~short135_2432|) .cse48 |v_P1_#t~short135_2431| .cse49)) (let ((.cse64 (= |v_#race~x$w_buff0_used~0_17063| 0))) (or (let ((.cse63 (not |v_P1_#t~short138_2108|)) (.cse62 (not |v_P1_#t~short138_2109|))) (and (or (and .cse62 .cse32) (and |v_P1_#t~short138_2109| .cse31)) (or (and (= |v_P1_#t~ite139_1671| 0) (= |v_#race~x$r_buff0_thd2~0_11989| |v_#race~x$r_buff0_thd2~0_11984|) |v_P1_#t~short138_2108|) (and .cse45 .cse63 (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite139_1671|))) (= |v_P1_#t~ite139_1671| |v_P1_#t~ite140_1661|) (or (and (= |v_#race~x$r_buff0_thd2~0_11989| 0) (or (and .cse63 .cse14) (and .cse13 |v_P1_#t~short138_2108|)) |v_P1_#t~short138_2109|) (and .cse62 (= |v_P1_#t~short138_2108| |v_P1_#t~short138_2109|) (= |v_#race~x$r_buff0_thd2~0_11989| |v_#race~x$r_buff0_thd2~0_11997|))) .cse64 .cse56)) (and .cse45 (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite140_1661|) .cse46 |v_P1_#t~short137_2339| .cse64 .cse50))) (or (and |v_P1_#t~short135_2431| .cse32) (and .cse57 .cse31)) .cse20)))) (or (= |v_P1_#t~nondet83_627| 0) (= |v_P1_#t~nondet83_627| 1)) (let ((.cse65 (= |old(#race~x$r_buff1_thd2~0)| |v_#race~x$r_buff1_thd2~0_7104|))) (or (and (= |v_P1_#t~short93_3196| |v_P1_#t~short93_3197|) (= |v_#race~x$r_buff0_thd2~0_11987| |v_#race~x$r_buff0_thd2~0_11996|) |v_P1_#t~short93_3197| (= |v_P1_#t~short92_3138| |old(P1Thread1of1ForFork0_#t~short92)|) .cse65) (let ((.cse67 (not |v_P1_#t~short92_3138|)) (.cse66 (not |v_P1_#t~short92_3137|))) (and (or (and .cse13 .cse66) (and |v_P1_#t~short92_3137| .cse14)) (= |v_#race~x$r_buff0_thd2~0_11987| 0) (or (and |v_P1_#t~short92_3138| |v_P1_#t~short93_3196|) (and .cse11 .cse67)) .cse68 (or (and (= |v_#race~x$r_buff1_thd2~0_7104| 0) (or (and .cse23 |v_P1_#t~short92_3138|) (and .cse67 .cse25)) |v_P1_#t~short92_3137|) (and (= |v_P1_#t~short92_3137| |v_P1_#t~short92_3138|) .cse66 .cse65)))))) (or (and |v_P1_#t~short91_3161| |v_P1_#t~short93_3197|) (and .cse69 .cse68)) (let ((.cse73 (= |v_P1_#t~short119_2994| |old(P1Thread1of1ForFork0_#t~short119)|)) (.cse70 (= |v_#race~x$r_buff1_thd2~0_7103| |v_#race~x$r_buff1_thd2~0_7099|)) (.cse74 (= |v_P1_#t~ite122_2439| |old(P1Thread1of1ForFork0_#t~ite122)|)) (.cse75 (= |v_P1_#t~short121_2850| |old(P1Thread1of1ForFork0_#t~short121)|)) (.cse71 (= |v_#race~x$w_buff0_used~0_17057| 0)) (.cse72 (= |v_P1_#t~short117_3065| |old(P1Thread1of1ForFork0_#t~short117)|)) (.cse76 (= |v_#race~x$w_buff1_used~0_16396| |v_#race~x$w_buff1_used~0_16392|))) (or (and (= |v_P1_#t~ite123_2429| |old(P1Thread1of1ForFork0_#t~ite123)|) (= |v_P1_#t~short118_3102| |old(P1Thread1of1ForFork0_#t~short118)|) .cse70 .cse71 .cse72 (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite124_2277|) (= |v_P1_#t~short120_3033| |old(P1Thread1of1ForFork0_#t~short120)|) .cse44 (= |v_#race~x$r_buff0_thd2~0_11998| |v_#race~x$r_buff0_thd2~0_11993|) .cse73 .cse74 .cse75 .cse76) (let ((.cse78 (not |v_P1_#t~short120_3032|)) (.cse80 (not |v_P1_#t~short120_3033|)) (.cse81 (not |v_P1_#t~short118_3102|)) (.cse86 (not |v_P1_#t~short118_3101|))) (and (or (and |v_P1_#t~short120_3032| .cse70 (= |v_P1_#t~short120_3032| |v_P1_#t~short120_3033|) (= |v_#race~x$r_buff0_thd2~0_11988| |v_#race~x$r_buff0_thd2~0_11999|) .cse73) (let ((.cse77 (not |v_P1_#t~short119_2993|)) (.cse79 (not |v_P1_#t~short119_2994|))) (and (or (and |v_P1_#t~short119_2993| .cse14) (and .cse13 .cse77)) .cse78 (= |v_#race~x$r_buff0_thd2~0_11999| 0) (or (and |v_P1_#t~short119_2993| (= |v_#race~x$r_buff1_thd2~0_7099| 0) (or (and |v_P1_#t~short119_2994| .cse23) (and .cse79 .cse25))) (and (= |v_P1_#t~short119_2993| |v_P1_#t~short119_2994|) .cse70 .cse77)) (or (and .cse79 .cse80) (and |v_P1_#t~short119_2994| |v_P1_#t~short120_3033|))))) (= |v_P1_#t~ite123_2429| |v_P1_#t~ite124_2277|) (or (and |v_P1_#t~short118_3102| |v_P1_#t~short120_3032|) (and .cse78 .cse81)) (let ((.cse82 (= |v_#race~x$r_buff0_thd2~0_11999| |v_#race~x$r_buff0_thd2~0_11998|))) (or (and |v_P1_#t~short120_3033| .cse71 (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite123_2429|) .cse82 .cse74 .cse75) (let ((.cse83 (not |v_P1_#t~short121_2851|)) (.cse84 (not |v_P1_#t~short121_2850|))) (and (= |v_P1_#t~ite122_2439| |v_P1_#t~ite123_2429|) (or (and .cse82 .cse83 (= |v_P1_#t~short121_2850| |v_P1_#t~short121_2851|)) (and (= |v_#race~x$r_buff0_thd2~0_11998| 0) |v_P1_#t~short121_2851| (or (and |v_P1_#t~short121_2850| .cse13) (and .cse84 .cse14)))) (or (and .cse17 .cse83) (and |v_P1_#t~short121_2851| .cse16)) (or (and .cse84 (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite122_2439|) .cse71) (and |v_P1_#t~short121_2850| .cse71 (= |v_P1_#t~ite122_2439| 0))) .cse80)))) (or (let ((.cse87 (not |v_P1_#t~short117_3066|)) (.cse85 (not |v_P1_#t~short117_3065|))) (and (or (and .cse85 .cse81) (and |v_P1_#t~short117_3065| |v_P1_#t~short118_3102|)) .cse86 (= |v_#race~x$r_buff0_thd2~0_11988| 0) (or (and .cse13 .cse87) (and |v_P1_#t~short117_3066| .cse14)) (or (and (= |v_P1_#t~short117_3065| |v_P1_#t~short117_3066|) .cse87 .cse76) (and |v_P1_#t~short117_3066| (or (and .cse41 .cse85) (and |v_P1_#t~short117_3065| .cse40)) (= |v_#race~x$w_buff1_used~0_16392| 0))))) (and |v_P1_#t~short118_3101| (= |v_P1_#t~short118_3101| |v_P1_#t~short118_3102|) (= |v_#race~x$r_buff0_thd2~0_11988| |v_#race~x$r_buff0_thd2~0_11993|) .cse72 .cse76)) (or (and .cse86 .cse16) (and |v_P1_#t~short118_3101| .cse17)) .cse20)))) (= (ite (= (mod |v_P1_#t~nondet83_627| 256) 0) 0 1) ~weak$$choice0~0) (= (store |old(#memory_int)| |~#x~0.base| (store .cse88 |~#x~0.offset| |v_P1_#t~ite97_2517|)) |#memory_int|) (= |#race~x$flush_delayed~0| 0) (let ((.cse101 (= |old(P1Thread1of1ForFork0_#t~short145)| |v_P1_#t~short145_1688|)) (.cse98 (= |old(P1Thread1of1ForFork0_#t~short147)| |v_P1_#t~short147_1473|)) (.cse107 (= |old(P1Thread1of1ForFork0_#t~short143)| |v_P1_#t~short143_1799|)) (.cse99 (= |v_#race~x$r_buff1_thd2~0_7106| 0)) (.cse106 (= |v_#race~x$w_buff1_used~0_16397| |#race~x$w_buff1_used~0|))) (or (let ((.cse94 (= (mod ~x$r_buff0_thd2~0 256) 0))) (let ((.cse89 (not |v_P1_#t~short146_1742|)) (.cse96 (not |v_P1_#t~short146_1743|)) (.cse90 (not |v_P1_#t~short144_1852|)) (.cse95 (not .cse94)) (.cse91 (not |v_P1_#t~short144_1851|))) (and (or (and |v_P1_#t~short144_1852| |v_P1_#t~short146_1742|) (and .cse89 .cse90)) (or (and |v_P1_#t~short144_1851| .cse32) (and .cse91 .cse31)) (let ((.cse92 (= |v_#race~x$r_buff0_thd2~0_11986| |#race~x$r_buff0_thd2~0|)) (.cse97 (= |#race~x$w_buff0_used~0| 0))) (or (let ((.cse93 (not |v_P1_#t~short147_1474|))) (and (= |v_#race~x$r_buff1_thd2~0_7106| |v_#race~x$r_buff1_thd2~0_7100|) (or (and .cse92 (= |v_P1_#t~short147_1473| |v_P1_#t~short147_1474|) .cse93) (and (or (and .cse94 (not |v_P1_#t~short147_1473|)) (and |v_P1_#t~short147_1473| .cse95)) |v_P1_#t~short147_1474| (= |#race~x$r_buff0_thd2~0| 0))) (= 0 |v_P1_#t~ite148_1099|) (or (and .cse32 .cse93) (and |v_P1_#t~short147_1474| .cse31)) .cse96 .cse97)) (and .cse98 .cse92 .cse99 .cse97 |v_P1_#t~short146_1743| (= |old(~x$r_buff1_thd2~0)| |v_P1_#t~ite148_1099|)))) (let ((.cse100 (= |v_#race~x$r_buff1_thd2~0_7101| |v_#race~x$r_buff1_thd2~0_7100|))) (or (and (= |v_P1_#t~short146_1742| |v_P1_#t~short146_1743|) .cse100 (= |v_#race~x$r_buff0_thd2~0_11986| |v_#race~x$r_buff0_thd2~0_11991|) .cse101 |v_P1_#t~short146_1742|) (let ((.cse103 (not |v_P1_#t~short145_1688|)) (.cse102 (not |v_P1_#t~short145_1687|))) (and (or (and .cse100 .cse102 (= |v_P1_#t~short145_1688| |v_P1_#t~short145_1687|)) (and (= |v_#race~x$r_buff1_thd2~0_7100| 0) (or (and .cse23 |v_P1_#t~short145_1688|) (and .cse25 .cse103)) |v_P1_#t~short145_1687|)) (= |v_#race~x$r_buff0_thd2~0_11986| 0) .cse89 (or (and .cse96 .cse103) (and |v_P1_#t~short145_1688| |v_P1_#t~short146_1743|)) (or (and .cse94 |v_P1_#t~short145_1687|) (and .cse102 .cse95)))))) (= |v_P1_#t~ite149_877| |v_P1_#t~ite148_1099|) (or (let ((.cse104 (not |v_P1_#t~short143_1799|)) (.cse105 (not |v_P1_#t~short143_1800|))) (and (or (and .cse90 .cse104) (and |v_P1_#t~short143_1799| |v_P1_#t~short144_1852|)) (or (and .cse94 |v_P1_#t~short143_1800|) (and .cse105 .cse95)) (= |v_#race~x$r_buff0_thd2~0_11991| 0) .cse91 (or (and (= |#race~x$w_buff1_used~0| 0) |v_P1_#t~short143_1800| (or (and .cse104 .cse60) (and .cse61 |v_P1_#t~short143_1799|))) (and .cse105 (= |v_P1_#t~short143_1800| |v_P1_#t~short143_1799|) .cse106)))) (and (= |v_#race~x$r_buff0_thd2~0_11992| |v_#race~x$r_buff0_thd2~0_11991|) .cse107 |v_P1_#t~short144_1851| (= |v_P1_#t~short144_1852| |v_P1_#t~short144_1851|) .cse106)) .cse20))) (and (= |v_#race~x$r_buff0_thd2~0_11992| |#race~x$r_buff0_thd2~0|) (= |v_P1_#t~ite149_877| |old(~x$r_buff1_thd2~0)|) .cse101 .cse98 (= |#race~x$w_buff0_used~0| |v_#race~x$w_buff0_used~0_17063|) .cse107 .cse99 (= |old(P1Thread1of1ForFork0_#t~short144)| |v_P1_#t~short144_1852|) (= |old(P1Thread1of1ForFork0_#t~short146)| |v_P1_#t~short146_1743|) .cse44 .cse106 (= |old(P1Thread1of1ForFork0_#t~ite148)| |v_P1_#t~ite148_1099|)))) (= (ite (= (mod |v_P1_#t~nondet85_821| 256) 0) 0 1) ~weak$$choice2~0) (= .cse108 (select .cse18 .cse2)) (= (mod ~x$flush_delayed~0 256) 0) (= |v_#race_10330| (store |v_#race_10329| |~#x~0.base| (store (store (store (store .cse6 |~#x~0.offset| .cse108) .cse3 .cse108) .cse2 .cse108) .cse1 .cse108))) (= (ite (= 0 (mod |v_P1_#t~ite149_877| 256)) 0 1) ~x$r_buff1_thd2~0) (= .cse108 (select .cse18 |~#x~0.offset|)) (= .cse109 ~__unbuffered_p1_EBX~0) (let ((.cse110 (= |v_#race~x$w_buff1_used~0_16393| |old(#race~x$w_buff1_used~0)|))) (or (and |v_P1_#t~short91_3162| (= |v_#race~x$r_buff0_thd2~0_11996| |old(#race~x$r_buff0_thd2~0)|) (= |v_P1_#t~short90_3094| |old(P1Thread1of1ForFork0_#t~short90)|) .cse110 (= |v_P1_#t~short91_3161| |v_P1_#t~short91_3162|)) (let ((.cse112 (not |v_P1_#t~short90_3093|)) (.cse111 (not |v_P1_#t~short90_3094|))) (and .cse19 (or (and .cse69 .cse111) (and |v_P1_#t~short90_3094| |v_P1_#t~short91_3161|)) (or (and .cse13 .cse112) (and |v_P1_#t~short90_3093| .cse14)) (= |v_#race~x$r_buff0_thd2~0_11996| 0) (or (and (= |v_P1_#t~short90_3093| |v_P1_#t~short90_3094|) .cse112 .cse110) (and (or (and .cse41 .cse111) (and .cse40 |v_P1_#t~short90_3094|)) |v_P1_#t~short90_3093| (= |v_#race~x$w_buff1_used~0_16393| 0))))))) (let ((.cse129 (= |v_#race~x$w_buff1_used~0_16393| |v_#race~x$w_buff1_used~0_16391|)) (.cse120 (= |old(P1Thread1of1ForFork0_#t~ite104)| |v_P1_#t~ite104_2729|)) (.cse116 (= |v_#race~x$w_buff0~0_7147| 0)) (.cse130 (= |v_P1_#t~short99_3309| |old(P1Thread1of1ForFork0_#t~short99)|)) (.cse125 (= |v_#race~x$r_buff1_thd2~0_7104| |v_#race~x$r_buff1_thd2~0_7102|)) (.cse126 (= |v_P1_#t~short101_3266| |old(P1Thread1of1ForFork0_#t~short101)|)) (.cse121 (= |v_P1_#t~short103_3169| |old(P1Thread1of1ForFork0_#t~short103)|))) (or (let ((.cse119 (not |v_P1_#t~short102_3295|)) (.cse124 (not |v_P1_#t~short102_3294|)) (.cse123 (not |v_P1_#t~short100_3336|)) (.cse122 (not |v_P1_#t~short100_3335|))) (and (let ((.cse118 (= |v_#race~x$w_buff0_used~0_17062| 0)) (.cse115 (= |v_#race~x$r_buff0_thd2~0_12005| |v_#race~x$r_buff0_thd2~0_12000|))) (or (let ((.cse113 (not |v_P1_#t~short103_3169|)) (.cse114 (not |v_P1_#t~short103_3168|))) (and (or (and (= |v_#race~x$r_buff0_thd2~0_12005| 0) (or (and .cse113 .cse14) (and .cse13 |v_P1_#t~short103_3169|)) |v_P1_#t~short103_3168|) (and .cse114 (= |v_P1_#t~short103_3168| |v_P1_#t~short103_3169|) .cse115)) (let ((.cse117 (= |old(~x$w_buff0~0)| |v_P1_#t~ite104_2729|))) (or (and .cse116 |v_P1_#t~short103_3169| .cse117) (and .cse113 .cse116 .cse117))) (= |v_P1_#t~ite104_2729| |v_P1_#t~ite105_2717|) (or (and .cse16 |v_P1_#t~short103_3168|) (and .cse114 .cse17)) .cse118 .cse119)) (and .cse120 .cse116 (= |old(~x$w_buff0~0)| |v_P1_#t~ite105_2717|) |v_P1_#t~short102_3295| .cse118 .cse115 .cse121))) (or (and |v_P1_#t~short100_3335| .cse17) (and .cse122 .cse16)) (or (and .cse123 .cse124) (and |v_P1_#t~short100_3336| |v_P1_#t~short102_3294|)) (or (and (= |v_#race~x$r_buff0_thd2~0_12003| |v_#race~x$r_buff0_thd2~0_12000|) (= |v_P1_#t~short102_3294| |v_P1_#t~short102_3295|) |v_P1_#t~short102_3294| .cse125 .cse126) (let ((.cse128 (not |v_P1_#t~short101_3266|)) (.cse127 (not |v_P1_#t~short101_3265|))) (and (or (and (= |v_P1_#t~short101_3265| |v_P1_#t~short101_3266|) .cse127 .cse125) (and (or (and .cse128 .cse25) (and .cse23 |v_P1_#t~short101_3266|)) (= |v_#race~x$r_buff1_thd2~0_7102| 0) |v_P1_#t~short101_3265|)) (or (and |v_P1_#t~short101_3266| |v_P1_#t~short102_3295|) (and .cse128 .cse119)) (or (and .cse14 |v_P1_#t~short101_3265|) (and .cse127 .cse13)) .cse124 (= |v_#race~x$r_buff0_thd2~0_12000| 0)))) (or (and .cse129 (= |v_P1_#t~short100_3335| |v_P1_#t~short100_3336|) (= |v_#race~x$r_buff0_thd2~0_12003| |v_#race~x$r_buff0_thd2~0_11990|) .cse130 |v_P1_#t~short100_3335|) (let ((.cse131 (not |v_P1_#t~short99_3309|)) (.cse132 (not |v_P1_#t~short99_3310|))) (and (or (and |v_P1_#t~short99_3309| |v_P1_#t~short100_3336|) (and .cse131 .cse123)) .cse122 (or (and .cse132 .cse13) (and |v_P1_#t~short99_3310| .cse14)) (or (and |v_P1_#t~short99_3310| (= |v_#race~x$w_buff1_used~0_16391| 0) (or (and .cse131 .cse41) (and .cse40 |v_P1_#t~short99_3309|))) (and .cse132 .cse129 (= |v_P1_#t~short99_3309| |v_P1_#t~short99_3310|))) (= |v_#race~x$r_buff0_thd2~0_12003| 0)))) (= ~x$w_buff0~0 |v_P1_#t~ite105_2717|) .cse20)) (and .cse129 (= |v_#race~x$w_buff0_used~0_17062| |v_#race~x$w_buff0_used~0_17060|) (= |old(P1Thread1of1ForFork0_#t~ite105)| |v_P1_#t~ite105_2717|) (= |v_#race~x$r_buff0_thd2~0_12005| |v_#race~x$r_buff0_thd2~0_11990|) .cse120 .cse116 .cse130 (= |old(~x$w_buff0~0)| ~x$w_buff0~0) .cse44 (= |v_P1_#t~short100_3336| |old(P1Thread1of1ForFork0_#t~short100)|) (= |v_P1_#t~short102_3295| |old(P1Thread1of1ForFork0_#t~short102)|) .cse125 .cse126 .cse121))) (let ((.cse145 (= |old(P1Thread1of1ForFork0_#t~ite113)| |v_P1_#t~ite113_2639|)) (.cse146 (= |v_#race~x$w_buff1~0_7632| 0)) (.cse137 (= |v_#race~x$w_buff1_used~0_16396| |v_#race~x$w_buff1_used~0_16391|)) (.cse149 (= |old(P1Thread1of1ForFork0_#t~short112)| |v_P1_#t~short112_3095|)) (.cse138 (= |old(P1Thread1of1ForFork0_#t~short108)| |v_P1_#t~short108_3266|)) (.cse143 (= |v_#race~x$r_buff1_thd2~0_7103| |v_#race~x$r_buff1_thd2~0_7102|)) (.cse144 (= |old(P1Thread1of1ForFork0_#t~short110)| |v_P1_#t~short110_3209|))) (or (let ((.cse133 (not |v_P1_#t~short109_3297|)) (.cse141 (not |v_P1_#t~short111_3244|)) (.cse142 (not |v_P1_#t~short111_3245|)) (.cse135 (not |v_P1_#t~short109_3298|))) (and (or (and .cse17 |v_P1_#t~short109_3297|) (and .cse133 .cse16)) (or (let ((.cse134 (not |v_P1_#t~short108_3266|)) (.cse136 (not |v_P1_#t~short108_3265|))) (and .cse133 (= |v_#race~x$r_buff0_thd2~0_11994| 0) (or (and |v_P1_#t~short108_3266| |v_P1_#t~short109_3298|) (and .cse134 .cse135)) (or (and .cse13 .cse136) (and .cse14 |v_P1_#t~short108_3265|)) (or (and (or (and .cse41 .cse134) (and .cse40 |v_P1_#t~short108_3266|)) (= |v_#race~x$w_buff1_used~0_16396| 0) |v_P1_#t~short108_3265|) (and .cse137 .cse136 (= |v_P1_#t~short108_3265| |v_P1_#t~short108_3266|))))) (and (= |v_#race~x$r_buff0_thd2~0_12005| |v_#race~x$r_buff0_thd2~0_11994|) (= |v_P1_#t~short109_3297| |v_P1_#t~short109_3298|) .cse137 .cse138 |v_P1_#t~short109_3297|)) (= |v_P1_#t~ite114_2627| ~x$w_buff1~0) (or (let ((.cse139 (not |v_P1_#t~short110_3210|)) (.cse140 (not |v_P1_#t~short110_3209|))) (and (or (and .cse14 |v_P1_#t~short110_3210|) (and .cse13 .cse139)) (or (and .cse140 .cse141) (and |v_P1_#t~short110_3209| |v_P1_#t~short111_3244|)) .cse142 (or (and .cse143 .cse139 (= |v_P1_#t~short110_3209| |v_P1_#t~short110_3210|)) (and (or (and .cse140 .cse25) (and .cse23 |v_P1_#t~short110_3209|)) (= |v_#race~x$r_buff1_thd2~0_7103| 0) |v_P1_#t~short110_3210|)) (= |v_#race~x$r_buff0_thd2~0_12002| 0))) (and (= |v_P1_#t~short111_3245| |v_P1_#t~short111_3244|) (= |v_#race~x$r_buff0_thd2~0_12002| |v_#race~x$r_buff0_thd2~0_11994|) .cse143 .cse144 |v_P1_#t~short111_3245|)) (let ((.cse148 (= |v_#race~x$w_buff0_used~0_17059| 0)) (.cse147 (= |v_#race~x$r_buff0_thd2~0_12002| |v_#race~x$r_buff0_thd2~0_11993|))) (or (and .cse145 .cse146 (= |v_P1_#t~ite114_2627| |old(~x$w_buff1~0)|) .cse147 .cse148 .cse149 |v_P1_#t~short111_3244|) (let ((.cse152 (not |v_P1_#t~short112_3095|)) (.cse150 (not |v_P1_#t~short112_3094|))) (and .cse148 .cse141 (= |v_P1_#t~ite113_2639| |v_P1_#t~ite114_2627|) (or (and .cse150 .cse17) (and .cse16 |v_P1_#t~short112_3094|)) (let ((.cse151 (= |v_P1_#t~ite113_2639| |old(~x$w_buff1~0)|))) (or (and .cse146 .cse151 |v_P1_#t~short112_3095|) (and .cse146 .cse151 .cse152))) (or (and (= |v_#race~x$r_buff0_thd2~0_11993| 0) (or (and .cse13 |v_P1_#t~short112_3095|) (and .cse152 .cse14)) |v_P1_#t~short112_3094|) (and .cse150 (= |v_P1_#t~short112_3095| |v_P1_#t~short112_3094|) .cse147)))))) (or (and |v_P1_#t~short109_3298| |v_P1_#t~short111_3245|) (and .cse142 .cse135)) .cse20)) (and (= |old(P1Thread1of1ForFork0_#t~short111)| |v_P1_#t~short111_3244|) (= |v_#race~x$w_buff0_used~0_17059| |v_#race~x$w_buff0_used~0_17062|) .cse145 (= |v_#race~x$r_buff0_thd2~0_12005| |v_#race~x$r_buff0_thd2~0_11993|) .cse146 .cse137 .cse149 .cse138 .cse44 (= |old(P1Thread1of1ForFork0_#t~ite114)| |v_P1_#t~ite114_2627|) .cse143 (= |old(P1Thread1of1ForFork0_#t~short109)| |v_P1_#t~short109_3298|) (= |old(~x$w_buff1~0)| ~x$w_buff1~0) .cse144))) (= 0 |#race~weak$$choice2~0|) (= |P1Thread1of1ForFork0_#t~mem153| .cse109) (= ~x$w_buff0_used~0 (ite (= (mod |v_P1_#t~ite124_2277| 256) 0) 0 1)) (= .cse108 (select .cse18 .cse1))))) +//@ semantics [402] {~x$w_buff0~0,~x$flush_delayed~0,P1Thread1of1ForFork0_#t~mem88,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,#race~x$mem_tmp~0,~x$w_buff1~0,P1Thread1of1ForFork0_#t~mem94,~x$r_buff1_thd2~0,~x$w_buff1_used~0,#race~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~ite105,~weak$$choice0~0,P1Thread1of1ForFork0_#t~short127,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,#race,P1Thread1of1ForFork0_#t~nondet142,~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~mem151,#race~x$w_buff0~0,~x$r_buff0_thd2~0,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,P1Thread1of1ForFork0_#t~short147,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~nondet150,P1Thread1of1ForFork0_#t~ite140,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet152,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} false +//@ semantics [403] {P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,P1Thread1of1ForFork0_#t~short90,#race~x$mem_tmp~0,~x$w_buff1~0,~x$r_buff1_thd2~0,~x$w_buff1_used~0,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet155,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite154,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~nondet142,P1Thread1of1ForFork0_#t~mem151,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~nondet150,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet85,~x$w_buff0~0,~x$flush_delayed~0,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~short119,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,P1Thread1of1ForFork0_#t~mem94,#race~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~ite105,P1Thread1of1ForFork0_#t~short127,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,#race,~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~mem153,#race~x$w_buff0~0,~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short147,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet152,P1Thread1of1ForFork0_#t~short143} [(|v_P1_#t~short128_2679| Bool) (|v_P1_#t~ite131_2139| Int) (|v_P1_#t~ite148_1101| Int) (|v_P1_#t~short144_1855| Bool) (|v_P1_#t~short144_1856| Bool) (|v_P1_#t~short110_3214| Bool) (|v_P1_#t~short110_3213| Bool) (|v_P1_#t~short147_1477| Bool) (|v_P1_#t~short147_1478| Bool) (|v_#race~x$w_buff1_used~0_16407| Int) (|v_#race~x$w_buff1_used~0_16408| Int) (|v_P1_#t~short92_3142| Bool) (|v_P1_#t~short92_3141| Bool) (|v_P1_#t~nondet85_823| Int) (|v_P1_#t~short126_2767| Bool) (|v_P1_#t~short126_2768| Bool) (|v_#race~x$r_buff0_thd2~0_12029| Int) (|v_P1_#t~short129_2722| Bool) (|v_#race~x$r_buff0_thd2~0_12028| Int) (|v_P1_#t~short129_2723| Bool) (|v_#race~x$w_buff1_used~0_16409| Int) (|v_P1_#t~short121_2855| Bool) (|v_P1_#t~short121_2854| Bool) (|v_P1_#t~short127_2807| Bool) (|v_P1_#t~short127_2808| Bool) (|v_#race~x$w_buff1_used~0_16414| Int) (|v_#race~x$w_buff1_used~0_16412| Int) (|v_#race~x$w_buff1_used~0_16413| Int) (|v_#race~x$w_buff1_used~0_16410| Int) (|v_#race~x$w_buff1_used~0_16411| Int) (|v_P1_#t~short108_3270| Bool) (|v_P1_#t~short90_3097| Bool) (|v_#race~x$w_buff1~0_7635| Int) (|v_P1_#t~ite123_2431| Int) (|v_#race~x$w_buff1~0_7636| Int) (|v_P1_#t~short112_3098| Bool) (|v_P1_#t~short112_3099| Bool) (|v_P1_#t~short99_3313| Bool) (|v_P1_#t~short99_3314| Bool) (|v_P1_#t~nondet89_1694| Int) (|v_P1_#t~ite105_2719| Int) (|v_P1_#t~ite122_2441| Int) (|v_P1_#t~short145_1692| Bool) (|v_P1_#t~short145_1691| Bool) (|v_P1_#t~short135_2436| Bool) (|v_P1_#t~short90_3098| Bool) (|v_P1_#t~short135_2435| Bool) (|v_P1_#t~short137_2343| Bool) (|v_P1_#t~short137_2342| Bool) (|v_P1_#t~ite124_2279| Int) (|v_P1_#t~short128_2680| Bool) (|v_P1_#t~short102_3298| Bool) (|v_P1_#t~short95_3070| Bool) (|v_P1_#t~short102_3299| Bool) (|v_P1_#t~short95_3071| Bool) (|v_#race~x$r_buff1_thd2~0_7121| Int) (|v_P1_#t~short93_3200| Bool) (|v_#race~x$r_buff1_thd2~0_7120| Int) (|v_P1_#t~short93_3201| Bool) (|v_P1_#t~short118_3106| Bool) (|v_P1_#t~short118_3105| Bool) (|v_#race~x$r_buff1_thd2~0_7122| Int) (|v_#race~x$w_buff0_used~0_17071| Int) (|v_#race~x$w_buff0_used~0_17073| Int) (|v_P1_#t~short109_3301| Bool) (|v_P1_#t~ite113_2641| Int) (|v_P1_#t~short117_3069| Bool) (|v_#race~x$w_buff0_used~0_17072| Int) (|v_P1_#t~short109_3302| Bool) (|v_#race~x$r_buff1_thd2~0_7119| Int) (|v_P1_#t~ite149_879| Int) (|v_P1_#t~ite96_2663| Int) (|v_P1_#t~nondet83_629| Int) (|v_P1_#t~short143_1803| Bool) (|v_P1_#t~short108_3269| Bool) (|v_P1_#t~short143_1804| Bool) (|v_P1_#t~ite141_1463| Int) (|v_P1_#t~short130_2501| Bool) (|v_#race~x$r_buff1_thd2~0_7116| Int) (|v_#race~x$r_buff1_thd2~0_7115| Int) (|v_#race~x$r_buff1_thd2~0_7118| Int) (|v_P1_#t~short130_2502| Bool) (|v_#race~x$r_buff1_thd2~0_7117| Int) (|v_P1_#t~ite114_2629| Int) (|v_P1_#t~short91_3165| Bool) (|v_P1_#t~short91_3166| Bool) (|v_P1_#t~ite132_1965| Int) (|v_P1_#t~mem94_2688| Int) (|v_P1_#t~short117_3070| Bool) (|v_#race_10335| (Array Int (Array Int Int))) (|v_#race~x$r_buff0_thd2~0_12030| Int) (|v_#race_10334| (Array Int (Array Int Int))) (|v_P1_#t~short100_3340| Bool) (|v_#race_10333| (Array Int (Array Int Int))) (|v_P1_#t~short111_3248| Bool) (|v_#race~x$w_buff0~0_7152| Int) (|v_#race~x$w_buff0~0_7151| Int) (|v_P1_#t~short111_3249| Bool) (|v_#race~x$r_buff0_thd2~0_12036| Int) (|v_#race~x$r_buff0_thd2~0_12035| Int) (|v_#race~x$r_buff0_thd2~0_12038| Int) (|v_#race~x$r_buff0_thd2~0_12037| Int) (|v_P1_#t~short136_2291| Bool) (|v_#race~x$r_buff0_thd2~0_12032| Int) (|v_#race~x$r_buff0_thd2~0_12031| Int) (|v_#race~x$r_buff0_thd2~0_12034| Int) (|v_#race~x$r_buff0_thd2~0_12033| Int) (|v_P1_#t~short101_3270| Bool) (|v_P1_#t~short136_2292| Bool) (|v_#race~x$r_buff0_thd2~0_12039| Int) (|v_P1_#t~ite139_1673| Int) (|v_P1_#t~short101_3269| Bool) (|v_P1_#t~ite104_2731| Int) (|v_P1_#t~short119_2997| Bool) (|v_#race~x$r_buff0_thd2~0_12041| Int) (|v_P1_#t~short146_1746| Bool) (|v_#race~x$r_buff0_thd2~0_12040| Int) (|v_P1_#t~short146_1747| Bool) (|v_P1_#t~short103_3173| Bool) (|v_#race~x$w_buff0_used~0_17075| Int) (|v_P1_#t~short103_3172| Bool) (|v_#race~x$w_buff0_used~0_17074| Int) (|v_#race~x$w_buff0_used~0_17077| Int) (|v_#race~x$w_buff0_used~0_17076| Int) (|v_P1_#t~short134_2388| Bool) (|v_#race~x$r_buff0_thd2~0_12047| Int) (|v_P1_#t~short138_2113| Bool) (|v_#race~x$r_buff0_thd2~0_12046| Int) (|v_P1_#t~short138_2112| Bool) (|v_#race~x$r_buff0_thd2~0_12049| Int) (|v_P1_#t~short134_2387| Bool) (|v_#race~x$r_buff0_thd2~0_12048| Int) (|v_#race~x$r_buff0_thd2~0_12043| Int) (|v_#race~x$r_buff0_thd2~0_12042| Int) (|v_P1_#t~short119_2998| Bool) (|v_#race~x$r_buff0_thd2~0_12045| Int) (|v_#race~x$r_buff0_thd2~0_12044| Int) (|v_P1_#t~short100_3339| Bool) (|v_P1_#t~short120_3037| Bool) (|v_P1_#t~ite140_1663| Int) (|v_P1_#t~short120_3036| Bool)] (let ((.cse46 (= (mod ~weak$$choice2~0 256) 0)) (.cse54 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse126 (= (mod ~x$w_buff1_used~0 256) 0)) (.cse5 (= 0 (mod |old(~x$r_buff0_thd2~0)| 256))) (.cse2 (= (mod |old(~x$r_buff1_thd2~0)| 256) 0)) (.cse90 (select |v_#race_10334| |~#x~0.base|)) (.cse22 (+ |~#x~0.offset| 1)) (.cse45 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse12 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse135 (select |old(#memory_int)| |~#x~0.base|))) (let ((.cse7 (not |v_P1_#t~short93_3200|)) (.cse18 (select |v_#race_10333| |~#x~0.base|)) (.cse8 (not |v_P1_#t~short93_3201|)) (.cse21 (select .cse135 |~#x~0.offset|)) (.cse69 (select |v_#race_10335| |~#x~0.base|)) (.cse13 (not .cse12)) (.cse44 (not .cse45)) (.cse66 (not |v_P1_#t~short91_3165|)) (.cse68 (not |v_P1_#t~short91_3166|)) (.cse67 (select .cse90 .cse22)) (.cse20 (+ 3 |~#x~0.offset|)) (.cse19 (+ 2 |~#x~0.offset|)) (.cse0 (not .cse2)) (.cse6 (not .cse5)) (.cse124 (not .cse126)) (.cse52 (not .cse54)) (.cse27 (not .cse46))) (and (let ((.cse4 (= |old(#race~x$r_buff1_thd2~0)| |v_#race~x$r_buff1_thd2~0_7117|))) (or (let ((.cse3 (not |v_P1_#t~short92_3142|)) (.cse1 (not |v_P1_#t~short92_3141|))) (and (or (and (= |v_#race~x$r_buff1_thd2~0_7117| 0) |v_P1_#t~short92_3142| (or (and .cse0 .cse1) (and |v_P1_#t~short92_3141| .cse2))) (and (= |v_P1_#t~short92_3142| |v_P1_#t~short92_3141|) .cse3 .cse4)) (= |v_#race~x$r_buff0_thd2~0_12046| 0) (or (and |v_P1_#t~short92_3142| .cse5) (and .cse6 .cse3)) (or (and |v_P1_#t~short92_3141| |v_P1_#t~short93_3200|) (and .cse7 .cse1)) .cse8)) (and (= |v_#race~x$r_buff0_thd2~0_12047| |v_#race~x$r_buff0_thd2~0_12046|) (= |v_P1_#t~short93_3200| |v_P1_#t~short93_3201|) |v_P1_#t~short93_3201| .cse4 (= |v_P1_#t~short92_3141| |old(P1Thread1of1ForFork0_#t~short92)|)))) (let ((.cse14 (= |v_#race_10333| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse22 0) .cse19 0) .cse20 0)))) (.cse17 (= |old(#race~x$w_buff1~0)| |v_#race~x$w_buff1~0_7635|)) (.cse15 (= |v_#race~x$w_buff0_used~0_17075| 0)) (.cse10 (= |v_#race~x$r_buff0_thd2~0_12046| |v_#race~x$r_buff0_thd2~0_12045|)) (.cse16 (= |old(#race~x$w_buff0~0)| |v_#race~x$w_buff0~0_7152|))) (or (let ((.cse11 (not |v_P1_#t~short95_3070|)) (.cse9 (not |v_P1_#t~short95_3071|))) (and (or (and |v_P1_#t~short95_3070| (= |v_#race~x$r_buff0_thd2~0_12045| 0) (or (and |v_P1_#t~short95_3071| .cse6) (and .cse9 .cse5))) (and (= |v_P1_#t~short95_3071| |v_P1_#t~short95_3070|) .cse10 .cse11)) .cse7 (or (and .cse12 .cse11) (and .cse13 |v_P1_#t~short95_3070|)) (= |v_P1_#t~ite96_2663| ~__unbuffered_p1_EBX~0) .cse14 (= |old(P1Thread1of1ForFork0_#t~mem94)| |v_P1_#t~mem94_2688|) .cse15 (or (and .cse9 (= |v_P1_#t~ite96_2663| |old(~x$w_buff1~0)|) (= |v_#race~x$w_buff1~0_7635| 0) .cse16) (and |v_P1_#t~short95_3071| .cse17 (= |v_#race~x$w_buff0~0_7152| 0) (= |old(~x$w_buff0~0)| |v_P1_#t~ite96_2663|))))) (and (= (select .cse18 .cse19) 0) .cse14 (= (select .cse18 .cse20) 0) |v_P1_#t~short93_3200| (= |v_P1_#t~ite96_2663| |old(P1Thread1of1ForFork0_#t~ite96)|) .cse17 (= 0 (select .cse18 |~#x~0.offset|)) (= .cse21 |v_P1_#t~mem94_2688|) (= |v_P1_#t~short95_3071| |old(P1Thread1of1ForFork0_#t~short95)|) (= ~__unbuffered_p1_EBX~0 |v_P1_#t~mem94_2688|) .cse15 .cse10 .cse16 (= (select .cse18 .cse22) 0)))) (let ((.cse23 (= |old(P1Thread1of1ForFork0_#t~ite113)| |v_P1_#t~ite113_2641|)) (.cse24 (= |old(P1Thread1of1ForFork0_#t~short112)| |v_P1_#t~short112_3098|)) (.cse26 (= |v_#race~x$w_buff1~0_7636| 0)) (.cse30 (= |old(P1Thread1of1ForFork0_#t~short110)| |v_P1_#t~short110_3214|)) (.cse29 (= |v_#race~x$r_buff1_thd2~0_7116| |v_#race~x$r_buff1_thd2~0_7115|)) (.cse25 (= |old(P1Thread1of1ForFork0_#t~short108)| |v_P1_#t~short108_3270|)) (.cse28 (= |v_#race~x$w_buff1_used~0_16414| |v_#race~x$w_buff1_used~0_16408|))) (or (and .cse23 (= |v_#race~x$r_buff0_thd2~0_12033| |v_#race~x$r_buff0_thd2~0_12043|) .cse24 .cse25 (= |old(P1Thread1of1ForFork0_#t~short109)| |v_P1_#t~short109_3302|) .cse26 .cse27 (= |old(P1Thread1of1ForFork0_#t~ite114)| |v_P1_#t~ite114_2629|) (= |old(P1Thread1of1ForFork0_#t~short111)| |v_P1_#t~short111_3248|) .cse28 (= |v_#race~x$w_buff0_used~0_17076| |v_#race~x$w_buff0_used~0_17073|) .cse29 .cse30 (= |old(~x$w_buff1~0)| ~x$w_buff1~0)) (let ((.cse31 (not |v_P1_#t~short111_3249|)) (.cse33 (not |v_P1_#t~short111_3248|)) (.cse32 (not |v_P1_#t~short109_3302|)) (.cse41 (not |v_P1_#t~short109_3301|))) (and (or (and |v_P1_#t~short109_3302| |v_P1_#t~short111_3249|) (and .cse31 .cse32)) (let ((.cse35 (= |v_#race~x$r_buff0_thd2~0_12039| |v_#race~x$r_buff0_thd2~0_12043|)) (.cse37 (= |v_#race~x$w_buff0_used~0_17073| 0))) (or (let ((.cse34 (not |v_P1_#t~short112_3099|)) (.cse36 (not |v_P1_#t~short112_3098|))) (and .cse33 (or (and .cse34 .cse35 (= |v_P1_#t~short112_3099| |v_P1_#t~short112_3098|)) (and (= |v_#race~x$r_buff0_thd2~0_12043| 0) (or (and .cse5 .cse36) (and .cse6 |v_P1_#t~short112_3098|)) |v_P1_#t~short112_3099|)) (or (and .cse13 |v_P1_#t~short112_3099|) (and .cse12 .cse34)) (= |v_P1_#t~ite113_2641| |v_P1_#t~ite114_2629|) .cse37 (let ((.cse38 (= |v_P1_#t~ite113_2641| |old(~x$w_buff1~0)|))) (or (and .cse26 .cse38 |v_P1_#t~short112_3098|) (and .cse26 .cse38 .cse36))))) (and .cse23 .cse24 .cse35 .cse26 .cse37 (= |v_P1_#t~ite114_2629| |old(~x$w_buff1~0)|) |v_P1_#t~short111_3248|))) (= |v_P1_#t~ite114_2629| ~x$w_buff1~0) (or (and (= |v_P1_#t~short111_3249| |v_P1_#t~short111_3248|) (= |v_#race~x$r_buff0_thd2~0_12039| |v_#race~x$r_buff0_thd2~0_12032|) .cse29 .cse30 |v_P1_#t~short111_3249|) (let ((.cse39 (not |v_P1_#t~short110_3213|)) (.cse40 (not |v_P1_#t~short110_3214|))) (and (or (and .cse39 .cse6) (and .cse5 |v_P1_#t~short110_3213|)) .cse31 (= |v_#race~x$r_buff0_thd2~0_12039| 0) (or (and |v_P1_#t~short110_3214| |v_P1_#t~short111_3248|) (and .cse40 .cse33)) (or (and (= |v_P1_#t~short110_3213| |v_P1_#t~short110_3214|) .cse39 .cse29) (and (= |v_#race~x$r_buff1_thd2~0_7116| 0) (or (and .cse2 |v_P1_#t~short110_3214|) (and .cse40 .cse0)) |v_P1_#t~short110_3213|))))) (or (and .cse13 .cse41) (and .cse12 |v_P1_#t~short109_3301|)) (or (and (= |v_#race~x$r_buff0_thd2~0_12033| |v_#race~x$r_buff0_thd2~0_12032|) .cse25 .cse28 |v_P1_#t~short109_3301| (= |v_P1_#t~short109_3301| |v_P1_#t~short109_3302|)) (let ((.cse42 (not |v_P1_#t~short108_3269|)) (.cse43 (not |v_P1_#t~short108_3270|))) (and (= |v_#race~x$r_buff0_thd2~0_12032| 0) (or (and .cse6 .cse42) (and .cse5 |v_P1_#t~short108_3269|)) (or (and .cse43 .cse32) (and |v_P1_#t~short108_3270| |v_P1_#t~short109_3302|)) (or (and (= |v_P1_#t~short108_3270| |v_P1_#t~short108_3269|) .cse28 .cse42) (and (= |v_#race~x$w_buff1_used~0_16408| 0) (or (and .cse43 .cse44) (and |v_P1_#t~short108_3270| .cse45)) |v_P1_#t~short108_3269|)) .cse41))) .cse46)))) (or (= |v_P1_#t~nondet83_629| 1) (= |v_P1_#t~nondet83_629| 0)) (= ~x$w_buff0_used~0 (ite (= (mod |v_P1_#t~ite124_2279| 256) 0) 0 1)) (let ((.cse47 (= |v_#race~x$w_buff1_used~0_16412| 0)) (.cse51 (= |v_P1_#t~short130_2501| |old(P1Thread1of1ForFork0_#t~short130)|)) (.cse50 (= |v_P1_#t~short128_2679| |old(P1Thread1of1ForFork0_#t~short128)|)) (.cse49 (= |v_#race~x$r_buff1_thd2~0_7122| |v_#race~x$r_buff1_thd2~0_7121|)) (.cse48 (= |v_P1_#t~short126_2767| |old(P1Thread1of1ForFork0_#t~short126)|))) (or (and .cse47 (= |v_P1_#t~ite131_2139| |old(P1Thread1of1ForFork0_#t~ite131)|) (= |v_P1_#t~short127_2807| |old(P1Thread1of1ForFork0_#t~short127)|) (= |v_#race~x$r_buff0_thd2~0_12041| |v_#race~x$r_buff0_thd2~0_12044|) .cse48 .cse49 .cse27 (= |v_#race~x$w_buff0_used~0_17074| |v_#race~x$w_buff0_used~0_17071|) (= |v_P1_#t~ite132_1965| |old(~x$w_buff1_used~0)|) (= |v_P1_#t~short129_2722| |old(P1Thread1of1ForFork0_#t~short129)|) .cse50 .cse51) (let ((.cse55 (not |v_P1_#t~short129_2722|)) (.cse53 (not |v_P1_#t~short127_2808|)) (.cse61 (not |v_P1_#t~short129_2723|)) (.cse65 (not |v_P1_#t~short127_2807|))) (and (= |v_P1_#t~ite131_2139| |v_P1_#t~ite132_1965|) (or (and .cse52 .cse53) (and |v_P1_#t~short127_2808| .cse54)) (let ((.cse58 (= |v_#race~x$r_buff0_thd2~0_12041| |v_#race~x$r_buff0_thd2~0_12042|)) (.cse56 (= |v_#race~x$w_buff0_used~0_17074| 0))) (or (let ((.cse57 (not |v_P1_#t~short130_2502|))) (and .cse55 (= |v_#race~x$w_buff1_used~0_16412| |v_#race~x$w_buff1_used~0_16411|) .cse56 (= |v_P1_#t~ite131_2139| 0) (or (and .cse57 .cse58 (= |v_P1_#t~short130_2502| |v_P1_#t~short130_2501|)) (and |v_P1_#t~short130_2502| (= |v_#race~x$r_buff0_thd2~0_12041| 0) (or (and |v_P1_#t~short130_2501| .cse6) (and .cse5 (not |v_P1_#t~short130_2501|))))) (or (and .cse52 |v_P1_#t~short130_2502|) (and .cse57 .cse54)))) (and .cse47 |v_P1_#t~short129_2722| .cse58 .cse56 (= |v_P1_#t~ite131_2139| |old(~x$w_buff1_used~0)|) .cse51))) (or (and |v_P1_#t~short129_2723| (= |v_P1_#t~short129_2722| |v_P1_#t~short129_2723|) .cse49 (= |v_#race~x$r_buff0_thd2~0_12042| |v_#race~x$r_buff0_thd2~0_12029|) .cse50) (let ((.cse59 (not |v_P1_#t~short128_2680|)) (.cse60 (not |v_P1_#t~short128_2679|))) (and (= |v_#race~x$r_buff0_thd2~0_12042| 0) (or (and .cse49 (= |v_P1_#t~short128_2679| |v_P1_#t~short128_2680|) .cse59) (and (or (and |v_P1_#t~short128_2679| .cse2) (and .cse0 .cse60)) (= |v_#race~x$r_buff1_thd2~0_7121| 0) |v_P1_#t~short128_2680|)) .cse61 (or (and .cse6 .cse59) (and |v_P1_#t~short128_2680| .cse5)) (or (and |v_P1_#t~short128_2679| |v_P1_#t~short129_2722|) (and .cse55 .cse60))))) .cse46 (let ((.cse62 (= |v_#race~x$w_buff1_used~0_16411| |v_#race~x$w_buff1_used~0_16410|))) (or (let ((.cse64 (not |v_P1_#t~short126_2767|)) (.cse63 (not |v_P1_#t~short126_2768|))) (and (or (and .cse62 .cse63 (= |v_P1_#t~short126_2767| |v_P1_#t~short126_2768|)) (and |v_P1_#t~short126_2768| (or (and .cse64 .cse44) (and |v_P1_#t~short126_2767| .cse45)) (= |v_#race~x$w_buff1_used~0_16411| 0))) (= |v_#race~x$r_buff0_thd2~0_12029| 0) (or (and .cse64 .cse65) (and |v_P1_#t~short126_2767| |v_P1_#t~short127_2807|)) (or (and |v_P1_#t~short126_2768| .cse5) (and .cse6 .cse63)) .cse53)) (and .cse62 |v_P1_#t~short127_2808| .cse48 (= |v_#race~x$r_buff0_thd2~0_12044| |v_#race~x$r_buff0_thd2~0_12029|) (= |v_P1_#t~short127_2807| |v_P1_#t~short127_2808|)))) (or (and .cse61 .cse65) (and |v_P1_#t~short127_2807| |v_P1_#t~short129_2723|)))))) (= 0 |#race~weak$$choice2~0|) (or (and .cse12 |v_P1_#t~short91_3165|) (and .cse66 .cse13)) (= |v_#race_10334| (store |v_#race_10333| |~#x~0.base| (store (store (store (store .cse18 |~#x~0.offset| .cse67) .cse22 .cse67) .cse19 .cse67) .cse20 .cse67))) (or (and .cse68 .cse8) (and |v_P1_#t~short91_3166| |v_P1_#t~short93_3201|)) (= (ite (= (mod |v_P1_#t~ite132_1965| 256) 0) 0 1) ~x$w_buff1_used~0) (= |#race| (store |v_#race_10335| |~#x~0.base| (store (store (store (store .cse69 |~#x~0.offset| |P1Thread1of1ForFork0_#t~nondet155|) .cse22 |P1Thread1of1ForFork0_#t~nondet155|) .cse19 |P1Thread1of1ForFork0_#t~nondet155|) .cse20 |P1Thread1of1ForFork0_#t~nondet155|))) (let ((.cse87 (= |v_P1_#t~short117_3069| |old(P1Thread1of1ForFork0_#t~short117)|)) (.cse71 (= |v_P1_#t~short121_2854| |old(P1Thread1of1ForFork0_#t~short121)|)) (.cse72 (= |v_#race~x$w_buff0_used~0_17077| 0)) (.cse81 (= |v_#race~x$r_buff1_thd2~0_7116| |v_#race~x$r_buff1_thd2~0_7122|)) (.cse83 (= |v_P1_#t~short119_2997| |old(P1Thread1of1ForFork0_#t~short119)|)) (.cse86 (= |v_#race~x$w_buff1_used~0_16410| |v_#race~x$w_buff1_used~0_16408|)) (.cse73 (= |v_P1_#t~ite122_2441| |old(P1Thread1of1ForFork0_#t~ite122)|))) (or (let ((.cse75 (not |v_P1_#t~short120_3036|)) (.cse78 (not |v_P1_#t~short120_3037|)) (.cse79 (not |v_P1_#t~short118_3106|)) (.cse77 (not |v_P1_#t~short118_3105|))) (and (let ((.cse70 (= |v_#race~x$r_buff0_thd2~0_12031| |v_#race~x$r_buff0_thd2~0_12044|))) (or (and |v_P1_#t~short120_3036| .cse70 .cse71 .cse72 (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite123_2431|) .cse73) (let ((.cse74 (not |v_P1_#t~short121_2854|)) (.cse76 (not |v_P1_#t~short121_2855|))) (and (or (and |v_P1_#t~short121_2854| .cse72 (= |v_P1_#t~ite122_2441| 0)) (and .cse74 .cse72 (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite122_2441|))) (= |v_P1_#t~ite122_2441| |v_P1_#t~ite123_2431|) .cse75 (or (and |v_P1_#t~short121_2855| .cse13) (and .cse12 .cse76)) (or (and |v_P1_#t~short121_2855| (= |v_#race~x$r_buff0_thd2~0_12044| 0) (or (and |v_P1_#t~short121_2854| .cse6) (and .cse74 .cse5))) (and .cse70 .cse76 (= |v_P1_#t~short121_2854| |v_P1_#t~short121_2855|))))))) (or (and |v_P1_#t~short118_3105| |v_P1_#t~short120_3037|) (and .cse77 .cse78)) .cse46 (or (and |v_P1_#t~short118_3106| .cse12) (and .cse79 .cse13)) (= |v_P1_#t~ite123_2431| |v_P1_#t~ite124_2279|) (or (let ((.cse80 (not |v_P1_#t~short119_2998|)) (.cse82 (not |v_P1_#t~short119_2997|))) (and (or (and |v_P1_#t~short119_2998| .cse5) (and .cse80 .cse6)) (or (and .cse80 (= |v_P1_#t~short119_2997| |v_P1_#t~short119_2998|) .cse81) (and |v_P1_#t~short119_2998| (or (and .cse0 .cse82) (and |v_P1_#t~short119_2997| .cse2)) (= |v_#race~x$r_buff1_thd2~0_7122| 0))) (or (and .cse75 .cse82) (and |v_P1_#t~short119_2997| |v_P1_#t~short120_3036|)) (= |v_#race~x$r_buff0_thd2~0_12031| 0) .cse78)) (and |v_P1_#t~short120_3037| (= |v_#race~x$r_buff0_thd2~0_12036| |v_#race~x$r_buff0_thd2~0_12031|) (= |v_P1_#t~short120_3036| |v_P1_#t~short120_3037|) .cse81 .cse83)) (or (let ((.cse84 (not |v_P1_#t~short117_3070|)) (.cse85 (not |v_P1_#t~short117_3069|))) (and .cse79 (or (and .cse84 .cse6) (and |v_P1_#t~short117_3070| .cse5)) (= |v_#race~x$r_buff0_thd2~0_12036| 0) (or (and |v_P1_#t~short117_3070| (or (and |v_P1_#t~short117_3069| .cse45) (and .cse85 .cse44)) (= |v_#race~x$w_buff1_used~0_16410| 0)) (and .cse84 (= |v_P1_#t~short117_3069| |v_P1_#t~short117_3070|) .cse86)) (or (and |v_P1_#t~short117_3069| |v_P1_#t~short118_3105|) (and .cse85 .cse77)))) (and .cse87 |v_P1_#t~short118_3106| (= |v_P1_#t~short118_3105| |v_P1_#t~short118_3106|) .cse86 (= |v_#race~x$r_buff0_thd2~0_12036| |v_#race~x$r_buff0_thd2~0_12043|))))) (and .cse87 (= |v_P1_#t~short120_3036| |old(P1Thread1of1ForFork0_#t~short120)|) (= |v_P1_#t~short118_3105| |old(P1Thread1of1ForFork0_#t~short118)|) (= |v_#race~x$r_buff0_thd2~0_12044| |v_#race~x$r_buff0_thd2~0_12043|) .cse71 (= |v_P1_#t~ite123_2431| |old(P1Thread1of1ForFork0_#t~ite123)|) .cse72 (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite124_2279|) .cse27 .cse81 .cse83 .cse86 .cse73))) (= ~x$r_buff0_thd2~0 (ite (= (mod |v_P1_#t~ite141_1463| 256) 0) 0 1)) (= .cse21 ~x$mem_tmp~0) (let ((.cse88 (= |v_#race_10335| (store |v_#race_10334| |~#x~0.base| (store (store (store (store .cse90 |~#x~0.offset| 0) .cse22 0) .cse19 0) .cse20 0)))) (.cse89 (= (mod ~x$flush_delayed~0 256) 0))) (or (and .cse88 (= |P1Thread1of1ForFork0_#t~ite154| ~x$mem_tmp~0) (= |#race~x$mem_tmp~0| 0) (not .cse89) (= |P1Thread1of1ForFork0_#t~mem153| |old(P1Thread1of1ForFork0_#t~mem153)|)) (and .cse88 (= |P1Thread1of1ForFork0_#t~mem153| |P1Thread1of1ForFork0_#t~ite154|) (= |#race~x$mem_tmp~0| |v_P1_#t~nondet89_1694|) (= |P1Thread1of1ForFork0_#t~mem153| ~__unbuffered_p1_EBX~0) (= (select .cse69 .cse19) 0) (= (select .cse69 |~#x~0.offset|) 0) (= (select .cse69 .cse22) 0) (= (select .cse69 .cse20) 0) .cse89))) (or (= |v_P1_#t~nondet85_823| 1) (= |v_P1_#t~nondet85_823| 0)) (= ~weak$$choice0~0 (ite (= (mod |v_P1_#t~nondet83_629| 256) 0) 0 1)) (let ((.cse96 (= |v_P1_#t~short101_3270| |old(P1Thread1of1ForFork0_#t~short101)|)) (.cse110 (= |v_P1_#t~short99_3314| |old(P1Thread1of1ForFork0_#t~short99)|)) (.cse94 (= |v_#race~x$r_buff1_thd2~0_7117| |v_#race~x$r_buff1_thd2~0_7115|)) (.cse99 (= |v_#race~x$w_buff0~0_7151| 0)) (.cse109 (= |v_#race~x$w_buff1_used~0_16414| |v_#race~x$w_buff1_used~0_16409|)) (.cse100 (= |old(P1Thread1of1ForFork0_#t~ite104)| |v_P1_#t~ite104_2731|)) (.cse101 (= |v_P1_#t~short103_3173| |old(P1Thread1of1ForFork0_#t~short103)|))) (or (let ((.cse93 (not |v_P1_#t~short102_3299|)) (.cse106 (not |v_P1_#t~short100_3339|)) (.cse107 (not |v_P1_#t~short100_3340|)) (.cse95 (not |v_P1_#t~short102_3298|))) (and (= ~x$w_buff0~0 |v_P1_#t~ite105_2719|) (or (let ((.cse91 (not |v_P1_#t~short101_3269|)) (.cse92 (not |v_P1_#t~short101_3270|))) (and (or (and .cse5 |v_P1_#t~short101_3269|) (and .cse6 .cse91)) (or (and .cse92 .cse93) (and |v_P1_#t~short101_3270| |v_P1_#t~short102_3299|)) (or (and (= |v_P1_#t~short101_3269| |v_P1_#t~short101_3270|) .cse91 .cse94) (and (= |v_#race~x$r_buff1_thd2~0_7115| 0) (or (and |v_P1_#t~short101_3270| .cse2) (and .cse0 .cse92)) |v_P1_#t~short101_3269|)) (= |v_#race~x$r_buff0_thd2~0_12034| 0) .cse95)) (and .cse96 (= |v_#race~x$r_buff0_thd2~0_12030| |v_#race~x$r_buff0_thd2~0_12034|) .cse94 (= |v_P1_#t~short102_3298| |v_P1_#t~short102_3299|) |v_P1_#t~short102_3298|)) (let ((.cse97 (= |v_#race~x$r_buff0_thd2~0_12034| |v_#race~x$r_buff0_thd2~0_12033|)) (.cse98 (= |v_#race~x$w_buff0_used~0_17076| 0))) (or (and .cse97 .cse98 .cse99 |v_P1_#t~short102_3299| .cse100 .cse101 (= |old(~x$w_buff0~0)| |v_P1_#t~ite105_2719|)) (let ((.cse102 (not |v_P1_#t~short103_3172|)) (.cse103 (not |v_P1_#t~short103_3173|))) (and (or (and .cse97 (= |v_P1_#t~short103_3172| |v_P1_#t~short103_3173|) .cse102) (and (= |v_#race~x$r_buff0_thd2~0_12033| 0) |v_P1_#t~short103_3172| (or (and .cse5 .cse103) (and .cse6 |v_P1_#t~short103_3173|)))) (= |v_P1_#t~ite104_2731| |v_P1_#t~ite105_2719|) (or (and .cse12 .cse102) (and .cse13 |v_P1_#t~short103_3172|)) .cse98 .cse93 (let ((.cse104 (= |old(~x$w_buff0~0)| |v_P1_#t~ite104_2731|))) (or (and .cse104 .cse99 .cse103) (and .cse104 .cse99 |v_P1_#t~short103_3173|))))))) .cse46 (or (let ((.cse108 (not |v_P1_#t~short99_3314|)) (.cse105 (not |v_P1_#t~short99_3313|))) (and (or (and |v_P1_#t~short99_3313| .cse5) (and .cse6 .cse105)) .cse106 (= |v_#race~x$r_buff0_thd2~0_12030| 0) (or (and |v_P1_#t~short99_3314| |v_P1_#t~short100_3340|) (and .cse107 .cse108)) (or (and (= |v_#race~x$w_buff1_used~0_16414| 0) |v_P1_#t~short99_3313| (or (and .cse108 .cse44) (and |v_P1_#t~short99_3314| .cse45))) (and .cse105 .cse109 (= |v_P1_#t~short99_3314| |v_P1_#t~short99_3313|))))) (and (= |v_P1_#t~short100_3339| |v_P1_#t~short100_3340|) (= |v_#race~x$r_buff0_thd2~0_12030| |v_#race~x$r_buff0_thd2~0_12045|) .cse110 .cse109 |v_P1_#t~short100_3339|)) (or (and .cse12 |v_P1_#t~short100_3339|) (and .cse13 .cse106)) (or (and |v_P1_#t~short100_3340| |v_P1_#t~short102_3298|) (and .cse107 .cse95)))) (and (= |v_P1_#t~short102_3299| |old(P1Thread1of1ForFork0_#t~short102)|) (= |v_P1_#t~short100_3340| |old(P1Thread1of1ForFork0_#t~short100)|) (= |v_#race~x$w_buff0_used~0_17076| |v_#race~x$w_buff0_used~0_17075|) .cse96 (= |old(P1Thread1of1ForFork0_#t~ite105)| |v_P1_#t~ite105_2719|) .cse27 (= |old(~x$w_buff0~0)| ~x$w_buff0~0) .cse110 .cse94 .cse99 .cse109 .cse100 (= |v_#race~x$r_buff0_thd2~0_12033| |v_#race~x$r_buff0_thd2~0_12045|) .cse101))) (= ~weak$$choice2~0 (ite (= (mod |v_P1_#t~nondet85_823| 256) 0) 0 1)) (= ~x$flush_delayed~0 (ite .cse46 0 1)) (= (ite (= (mod |v_P1_#t~ite149_879| 256) 0) 0 1) ~x$r_buff1_thd2~0) (= (select .cse90 .cse19) .cse67) (let ((.cse114 (= |old(P1Thread1of1ForFork0_#t~short147)| |v_P1_#t~short147_1478|)) (.cse115 (= |v_#race~x$r_buff1_thd2~0_7119| 0)) (.cse111 (= |old(P1Thread1of1ForFork0_#t~short143)| |v_P1_#t~short143_1804|)) (.cse113 (= |v_#race~x$w_buff1_used~0_16407| |#race~x$w_buff1_used~0|)) (.cse112 (= |old(P1Thread1of1ForFork0_#t~short145)| |v_P1_#t~short145_1691|))) (or (and (= |old(P1Thread1of1ForFork0_#t~short144)| |v_P1_#t~short144_1856|) (= |old(P1Thread1of1ForFork0_#t~ite148)| |v_P1_#t~ite148_1101|) .cse111 (= |old(P1Thread1of1ForFork0_#t~short146)| |v_P1_#t~short146_1746|) .cse112 .cse27 (= |v_#race~x$r_buff0_thd2~0_12038| |#race~x$r_buff0_thd2~0|) .cse113 (= |v_P1_#t~ite149_879| |old(~x$r_buff1_thd2~0)|) .cse114 .cse115 (= |#race~x$w_buff0_used~0| |v_#race~x$w_buff0_used~0_17072|)) (let ((.cse119 (= (mod ~x$r_buff0_thd2~0 256) 0))) (let ((.cse122 (not |v_P1_#t~short144_1855|)) (.cse127 (not |v_P1_#t~short144_1856|)) (.cse118 (not |v_P1_#t~short146_1746|)) (.cse128 (not |v_P1_#t~short146_1747|)) (.cse120 (not .cse119))) (and (= |v_P1_#t~ite149_879| |v_P1_#t~ite148_1101|) (let ((.cse117 (= |#race~x$w_buff0_used~0| 0)) (.cse116 (= |v_#race~x$r_buff0_thd2~0_12049| |#race~x$r_buff0_thd2~0|))) (or (and .cse116 .cse114 .cse115 .cse117 |v_P1_#t~short146_1746| (= |old(~x$r_buff1_thd2~0)| |v_P1_#t~ite148_1101|)) (let ((.cse121 (not |v_P1_#t~short147_1477|))) (and (= 0 |v_P1_#t~ite148_1101|) .cse118 (= |v_#race~x$r_buff1_thd2~0_7118| |v_#race~x$r_buff1_thd2~0_7119|) .cse117 (or (and (= |#race~x$r_buff0_thd2~0| 0) (or (and .cse119 (not |v_P1_#t~short147_1478|)) (and .cse120 |v_P1_#t~short147_1478|)) |v_P1_#t~short147_1477|) (and .cse121 .cse116 (= |v_P1_#t~short147_1477| |v_P1_#t~short147_1478|))) (or (and .cse121 .cse54) (and .cse52 |v_P1_#t~short147_1477|)))))) (or (and .cse54 |v_P1_#t~short144_1855|) (and .cse52 .cse122)) (or (and (= |v_#race~x$r_buff0_thd2~0_12038| |v_#race~x$r_buff0_thd2~0_12048|) .cse111 .cse113 (= |v_P1_#t~short144_1856| |v_P1_#t~short144_1855|) |v_P1_#t~short144_1855|) (let ((.cse123 (not |v_P1_#t~short143_1803|)) (.cse125 (not |v_P1_#t~short143_1804|))) (and (or (and .cse113 (= |v_P1_#t~short143_1804| |v_P1_#t~short143_1803|) .cse123) (and (= |#race~x$w_buff1_used~0| 0) |v_P1_#t~short143_1803| (or (and .cse124 .cse125) (and .cse126 |v_P1_#t~short143_1804|)))) (= |v_#race~x$r_buff0_thd2~0_12048| 0) .cse122 (or (and .cse119 |v_P1_#t~short143_1803|) (and .cse120 .cse123)) (or (and .cse125 .cse127) (and |v_P1_#t~short143_1804| |v_P1_#t~short144_1856|))))) (or (and .cse128 .cse127) (and |v_P1_#t~short144_1856| |v_P1_#t~short146_1747|)) .cse46 (let ((.cse131 (= |v_#race~x$r_buff1_thd2~0_7118| |v_#race~x$r_buff1_thd2~0_7120|))) (or (let ((.cse129 (not |v_P1_#t~short145_1691|)) (.cse130 (not |v_P1_#t~short145_1692|))) (and (= |v_#race~x$r_buff0_thd2~0_12049| 0) (or (and |v_P1_#t~short145_1691| |v_P1_#t~short146_1746|) (and .cse129 .cse118)) (or (and |v_P1_#t~short145_1692| (= |v_#race~x$r_buff1_thd2~0_7118| 0) (or (and |v_P1_#t~short145_1691| .cse2) (and .cse0 .cse129))) (and .cse130 .cse131 (= |v_P1_#t~short145_1691| |v_P1_#t~short145_1692|))) .cse128 (or (and .cse120 .cse130) (and .cse119 |v_P1_#t~short145_1692|)))) (and .cse131 .cse112 |v_P1_#t~short146_1747| (= |v_P1_#t~short146_1746| |v_P1_#t~short146_1747|) (= |v_#race~x$r_buff0_thd2~0_12049| |v_#race~x$r_buff0_thd2~0_12048|))))))))) (= (select .cse90 .cse20) .cse67) (let ((.cse132 (= |v_#race~x$w_buff1_used~0_16409| |old(#race~x$w_buff1_used~0)|))) (or (let ((.cse134 (not |v_P1_#t~short90_3098|)) (.cse133 (not |v_P1_#t~short90_3097|))) (and (or (and .cse132 (= |v_P1_#t~short90_3097| |v_P1_#t~short90_3098|) .cse133) (and (or (and |v_P1_#t~short90_3098| .cse45) (and .cse134 .cse44)) (= |v_#race~x$w_buff1_used~0_16409| 0) |v_P1_#t~short90_3097|)) .cse66 (or (and |v_P1_#t~short90_3098| |v_P1_#t~short91_3166|) (and .cse134 .cse68)) (or (and .cse6 .cse133) (and |v_P1_#t~short90_3097| .cse5)) (= |v_#race~x$r_buff0_thd2~0_12047| 0))) (and .cse132 |v_P1_#t~short91_3165| (= |v_#race~x$r_buff0_thd2~0_12047| |old(#race~x$r_buff0_thd2~0)|) (= |v_P1_#t~short90_3098| |old(P1Thread1of1ForFork0_#t~short90)|) (= |v_P1_#t~short91_3165| |v_P1_#t~short91_3166|)))) (= (select .cse90 |~#x~0.offset|) .cse67) (= |#race~x$flush_delayed~0| 0) (= (store |old(#memory_int)| |~#x~0.base| (store .cse135 |~#x~0.offset| |P1Thread1of1ForFork0_#t~ite154|)) |#memory_int|) (let ((.cse136 (select |#race| |~#x~0.base|))) (or (not (= |P1Thread1of1ForFork0_#t~nondet155| (select .cse136 .cse20))) (not (= |P1Thread1of1ForFork0_#t~nondet155| (select .cse136 .cse22))) (not (= (select .cse136 .cse19) |P1Thread1of1ForFork0_#t~nondet155|)) (not (= |P1Thread1of1ForFork0_#t~nondet155| (select .cse136 |~#x~0.offset|))))) (let ((.cse154 (= |v_P1_#t~short134_2387| |old(P1Thread1of1ForFork0_#t~short134)|)) (.cse144 (= |old(P1Thread1of1ForFork0_#t~ite139)| |v_P1_#t~ite139_1673|)) (.cse139 (= |v_#race~x$r_buff1_thd2~0_7121| |v_#race~x$r_buff1_thd2~0_7120|)) (.cse153 (= |v_#race~x$w_buff1_used~0_16413| |v_#race~x$w_buff1_used~0_16407|)) (.cse142 (= |v_P1_#t~short136_2292| |old(P1Thread1of1ForFork0_#t~short136)|)) (.cse146 (= |v_#race~x$r_buff0_thd2~0_12037| 0)) (.cse147 (= |v_P1_#t~short138_2113| |old(P1Thread1of1ForFork0_#t~short138)|))) (or (let ((.cse140 (not |v_P1_#t~short137_2343|)) (.cse141 (not |v_P1_#t~short137_2342|)) (.cse143 (not |v_P1_#t~short135_2435|)) (.cse151 (not |v_P1_#t~short135_2436|))) (and (or (let ((.cse138 (not |v_P1_#t~short136_2291|)) (.cse137 (not |v_P1_#t~short136_2292|))) (and (or (and |v_P1_#t~short136_2291| (= |v_#race~x$r_buff1_thd2~0_7120| 0) (or (and |v_P1_#t~short136_2292| .cse2) (and .cse0 .cse137))) (and .cse138 .cse139 (= |v_P1_#t~short136_2292| |v_P1_#t~short136_2291|))) (or (and |v_P1_#t~short136_2291| .cse5) (and .cse138 .cse6)) .cse140 (= |v_#race~x$r_buff0_thd2~0_12035| 0) (or (and |v_P1_#t~short136_2292| |v_P1_#t~short137_2342|) (and .cse137 .cse141)))) (and (= |v_P1_#t~short137_2343| |v_P1_#t~short137_2342|) .cse139 |v_P1_#t~short137_2343| .cse142 (= |v_#race~x$r_buff0_thd2~0_12035| |v_#race~x$r_buff0_thd2~0_12028|))) (or (and |v_P1_#t~short135_2435| |v_P1_#t~short137_2343|) (and .cse140 .cse143)) (let ((.cse145 (= |v_#race~x$w_buff0_used~0_17072| 0))) (or (and .cse144 |v_P1_#t~short137_2342| .cse145 .cse146 (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite140_1663|) .cse147) (let ((.cse148 (not |v_P1_#t~short138_2112|)) (.cse149 (not |v_P1_#t~short138_2113|))) (and (or (and .cse54 .cse148) (and .cse52 |v_P1_#t~short138_2112|)) (or (and (or (and .cse5 .cse149) (and |v_P1_#t~short138_2113| .cse6)) |v_P1_#t~short138_2112| (= |v_#race~x$r_buff0_thd2~0_12040| 0)) (and (= |v_P1_#t~short138_2113| |v_P1_#t~short138_2112|) .cse148 (= |v_#race~x$r_buff0_thd2~0_12035| |v_#race~x$r_buff0_thd2~0_12040|))) (or (and (= |v_P1_#t~ite139_1673| 0) |v_P1_#t~short138_2113| (= |v_#race~x$r_buff0_thd2~0_12037| |v_#race~x$r_buff0_thd2~0_12040|)) (and (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite139_1673|) .cse146 .cse149)) (= |v_P1_#t~ite139_1673| |v_P1_#t~ite140_1663|) .cse145 .cse141)))) (= |v_P1_#t~ite140_1663| |v_P1_#t~ite141_1463|) .cse46 (or (let ((.cse152 (not |v_P1_#t~short134_2388|)) (.cse150 (not |v_P1_#t~short134_2387|))) (and (or (and |v_P1_#t~short134_2387| |v_P1_#t~short135_2435|) (and .cse143 .cse150)) .cse151 (or (and |v_P1_#t~short134_2388| .cse5) (and .cse152 .cse6)) (or (and .cse152 .cse153 (= |v_P1_#t~short134_2388| |v_P1_#t~short134_2387|)) (and |v_P1_#t~short134_2388| (= |v_#race~x$w_buff1_used~0_16407| 0) (or (and .cse124 .cse150) (and .cse126 |v_P1_#t~short134_2387|)))) (= |v_#race~x$r_buff0_thd2~0_12028| 0))) (and .cse154 .cse153 |v_P1_#t~short135_2436| (= |v_#race~x$r_buff0_thd2~0_12041| |v_#race~x$r_buff0_thd2~0_12028|) (= |v_P1_#t~short135_2435| |v_P1_#t~short135_2436|))) (or (and .cse151 .cse52) (and |v_P1_#t~short135_2436| .cse54)))) (and (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite141_1463|) .cse154 (= |old(P1Thread1of1ForFork0_#t~ite140)| |v_P1_#t~ite140_1663|) (= |v_P1_#t~short135_2435| |old(P1Thread1of1ForFork0_#t~short135)|) .cse144 (= |v_P1_#t~short137_2342| |old(P1Thread1of1ForFork0_#t~short137)|) .cse139 .cse153 .cse27 .cse142 .cse146 (= |v_#race~x$w_buff0_used~0_17074| |v_#race~x$w_buff0_used~0_17072|) .cse147)))))) +//@ semantics [404] {P1Thread1of1ForFork0_#t~nondet156,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,P1Thread1of1ForFork0_#t~short90,#race~x$mem_tmp~0,~x$w_buff1~0,~x$r_buff1_thd2~0,~x$w_buff1_used~0,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet155,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite154,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~nondet142,P1Thread1of1ForFork0_#t~mem151,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~nondet150,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet85,~x$w_buff0~0,~x$flush_delayed~0,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~short119,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,P1Thread1of1ForFork0_#t~short134,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,P1Thread1of1ForFork0_#t~mem94,#race~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~ite105,P1Thread1of1ForFork0_#t~short127,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,#race,~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~mem153,#race~x$w_buff0~0,~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short147,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,#memory_int,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet152,P1Thread1of1ForFork0_#t~short143} false +//@ semantics [405] {P1Thread1of1ForFork0_#t~nondet156,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~nondet98,P1Thread1of1ForFork0_#t~short90,#race~x$mem_tmp~0,~x$w_buff1~0,~x$r_buff1_thd2~0,~x$w_buff1_used~0,~weak$$choice0~0,#race~weak$$choice2~0,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet155,P1Thread1of1ForFork0_#t~short99,~x$mem_tmp~0,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,#race~x$w_buff1~0,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#t~ite154,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~nondet142,P1Thread1of1ForFork0_#t~mem151,~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short103,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~nondet150,~weak$$choice2~0,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet85,~x$w_buff0~0,~x$flush_delayed~0,#race~x$flush_delayed~0,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~short119,#race~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,#race~x$w_buff1_used~0,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,P1Thread1of1ForFork0_#t~mem94,#race~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~ite105,P1Thread1of1ForFork0_#t~short127,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~ite114,#race~x$w_buff0_used~0,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~nondet125,#race~x$r_buff1_thd2~0,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,#race,~__unbuffered_p1_EBX~0,P1Thread1of1ForFork0_#t~mem153,#race~x$w_buff0~0,~x$r_buff0_thd2~0,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,#race~weak$$choice0~0,P1Thread1of1ForFork0_#t~short147,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,#memory_int,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~ite140,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet152,P1Thread1of1ForFork0_#t~short143} [(|v_P1_#t~short146_1751| Bool) (|v_P1_#t~short126_2772| Bool) (|v_P1_#t~short146_1750| Bool) (|v_P1_#t~short126_2771| Bool) (|v_P1_#t~short90_3102| Bool) (|v_#race~x$r_buff0_thd2~0_12093| Int) (|v_P1_#t~ite148_1103| Int) (|v_#race~x$r_buff0_thd2~0_12090| Int) (|v_P1_#t~short90_3101| Bool) (|v_#race~x$r_buff0_thd2~0_12092| Int) (|v_#race~x$r_buff0_thd2~0_12091| Int) (|v_P1_#t~short110_3218| Bool) (|v_P1_#t~short144_1859| Bool) (|v_P1_#t~short110_3217| Bool) (|v_P1_#t~short99_3317| Bool) (|v_P1_#t~short99_3318| Bool) (|v_P1_#t~short127_2811| Bool) (|v_P1_#t~ite154_333| Int) (|v_P1_#t~short127_2812| Bool) (|v_P1_#t~short129_2726| Bool) (|v_P1_#t~short129_2727| Bool) (|v_P1_#t~nondet85_825| Int) (|v_P1_#t~short121_2859| Bool) (|v_P1_#t~short121_2858| Bool) (|v_P1_#t~short144_1860| Bool) (|v_P1_#t~short102_3302| Bool) (|v_P1_#t~short102_3303| Bool) (|v_P1_#t~ite124_2281| Int) (|v_P1_#t~ite123_2433| Int) (|v_P1_#t~ite114_2631| Int) (|v_P1_#t~short108_3273| Bool) (|v_#race~x$r_buff0_thd2~0_12072| Int) (|v_#race~x$r_buff0_thd2~0_12074| Int) (|v_P1_#t~short108_3274| Bool) (|v_#race~x$r_buff0_thd2~0_12073| Int) (|v_#race~x$r_buff0_thd2~0_12079| Int) (|v_#race~x$r_buff0_thd2~0_12076| Int) (|v_P1_#t~short92_3146| Bool) (|v_P1_#t~mem94_2690| Int) (|v_#race~x$r_buff0_thd2~0_12075| Int) (|v_P1_#t~short92_3145| Bool) (|v_#race~x$r_buff0_thd2~0_12078| Int) (|v_P1_#t~short135_2440| Bool) (|v_#race~x$r_buff0_thd2~0_12077| Int) (|v_#race~x$w_buff1~0_7639| Int) (|v_#race~x$w_buff1_used~0_16429| Int) (|v_P1_#t~short135_2439| Bool) (|v_#race~x$w_buff1_used~0_16427| Int) (|v_P1_#t~short147_1482| Bool) (|v_P1_#t~nondet89_1696| Int) (|v_#race~x$r_buff1_thd2~0_7132| Int) (|v_#race~x$r_buff1_thd2~0_7131| Int) (|v_#race~x$w_buff1_used~0_16428| Int) (|v_#race~x$w_buff1_used~0_16425| Int) (|v_#race~x$w_buff1_used~0_16426| Int) (|v_P1_#t~short147_1481| Bool) (|v_#race~x$w_buff1_used~0_16423| Int) (|v_#race~x$w_buff1_used~0_16424| Int) (|v_#race~x$r_buff1_thd2~0_7138| Int) (|v_#race~x$r_buff0_thd2~0_12083| Int) (|v_#race~x$r_buff1_thd2~0_7137| Int) (|v_#race~x$r_buff0_thd2~0_12082| Int) (|v_#race~x$r_buff0_thd2~0_12085| Int) (|v_#race~x$r_buff0_thd2~0_12084| Int) (|v_#race~x$r_buff1_thd2~0_7134| Int) (|v_#race~x$r_buff1_thd2~0_7133| Int) (|v_P1_#t~short119_3001| Bool) (|v_#race~x$r_buff0_thd2~0_12081| Int) (|v_#race~x$r_buff1_thd2~0_7136| Int) (|v_P1_#t~short119_3002| Bool) (|v_#race~x$r_buff1_thd2~0_7135| Int) (|v_#race~x$r_buff0_thd2~0_12080| Int) (|v_#race~x$w_buff1~0_7640| Int) (|v_P1_#t~short137_2347| Bool) (|v_P1_#t~short137_2346| Bool) (|v_P1_#t~short145_1696| Bool) (|v_#race~x$r_buff0_thd2~0_12087| Int) (|v_P1_#t~short145_1695| Bool) (|v_#race~x$r_buff0_thd2~0_12086| Int) (|v_#race~x$r_buff0_thd2~0_12089| Int) (|v_#race~x$r_buff0_thd2~0_12088| Int) (|v_P1_#t~short128_2683| Bool) (|v_P1_#t~ite122_2443| Int) (|v_P1_#t~short128_2684| Bool) (|v_P1_#t~ite149_881| Int) (|v_P1_#t~short93_3204| Bool) (|v_P1_#t~short93_3205| Bool) (|v_#race~x$w_buff1_used~0_16430| Int) (|v_P1_#t~short95_3074| Bool) (|v_P1_#t~ite113_2643| Int) (|v_P1_#t~short95_3075| Bool) (|v_P1_#t~short109_3305| Bool) (|v_P1_#t~ite105_2721| Int) (|v_P1_#t~short109_3306| Bool) (|v_P1_#t~short118_3109| Bool) (|v_P1_#t~ite96_2665| Int) (|v_P1_#t~short143_1807| Bool) (|v_P1_#t~short143_1808| Bool) (|v_P1_#t~ite141_1465| Int) (|v_P1_#t~short91_3170| Bool) (|v_P1_#t~nondet83_631| Int) (|v_P1_#t~short130_2505| Bool) (|v_P1_#t~mem153_532| Int) (|v_P1_#t~short130_2506| Bool) (|v_P1_#t~short117_3074| Bool) (|v_P1_#t~short117_3073| Bool) (|v_P1_#t~short91_3169| Bool) (|v_P1_#t~ite132_1967| Int) (|v_P1_#t~short120_3041| Bool) (|v_P1_#t~short120_3040| Bool) (|v_P1_#t~short134_2391| Bool) (|v_#race~x$w_buff0_used~0_17089| Int) (|v_P1_#t~short134_2392| Bool) (|v_#race~x$w_buff0_used~0_17086| Int) (|v_#race~x$w_buff0_used~0_17085| Int) (|v_#race_10339| (Array Int (Array Int Int))) (|v_#race~x$w_buff0_used~0_17088| Int) (|v_#race~x$w_buff0_used~0_17087| Int) (|v_#race~x$w_buff0~0_7156| Int) (|v_#race~x$w_buff0~0_7155| Int) (|v_P1_#t~short100_3343| Bool) (|v_#race_10341| (Array Int (Array Int Int))) (|v_#race~x$w_buff0_used~0_17091| Int) (|v_P1_#t~short100_3344| Bool) (|v_#race_10340| (Array Int (Array Int Int))) (|v_#race~x$w_buff0_used~0_17090| Int) (|v_P1_#t~ite139_1675| Int) (|v_P1_#t~short136_2296| Bool) (|v_P1_#t~short101_3274| Bool) (|v_P1_#t~short101_3273| Bool) (|v_P1_#t~short136_2295| Bool) (|v_P1_#t~short118_3110| Bool) (|v_P1_#t~short112_3102| Bool) (|v_P1_#t~short112_3103| Bool) (|v_P1_#t~short103_3177| Bool) (|v_P1_#t~short103_3176| Bool) (|v_P1_#t~short138_2117| Bool) (|v_P1_#t~short138_2116| Bool) (|v_P1_#t~ite140_1665| Int) (|v_P1_#t~ite131_2141| Int) (|v_P1_#t~short111_3253| Bool) (|v_P1_#t~short111_3252| Bool) (|v_P1_#t~ite104_2733| Int)] (let ((.cse45 (= (mod |old(~x$r_buff1_thd2~0)| 256) 0)) (.cse12 (= (mod |old(~x$r_buff0_thd2~0)| 256) 0)) (.cse87 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse106 (= 0 (mod ~x$w_buff1_used~0 256))) (.cse31 (= (mod ~weak$$choice2~0 256) 0)) (.cse16 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse26 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse3 (select |v_#race_10340| |~#x~0.base|)) (.cse20 (+ |~#x~0.offset| 1)) (.cse0 (select |#race| |~#x~0.base|)) (.cse19 (+ 3 |~#x~0.offset|)) (.cse116 (select |old(#memory_int)| |~#x~0.base|))) (let ((.cse5 (select .cse116 |~#x~0.offset|)) (.cse2 (select .cse0 .cse19)) (.cse28 (select |v_#race_10341| |~#x~0.base|)) (.cse27 (not |v_P1_#t~short91_3170|)) (.cse18 (select |v_#race_10339| |~#x~0.base|)) (.cse1 (+ 2 |~#x~0.offset|)) (.cse22 (not |v_P1_#t~short91_3169|)) (.cse4 (select .cse3 .cse20)) (.cse24 (not .cse26)) (.cse17 (not .cse16)) (.cse55 (not .cse31)) (.cse108 (not .cse106)) (.cse88 (not .cse87)) (.cse11 (not .cse12)) (.cse44 (not .cse45)) (.cse32 (not |v_P1_#t~short93_3204|)) (.cse8 (not |v_P1_#t~short93_3205|))) (and (= (select .cse0 .cse1) .cse2) (= (ite (= (mod |v_P1_#t~ite132_1967| 256) 0) 0 1) ~x$w_buff1_used~0) (= (select .cse3 |~#x~0.offset|) .cse4) (= ~x$r_buff0_thd2~0 (ite (= (mod |v_P1_#t~ite141_1465| 256) 0) 0 1)) (= .cse5 ~x$mem_tmp~0) (let ((.cse6 (= |v_#race~x$w_buff0_used~0_17087| 0)) (.cse15 (= |old(#race~x$w_buff1~0)| |v_#race~x$w_buff1~0_7640|)) (.cse7 (= |v_#race_10339| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse20 0) .cse1 0) .cse19 0)))) (.cse14 (= |old(#race~x$w_buff0~0)| |v_#race~x$w_buff0~0_7156|)) (.cse10 (= |v_#race~x$r_buff0_thd2~0_12076| |v_#race~x$r_buff0_thd2~0_12087|))) (or (let ((.cse13 (not |v_P1_#t~short95_3075|)) (.cse9 (not |v_P1_#t~short95_3074|))) (and .cse6 .cse7 (= |v_P1_#t~ite96_2665| ~__unbuffered_p1_EBX~0) .cse8 (or (and .cse9 .cse10 (= |v_P1_#t~short95_3075| |v_P1_#t~short95_3074|)) (and (or (and |v_P1_#t~short95_3075| .cse11) (and .cse12 .cse13)) |v_P1_#t~short95_3074| (= |v_#race~x$r_buff0_thd2~0_12087| 0))) (or (and .cse14 (= |v_#race~x$w_buff1~0_7640| 0) .cse13 (= |v_P1_#t~ite96_2665| |old(~x$w_buff1~0)|)) (and .cse15 |v_P1_#t~short95_3075| (= |old(~x$w_buff0~0)| |v_P1_#t~ite96_2665|) (= |v_#race~x$w_buff0~0_7156| 0))) (= |old(P1Thread1of1ForFork0_#t~mem94)| |v_P1_#t~mem94_2690|) (or (and .cse9 .cse16) (and |v_P1_#t~short95_3074| .cse17)))) (and (= |v_P1_#t~ite96_2665| |old(P1Thread1of1ForFork0_#t~ite96)|) (= (select .cse18 |~#x~0.offset|) 0) (= (select .cse18 .cse1) 0) .cse6 .cse15 |v_P1_#t~short93_3205| .cse7 (= |v_P1_#t~short95_3075| |old(P1Thread1of1ForFork0_#t~short95)|) (= ~__unbuffered_p1_EBX~0 |v_P1_#t~mem94_2690|) .cse14 (= (select .cse18 .cse19) 0) (= .cse5 |v_P1_#t~mem94_2690|) (= (select .cse18 .cse20) 0) .cse10))) (or (= |v_P1_#t~nondet83_631| 0) (= |v_P1_#t~nondet83_631| 1)) (= (select .cse0 |~#x~0.offset|) .cse2) (= ~weak$$choice2~0 (ite (= (mod |v_P1_#t~nondet85_825| 256) 0) 0 1)) (let ((.cse21 (= |v_#race~x$w_buff1_used~0_16427| |old(#race~x$w_buff1_used~0)|))) (or (and (= |v_P1_#t~short91_3169| |v_P1_#t~short91_3170|) |v_P1_#t~short91_3169| (= |v_P1_#t~short90_3101| |old(P1Thread1of1ForFork0_#t~short90)|) .cse21 (= |v_#race~x$r_buff0_thd2~0_12082| |old(#race~x$r_buff0_thd2~0)|)) (let ((.cse23 (not |v_P1_#t~short90_3102|)) (.cse25 (not |v_P1_#t~short90_3101|))) (and .cse22 (or (and .cse23 .cse11) (and |v_P1_#t~short90_3102| .cse12)) (or (and (= |v_P1_#t~short90_3101| |v_P1_#t~short90_3102|) .cse23 .cse21) (and |v_P1_#t~short90_3102| (or (and .cse24 .cse25) (and .cse26 |v_P1_#t~short90_3101|)) (= |v_#race~x$w_buff1_used~0_16427| 0))) (= |v_#race~x$r_buff0_thd2~0_12082| 0) (or (and |v_P1_#t~short90_3101| |v_P1_#t~short91_3170|) (and .cse27 .cse25)))))) (= ~x$flush_delayed~0 0) (or (= |v_P1_#t~nondet85_825| 0) (= |v_P1_#t~nondet85_825| 1)) (= |#race| (store |v_#race_10341| |~#x~0.base| (store (store (store (store .cse28 |~#x~0.offset| .cse2) .cse20 .cse2) .cse1 .cse2) .cse19 .cse2))) (= .cse2 (select .cse0 .cse20)) (let ((.cse29 (= |v_#race_10341| (store |v_#race_10340| |~#x~0.base| (store (store (store (store .cse3 |~#x~0.offset| 0) .cse20 0) .cse1 0) .cse19 0)))) (.cse30 (= (mod (ite .cse31 0 1) 256) 0))) (or (and .cse29 (= |#race~x$mem_tmp~0| |v_P1_#t~nondet89_1696|) (= |v_P1_#t~mem153_532| |v_P1_#t~ite154_333|) (= (select .cse28 .cse1) 0) .cse30 (= (select .cse28 |~#x~0.offset|) 0) (= |v_P1_#t~mem153_532| ~__unbuffered_p1_EBX~0) (= 0 (select .cse28 .cse20)) (= (select .cse28 .cse19) 0)) (and .cse29 (= |v_P1_#t~mem153_532| |old(P1Thread1of1ForFork0_#t~mem153)|) (= ~x$mem_tmp~0 |v_P1_#t~ite154_333|) (not .cse30) (= |#race~x$mem_tmp~0| 0)))) (or (and |v_P1_#t~short91_3170| |v_P1_#t~short93_3204|) (and .cse27 .cse32)) (= |v_#race_10340| (store |v_#race_10339| |~#x~0.base| (store (store (store (store .cse18 |~#x~0.offset| .cse4) .cse20 .cse4) .cse1 .cse4) .cse19 .cse4))) (= (select .cse3 .cse1) .cse4) (let ((.cse35 (= |v_#race~x$w_buff1_used~0_16427| |v_#race~x$w_buff1_used~0_16424|)) (.cse43 (= |v_#race~x$r_buff1_thd2~0_7136| |v_#race~x$r_buff1_thd2~0_7132|)) (.cse48 (= |old(P1Thread1of1ForFork0_#t~ite104)| |v_P1_#t~ite104_2733|)) (.cse49 (= |v_P1_#t~short103_3176| |old(P1Thread1of1ForFork0_#t~short103)|)) (.cse46 (= |v_P1_#t~short101_3274| |old(P1Thread1of1ForFork0_#t~short101)|)) (.cse36 (= |v_P1_#t~short99_3317| |old(P1Thread1of1ForFork0_#t~short99)|)) (.cse51 (= |v_#race~x$w_buff0~0_7155| 0))) (or (let ((.cse33 (not |v_P1_#t~short100_3343|)) (.cse34 (not |v_P1_#t~short102_3302|)) (.cse37 (not |v_P1_#t~short100_3344|)) (.cse40 (not |v_P1_#t~short102_3303|))) (and (or (and |v_P1_#t~short100_3343| |v_P1_#t~short102_3302|) (and .cse33 .cse34)) (or (and .cse35 (= |v_P1_#t~short100_3344| |v_P1_#t~short100_3343|) |v_P1_#t~short100_3344| (= |v_#race~x$r_buff0_thd2~0_12087| |v_#race~x$r_buff0_thd2~0_12086|) .cse36) (let ((.cse38 (not |v_P1_#t~short99_3317|)) (.cse39 (not |v_P1_#t~short99_3318|))) (and .cse37 (or (and |v_P1_#t~short99_3317| |v_P1_#t~short100_3343|) (and .cse33 .cse38)) (= |v_#race~x$r_buff0_thd2~0_12086| 0) (or (and .cse35 .cse39 (= |v_P1_#t~short99_3318| |v_P1_#t~short99_3317|)) (and (or (and .cse38 .cse24) (and .cse26 |v_P1_#t~short99_3317|)) |v_P1_#t~short99_3318| (= |v_#race~x$w_buff1_used~0_16424| 0))) (or (and .cse12 |v_P1_#t~short99_3318|) (and .cse39 .cse11))))) (or (let ((.cse42 (not |v_P1_#t~short101_3273|)) (.cse41 (not |v_P1_#t~short101_3274|))) (and (or (and .cse40 .cse41) (and |v_P1_#t~short101_3274| |v_P1_#t~short102_3303|)) (or (and .cse42 .cse11) (and .cse12 |v_P1_#t~short101_3273|)) .cse34 (= |v_#race~x$r_buff0_thd2~0_12079| 0) (or (and (= |v_P1_#t~short101_3273| |v_P1_#t~short101_3274|) .cse43 .cse42) (and (or (and .cse44 .cse41) (and |v_P1_#t~short101_3274| .cse45)) |v_P1_#t~short101_3273| (= |v_#race~x$r_buff1_thd2~0_7132| 0))))) (and (= |v_#race~x$r_buff0_thd2~0_12079| |v_#race~x$r_buff0_thd2~0_12086|) .cse43 |v_P1_#t~short102_3302| (= |v_P1_#t~short102_3302| |v_P1_#t~short102_3303|) .cse46)) (or (and |v_P1_#t~short100_3344| .cse16) (and .cse37 .cse17)) .cse31 (= ~x$w_buff0~0 |v_P1_#t~ite105_2721|) (let ((.cse50 (= |v_#race~x$r_buff0_thd2~0_12079| |v_#race~x$r_buff0_thd2~0_12085|)) (.cse47 (= |v_#race~x$w_buff0_used~0_17089| 0))) (or (and .cse47 .cse48 (= |old(~x$w_buff0~0)| |v_P1_#t~ite105_2721|) .cse49 .cse50 |v_P1_#t~short102_3303| .cse51) (let ((.cse53 (not |v_P1_#t~short103_3176|)) (.cse54 (not |v_P1_#t~short103_3177|))) (and (let ((.cse52 (= |old(~x$w_buff0~0)| |v_P1_#t~ite104_2733|))) (or (and .cse52 .cse51 .cse53) (and .cse52 |v_P1_#t~short103_3176| .cse51))) .cse40 (or (and (= |v_P1_#t~short103_3176| |v_P1_#t~short103_3177|) .cse50 .cse54) (and (= |v_#race~x$r_buff0_thd2~0_12085| 0) (or (and .cse11 |v_P1_#t~short103_3176|) (and .cse12 .cse53)) |v_P1_#t~short103_3177|)) .cse47 (or (and .cse17 |v_P1_#t~short103_3177|) (and .cse16 .cse54)) (= |v_P1_#t~ite104_2733| |v_P1_#t~ite105_2721|))))))) (and (= |v_#race~x$r_buff0_thd2~0_12085| |v_#race~x$r_buff0_thd2~0_12087|) .cse35 (= |old(P1Thread1of1ForFork0_#t~ite105)| |v_P1_#t~ite105_2721|) (= |old(~x$w_buff0~0)| ~x$w_buff0~0) .cse43 (= |v_#race~x$w_buff0_used~0_17089| |v_#race~x$w_buff0_used~0_17087|) .cse48 .cse49 .cse46 .cse36 .cse51 (= |v_P1_#t~short102_3303| |old(P1Thread1of1ForFork0_#t~short102)|) (= |v_P1_#t~short100_3343| |old(P1Thread1of1ForFork0_#t~short100)|) .cse55))) (let ((.cse64 (= |v_#race~x$w_buff1~0_7639| 0)) (.cse56 (= |v_#race~x$w_buff1_used~0_16425| |v_#race~x$w_buff1_used~0_16424|)) (.cse75 (= |old(P1Thread1of1ForFork0_#t~short110)| |v_P1_#t~short110_3218|)) (.cse70 (= |old(P1Thread1of1ForFork0_#t~short112)| |v_P1_#t~short112_3103|)) (.cse72 (= |v_#race~x$r_buff1_thd2~0_7138| |v_#race~x$r_buff1_thd2~0_7132|)) (.cse57 (= |old(P1Thread1of1ForFork0_#t~short108)| |v_P1_#t~short108_3273|)) (.cse71 (= |old(P1Thread1of1ForFork0_#t~ite113)| |v_P1_#t~ite113_2643|))) (or (let ((.cse60 (not |v_P1_#t~short109_3306|)) (.cse58 (not |v_P1_#t~short109_3305|)) (.cse62 (not |v_P1_#t~short111_3252|)) (.cse69 (not |v_P1_#t~short111_3253|))) (and (= |v_P1_#t~ite114_2631| ~x$w_buff1~0) (or (and (= |v_P1_#t~short109_3305| |v_P1_#t~short109_3306|) .cse56 .cse57 |v_P1_#t~short109_3306| (= |v_#race~x$r_buff0_thd2~0_12092| |v_#race~x$r_buff0_thd2~0_12085|)) (let ((.cse59 (not |v_P1_#t~short108_3273|)) (.cse61 (not |v_P1_#t~short108_3274|))) (and (or (and |v_P1_#t~short108_3273| |v_P1_#t~short109_3305|) (and .cse58 .cse59)) .cse60 (= |v_#race~x$r_buff0_thd2~0_12092| 0) (or (and .cse12 |v_P1_#t~short108_3274|) (and .cse61 .cse11)) (or (and (= |v_#race~x$w_buff1_used~0_16425| 0) (or (and .cse26 |v_P1_#t~short108_3273|) (and .cse59 .cse24)) |v_P1_#t~short108_3274|) (and .cse61 (= |v_P1_#t~short108_3274| |v_P1_#t~short108_3273|) .cse56))))) (or (and .cse16 |v_P1_#t~short109_3306|) (and .cse60 .cse17)) (or (and .cse58 .cse62) (and |v_P1_#t~short109_3305| |v_P1_#t~short111_3252|)) (let ((.cse63 (= |v_#race~x$w_buff0_used~0_17086| 0)) (.cse68 (= |v_#race~x$r_buff0_thd2~0_12078| |v_#race~x$r_buff0_thd2~0_12083|))) (or (let ((.cse66 (not |v_P1_#t~short112_3103|)) (.cse67 (not |v_P1_#t~short112_3102|))) (and .cse63 (let ((.cse65 (= |v_P1_#t~ite113_2643| |old(~x$w_buff1~0)|))) (or (and .cse64 .cse65 |v_P1_#t~short112_3103|) (and .cse66 .cse64 .cse65))) (or (and (= |v_P1_#t~short112_3103| |v_P1_#t~short112_3102|) .cse67 .cse68) (and (= |v_#race~x$r_buff0_thd2~0_12078| 0) (or (and .cse66 .cse12) (and .cse11 |v_P1_#t~short112_3103|)) |v_P1_#t~short112_3102|)) .cse69 (= |v_P1_#t~ite113_2643| |v_P1_#t~ite114_2631|) (or (and .cse16 .cse67) (and .cse17 |v_P1_#t~short112_3102|)))) (and .cse63 .cse64 .cse70 .cse71 (= |v_P1_#t~ite114_2631| |old(~x$w_buff1~0)|) |v_P1_#t~short111_3253| .cse68))) .cse31 (or (let ((.cse73 (not |v_P1_#t~short110_3217|)) (.cse74 (not |v_P1_#t~short110_3218|))) (and (= |v_#race~x$r_buff0_thd2~0_12083| 0) (or (and .cse72 (= |v_P1_#t~short110_3217| |v_P1_#t~short110_3218|) .cse73) (and (or (and .cse44 .cse74) (and .cse45 |v_P1_#t~short110_3218|)) |v_P1_#t~short110_3217| (= |v_#race~x$r_buff1_thd2~0_7138| 0))) (or (and .cse12 |v_P1_#t~short110_3217|) (and .cse11 .cse73)) .cse62 (or (and |v_P1_#t~short110_3218| |v_P1_#t~short111_3253|) (and .cse69 .cse74)))) (and (= |v_#race~x$r_buff0_thd2~0_12092| |v_#race~x$r_buff0_thd2~0_12083|) (= |v_P1_#t~short111_3252| |v_P1_#t~short111_3253|) .cse75 .cse72 |v_P1_#t~short111_3252|)))) (and (= |v_#race~x$w_buff0_used~0_17089| |v_#race~x$w_buff0_used~0_17086|) (= |old(P1Thread1of1ForFork0_#t~short111)| |v_P1_#t~short111_3253|) (= |old(P1Thread1of1ForFork0_#t~ite114)| |v_P1_#t~ite114_2631|) .cse64 (= |old(~x$w_buff1~0)| ~x$w_buff1~0) (= |old(P1Thread1of1ForFork0_#t~short109)| |v_P1_#t~short109_3305|) .cse56 .cse75 .cse70 .cse72 .cse57 (= |v_#race~x$r_buff0_thd2~0_12078| |v_#race~x$r_buff0_thd2~0_12085|) .cse71 .cse55))) (let ((.cse80 (= |v_P1_#t~short126_2771| |old(P1Thread1of1ForFork0_#t~short126)|)) (.cse79 (= |v_P1_#t~short128_2683| |old(P1Thread1of1ForFork0_#t~short128)|)) (.cse77 (= |v_#race~x$r_buff1_thd2~0_7134| |v_#race~x$r_buff1_thd2~0_7131|)) (.cse76 (= |v_P1_#t~short130_2506| |old(P1Thread1of1ForFork0_#t~short130)|)) (.cse78 (= |v_#race~x$w_buff1_used~0_16428| 0))) (or (and .cse76 (= |v_#race~x$r_buff0_thd2~0_12077| |v_#race~x$r_buff0_thd2~0_12081|) (= |v_P1_#t~ite132_1967| |old(~x$w_buff1_used~0)|) .cse77 (= |v_P1_#t~ite131_2141| |old(P1Thread1of1ForFork0_#t~ite131)|) .cse78 (= |v_P1_#t~short127_2811| |old(P1Thread1of1ForFork0_#t~short127)|) .cse79 .cse80 (= |v_P1_#t~short129_2726| |old(P1Thread1of1ForFork0_#t~short129)|) (= |v_#race~x$w_buff0_used~0_17085| |v_#race~x$w_buff0_used~0_17090|) .cse55) (let ((.cse84 (not |v_P1_#t~short127_2811|)) (.cse85 (not |v_P1_#t~short127_2812|)) (.cse86 (not |v_P1_#t~short129_2727|)) (.cse91 (not |v_P1_#t~short129_2726|))) (and (= |v_P1_#t~ite131_2141| |v_P1_#t~ite132_1967|) (let ((.cse81 (= |v_#race~x$w_buff1_used~0_16429| |v_#race~x$w_buff1_used~0_16423|))) (or (let ((.cse83 (not |v_P1_#t~short126_2771|)) (.cse82 (not |v_P1_#t~short126_2772|))) (and (or (and .cse81 (= |v_P1_#t~short126_2772| |v_P1_#t~short126_2771|) .cse82) (and (= |v_#race~x$w_buff1_used~0_16429| 0) |v_P1_#t~short126_2772| (or (and .cse83 .cse24) (and .cse26 |v_P1_#t~short126_2771|)))) (or (and .cse83 .cse84) (and |v_P1_#t~short126_2771| |v_P1_#t~short127_2811|)) (or (and |v_P1_#t~short126_2772| .cse12) (and .cse11 .cse82)) (= |v_#race~x$r_buff0_thd2~0_12080| 0) .cse85)) (and (= |v_P1_#t~short127_2811| |v_P1_#t~short127_2812|) |v_P1_#t~short127_2812| .cse81 .cse80 (= |v_#race~x$r_buff0_thd2~0_12077| |v_#race~x$r_buff0_thd2~0_12080|)))) (or (and |v_P1_#t~short127_2811| |v_P1_#t~short129_2727|) (and .cse86 .cse84)) (or (and .cse87 |v_P1_#t~short127_2812|) (and .cse88 .cse85)) .cse31 (or (and (= |v_#race~x$r_buff0_thd2~0_12073| |v_#race~x$r_buff0_thd2~0_12080|) |v_P1_#t~short129_2727| .cse77 .cse79 (= |v_P1_#t~short129_2726| |v_P1_#t~short129_2727|)) (let ((.cse89 (not |v_P1_#t~short128_2684|)) (.cse90 (not |v_P1_#t~short128_2683|))) (and (or (and .cse77 .cse89 (= |v_P1_#t~short128_2683| |v_P1_#t~short128_2684|)) (and |v_P1_#t~short128_2684| (= |v_#race~x$r_buff1_thd2~0_7134| 0) (or (and |v_P1_#t~short128_2683| .cse45) (and .cse90 .cse44)))) (or (and |v_P1_#t~short128_2684| .cse12) (and .cse11 .cse89)) .cse86 (= |v_#race~x$r_buff0_thd2~0_12073| 0) (or (and .cse90 .cse91) (and |v_P1_#t~short128_2683| |v_P1_#t~short129_2726|))))) (let ((.cse94 (= |v_#race~x$w_buff0_used~0_17085| 0)) (.cse93 (= |v_#race~x$r_buff0_thd2~0_12073| |v_#race~x$r_buff0_thd2~0_12081|))) (or (let ((.cse92 (not |v_P1_#t~short130_2505|))) (and (or (and .cse87 .cse92) (and |v_P1_#t~short130_2505| .cse88)) (= |v_P1_#t~ite131_2141| 0) (= |v_#race~x$w_buff1_used~0_16429| |v_#race~x$w_buff1_used~0_16428|) (or (and .cse92 (= |v_P1_#t~short130_2506| |v_P1_#t~short130_2505|) .cse93) (and (= |v_#race~x$r_buff0_thd2~0_12081| 0) |v_P1_#t~short130_2505| (or (and .cse12 (not |v_P1_#t~short130_2506|)) (and |v_P1_#t~short130_2506| .cse11)))) .cse94 .cse91)) (and .cse76 |v_P1_#t~short129_2726| .cse78 .cse94 (= |v_P1_#t~ite131_2141| |old(~x$w_buff1_used~0)|) .cse93))))))) (or (and |v_P1_#t~short91_3169| .cse16) (and .cse22 .cse17)) (= 0 |#race~weak$$choice2~0|) (= (select .cse3 .cse19) .cse4) (let ((.cse95 (= |old(P1Thread1of1ForFork0_#t~short147)| |v_P1_#t~short147_1482|)) (.cse104 (= |v_#race~x$w_buff1_used~0_16426| |#race~x$w_buff1_used~0|)) (.cse110 (= |old(P1Thread1of1ForFork0_#t~short143)| |v_P1_#t~short143_1807|)) (.cse97 (= |v_#race~x$r_buff1_thd2~0_7133| 0)) (.cse115 (= |old(P1Thread1of1ForFork0_#t~short145)| |v_P1_#t~short145_1696|))) (or (let ((.cse100 (= (mod ~x$r_buff0_thd2~0 256) 0))) (let ((.cse109 (not |v_P1_#t~short144_1859|)) (.cse99 (not .cse100)) (.cse102 (not |v_P1_#t~short146_1751|)) (.cse111 (not |v_P1_#t~short146_1750|)) (.cse103 (not |v_P1_#t~short144_1860|))) (and (= |v_P1_#t~ite149_881| |v_P1_#t~ite148_1103|) (let ((.cse96 (= |v_#race~x$r_buff0_thd2~0_12093| |#race~x$r_buff0_thd2~0|)) (.cse98 (= |#race~x$w_buff0_used~0| 0))) (or (and .cse95 .cse96 .cse97 .cse98 |v_P1_#t~short146_1751| (= |old(~x$r_buff1_thd2~0)| |v_P1_#t~ite148_1103|)) (let ((.cse101 (not |v_P1_#t~short147_1481|))) (and (or (and (= |#race~x$r_buff0_thd2~0| 0) |v_P1_#t~short147_1481| (or (and |v_P1_#t~short147_1482| .cse99) (and .cse100 (not |v_P1_#t~short147_1482|)))) (and .cse96 (= |v_P1_#t~short147_1481| |v_P1_#t~short147_1482|) .cse101)) .cse98 (or (and .cse87 .cse101) (and .cse88 |v_P1_#t~short147_1481|)) .cse102 (= |v_#race~x$r_buff1_thd2~0_7137| |v_#race~x$r_buff1_thd2~0_7133|) (= 0 |v_P1_#t~ite148_1103|))))) .cse31 (or (let ((.cse105 (not |v_P1_#t~short143_1808|)) (.cse107 (not |v_P1_#t~short143_1807|))) (and .cse103 (or (and .cse104 .cse105 (= |v_P1_#t~short143_1808| |v_P1_#t~short143_1807|)) (and (or (and |v_P1_#t~short143_1807| .cse106) (and .cse107 .cse108)) |v_P1_#t~short143_1808| (= |#race~x$w_buff1_used~0| 0))) (or (and .cse105 .cse99) (and .cse100 |v_P1_#t~short143_1808|)) (or (and |v_P1_#t~short143_1807| |v_P1_#t~short144_1859|) (and .cse109 .cse107)) (= |v_#race~x$r_buff0_thd2~0_12090| 0))) (and .cse104 .cse110 (= |v_#race~x$r_buff0_thd2~0_12090| |v_#race~x$r_buff0_thd2~0_12084|) (= |v_P1_#t~short144_1859| |v_P1_#t~short144_1860|) |v_P1_#t~short144_1860|)) (or (and .cse109 .cse111) (and |v_P1_#t~short144_1859| |v_P1_#t~short146_1750|)) (let ((.cse114 (= |v_#race~x$r_buff1_thd2~0_7137| |v_#race~x$r_buff1_thd2~0_7135|))) (or (let ((.cse113 (not |v_P1_#t~short145_1696|)) (.cse112 (not |v_P1_#t~short145_1695|))) (and (or (and .cse112 .cse99) (and .cse100 |v_P1_#t~short145_1695|)) (or (and .cse113 .cse102) (and |v_P1_#t~short145_1696| |v_P1_#t~short146_1751|)) (or (and |v_P1_#t~short145_1695| (= |v_#race~x$r_buff1_thd2~0_7137| 0) (or (and .cse113 .cse44) (and |v_P1_#t~short145_1696| .cse45))) (and .cse112 (= |v_P1_#t~short145_1695| |v_P1_#t~short145_1696|) .cse114)) .cse111 (= |v_#race~x$r_buff0_thd2~0_12093| 0))) (and (= |v_P1_#t~short146_1751| |v_P1_#t~short146_1750|) (= |v_#race~x$r_buff0_thd2~0_12093| |v_#race~x$r_buff0_thd2~0_12090|) .cse114 |v_P1_#t~short146_1750| .cse115))) (or (and .cse87 |v_P1_#t~short144_1860|) (and .cse103 .cse88))))) (and (= |old(P1Thread1of1ForFork0_#t~short144)| |v_P1_#t~short144_1859|) .cse95 .cse104 .cse110 (= |old(P1Thread1of1ForFork0_#t~short146)| |v_P1_#t~short146_1751|) .cse97 (= |old(P1Thread1of1ForFork0_#t~ite148)| |v_P1_#t~ite148_1103|) (= |v_P1_#t~ite149_881| |old(~x$r_buff1_thd2~0)|) .cse115 (= |#race~x$w_buff0_used~0| |v_#race~x$w_buff0_used~0_17088|) (= |v_#race~x$r_buff0_thd2~0_12084| |#race~x$r_buff0_thd2~0|) .cse55))) (= (ite (= (mod |v_P1_#t~ite149_881| 256) 0) 0 1) ~x$r_buff1_thd2~0) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store .cse116 |~#x~0.offset| |v_P1_#t~ite154_333|))) (let ((.cse134 (= |v_P1_#t~short117_3073| |old(P1Thread1of1ForFork0_#t~short117)|)) (.cse131 (= |v_#race~x$w_buff1_used~0_16425| |v_#race~x$w_buff1_used~0_16423|)) (.cse117 (= |v_P1_#t~short119_3002| |old(P1Thread1of1ForFork0_#t~short119)|)) (.cse128 (= |v_P1_#t~ite122_2443| |old(P1Thread1of1ForFork0_#t~ite122)|)) (.cse127 (= |v_#race~x$w_buff0_used~0_17091| 0)) (.cse129 (= |v_P1_#t~short121_2858| |old(P1Thread1of1ForFork0_#t~short121)|)) (.cse118 (= |v_#race~x$r_buff1_thd2~0_7138| |v_#race~x$r_buff1_thd2~0_7131|))) (or (let ((.cse121 (not |v_P1_#t~short120_3041|)) (.cse122 (not |v_P1_#t~short120_3040|)) (.cse123 (not |v_P1_#t~short118_3110|)) (.cse133 (not |v_P1_#t~short118_3109|))) (and (or (and |v_P1_#t~short120_3041| (= |v_P1_#t~short120_3041| |v_P1_#t~short120_3040|) .cse117 (= |v_#race~x$r_buff0_thd2~0_12091| |v_#race~x$r_buff0_thd2~0_12088|) .cse118) (let ((.cse119 (not |v_P1_#t~short119_3001|)) (.cse120 (not |v_P1_#t~short119_3002|))) (and (= |v_#race~x$r_buff0_thd2~0_12088| 0) (or (and |v_P1_#t~short119_3001| .cse12) (and .cse11 .cse119)) (or (and |v_P1_#t~short119_3001| (or (and |v_P1_#t~short119_3002| .cse45) (and .cse44 .cse120)) (= |v_#race~x$r_buff1_thd2~0_7131| 0)) (and (= |v_P1_#t~short119_3001| |v_P1_#t~short119_3002|) .cse119 .cse118)) .cse121 (or (and .cse122 .cse120) (and |v_P1_#t~short119_3002| |v_P1_#t~short120_3040|))))) (or (and .cse123 .cse121) (and |v_P1_#t~short118_3110| |v_P1_#t~short120_3041|)) (let ((.cse125 (= |v_#race~x$r_buff0_thd2~0_12077| |v_#race~x$r_buff0_thd2~0_12088|))) (or (let ((.cse126 (not |v_P1_#t~short121_2858|)) (.cse124 (not |v_P1_#t~short121_2859|))) (and (or (and .cse124 .cse125 (= |v_P1_#t~short121_2858| |v_P1_#t~short121_2859|)) (and (= |v_#race~x$r_buff0_thd2~0_12077| 0) |v_P1_#t~short121_2859| (or (and .cse12 .cse126) (and |v_P1_#t~short121_2858| .cse11)))) .cse122 (or (and (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite122_2443|) .cse127 .cse126) (and |v_P1_#t~short121_2858| .cse127 (= |v_P1_#t~ite122_2443| 0))) (or (and |v_P1_#t~short121_2859| .cse17) (and .cse124 .cse16)) (= |v_P1_#t~ite122_2443| |v_P1_#t~ite123_2433|))) (and |v_P1_#t~short120_3040| (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite123_2433|) .cse128 .cse127 .cse129 .cse125))) (= |v_P1_#t~ite123_2433| |v_P1_#t~ite124_2281|) .cse31 (or (let ((.cse130 (not |v_P1_#t~short117_3073|)) (.cse132 (not |v_P1_#t~short117_3074|))) (and (or (and |v_P1_#t~short117_3073| |v_P1_#t~short118_3110|) (and .cse130 .cse123)) (or (and .cse131 .cse132 (= |v_P1_#t~short117_3074| |v_P1_#t~short117_3073|)) (and |v_P1_#t~short117_3074| (or (and |v_P1_#t~short117_3073| .cse26) (and .cse130 .cse24)) (= |v_#race~x$w_buff1_used~0_16423| 0))) (= |v_#race~x$r_buff0_thd2~0_12091| 0) (or (and .cse11 .cse132) (and |v_P1_#t~short117_3074| .cse12)) .cse133)) (and |v_P1_#t~short118_3109| .cse134 .cse131 (= |v_P1_#t~short118_3109| |v_P1_#t~short118_3110|) (= |v_#race~x$r_buff0_thd2~0_12091| |v_#race~x$r_buff0_thd2~0_12078|))) (or (and .cse17 .cse133) (and |v_P1_#t~short118_3109| .cse16)))) (and .cse134 (= |v_#race~x$r_buff0_thd2~0_12078| |v_#race~x$r_buff0_thd2~0_12077|) .cse131 (= |v_P1_#t~short120_3040| |old(P1Thread1of1ForFork0_#t~short120)|) .cse117 (= |old(~x$w_buff0_used~0)| |v_P1_#t~ite124_2281|) .cse128 (= |old(P1Thread1of1ForFork0_#t~short118)| |v_P1_#t~short118_3110|) .cse127 .cse129 (= |v_P1_#t~ite123_2433| |old(P1Thread1of1ForFork0_#t~ite123)|) .cse118 .cse55))) (let ((.cse135 (= |v_#race~x$r_buff1_thd2~0_7135| |v_#race~x$r_buff1_thd2~0_7134|)) (.cse137 (= |v_P1_#t~short136_2296| |old(P1Thread1of1ForFork0_#t~short136)|)) (.cse139 (= |v_P1_#t~short134_2392| |old(P1Thread1of1ForFork0_#t~short134)|)) (.cse141 (= |v_#race~x$w_buff1_used~0_16430| |v_#race~x$w_buff1_used~0_16426|)) (.cse136 (= |v_P1_#t~short138_2117| |old(P1Thread1of1ForFork0_#t~short138)|)) (.cse138 (= |v_#race~x$r_buff0_thd2~0_12089| 0)) (.cse140 (= |old(P1Thread1of1ForFork0_#t~ite139)| |v_P1_#t~ite139_1675|))) (or (and (= |old(P1Thread1of1ForFork0_#t~ite140)| |v_P1_#t~ite140_1665|) .cse135 (= |v_P1_#t~short137_2347| |old(P1Thread1of1ForFork0_#t~short137)|) .cse136 .cse137 .cse138 (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite141_1465|) (= |v_#race~x$w_buff0_used~0_17088| |v_#race~x$w_buff0_used~0_17085|) .cse139 .cse140 (= |v_P1_#t~short135_2439| |old(P1Thread1of1ForFork0_#t~short135)|) .cse55 .cse141) (let ((.cse143 (not |v_P1_#t~short137_2346|)) (.cse142 (not |v_P1_#t~short135_2440|)) (.cse147 (not |v_P1_#t~short135_2439|)) (.cse146 (not |v_P1_#t~short137_2347|))) (and (or (and .cse142 .cse88) (and .cse87 |v_P1_#t~short135_2440|)) (or (let ((.cse144 (not |v_P1_#t~short136_2296|)) (.cse145 (not |v_P1_#t~short136_2295|))) (and .cse143 (or (and (or (and |v_P1_#t~short136_2296| .cse45) (and .cse144 .cse44)) |v_P1_#t~short136_2295| (= |v_#race~x$r_buff1_thd2~0_7135| 0)) (and (= |v_P1_#t~short136_2295| |v_P1_#t~short136_2296|) .cse135 .cse145)) (= |v_#race~x$r_buff0_thd2~0_12075| 0) (or (and .cse144 .cse146) (and |v_P1_#t~short136_2296| |v_P1_#t~short137_2347|)) (or (and .cse11 .cse145) (and .cse12 |v_P1_#t~short136_2295|)))) (and .cse135 |v_P1_#t~short137_2346| .cse137 (= |v_#race~x$r_buff0_thd2~0_12072| |v_#race~x$r_buff0_thd2~0_12075|) (= |v_P1_#t~short137_2347| |v_P1_#t~short137_2346|))) (= |v_P1_#t~ite140_1665| |v_P1_#t~ite141_1465|) (or (and .cse143 .cse147) (and |v_P1_#t~short135_2439| |v_P1_#t~short137_2346|)) (or (and |v_P1_#t~short135_2440| (= |v_#race~x$r_buff0_thd2~0_12072| |v_#race~x$r_buff0_thd2~0_12081|) (= |v_P1_#t~short135_2439| |v_P1_#t~short135_2440|) .cse139 .cse141) (let ((.cse149 (not |v_P1_#t~short134_2391|)) (.cse148 (not |v_P1_#t~short134_2392|))) (and .cse142 (or (and .cse148 .cse147) (and |v_P1_#t~short134_2392| |v_P1_#t~short135_2439|)) (or (and .cse12 |v_P1_#t~short134_2391|) (and .cse11 .cse149)) (or (and (= |v_P1_#t~short134_2391| |v_P1_#t~short134_2392|) .cse149 .cse141) (and (= |v_#race~x$w_buff1_used~0_16426| 0) |v_P1_#t~short134_2391| (or (and .cse148 .cse108) (and |v_P1_#t~short134_2392| .cse106)))) (= |v_#race~x$r_buff0_thd2~0_12072| 0)))) .cse31 (let ((.cse150 (= |v_#race~x$w_buff0_used~0_17088| 0))) (or (let ((.cse151 (not |v_P1_#t~short138_2116|)) (.cse152 (not |v_P1_#t~short138_2117|))) (and .cse150 (= |v_P1_#t~ite139_1675| |v_P1_#t~ite140_1665|) (or (and .cse87 .cse151) (and |v_P1_#t~short138_2116| .cse88)) (or (and |v_P1_#t~short138_2116| (= |v_#race~x$r_buff0_thd2~0_12074| 0) (or (and |v_P1_#t~short138_2117| .cse11) (and .cse12 .cse152))) (and (= |v_P1_#t~short138_2117| |v_P1_#t~short138_2116|) .cse151 (= |v_#race~x$r_buff0_thd2~0_12074| |v_#race~x$r_buff0_thd2~0_12075|))) (or (and (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite139_1675|) .cse152 .cse138) (and |v_P1_#t~short138_2117| (= |v_P1_#t~ite139_1675| 0) (= |v_#race~x$r_buff0_thd2~0_12074| |v_#race~x$r_buff0_thd2~0_12089|))) .cse146)) (and .cse150 .cse136 |v_P1_#t~short137_2347| .cse138 (= |old(~x$r_buff0_thd2~0)| |v_P1_#t~ite140_1665|) .cse140))))))) (= ~x$w_buff0_used~0 (ite (= 0 (mod |v_P1_#t~ite124_2281| 256)) 0 1)) (= (ite (= (mod |v_P1_#t~nondet83_631| 256) 0) 0 1) ~weak$$choice0~0) (let ((.cse153 (= |v_#race~x$r_buff1_thd2~0_7136| |old(#race~x$r_buff1_thd2~0)|))) (or (and (= |v_P1_#t~short92_3146| |old(P1Thread1of1ForFork0_#t~short92)|) |v_P1_#t~short93_3204| .cse153 (= |v_#race~x$r_buff0_thd2~0_12076| |v_#race~x$r_buff0_thd2~0_12082|) (= |v_P1_#t~short93_3204| |v_P1_#t~short93_3205|)) (let ((.cse154 (not |v_P1_#t~short92_3145|)) (.cse155 (not |v_P1_#t~short92_3146|))) (and (or (and .cse12 |v_P1_#t~short92_3145|) (and .cse11 .cse154)) (or (and |v_P1_#t~short92_3145| (= |v_#race~x$r_buff1_thd2~0_7136| 0) (or (and .cse44 .cse155) (and |v_P1_#t~short92_3146| .cse45))) (and .cse153 .cse154 (= |v_P1_#t~short92_3146| |v_P1_#t~short92_3145|))) (= |v_#race~x$r_buff0_thd2~0_12076| 0) .cse32 (or (and |v_P1_#t~short92_3146| |v_P1_#t~short93_3205|) (and .cse8 .cse155))))))))) +//@ semantics [406] {} true +//@ semantics [407] {#race~__unbuffered_cnt~0} false +//@ semantics [408] {P1Thread1of1ForFork0_#t~nondet157,~__unbuffered_cnt~0,#race~__unbuffered_cnt~0} false +//@ semantics [409] {P1Thread1of1ForFork0_#t~nondet157,~__unbuffered_cnt~0,#race~__unbuffered_cnt~0} (= (+ |old(~__unbuffered_cnt~0)| 1) ~__unbuffered_cnt~0) +//@ semantics [410] {P1Thread1of1ForFork0_#res.offset,P1Thread1of1ForFork0_#res.base} (and (= |P1Thread1of1ForFork0_#res.offset| 0) (= |P1Thread1of1ForFork0_#res.base| 0)) +//@ semantics [411] {} true +//@ semantics [412] {P2Thread1of1ForFork1_~arg.offset,P2Thread1of1ForFork1_~arg.base} (and (= P2Thread1of1ForFork1_~arg.base |P2Thread1of1ForFork1_#in~arg.base|) (= P2Thread1of1ForFork1_~arg.offset |P2Thread1of1ForFork1_#in~arg.offset|)) +//@ semantics [413] {#race,#memory_int,P2Thread1of1ForFork1_#t~nondet158} (let ((.cse2 (+ |~#x~0.offset| 1)) (.cse3 (+ 2 |~#x~0.offset|)) (.cse1 (+ 3 |~#x~0.offset|))) (and (let ((.cse0 (select |#race| |~#x~0.base|))) (or (not (= (select .cse0 |~#x~0.offset|) |P2Thread1of1ForFork1_#t~nondet158|)) (not (= |P2Thread1of1ForFork1_#t~nondet158| (select .cse0 .cse1))) (not (= |P2Thread1of1ForFork1_#t~nondet158| (select .cse0 .cse2))) (not (= (select .cse0 .cse3) |P2Thread1of1ForFork1_#t~nondet158|)))) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| |P2Thread1of1ForFork1_#t~nondet158|) .cse2 |P2Thread1of1ForFork1_#t~nondet158|) .cse3 |P2Thread1of1ForFork1_#t~nondet158|) .cse1 |P2Thread1of1ForFork1_#t~nondet158|))) (= (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| 1)) |#memory_int|))) +//@ semantics [414] {#race,#memory_int,P2Thread1of1ForFork1_#t~nondet158} (let ((.cse4 (select |#race| |~#x~0.base|)) (.cse1 (+ |~#x~0.offset| 1))) (let ((.cse3 (+ 3 |~#x~0.offset|)) (.cse2 (+ 2 |~#x~0.offset|)) (.cse0 (select .cse4 .cse1))) (and (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| .cse0) .cse1 .cse0) .cse2 .cse0) .cse3 .cse0))) (= (select .cse4 |~#x~0.offset|) .cse0) (= (select .cse4 .cse3) .cse0) (= (select .cse4 .cse2) .cse0) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| 1)))))) +//@ semantics [415] {#race~x$w_buff0_used~0} false +//@ semantics [416] {#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~short159} false +//@ semantics [417] {#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~short159,#race~x$w_buff1_used~0} false +//@ semantics [418] {P2Thread1of1ForFork1_#t~short160,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~short159,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [419] {#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~short160,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~short159,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [420] {#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~short159} false +//@ semantics [421] {#race,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~short160,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~short159,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} [(|v_P2_#t~short160_486| Bool) (|v_P2_#t~short159_600| Bool)] (let ((.cse4 (not |P2Thread1of1ForFork1_#t~short160|)) (.cse2 (not |v_P2_#t~short160_486|)) (.cse1 (not |v_P2_#t~short159_600|)) (.cse7 (not |P2Thread1of1ForFork1_#t~short159|)) (.cse8 (+ |~#x~0.offset| 1)) (.cse10 (+ 3 |~#x~0.offset|)) (.cse9 (+ 2 |~#x~0.offset|))) (and (= |#race~x$w_buff1_used~0| 0) (let ((.cse0 (= (mod ~x$w_buff0_used~0 256) 0))) (or (and (not .cse0) |v_P2_#t~short159_600|) (and .cse0 .cse1))) (or (and (= |old(#race~x$r_buff1_thd3~0)| |#race~x$r_buff1_thd3~0|) .cse2 (= |P2Thread1of1ForFork1_#t~short160| |v_P2_#t~short160_486|)) (and (= |#race~x$r_buff1_thd3~0| 0) (let ((.cse3 (= (mod ~x$r_buff1_thd3~0 256) 0))) (or (and .cse3 .cse4) (and (not .cse3) |P2Thread1of1ForFork1_#t~short160|))) |v_P2_#t~short160_486|)) .cse4 (= |P2Thread1of1ForFork1_#t~mem161| (select (select |#memory_int| |~#x~0.base|) |~#x~0.offset|)) (let ((.cse5 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and (not .cse5) |v_P2_#t~short160_486|) (and .cse2 .cse5))) (or (and (= |P2Thread1of1ForFork1_#t~short159| |v_P2_#t~short159_600|) (= |old(#race~x$r_buff0_thd3~0)| |#race~x$r_buff0_thd3~0|) .cse1) (and (let ((.cse6 (= (mod ~x$r_buff0_thd3~0 256) 0))) (or (and (not .cse6) |P2Thread1of1ForFork1_#t~short159|) (and .cse7 .cse6))) (= |#race~x$r_buff0_thd3~0| 0) |v_P2_#t~short159_600|)) (= |#race~x$w_buff0_used~0| 0) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| 0) .cse8 0) .cse9 0) .cse10 0))) .cse7 (let ((.cse11 (select |#race| |~#x~0.base|))) (or (not (= (select .cse11 |~#x~0.offset|) 0)) (not (= (select .cse11 .cse8) 0)) (not (= (select .cse11 .cse10) 0)) (not (= (select .cse11 .cse9) 0)))))) +//@ semantics [422] {#race,#race~x$r_buff0_thd3~0,#memory_int,#race~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159} [(|v_P2_#t~short159_602| Bool)] (let ((.cse1 (+ |~#x~0.offset| 1)) (.cse3 (+ 2 |~#x~0.offset|)) (.cse2 (+ 3 |~#x~0.offset|)) (.cse5 (not |v_P2_#t~short159_602|))) (and (= |#race~x$w_buff0~0| 0) (let ((.cse0 (select |#race| |~#x~0.base|))) (or (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse0 .cse1))) (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse0 .cse2))) (not (= (select .cse0 .cse3) |P2Thread1of1ForFork1_#t~nondet164|)) (not (= (select .cse0 |~#x~0.offset|) |P2Thread1of1ForFork1_#t~nondet164|)))) (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| |P2Thread1of1ForFork1_#t~nondet164|) .cse1 |P2Thread1of1ForFork1_#t~nondet164|) .cse3 |P2Thread1of1ForFork1_#t~nondet164|) .cse2 |P2Thread1of1ForFork1_#t~nondet164|)) |#race|) (= (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| |P2Thread1of1ForFork1_#t~ite163|)) |#memory_int|) (= ~x$w_buff0~0 |P2Thread1of1ForFork1_#t~ite163|) (= |#race~x$w_buff0_used~0| 0) (let ((.cse4 (= (mod ~x$w_buff0_used~0 256) 0))) (or (and |v_P2_#t~short159_602| (not .cse4)) (and .cse4 .cse5))) |P2Thread1of1ForFork1_#t~short159| (or (and (let ((.cse6 (= (mod ~x$r_buff0_thd3~0 256) 0))) (or (and .cse6 (not |P2Thread1of1ForFork1_#t~short159|)) (and |P2Thread1of1ForFork1_#t~short159| (not .cse6)))) (= |#race~x$r_buff0_thd3~0| 0) |v_P2_#t~short159_602|) (and (= |old(#race~x$r_buff0_thd3~0)| |#race~x$r_buff0_thd3~0|) .cse5 (= |P2Thread1of1ForFork1_#t~short159| |v_P2_#t~short159_602|))))) +//@ semantics [423] {#race,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~short160,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162} false +//@ semantics [424] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~short160,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162} false +//@ semantics [425] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~short160,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162} false +//@ semantics [426] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int} false +//@ semantics [427] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int} false +//@ semantics [428] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int} false +//@ semantics [429] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0} false +//@ semantics [430] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [431] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [432] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [433] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [434] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [435] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [436] {P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [437] {P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [438] {P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [439] {P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [440] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [441] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [442] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~ite179,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,~x$r_buff1_thd3~0,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~nondet180,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [443] {P2Thread1of1ForFork1_#t~ite179,P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,~x$r_buff1_thd3~0,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,#race~x$w_buff0~0,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~nondet180,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} [(|v_P2_#t~short178_411| Bool) (|v_P2_#t~short176_442| Bool) (|v_P2_#t~ite174_425| Int) (|v_#race~x$r_buff1_thd3~0_1060| Int) (|v_#race~x$w_buff1_used~0_16439| Int) (|v_#race~x$r_buff1_thd3~0_1061| Int) (|v_P2_#t~short165_553| Bool) (|v_P2_#t~short173_581| Bool) (|v_P2_#t~short178_410| Bool) (|v_P2_#t~short165_552| Bool) (|v_P2_#t~short173_580| Bool) (|v_#race~x$r_buff1_thd3~0_1062| Int) (|v_P2_#t~short159_604| Bool) (|v_P2_#t~short159_605| Bool) (|v_P2_#t~ite166_429| Int) (|v_#race~x$r_buff0_thd3~0_1435| Int) (|v_P2_#t~short169_632| Bool) (|v_P2_#t~short169_631| Bool) (|v_#race~x$r_buff0_thd3~0_1434| Int) (|v_#race~x$r_buff0_thd3~0_1437| Int) (|v_#race~x$r_buff0_thd3~0_1436| Int) (|v_P2_#t~ite179_187| Int) (|v_#race~x$r_buff0_thd3~0_1439| Int) (|v_P2_#t~short177_418| Bool) (|v_#race~x$r_buff0_thd3~0_1438| Int) (|v_P2_#t~short177_417| Bool) (|v_P2_#t~short168_651| Bool) (|v_P2_#t~short170_645| Bool) (|v_#race~x$w_buff1_used~0_16441| Int) (|v_P2_#t~short170_644| Bool) (|v_#race~x$w_buff1_used~0_16440| Int) (|v_P2_#t~short168_652| Bool) (|v_#race~x$w_buff0_used~0_17099| Int) (|v_P2_#t~ite171_477| Int) (|v_P2_#t~short176_441| Bool)] (let ((.cse1 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse8 (select |#race| |~#x~0.base|)) (.cse27 (= (mod |old(~x$r_buff0_thd3~0)| 256) 0)) (.cse14 (= (mod |old(~x$r_buff1_thd3~0)| 256) 0)) (.cse4 (= (mod |old(~x$w_buff0_used~0)| 256) 0))) (let ((.cse5 (not .cse4)) (.cse15 (not .cse14)) (.cse11 (not |v_P2_#t~short165_552|)) (.cse6 (not |v_P2_#t~short165_553|)) (.cse24 (not |v_P2_#t~short178_411|)) (.cse18 (not |v_P2_#t~short170_644|)) (.cse32 (not |v_P2_#t~short168_651|)) (.cse3 (not |v_P2_#t~short159_605|)) (.cse2 (not |v_P2_#t~short173_581|)) (.cse26 (not .cse27)) (.cse34 (not |v_P2_#t~short168_652|)) (.cse31 (not |v_P2_#t~short176_442|)) (.cse25 (not |v_P2_#t~short178_410|)) (.cse19 (not |v_P2_#t~short170_645|)) (.cse9 (+ |~#x~0.offset| 1)) (.cse28 (+ 2 |~#x~0.offset|)) (.cse33 (+ 3 |~#x~0.offset|)) (.cse7 (select .cse8 |~#x~0.offset|)) (.cse29 (not |v_P2_#t~short176_441|)) (.cse0 (not .cse1)) (.cse35 (not |v_P2_#t~short173_580|))) (and (= ~x$w_buff0_used~0 (ite (= (mod |v_P2_#t~ite166_429| 256) 0) 0 1)) (or (and .cse0 |v_P2_#t~short173_581|) (and .cse1 .cse2)) (or (and .cse3 .cse4) (and .cse5 |v_P2_#t~short159_605|)) (or (and .cse4 .cse6) (and .cse5 |v_P2_#t~short165_553|)) (= (ite (= (mod |v_P2_#t~ite179_187| 256) 0) 0 1) ~x$r_buff1_thd3~0) (= .cse7 (select .cse8 .cse9)) (= (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| ~x$w_buff0~0)) |#memory_int|) (let ((.cse10 (= |v_#race~x$w_buff0_used~0_17099| 0))) (or (and (= |v_P2_#t~ite166_429| 0) .cse10 |v_P2_#t~short165_552|) (and (= |old(~x$w_buff0_used~0)| |v_P2_#t~ite166_429|) .cse11 .cse10))) (let ((.cse12 (= |old(#race~x$r_buff1_thd3~0)| |v_#race~x$r_buff1_thd3~0_1060|))) (or (and (= |v_P2_#t~short170_644| |v_P2_#t~short170_645|) (= |old(#race~x$w_buff1_used~0)| |v_#race~x$w_buff1_used~0_16439|) .cse12 (= |old(P2Thread1of1ForFork1_#t~short169)| |v_P2_#t~short169_631|) |v_P2_#t~short170_644|) (let ((.cse16 (not |v_P2_#t~short169_632|)) (.cse13 (not |v_P2_#t~short169_631|))) (and (or (and (or (and .cse13 .cse14) (and .cse15 |v_P2_#t~short169_631|)) (= |v_#race~x$r_buff1_thd3~0_1060| 0) |v_P2_#t~short169_632|) (and (= |v_P2_#t~short169_631| |v_P2_#t~short169_632|) .cse12 .cse16)) (let ((.cse17 (= (mod |old(~x$w_buff1_used~0)| 256) 0))) (or (and (not .cse17) |v_P2_#t~short169_632|) (and .cse17 .cse16))) .cse18 (or (and .cse19 .cse13) (and |v_P2_#t~short169_631| |v_P2_#t~short170_645|)) (= |v_#race~x$w_buff1_used~0_16439| 0))))) (= |#race~x$w_buff0~0| 0) (let ((.cse21 (= |v_#race~x$r_buff1_thd3~0_1062| |v_#race~x$r_buff1_thd3~0_1060|))) (or (let ((.cse20 (not |v_P2_#t~short177_418|)) (.cse22 (not |v_P2_#t~short177_417|))) (and (= |#race~x$w_buff1_used~0| 0) (or (and .cse20 (= |v_P2_#t~short177_418| |v_P2_#t~short177_417|) .cse21) (and (= |v_#race~x$r_buff1_thd3~0_1062| 0) (or (and .cse15 |v_P2_#t~short177_417|) (and .cse22 .cse14)) |v_P2_#t~short177_418|)) (let ((.cse23 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and (not .cse23) |v_P2_#t~short177_418|) (and .cse20 .cse23))) (or (and |v_P2_#t~short178_411| |v_P2_#t~short177_417|) (and .cse22 .cse24)) .cse25)) (and (= |#race~x$w_buff1_used~0| |v_#race~x$w_buff1_used~0_16440|) (= |v_P2_#t~short178_410| |v_P2_#t~short178_411|) |v_P2_#t~short178_410| (= |old(P2Thread1of1ForFork1_#t~short177)| |v_P2_#t~short177_417|) .cse21))) (or (and (or (and .cse26 |v_P2_#t~short165_552|) (and .cse11 .cse27)) (= |v_#race~x$r_buff0_thd3~0_1434| 0) |v_P2_#t~short165_553|) (and (= |v_#race~x$r_buff0_thd3~0_1438| |v_#race~x$r_buff0_thd3~0_1434|) .cse6 (= |v_P2_#t~short165_552| |v_P2_#t~short165_553|))) (or (and (= |v_#race~x$r_buff1_thd3~0_1062| |v_#race~x$r_buff1_thd3~0_1061|) (= |v_P2_#t~ite179_187| 0) |v_P2_#t~short178_411|) (and (= |v_P2_#t~ite179_187| |old(~x$r_buff1_thd3~0)|) .cse24 (= |v_#race~x$r_buff1_thd3~0_1061| 0))) (= .cse7 (select .cse8 .cse28)) (or (and .cse29 (= |v_P2_#t~short176_441| |v_P2_#t~short176_442|) (= |v_#race~x$r_buff0_thd3~0_1435| |#race~x$r_buff0_thd3~0|)) (and (let ((.cse30 (= (mod ~x$r_buff0_thd3~0 256) 0))) (or (and .cse30 .cse31) (and (not .cse30) |v_P2_#t~short176_442|))) (= |#race~x$r_buff0_thd3~0| 0) |v_P2_#t~short176_441|)) (= (ite (= (mod |v_P2_#t~ite171_477| 256) 0) 0 1) ~x$w_buff1_used~0) (or (and .cse18 .cse32) (and |v_P2_#t~short168_651| |v_P2_#t~short170_644|)) (= (ite (= (mod |v_P2_#t~ite174_425| 256) 0) 0 1) ~x$r_buff0_thd3~0) (= .cse7 (select .cse8 .cse33)) (or (and (= |v_#race~x$r_buff0_thd3~0_1437| |v_#race~x$r_buff0_thd3~0_1434|) (= |v_P2_#t~short168_651| |v_P2_#t~short168_652|) .cse34) (and (= |v_#race~x$r_buff0_thd3~0_1437| 0) (or (and .cse26 |v_P2_#t~short168_651|) (and .cse27 .cse32)) |v_P2_#t~short168_652|)) (or (and (or (and (not |v_P2_#t~short159_604|) .cse27) (and .cse26 |v_P2_#t~short159_604|)) (= |v_#race~x$r_buff0_thd3~0_1438| 0) |v_P2_#t~short159_605|) (and .cse3 (= |v_#race~x$r_buff0_thd3~0_1438| |old(#race~x$r_buff0_thd3~0)|) (= |v_P2_#t~short159_605| |v_P2_#t~short159_604|))) (or (and (= |v_P2_#t~short173_580| |v_P2_#t~short173_581|) (= |v_#race~x$r_buff0_thd3~0_1439| |v_#race~x$r_buff0_thd3~0_1437|) .cse2) (and (or (and .cse26 |v_P2_#t~short173_580|) (and .cse35 .cse27)) (= |v_#race~x$r_buff0_thd3~0_1439| 0) |v_P2_#t~short173_581|)) (or (and .cse0 |v_P2_#t~short168_652|) (and .cse1 .cse34)) (or (and |v_P2_#t~short176_442| |v_P2_#t~short178_410|) (and .cse31 .cse25)) (= |#race~x$w_buff0_used~0| 0) (or (and .cse19 (= |v_P2_#t~ite171_477| |old(~x$w_buff1_used~0)|) (= |v_#race~x$w_buff1_used~0_16441| 0)) (and (= |v_P2_#t~ite171_477| 0) (= |v_#race~x$w_buff1_used~0_16439| |v_#race~x$w_buff1_used~0_16441|) |v_P2_#t~short170_645|)) (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| .cse7) .cse9 .cse7) .cse28 .cse7) .cse33 .cse7)) |#race|) (or (and .cse1 .cse29) (and .cse0 |v_P2_#t~short176_441|)) (or (and .cse35 (= |v_#race~x$r_buff0_thd3~0_1436| 0) (= |v_P2_#t~ite174_425| |old(~x$r_buff0_thd3~0)|)) (and (= |v_P2_#t~ite174_425| 0) (= |v_#race~x$r_buff0_thd3~0_1439| |v_#race~x$r_buff0_thd3~0_1436|) |v_P2_#t~short173_580|)) |v_P2_#t~short159_604|))) +//@ semantics [444] {#race,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~short160,#race~x$r_buff0_thd3~0,#memory_int,#race~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~ite162} [(|v_P2_#t~short159_608| Bool) (|v_P2_#t~short160_488| Bool)] (let ((.cse1 (not |v_P2_#t~short159_608|)) (.cse2 (not |P2Thread1of1ForFork1_#t~short159|)) (.cse5 (+ |~#x~0.offset| 1)) (.cse6 (+ 2 |~#x~0.offset|)) (.cse4 (+ 3 |~#x~0.offset|)) (.cse8 (not |v_P2_#t~short160_488|))) (and (let ((.cse0 (= (mod ~x$w_buff0_used~0 256) 0))) (or (and .cse0 .cse1) (and (not .cse0) |v_P2_#t~short159_608|))) (= |#race~x$w_buff1_used~0| 0) (= |P2Thread1of1ForFork1_#t~ite163| |P2Thread1of1ForFork1_#t~ite162|) (= |P2Thread1of1ForFork1_#t~ite162| ~x$w_buff1~0) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| |P2Thread1of1ForFork1_#t~ite163|))) .cse2 (let ((.cse3 (select |#race| |~#x~0.base|))) (or (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse3 |~#x~0.offset|))) (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse3 .cse4))) (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse3 .cse5))) (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse3 .cse6))))) (= |#race~x$w_buff1~0| 0) |P2Thread1of1ForFork1_#t~short160| (let ((.cse7 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and (not .cse7) |v_P2_#t~short160_488|) (and .cse7 .cse8))) (or (and (= |old(#race~x$r_buff0_thd3~0)| |#race~x$r_buff0_thd3~0|) .cse1 (= |P2Thread1of1ForFork1_#t~short159| |v_P2_#t~short159_608|)) (and (= |#race~x$r_buff0_thd3~0| 0) (let ((.cse9 (= (mod ~x$r_buff0_thd3~0 256) 0))) (or (and .cse9 .cse2) (and (not .cse9) |P2Thread1of1ForFork1_#t~short159|))) |v_P2_#t~short159_608|)) (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| |P2Thread1of1ForFork1_#t~nondet164|) .cse5 |P2Thread1of1ForFork1_#t~nondet164|) .cse6 |P2Thread1of1ForFork1_#t~nondet164|) .cse4 |P2Thread1of1ForFork1_#t~nondet164|)) |#race|) (or (and (let ((.cse10 (= (mod ~x$r_buff1_thd3~0 256) 0))) (or (and (not .cse10) |P2Thread1of1ForFork1_#t~short160|) (and .cse10 (not |P2Thread1of1ForFork1_#t~short160|)))) (= |#race~x$r_buff1_thd3~0| 0) |v_P2_#t~short160_488|) (and (= |P2Thread1of1ForFork1_#t~short160| |v_P2_#t~short160_488|) .cse8 (= |old(#race~x$r_buff1_thd3~0)| |#race~x$r_buff1_thd3~0|))) (= |#race~x$w_buff0_used~0| 0))) +//@ semantics [445] {#race,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [446] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [447] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [448] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [449] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [450] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [451] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [452] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [453] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [454] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [455] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [456] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [457] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [458] {P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~nondet167,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [459] {P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~nondet167,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [460] {P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~nondet167,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [461] {P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [462] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [463] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [464] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~ite179,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,~x$r_buff1_thd3~0,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~nondet180,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [465] {P2Thread1of1ForFork1_#t~ite179,P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,~x$r_buff1_thd3~0,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,#race~x$w_buff1~0,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~nondet180,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} [(|v_P2_#t~ite174_427| Int) (|v_P2_#t~short173_585| Bool) (|v_P2_#t~short165_557| Bool) (|v_P2_#t~short178_414| Bool) (|v_P2_#t~short176_445| Bool) (|v_P2_#t~short173_584| Bool) (|v_P2_#t~short165_556| Bool) (|v_P2_#t~short176_446| Bool) (|v_#race~x$r_buff1_thd3~0_1066| Int) (|v_#race~x$w_buff0_used~0_17101| Int) (|v_#race~x$r_buff1_thd3~0_1067| Int) (|v_#race~x$r_buff1_thd3~0_1068| Int) (|v_#race~x$r_buff1_thd3~0_1069| Int) (|v_P2_#t~short178_415| Bool) (|v_P2_#t~ite171_479| Int) (|v_P2_#t~short169_636| Bool) (|v_P2_#t~short169_635| Bool) (|v_P2_#t~short170_649| Bool) (|v_P2_#t~short170_648| Bool) (|v_P2_#t~ite179_189| Int) (|v_P2_#t~short168_656| Bool) (|v_#race~x$r_buff0_thd3~0_1450| Int) (|v_#race~x$w_buff1_used~0_16447| Int) (|v_#race~x$w_buff1_used~0_16445| Int) (|v_#race~x$w_buff1_used~0_16446| Int) (|v_P2_#t~short159_610| Bool) (|v_P2_#t~short159_611| Bool) (|v_P2_#t~short160_490| Bool) (|v_P2_#t~short160_491| Bool) (|v_P2_#t~short168_655| Bool) (|v_P2_#t~short177_421| Bool) (|v_P2_#t~short177_422| Bool) (|v_#race~x$r_buff0_thd3~0_1446| Int) (|v_#race~x$r_buff0_thd3~0_1445| Int) (|v_#race~x$r_buff0_thd3~0_1448| Int) (|v_#race~x$r_buff0_thd3~0_1447| Int) (|v_#race~x$r_buff0_thd3~0_1449| Int) (|v_P2_#t~ite166_431| Int)] (let ((.cse17 (= (mod |old(~x$w_buff0_used~0)| 256) 0)) (.cse1 (select |#race| |~#x~0.base|)) (.cse4 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse10 (= (mod |old(~x$r_buff1_thd3~0)| 256) 0)) (.cse8 (= (mod |old(~x$r_buff0_thd3~0)| 256) 0)) (.cse13 (= (mod ~x$w_buff0_used~0 256) 0))) (let ((.cse3 (not |v_P2_#t~short160_491|)) (.cse16 (not |v_P2_#t~short165_556|)) (.cse18 (not |v_P2_#t~short159_610|)) (.cse24 (not |v_P2_#t~short176_446|)) (.cse27 (not |v_P2_#t~short178_414|)) (.cse6 (not |v_P2_#t~short173_585|)) (.cse31 (not |v_P2_#t~short178_415|)) (.cse12 (not .cse13)) (.cse22 (not |v_P2_#t~short176_445|)) (.cse7 (not |v_P2_#t~short173_584|)) (.cse14 (not |v_P2_#t~short168_655|)) (.cse9 (not .cse8)) (.cse34 (not |v_P2_#t~short168_656|)) (.cse20 (not |v_P2_#t~short165_557|)) (.cse11 (not .cse10)) (.cse21 (not |v_P2_#t~short170_648|)) (.cse33 (not |v_P2_#t~short170_649|)) (.cse5 (not .cse4)) (.cse25 (+ |~#x~0.offset| 1)) (.cse32 (+ 2 |~#x~0.offset|)) (.cse2 (+ 3 |~#x~0.offset|)) (.cse0 (select .cse1 |~#x~0.offset|)) (.cse15 (not .cse17)) (.cse19 (not |v_P2_#t~short159_611|))) (and (= .cse0 (select .cse1 .cse2)) (= (ite (= (mod |v_P2_#t~ite179_189| 256) 0) 0 1) ~x$r_buff1_thd3~0) (or (and .cse3 .cse4) (and .cse5 |v_P2_#t~short160_491|)) (or (and (= |v_#race~x$r_buff0_thd3~0_1446| |v_#race~x$r_buff0_thd3~0_1450|) (= |v_P2_#t~short173_584| |v_P2_#t~short173_585|) .cse6) (and (or (and .cse7 .cse8) (and .cse9 |v_P2_#t~short173_584|)) (= |v_#race~x$r_buff0_thd3~0_1446| 0) |v_P2_#t~short173_585|)) (or (and (= |old(#race~x$r_buff1_thd3~0)| |v_#race~x$r_buff1_thd3~0_1069|) .cse3 (= |v_P2_#t~short160_490| |v_P2_#t~short160_491|)) (and (or (and (not |v_P2_#t~short160_490|) .cse10) (and .cse11 |v_P2_#t~short160_490|)) (= |v_#race~x$r_buff1_thd3~0_1069| 0) |v_P2_#t~short160_491|)) (or (and .cse12 |v_P2_#t~short168_655|) (and .cse13 .cse14)) (or (and .cse15 |v_P2_#t~short165_556|) (and .cse16 .cse17)) (or (and (or (and .cse8 .cse18) (and .cse9 |v_P2_#t~short159_610|)) (= |v_#race~x$r_buff0_thd3~0_1445| 0) |v_P2_#t~short159_611|) (and .cse19 (= |v_#race~x$r_buff0_thd3~0_1445| |old(#race~x$r_buff0_thd3~0)|) (= |v_P2_#t~short159_610| |v_P2_#t~short159_611|))) (or (and (= |v_#race~x$r_buff0_thd3~0_1447| 0) (or (and .cse9 |v_P2_#t~short165_557|) (and .cse8 .cse20)) |v_P2_#t~short165_556|) (and (= |v_P2_#t~short165_556| |v_P2_#t~short165_557|) .cse16 (= |v_#race~x$r_buff0_thd3~0_1447| |v_#race~x$r_buff0_thd3~0_1445|))) (or (and (= |v_#race~x$w_buff1_used~0_16446| |v_#race~x$w_buff1_used~0_16445|) (= |v_P2_#t~ite171_479| 0) |v_P2_#t~short170_648|) (and (= |v_#race~x$w_buff1_used~0_16445| 0) (= |v_P2_#t~ite171_479| |old(~x$w_buff1_used~0)|) .cse21)) (= |#race~x$w_buff1~0| 0) (or (and (= |v_#race~x$r_buff0_thd3~0_1448| |#race~x$r_buff0_thd3~0|) .cse22 (= |v_P2_#t~short176_445| |v_P2_#t~short176_446|)) (and (let ((.cse23 (= (mod ~x$r_buff0_thd3~0 256) 0))) (or (and (not .cse23) |v_P2_#t~short176_446|) (and .cse23 .cse24))) (= |#race~x$r_buff0_thd3~0| 0) |v_P2_#t~short176_445|)) (= (ite (= (mod |v_P2_#t~ite171_479| 256) 0) 0 1) ~x$w_buff1_used~0) (= (select .cse1 .cse25) .cse0) (let ((.cse26 (= |v_#race~x$r_buff1_thd3~0_1068| |v_#race~x$r_buff1_thd3~0_1067|))) (or (and .cse26 (= |#race~x$w_buff1_used~0| |v_#race~x$w_buff1_used~0_16447|) (= |v_P2_#t~short178_415| |v_P2_#t~short178_414|) |v_P2_#t~short178_414| (= |old(P2Thread1of1ForFork1_#t~short177)| |v_P2_#t~short177_422|)) (let ((.cse29 (not |v_P2_#t~short177_421|)) (.cse28 (not |v_P2_#t~short177_422|))) (and .cse27 (or (and (or (and .cse10 .cse28) (and .cse11 |v_P2_#t~short177_422|)) (= |v_#race~x$r_buff1_thd3~0_1067| 0) |v_P2_#t~short177_421|) (and .cse29 .cse26 (= |v_P2_#t~short177_421| |v_P2_#t~short177_422|))) (= |#race~x$w_buff1_used~0| 0) (let ((.cse30 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and .cse29 .cse30) (and (not .cse30) |v_P2_#t~short177_421|))) (or (and .cse31 .cse28) (and |v_P2_#t~short178_415| |v_P2_#t~short177_422|)))))) (= |#race~x$w_buff0_used~0| 0) .cse18 (= ~x$r_buff0_thd3~0 (ite (= (mod |v_P2_#t~ite174_427| 256) 0) 0 1)) (= ~x$w_buff0_used~0 (ite (= (mod |v_P2_#t~ite166_431| 256) 0) 0 1)) (or (and .cse24 .cse27) (and |v_P2_#t~short176_446| |v_P2_#t~short178_414|)) (= (select .cse1 .cse32) .cse0) (or (and .cse12 |v_P2_#t~short173_585|) (and .cse13 .cse6)) (= (store |old(#memory_int)| |~#x~0.base| (store (select |old(#memory_int)| |~#x~0.base|) |~#x~0.offset| ~x$w_buff1~0)) |#memory_int|) (or (and .cse31 (= |v_#race~x$r_buff1_thd3~0_1066| 0) (= |v_P2_#t~ite179_189| |old(~x$r_buff1_thd3~0)|)) (and (= |v_P2_#t~ite179_189| 0) (= |v_#race~x$r_buff1_thd3~0_1067| |v_#race~x$r_buff1_thd3~0_1066|) |v_P2_#t~short178_415|)) (or (and .cse12 |v_P2_#t~short176_445|) (and .cse13 .cse22)) (or (and |v_P2_#t~short168_656| |v_P2_#t~short170_649|) (and .cse33 .cse34)) (or (and (= |v_#race~x$r_buff0_thd3~0_1449| |v_#race~x$r_buff0_thd3~0_1446|) (= |v_P2_#t~ite174_427| 0) |v_P2_#t~short173_584|) (and .cse7 (= |v_#race~x$r_buff0_thd3~0_1449| 0) (= |v_P2_#t~ite174_427| |old(~x$r_buff0_thd3~0)|))) (or (and (= |v_P2_#t~short168_656| |v_P2_#t~short168_655|) (= |v_#race~x$r_buff0_thd3~0_1447| |v_#race~x$r_buff0_thd3~0_1450|) .cse14) (and (= |v_#race~x$r_buff0_thd3~0_1450| 0) (or (and .cse9 |v_P2_#t~short168_656|) (and .cse8 .cse34)) |v_P2_#t~short168_655|)) (let ((.cse35 (= |v_#race~x$w_buff0_used~0_17101| 0))) (or (and (= |old(~x$w_buff0_used~0)| |v_P2_#t~ite166_431|) .cse35 .cse20) (and .cse35 (= |v_P2_#t~ite166_431| 0) |v_P2_#t~short165_557|))) (let ((.cse37 (= |v_#race~x$r_buff1_thd3~0_1069| |v_#race~x$r_buff1_thd3~0_1068|)) (.cse39 (= |v_#race~x$w_buff1_used~0_16446| 0))) (or (let ((.cse38 (not |v_P2_#t~short169_636|)) (.cse36 (not |v_P2_#t~short169_635|))) (and (or (and .cse36 .cse37 (= |v_P2_#t~short169_635| |v_P2_#t~short169_636|)) (and (or (and .cse10 .cse38) (and .cse11 |v_P2_#t~short169_636|)) (= |v_#race~x$r_buff1_thd3~0_1068| 0) |v_P2_#t~short169_635|)) (or (and .cse38 .cse21) (and |v_P2_#t~short169_636| |v_P2_#t~short170_648|)) .cse33 (or (and .cse5 |v_P2_#t~short169_635|) (and .cse36 .cse4)) .cse39)) (and (= |old(P2Thread1of1ForFork1_#t~short169)| |v_P2_#t~short169_636|) (= |v_P2_#t~short170_648| |v_P2_#t~short170_649|) .cse37 .cse39 |v_P2_#t~short170_649|))) (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| .cse0) .cse25 .cse0) .cse32 .cse0) .cse2 .cse0)) |#race|) (or (and .cse15 |v_P2_#t~short159_611|) (and .cse19 .cse17)) |v_P2_#t~short160_490|))) +//@ semantics [466] {#race,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~short160,#race~x$r_buff0_thd3~0,#memory_int,#race~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~ite162} [(|v_P2_#t~short160_494| Bool) (|v_P2_#t~short159_614| Bool)] (let ((.cse3 (select |old(#memory_int)| |~#x~0.base|)) (.cse6 (not |P2Thread1of1ForFork1_#t~short160|)) (.cse4 (not |v_P2_#t~short160_494|)) (.cse0 (not |v_P2_#t~short159_614|)) (.cse7 (+ |~#x~0.offset| 1)) (.cse8 (+ 2 |~#x~0.offset|)) (.cse9 (+ 3 |~#x~0.offset|)) (.cse2 (not |P2Thread1of1ForFork1_#t~short159|))) (and (= |#race~x$w_buff0_used~0| 0) (or (and (= |P2Thread1of1ForFork1_#t~short159| |v_P2_#t~short159_614|) (= |old(#race~x$r_buff0_thd3~0)| |#race~x$r_buff0_thd3~0|) .cse0) (and (let ((.cse1 (= (mod ~x$r_buff0_thd3~0 256) 0))) (or (and (not .cse1) |P2Thread1of1ForFork1_#t~short159|) (and .cse2 .cse1))) (= |#race~x$r_buff0_thd3~0| 0) |v_P2_#t~short159_614|)) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (store .cse3 |~#x~0.offset| |P2Thread1of1ForFork1_#t~ite163|))) (= |#race~x$w_buff1_used~0| 0) (or (and (= |old(#race~x$r_buff1_thd3~0)| |#race~x$r_buff1_thd3~0|) (= |P2Thread1of1ForFork1_#t~short160| |v_P2_#t~short160_494|) .cse4) (and (= |#race~x$r_buff1_thd3~0| 0) (let ((.cse5 (= (mod ~x$r_buff1_thd3~0 256) 0))) (or (and |P2Thread1of1ForFork1_#t~short160| (not .cse5)) (and .cse6 .cse5))) |v_P2_#t~short160_494|)) (= (select .cse3 |~#x~0.offset|) |P2Thread1of1ForFork1_#t~mem161|) (= (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| |P2Thread1of1ForFork1_#t~nondet164|) .cse7 |P2Thread1of1ForFork1_#t~nondet164|) .cse8 |P2Thread1of1ForFork1_#t~nondet164|) .cse9 |P2Thread1of1ForFork1_#t~nondet164|)) |#race|) .cse6 (let ((.cse10 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and (not .cse10) |v_P2_#t~short160_494|) (and .cse10 .cse4))) (let ((.cse11 (= (mod ~x$w_buff0_used~0 256) 0))) (or (and .cse11 .cse0) (and (not .cse11) |v_P2_#t~short159_614|))) (= |P2Thread1of1ForFork1_#t~ite163| |P2Thread1of1ForFork1_#t~ite162|) (let ((.cse12 (select |#race| |~#x~0.base|))) (or (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse12 |~#x~0.offset|))) (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse12 .cse7))) (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse12 .cse8))) (not (= |P2Thread1of1ForFork1_#t~nondet164| (select .cse12 .cse9))))) .cse2 (= |P2Thread1of1ForFork1_#t~mem161| |P2Thread1of1ForFork1_#t~ite162|))) +//@ semantics [467] {#race,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~short160,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~ite162} false +//@ semantics [468] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [469] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [470] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [471] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [472] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [473] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [474] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$r_buff1_thd3~0,#race~x$w_buff1_used~0} false +//@ semantics [475] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [476] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [477] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [478] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [479] {#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_#t~nondet167,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~nondet172,#race~x$r_buff0_thd3~0,#race~x$w_buff0_used~0,#memory_int,#race~x$w_buff1_used~0,#race~x$r_buff1_thd3~0} false +//@ semantics [480] {P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [481] {P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [482] {P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [483] {P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [484] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [485] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [486] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~ite179,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,~x$r_buff1_thd3~0,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~nondet180,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} false +//@ semantics [487] {P2Thread1of1ForFork1_#t~ite179,P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,~x$r_buff1_thd3~0,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,~x$r_buff0_thd3~0,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,#race~x$w_buff0_used~0,#race~x$w_buff1_used~0,#race,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_#t~short160,~x$w_buff1_used~0,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,~x$w_buff0_used~0,P2Thread1of1ForFork1_#t~nondet180,P2Thread1of1ForFork1_#t~mem161,#race~x$r_buff0_thd3~0,#memory_int,#race~x$r_buff1_thd3~0} [(|v_#race~x$r_buff0_thd3~0_1460| Int) (|v_P2_#t~ite179_191| Int) (|v_#race~x$r_buff0_thd3~0_1461| Int) (|v_P2_#t~short176_449| Bool) (|v_P2_#t~short168_660| Bool) (|v_P2_#t~short178_419| Bool) (|v_P2_#t~short170_653| Bool) (|v_#race~x$w_buff1_used~0_16452| Int) (|v_#race~x$w_buff0_used~0_17103| Int) (|v_#race~x$w_buff1_used~0_16453| Int) (|v_P2_#t~ite174_429| Int) (|v_#race~x$w_buff1_used~0_16451| Int) (|v_P2_#t~short170_652| Bool) (|v_P2_#t~short178_418| Bool) (|v_P2_#t~short169_639| Bool) (|v_P2_#t~ite171_481| Int) (|v_#race~x$r_buff0_thd3~0_1457| Int) (|v_P2_#t~short165_561| Bool) (|v_#race~x$r_buff0_thd3~0_1456| Int) (|v_P2_#t~short165_560| Bool) (|v_#race~x$r_buff0_thd3~0_1459| Int) (|v_#race~x$r_buff0_thd3~0_1458| Int) (|v_P2_#t~short176_450| Bool) (|v_P2_#t~short168_659| Bool) (|v_P2_#t~short160_496| Bool) (|v_P2_#t~short160_497| Bool) (|v_#race~x$r_buff1_thd3~0_1077| Int) (|v_#race~x$r_buff1_thd3~0_1074| Int) (|v_P2_#t~short159_616| Bool) (|v_#race~x$r_buff1_thd3~0_1075| Int) (|v_P2_#t~short159_617| Bool) (|v_#race~x$r_buff1_thd3~0_1076| Int) (|v_P2_#t~short177_425| Bool) (|v_P2_#t~short177_426| Bool) (|v_P2_#t~ite166_433| Int) (|v_P2_#t~short169_640| Bool) (|v_P2_#t~short173_589| Bool) (|v_P2_#t~short173_588| Bool)] (let ((.cse8 (= (mod |old(~x$r_buff1_thd3~0)| 256) 0)) (.cse22 (= (mod ~x$w_buff0_used~0 256) 0)) (.cse12 (= (mod |old(~x$w_buff1_used~0)| 256) 0)) (.cse1 (select |#race| |~#x~0.base|)) (.cse28 (= (mod |old(~x$r_buff0_thd3~0)| 256) 0)) (.cse17 (= (mod |old(~x$w_buff0_used~0)| 256) 0))) (let ((.cse21 (not |v_P2_#t~short176_449|)) (.cse6 (not |v_P2_#t~short170_652|)) (.cse20 (not |v_P2_#t~short176_450|)) (.cse16 (not |v_P2_#t~short159_617|)) (.cse27 (not |v_P2_#t~short173_589|)) (.cse0 (not |v_P2_#t~short173_588|)) (.cse15 (not .cse17)) (.cse13 (not |v_P2_#t~short170_653|)) (.cse29 (not |v_P2_#t~short159_616|)) (.cse31 (not |v_P2_#t~short165_561|)) (.cse30 (not .cse28)) (.cse32 (not |v_P2_#t~short168_659|)) (.cse2 (+ |~#x~0.offset| 1)) (.cse34 (+ 2 |~#x~0.offset|)) (.cse25 (+ 3 |~#x~0.offset|)) (.cse3 (select .cse1 |~#x~0.offset|)) (.cse33 (not |v_P2_#t~short165_560|)) (.cse11 (not .cse12)) (.cse24 (not |v_P2_#t~short160_497|)) (.cse37 (not |v_P2_#t~short160_496|)) (.cse35 (not |v_P2_#t~short168_660|)) (.cse23 (not .cse22)) (.cse26 (not |v_P2_#t~short178_418|)) (.cse9 (not .cse8)) (.cse18 (not |v_P2_#t~short178_419|))) (and (or (and (= |v_P2_#t~ite174_429| 0) (= |v_#race~x$r_buff0_thd3~0_1459| |v_#race~x$r_buff0_thd3~0_1460|) |v_P2_#t~short173_588|) (and (= |v_#race~x$r_buff0_thd3~0_1460| 0) (= |v_P2_#t~ite174_429| |old(~x$r_buff0_thd3~0)|) .cse0)) (= (select .cse1 .cse2) .cse3) (let ((.cse5 (= |v_#race~x$r_buff1_thd3~0_1076| |v_#race~x$r_buff1_thd3~0_1075|)) (.cse4 (= |v_#race~x$w_buff1_used~0_16453| 0))) (or (and (= |v_P2_#t~short170_652| |v_P2_#t~short170_653|) (= |old(P2Thread1of1ForFork1_#t~short169)| |v_P2_#t~short169_640|) .cse4 |v_P2_#t~short170_653| .cse5) (let ((.cse7 (not |v_P2_#t~short169_640|)) (.cse10 (not |v_P2_#t~short169_639|))) (and (or (and .cse6 .cse7) (and |v_P2_#t~short169_640| |v_P2_#t~short170_652|)) (or (and (= |v_#race~x$r_buff1_thd3~0_1076| 0) (or (and .cse8 .cse7) (and .cse9 |v_P2_#t~short169_640|)) |v_P2_#t~short169_639|) (and .cse10 (= |v_P2_#t~short169_639| |v_P2_#t~short169_640|) .cse5)) .cse4 (or (and .cse11 |v_P2_#t~short169_639|) (and .cse10 .cse12)) .cse13)))) (= |#memory_int| (store |old(#memory_int)| |~#x~0.base| (let ((.cse14 (select |old(#memory_int)| |~#x~0.base|))) (store .cse14 |~#x~0.offset| (select .cse14 |~#x~0.offset|))))) (= (ite (= 0 (mod |v_P2_#t~ite171_481| 256)) 0 1) ~x$w_buff1_used~0) (or (and .cse15 |v_P2_#t~short159_617|) (and .cse16 .cse17)) (= |#race~x$w_buff0_used~0| 0) (or (and (= |v_P2_#t~ite179_191| 0) (= |v_#race~x$r_buff1_thd3~0_1077| |v_#race~x$r_buff1_thd3~0_1074|) |v_P2_#t~short178_419|) (and (= |v_#race~x$r_buff1_thd3~0_1074| 0) (= |v_P2_#t~ite179_191| |old(~x$r_buff1_thd3~0)|) .cse18)) (= (ite (= (mod |v_P2_#t~ite174_429| 256) 0) 0 1) ~x$r_buff0_thd3~0) (or (and (= |#race~x$r_buff0_thd3~0| 0) (let ((.cse19 (= (mod ~x$r_buff0_thd3~0 256) 0))) (or (and .cse19 .cse20) (and (not .cse19) |v_P2_#t~short176_450|))) |v_P2_#t~short176_449|) (and (= |v_P2_#t~short176_449| |v_P2_#t~short176_450|) .cse21 (= |v_#race~x$r_buff0_thd3~0_1458| |#race~x$r_buff0_thd3~0|))) (or (and .cse22 .cse21) (and |v_P2_#t~short176_449| .cse23)) (or (and .cse6 (= |v_#race~x$w_buff1_used~0_16452| 0) (= |v_P2_#t~ite171_481| |old(~x$w_buff1_used~0)|)) (and (= |v_P2_#t~ite171_481| 0) (= |v_#race~x$w_buff1_used~0_16453| |v_#race~x$w_buff1_used~0_16452|) |v_P2_#t~short170_652|)) .cse24 (= (select .cse1 .cse25) .cse3) (or (and .cse26 .cse20) (and |v_P2_#t~short176_450| |v_P2_#t~short178_418|)) (= ~x$w_buff0_used~0 (ite (= (mod |v_P2_#t~ite166_433| 256) 0) 0 1)) (or (and |v_P2_#t~short173_589| .cse23) (and .cse22 .cse27)) (or (and (or (and .cse28 .cse29) (and .cse30 |v_P2_#t~short159_616|)) (= |v_#race~x$r_buff0_thd3~0_1457| 0) |v_P2_#t~short159_617|) (and .cse16 (= |v_P2_#t~short159_616| |v_P2_#t~short159_617|) (= |v_#race~x$r_buff0_thd3~0_1457| |old(#race~x$r_buff0_thd3~0)|))) (or (and (= |v_#race~x$r_buff0_thd3~0_1459| |v_#race~x$r_buff0_thd3~0_1461|) (= |v_P2_#t~short173_588| |v_P2_#t~short173_589|) .cse27) (and (= |v_#race~x$r_buff0_thd3~0_1459| 0) (or (and .cse30 |v_P2_#t~short173_588|) (and .cse28 .cse0)) |v_P2_#t~short173_589|)) (or (and .cse15 |v_P2_#t~short165_561|) (and .cse17 .cse31)) (= (ite (= 0 (mod |v_P2_#t~ite179_191| 256)) 0 1) ~x$r_buff1_thd3~0) (or (and |v_P2_#t~short168_659| |v_P2_#t~short170_653|) (and .cse32 .cse13)) .cse29 (or (and (= |v_P2_#t~short165_561| |v_P2_#t~short165_560|) (= |v_#race~x$r_buff0_thd3~0_1457| |v_#race~x$r_buff0_thd3~0_1456|) .cse31) (and (= |v_#race~x$r_buff0_thd3~0_1456| 0) (or (and .cse30 |v_P2_#t~short165_560|) (and .cse28 .cse33)) |v_P2_#t~short165_561|)) (= (select .cse1 .cse34) .cse3) (or (and (= |v_#race~x$r_buff0_thd3~0_1461| 0) (or (and .cse30 |v_P2_#t~short168_659|) (and .cse28 .cse32)) |v_P2_#t~short168_660|) (and .cse35 (= |v_P2_#t~short168_659| |v_P2_#t~short168_660|) (= |v_#race~x$r_buff0_thd3~0_1456| |v_#race~x$r_buff0_thd3~0_1461|))) (= |#race| (store |old(#race)| |~#x~0.base| (store (store (store (store (select |old(#race)| |~#x~0.base|) |~#x~0.offset| .cse3) .cse2 .cse3) .cse34 .cse3) .cse25 .cse3))) (let ((.cse36 (= |v_#race~x$w_buff0_used~0_17103| 0))) (or (and .cse36 (= |v_P2_#t~ite166_433| 0) |v_P2_#t~short165_560|) (and (= |old(~x$w_buff0_used~0)| |v_P2_#t~ite166_433|) .cse36 .cse33))) (or (and .cse12 .cse37) (and .cse11 |v_P2_#t~short160_496|)) (or (and (or (and .cse8 .cse24) (and .cse9 |v_P2_#t~short160_497|)) (= |v_#race~x$r_buff1_thd3~0_1075| 0) |v_P2_#t~short160_496|) (and (= |v_P2_#t~short160_496| |v_P2_#t~short160_497|) .cse37 (= |v_#race~x$r_buff1_thd3~0_1075| |old(#race~x$r_buff1_thd3~0)|))) (or (and .cse35 .cse22) (and |v_P2_#t~short168_660| .cse23)) (let ((.cse38 (= |v_#race~x$r_buff1_thd3~0_1077| |v_#race~x$r_buff1_thd3~0_1076|))) (or (and (= |#race~x$w_buff1_used~0| |v_#race~x$w_buff1_used~0_16451|) (= |old(P2Thread1of1ForFork1_#t~short177)| |v_P2_#t~short177_425|) (= |v_P2_#t~short178_418| |v_P2_#t~short178_419|) .cse38 |v_P2_#t~short178_418|) (let ((.cse40 (not |v_P2_#t~short177_426|)) (.cse39 (not |v_P2_#t~short177_425|))) (and .cse26 (or (and (= |v_#race~x$r_buff1_thd3~0_1077| 0) (or (and .cse8 .cse39) (and .cse9 |v_P2_#t~short177_425|)) |v_P2_#t~short177_426|) (and (= |v_P2_#t~short177_425| |v_P2_#t~short177_426|) .cse38 .cse40)) (let ((.cse41 (= (mod ~x$w_buff1_used~0 256) 0))) (or (and (not .cse41) |v_P2_#t~short177_426|) (and .cse41 .cse40))) (= |#race~x$w_buff1_used~0| 0) (or (and |v_P2_#t~short178_419| |v_P2_#t~short177_425|) (and .cse39 .cse18))))))))) +//@ semantics [488] {#race~__unbuffered_cnt~0} false +//@ semantics [489] {P2Thread1of1ForFork1_#t~nondet181,~__unbuffered_cnt~0,#race~__unbuffered_cnt~0} false +//@ semantics [490] {P2Thread1of1ForFork1_#t~nondet181,~__unbuffered_cnt~0,#race~__unbuffered_cnt~0} (= ~__unbuffered_cnt~0 (+ |old(~__unbuffered_cnt~0)| 1)) +//@ semantics [491] {P2Thread1of1ForFork1_#res.base,P2Thread1of1ForFork1_#res.offset} (and (= |P2Thread1of1ForFork1_#res.base| 0) (= |P2Thread1of1ForFork1_#res.offset| 0)) +//@ semantics [492] {} true +//@ semantics [493] {} true +//@ semantics [494] {P1Thread1of1ForFork0_#t~nondet156,P1Thread1of1ForFork0_#t~mem88,P1Thread1of1ForFork0_#t~short138,P1Thread1of1ForFork0_#t~short117,P1Thread1of1ForFork0_#t~short136,P1Thread1of1ForFork0_#t~ite113,P1Thread1of1ForFork0_#t~nondet107,P1Thread1of1ForFork0_#t~ite115,P1Thread1of1ForFork0_#t~short119,P1Thread1of1ForFork0_#t~nondet98,P1Thread1of1ForFork0_#t~ite132,P1Thread1of1ForFork0_#t~short130,P1Thread1of1ForFork0_#t~short134,P1Thread1of1ForFork0_#t~short90,P1Thread1of1ForFork0_#t~short111,P1Thread1of1ForFork0_#t~short92,P1Thread1of1ForFork0_#t~mem94,P1Thread1of1ForFork0_#res.offset,P1Thread1of1ForFork0_#t~ite105,P1Thread1of1ForFork0_#t~short127,P1Thread1of1ForFork0_#t~ite149,P1Thread1of1ForFork0_#t~ite97,P1Thread1of1ForFork0_#t~ite124,P1Thread1of1ForFork0_#t~short108,P1Thread1of1ForFork0_#t~short129,P1Thread1of1ForFork0_thidvar2,P1Thread1of1ForFork0_#t~nondet86,P1Thread1of1ForFork0_#in~arg.offset,P1Thread1of1ForFork0_#t~ite122,P1Thread1of1ForFork0_#t~ite141,P1Thread1of1ForFork0_#t~short146,P1Thread1of1ForFork0_#t~nondet82,P1Thread1of1ForFork0_#t~short102,P1Thread1of1ForFork0_#t~short121,P1Thread1of1ForFork0_#t~short144,P1Thread1of1ForFork0_#t~nondet84,P1Thread1of1ForFork0_#t~short100,P1Thread1of1ForFork0_#t~nondet155,P1Thread1of1ForFork0_#t~nondet157,P1Thread1of1ForFork0_#t~short99,P1Thread1of1ForFork0_#t~short137,P1Thread1of1ForFork0_#t~ite139,P1Thread1of1ForFork0_thidvar1,P1Thread1of1ForFork0_#t~short118,P1Thread1of1ForFork0_#in~arg.base,P1Thread1of1ForFork0_#t~ite114,P1Thread1of1ForFork0_#t~short93,P1Thread1of1ForFork0_#t~ite154,P1Thread1of1ForFork0_#t~nondet125,P1Thread1of1ForFork0_#t~short95,P1Thread1of1ForFork0_#t~ite131,P1Thread1of1ForFork0_#t~short135,P1Thread1of1ForFork0_#t~short112,P1Thread1of1ForFork0_#t~short110,P1Thread1of1ForFork0_#t~short91,P1Thread1of1ForFork0_#t~nondet142,P1Thread1of1ForFork0_#t~nondet81,P1Thread1of1ForFork0_~arg.base,P1Thread1of1ForFork0_#t~mem151,P1Thread1of1ForFork0_#t~mem153,P1Thread1of1ForFork0_#t~ite96,P1Thread1of1ForFork0_#t~short128,P1Thread1of1ForFork0_#t~ite106,P1Thread1of1ForFork0_#t~short103,P1Thread1of1ForFork0_#t~short126,P1Thread1of1ForFork0_#t~short147,P1Thread1of1ForFork0_~arg.offset,P1Thread1of1ForFork0_#t~short109,P1Thread1of1ForFork0_#t~ite148,P1Thread1of1ForFork0_thidvar0,P1Thread1of1ForFork0_#t~ite123,P1Thread1of1ForFork0_#t~ite104,P1Thread1of1ForFork0_#t~nondet116,P1Thread1of1ForFork0_#t~short120,P1Thread1of1ForFork0_#t~nondet87,P1Thread1of1ForFork0_#t~nondet89,P1Thread1of1ForFork0_#t~short101,P1Thread1of1ForFork0_#t~nondet150,P1Thread1of1ForFork0_#t~ite140,P1Thread1of1ForFork0_#res.base,P1Thread1of1ForFork0_#t~short145,P1Thread1of1ForFork0_#t~nondet83,P1Thread1of1ForFork0_#t~nondet133,P1Thread1of1ForFork0_#t~nondet152,P1Thread1of1ForFork0_#t~short143,P1Thread1of1ForFork0_#t~nondet85} (and (= |ULTIMATE.start_main_#t~pre184#1| P1Thread1of1ForFork0_thidvar0) (= P1Thread1of1ForFork0_thidvar2 0) (= |P1Thread1of1ForFork0_#in~arg.offset| 0) (= |P1Thread1of1ForFork0_#in~arg.base| 0) (= P1Thread1of1ForFork0_thidvar1 0)) +//@ semantics [495] {} true +//@ semantics [496] {P2Thread1of1ForFork1_#t~short177,P2Thread1of1ForFork1_#t~ite179,P2Thread1of1ForFork1_#t~short176,P2Thread1of1ForFork1_#t~short173,P2Thread1of1ForFork1_#t~short170,P2Thread1of1ForFork1_thidvar3,P2Thread1of1ForFork1_#t~ite171,P2Thread1of1ForFork1_#t~nondet164,P2Thread1of1ForFork1_#t~ite174,P2Thread1of1ForFork1_#t~short159,P2Thread1of1ForFork1_thidvar1,P2Thread1of1ForFork1_#t~short178,P2Thread1of1ForFork1_#t~nondet167,P2Thread1of1ForFork1_#t~nondet172,P2Thread1of1ForFork1_~arg.base,P2Thread1of1ForFork1_#res.offset,P2Thread1of1ForFork1_#in~arg.offset,P2Thread1of1ForFork1_#t~short165,P2Thread1of1ForFork1_#t~ite166,P2Thread1of1ForFork1_~arg.offset,P2Thread1of1ForFork1_#res.base,P2Thread1of1ForFork1_#t~short160,P2Thread1of1ForFork1_thidvar2,P2Thread1of1ForFork1_#t~nondet175,P2Thread1of1ForFork1_#t~nondet158,P2Thread1of1ForFork1_#t~ite163,P2Thread1of1ForFork1_#t~short169,P2Thread1of1ForFork1_#t~short168,P2Thread1of1ForFork1_#t~ite162,P2Thread1of1ForFork1_thidvar0,P2Thread1of1ForFork1_#t~nondet180,P2Thread1of1ForFork1_#t~mem161,P2Thread1of1ForFork1_#t~nondet181,P2Thread1of1ForFork1_#in~arg.base} (and (= |P2Thread1of1ForFork1_#in~arg.offset| 0) (= P2Thread1of1ForFork1_thidvar1 0) (= |P2Thread1of1ForFork1_#in~arg.base| 0) (= |ULTIMATE.start_main_#t~pre186#1| P2Thread1of1ForFork1_thidvar0) (= P2Thread1of1ForFork1_thidvar2 0) (= P2Thread1of1ForFork1_thidvar3 0)) +//@ semantics [497] {} true +//@ semantics [498] {P0Thread1of1ForFork2_#t~ite33,P0Thread1of1ForFork2_#t~nondet18,P0Thread1of1ForFork2_#t~ite35,P0Thread1of1ForFork2_#t~short40,P0Thread1of1ForFork2_#res.offset,P0Thread1of1ForFork2_#t~mem8,P0Thread1of1ForFork2_#t~nondet80,P0Thread1of1ForFork2_~arg.base,P0Thread1of1ForFork2_#t~short48,P0Thread1of1ForFork2_#t~short46,P0Thread1of1ForFork2_#t~short23,P0Thread1of1ForFork2_#t~short21,P0Thread1of1ForFork2_#t~short63,P0Thread1of1ForFork2_~arg.offset,P0Thread1of1ForFork2_#t~ite16,P0Thread1of1ForFork2_#t~short65,P0Thread1of1ForFork2_#t~short67,P0Thread1of1ForFork2_#t~short29,P0Thread1of1ForFork2_#t~ite52,P0Thread1of1ForFork2_#t~ite44,P0Thread1of1ForFork2_#t~nondet27,P0Thread1of1ForFork2_#t~ite25,P0Thread1of1ForFork2_#t~ite69,P0Thread1of1ForFork2_#t~nondet71,P0Thread1of1ForFork2_#t~short15,P0Thread1of1ForFork2_#t~short57,P0Thread1of1ForFork2_#t~short13,P0Thread1of1ForFork2_#t~short55,P0Thread1of1ForFork2_#t~short11,P0Thread1of1ForFork2_#t~short32,P0Thread1of1ForFork2_#t~nondet77,P0Thread1of1ForFork2_#t~short30,P0Thread1of1ForFork2_#t~nondet79,P0Thread1of1ForFork2_#t~nondet4,P0Thread1of1ForFork2_#t~ite61,P0Thread1of1ForFork2_#t~short19,P0Thread1of1ForFork2_#t~nondet6,P0Thread1of1ForFork2_#t~short38,P0Thread1of1ForFork2_#t~ite42,P0Thread1of1ForFork2_#t~ite34,P0Thread1of1ForFork2_#t~ite76,P0Thread1of1ForFork2_#t~ite59,P0Thread1of1ForFork2_#t~nondet36,P0Thread1of1ForFork2_#t~mem75,P0Thread1of1ForFork2_#res.base,P0Thread1of1ForFork2_#t~mem73,P0Thread1of1ForFork2_thidvar1,P0Thread1of1ForFork2_#t~mem14,P0Thread1of1ForFork2_#t~short47,P0Thread1of1ForFork2_#t~nondet62,P0Thread1of1ForFork2_#in~arg.offset,P0Thread1of1ForFork2_#t~short22,P0Thread1of1ForFork2_#t~short41,P0Thread1of1ForFork2_#t~short20,P0Thread1of1ForFork2_#t~nondet45,P0Thread1of1ForFork2_#t~ite17,P0Thread1of1ForFork2_#t~short64,P0Thread1of1ForFork2_#t~short66,P0Thread1of1ForFork2_#t~ite51,P0Thread1of1ForFork2_#t~short49,P0Thread1of1ForFork2_#t~short28,P0Thread1of1ForFork2_#t~ite43,P0Thread1of1ForFork2_#t~ite68,P0Thread1of1ForFork2_#t~ite26,P0Thread1of1ForFork2_#t~short50,P0Thread1of1ForFork2_#in~arg.base,P0Thread1of1ForFork2_thidvar0,P0Thread1of1ForFork2_#t~short37,P0Thread1of1ForFork2_#t~nondet7,P0Thread1of1ForFork2_#t~nondet70,P0Thread1of1ForFork2_#t~short12,P0Thread1of1ForFork2_#t~nondet9,P0Thread1of1ForFork2_#t~short56,P0Thread1of1ForFork2_#t~nondet72,P0Thread1of1ForFork2_#t~short10,P0Thread1of1ForFork2_#t~short54,P0Thread1of1ForFork2_#t~nondet74,P0Thread1of1ForFork2_#t~nondet53,P0Thread1of1ForFork2_#t~short31,P0Thread1of1ForFork2_#t~nondet78,P0Thread1of1ForFork2_#t~ite60,P0Thread1of1ForFork2_#t~ite24,P0Thread1of1ForFork2_#t~nondet3,P0Thread1of1ForFork2_#t~short58,P0Thread1of1ForFork2_#t~short39,P0Thread1of1ForFork2_#t~nondet5} (and (= |P0Thread1of1ForFork2_#in~arg.offset| 0) (= P0Thread1of1ForFork2_thidvar1 0) (= |ULTIMATE.start_main_#t~pre182#1| P0Thread1of1ForFork2_thidvar0) (= |P0Thread1of1ForFork2_#in~arg.base| 0)) + + +PetriNet program = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" "[63]" "[64]" "[65]" "[66]" "[67]" "[68]" "[69]" "[70]" "[71]" "[72]" "[73]" "[74]" "[75]" "[76]" "[77]" "[78]" "[79]" "[80]" "[81]" "[82]" "[83]" "[84]" "[85]" "[86]" "[87]" "[88]" "[89]" "[90]" "[91]" "[92]" "[93]" "[94]" "[95]" "[96]" "[97]" "[98]" "[99]" "[100]" "[101]" "[102]" "[103]" "[104]" "[105]" "[106]" "[107]" "[108]" "[109]" "[110]" "[111]" "[112]" "[113]" "[114]" "[115]" "[116]" "[117]" "[118]" "[119]" "[120]" "[121]" "[122]" "[123]" "[124]" "[125]" "[126]" "[127]" "[128]" "[129]" "[130]" "[131]" "[132]" "[133]" "[134]" "[135]" "[136]" "[137]" "[138]" "[139]" "[140]" "[141]" "[142]" "[143]" "[144]" "[145]" "[146]" "[147]" "[148]" "[149]" "[150]" "[151]" "[152]" "[153]" "[154]" "[155]" "[156]" "[157]" "[158]" "[159]" "[160]" "[161]" "[162]" "[163]" "[164]" "[165]" "[166]" "[167]" "[168]" "[169]" "[170]" "[171]" "[172]" "[173]" "[174]" "[175]" "[176]" "[177]" "[178]" "[179]" "[180]" "[181]" "[182]" "[183]" "[184]" "[185]" "[186]" "[187]" "[188]" "[189]" "[190]" "[191]" "[192]" "[193]" "[194]" "[195]" "[196]" "[197]" "[198]" "[199]" "[200]" "[201]" "[202]" "[203]" "[204]" "[205]" "[206]" "[207]" "[208]" "[209]" "[210]" "[211]" "[212]" "[213]" "[214]" "[215]" "[216]" "[217]" "[218]" "[219]" "[220]" "[221]" "[222]" "[223]" "[224]" "[225]" "[226]" "[227]" "[228]" "[229]" "[230]" "[231]" "[232]" "[233]" "[234]" "[235]" "[236]" "[237]" "[238]" "[239]" "[240]" "[241]" "[242]" "[243]" "[244]" "[245]" "[246]" "[247]" "[248]" "[249]" "[250]" "[251]" "[252]" "[253]" "[254]" "[255]" "[256]" "[257]" "[258]" "[259]" "[260]" "[261]" "[262]" "[263]" "[264]" "[265]" "[266]" "[267]" "[268]" "[269]" "[270]" "[271]" "[272]" "[273]" "[274]" "[275]" "[276]" "[277]" "[278]" "[279]" "[280]" "[281]" "[282]" "[283]" "[284]" "[285]" "[286]" "[287]" "[288]" "[289]" "[290]" "[291]" "[292]" "[293]" "[294]" "[295]" "[296]" "[297]" "[298]" "[299]" "[300]" "[301]" "[302]" "[303]" "[304]" "[305]" "[306]" "[307]" "[308]" "[309]" "[310]" "[311]" "[312]" "[313]" "[314]" "[315]" "[316]" "[317]" "[318]" "[319]" "[320]" "[321]" "[322]" "[323]" "[324]" "[325]" "[326]" "[327]" "[328]" "[329]" "[330]" "[331]" "[332]" "[333]" "[334]" "[335]" "[336]" "[337]" "[338]" "[339]" "[340]" "[341]" "[342]" "[343]" "[344]" "[345]" "[346]" "[347]" "[348]" "[349]" "[350]" "[351]" "[352]" "[353]" "[354]" "[355]" "[356]" "[357]" "[358]" "[359]" "[360]" "[361]" "[362]" "[363]" "[364]" "[365]" "[366]" "[367]" "[368]" "[369]" "[370]" "[371]" "[372]" "[373]" "[374]" "[375]" "[376]" "[377]" "[378]" "[379]" "[380]" "[381]" "[382]" "[383]" "[384]" "[385]" "[386]" "[387]" "[388]" "[389]" "[390]" "[391]" "[392]" "[393]" "[394]" "[395]" "[396]" "[397]" "[398]" "[399]" "[400]" "[401]" "[402]" "[403]" "[404]" "[405]" "[406]" "[407]" "[408]" "[409]" "[410]" "[411]" "[412]" "[413]" "[414]" "[415]" "[416]" "[417]" "[418]" "[419]" "[420]" "[421]" "[422]" "[423]" "[424]" "[425]" "[426]" "[427]" "[428]" "[429]" "[430]" "[431]" "[432]" "[433]" "[434]" "[435]" "[436]" "[437]" "[438]" "[439]" "[440]" "[441]" "[442]" "[443]" "[444]" "[445]" "[446]" "[447]" "[448]" "[449]" "[450]" "[451]" "[452]" "[453]" "[454]" "[455]" "[456]" "[457]" "[458]" "[459]" "[460]" "[461]" "[462]" "[463]" "[464]" "[465]" "[466]" "[467]" "[468]" "[469]" "[470]" "[471]" "[472]" "[473]" "[474]" "[475]" "[476]" "[477]" "[478]" "[479]" "[480]" "[481]" "[482]" "[483]" "[484]" "[485]" "[486]" "[487]" "[488]" "[489]" "[490]" "[491]" "[492]" "[493]" "[494]" "[495]" "[496]" "[497]" "[498]" }, + places = {l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l10 l11 l12 l13 l14 l15 l16 l17 l18 l19 l20 l21 l22 l23 l24 l25 l26 l27 l28 l29 l30 l31 l32 l33 l34 l35 l36 l37 l38 l39 l40 l41 l42 l43 l44 l45 l46 l47 l48 l49 l50 l51 l52 l53 l54 l55 l56 l57 l58 l59 l60 l61 l62 l63 l64 l65 l66 l67 l68 l69 l70 l71 l72 l73 l74 l75 l76 l77 l78 l79 l80 l81 l82 l83 l84 l85 l86 l87 l88 l89 l90 l91 l92 l93 l94 l95 l96 l97 l98 l99 l100 l101 l102 l103 l104 l105 l106 l107 l108 l109 l110 l111 l112 l113 l114 l115 l116 l117 l118 l119 l120 l121 l122 l123 l124 l125 l126 l127 l128 l129 l130 l131 l132 l133 l134 l135 l136 l137 l138 l139 l140 l141 l142 l143 l144 l145 l146 l147 l148 l149 l150 l151 l152 l153 l154 l155 l156 l157 l158 l159 l160 l161 l162 l163 l164 l165 l166 l167 l168 l169 l170 l171 l172 l173 l174 l175 l176 l177 l178 l179 l180 l181 l182 l183 l184 l185 l186 l187 l188 l189 l190 l191 l192 l193 l194 l195 l196 l197 l198 l199 l200 l201 l202 l203 l204 l205 l206 l207 l208 l209 l210 l211 l212 l213 l214 l215 l216 l217 l218 l219 l220 l221 l222 l223 l224 l225 l226 l227 l228 l229 l230 l231 l232 l233 l234 l235 l236 l237 l238 l239 l240 l241 l242 l243 l244 l245 l246 l247 l248 l249 l250 l251 l252 l253 l254 l255 l256 l257 l258 l259 l260 l261 l262 l263 l264 l265 l266 l267 l268 l269 l270 l271 l272 l273 l274 l275 l276 l277 l278 l279 l280 l281 l282 l283 l284 l285 l286 l287 l288 l289 l290 l291 l292 l293 l294 l295 l296 l297 l298 l299 l300 l301 l302 l303 l304 l305 l306 l307 l308 l309 l310 l311 l312 l313 l314 l315 l316 l317 l318 l319 l320 l321 l322 l323 l324 l325 l326 l327 l328 l329 l330 l331 l332 l333 l334 l335 l336 l337 l338 l339 l340 l341 l342 l343 l344 l345 l346 l347 l348 l349 l350 l351 l352 l353 l354 l355 l356 l357 l358 l359 l360 l361 l362 l363 l364 l365 l366 l367 l368 l369 l370 l371 l372 l373 l374 l375 l376 l377 l378 l379 l380 l381 l382 l383 l384 l385 l386 l387 l388 l389 l390 l391 l392 l393 l394 l395 l396 l397 l398 l399 l400 l401 l402 l403 l404 l405 l406 l407 l408 l409 l410 l411 l412 l413 l414 l415 l416 }, + transitions = { + ({l410 } "[1]" {l348 }) + ({l339 } "[195]" {l191 }) + ({l339 } "[196]" {l121 }) + ({l339 } "[197]" {l294 }) + ({l339 } "[198]" {l236 }) + ({l339 } "[199]" {l210 }) + ({l339 } "[200]" {l302 }) + ({l339 } "[201]" {l113 }) + ({l339 } "[202]" {l55 }) + ({l339 } "[203]" {l257 }) + ({l339 } "[204]" {l130 }) + ({l339 } "[205]" {l98 }) + ({l339 } "[206]" {l23 }) + ({l339 } "[207]" {l228 }) + ({l339 } "[208]" {l290 }) + ({l339 } "[209]" {l346 }) + ({l339 } "[210]" {l401 }) + ({l339 } "[211]" {l301 }) + ({l339 } "[212]" {l362 }) + ({l339 } "[213]" {l195 }) + ({l339 } "[214]" {l407 }) + ({l339 } "[215]" {l406 }) + ({l339 } "[216]" {l376 }) + ({l339 } "[217]" {l313 }) + ({l339 } "[218]" {l40 }) + ({l339 } "[219]" {l281 }) + ({l339 } "[220]" {l31 }) + ({l339 } "[221]" {l382 }) + ({l339 } "[222]" {l225 }) + ({l339 } "[223]" {l22 }) + ({l339 } "[224]" {l367 }) + ({l339 } "[225]" {l397 }) + ({l339 } "[226]" {l256 }) + ({l339 } "[227]" {l268 }) + ({l339 } "[228]" {l392 }) + ({l339 } "[229]" {l252 }) + ({l339 } "[230]" {l254 }) + ({l339 } "[231]" {l304 }) + ({l339 } "[232]" {l258 }) + ({l339 } "[233]" {l405 }) + ({l339 } "[234]" {l192 }) + ({l339 } "[235]" {l44 }) + ({l339 } "[236]" {l62 }) + ({l339 } "[237]" {l393 }) + ({l339 } "[238]" {l120 }) + ({l339 } "[239]" {l180 }) + ({l339 } "[240]" {l386 }) + ({l339 } "[241]" {l138 }) + ({l339 } "[242]" {l375 }) + ({l339 } "[243]" {l241 }) + ({l339 } "[244]" {l132 }) + ({l339 } "[245]" {l68 }) + ({l339 } "[246]" {l403 }) + ({l339 } "[247]" {l65 }) + ({l339 } "[248]" {l111 }) + ({l339 } "[249]" {l321 }) + ({l339 } "[250]" {l305 }) + ({l339 } "[251]" {l89 }) + ({l339 } "[252]" {l179 }) + ({l339 } "[253]" {l223 }) + ({l339 } "[254]" {l61 }) + ({l339 } "[255]" {l39 }) + ({l339 } "[256]" {l166 }) + ({l339 } "[257]" {l365 }) + ({l339 } "[258]" {l122 }) + ({l339 } "[259]" {l354 }) + ({l339 } "[260]" {l10 }) + ({l339 } "[261]" {l271 }) + ({l339 } "[262]" {l287 }) + ({l339 } "[263]" {l30 }) + ({l339 } "[264]" {l233 }) + ({l339 } "[265]" {l173 }) + ({l339 } "[266]" {l345 }) + ({l339 } "[267]" {l85 }) + ({l339 } "[268]" {l262 }) + ({l339 } "[269]" {l131 }) + ({l339 } "[270]" {l242 }) + ({l339 } "[271]" {l359 }) + ({l339 } "[272]" {l152 }) + ({l339 } "[273]" {l25 }) + ({l339 } "[274]" {l336 }) + ({l339 } "[275]" {l221 }) + ({l339 } "[276]" {l246 }) + ({l339 } "[277]" {l59 }) + ({l339 } "[278]" {l169 }) + ({l339 } "[279]" {l110 }) + ({l339 } "[280]" {l112 }) + ({l339 } "[281]" {l33 }) + ({l339 } "[282]" {l144 }) + ({l339 } "[283]" {l185 }) + ({l339 } "[284]" {l217 }) + ({l339 } "[285]" {l331 }) + ({l339 } "[286]" {l352 }) + ({l339 } "[287]" {l37 }) + ({l339 } "[288]" {l214 }) + ({l339 } "[289]" {l168 }) + ({l339 } "[290]" {l12 }) + ({l339 } "[291]" {l145 }) + ({l339 } "[292]" {l2 }) + ({l339 } "[293]" {l342 }) + ({l187 l249 } "[493]" {l19 }) + ({l249 l186 } "[494]" {l187 l338 l297 }) + ({l24 } "[2]" {l133 }) + ({l49 } "[3]" {l410 }) + ({l126 } "[4]" {l9 }) + ({l286 } "[5]" {l114 }) + ({l199 } "[6]" {l190 }) + ({l232 } "[7]" {l136 }) + ({l93 } "[407]" {l358 }) + ({l93 } "[408]" {l203 }) + ({l93 } "[409]" {l119 }) + ({l272 } "[8]" {l383 }) + ({l153 } "[9]" {l24 }) + ({l259 } "[304]" {l57 }) + ({l259 } "[305]" {l174 }) + ({l282 } "[10]" {l108 }) + ({l215 } "[11]" {l328 }) + ({l351 } "[194]" {l339 }) + ({l399 } "[12]" {l87 }) + ({l237 } "[13]" {l272 }) + ({l237 } "[14]" {l337 }) + ({l64 } "[15]" {l127 }) + ({l64 } "[16]" {l260 }) + ({l267 } "[17]" {l178 }) + ({l43 } "[18]" {l378 }) + ({l72 } "[301]" {l155 }) + ({l127 } "[19]" {l260 }) + ({l133 } "[20]" {l3 }) + ({l162 } "[21]" {l413 }) + ({l315 } "[22]" {l237 }) + ({l197 } "[23]" {l199 }) + ({l337 } "[24]" {l272 }) + ({l261 } "[25]" {l56 }) + ({l261 } "[26]" {l300 }) + ({l261 } "[27]" {l60 }) + ({l261 } "[28]" {l14 }) + ({l261 } "[29]" {l360 }) + ({l261 } "[30]" {l381 }) + ({l261 } "[31]" {l17 }) + ({l261 } "[32]" {l92 }) + ({l261 } "[33]" {l148 }) + ({l261 } "[34]" {l129 }) + ({l261 } "[35]" {l264 }) + ({l261 } "[36]" {l106 }) + ({l261 } "[37]" {l277 }) + ({l261 } "[38]" {l80 }) + ({l261 } "[39]" {l394 }) + ({l261 } "[40]" {l27 }) + ({l261 } "[41]" {l370 }) + ({l261 } "[42]" {l26 }) + ({l261 } "[43]" {l285 }) + ({l261 } "[44]" {l372 }) + ({l261 } "[45]" {l79 }) + ({l261 } "[46]" {l316 }) + ({l261 } "[47]" {l99 }) + ({l261 } "[48]" {l245 }) + ({l261 } "[49]" {l105 }) + ({l261 } "[50]" {l13 }) + ({l261 } "[51]" {l200 }) + ({l261 } "[52]" {l91 }) + ({l261 } "[53]" {l143 }) + ({l261 } "[54]" {l92 }) + ({l261 } "[55]" {l148 }) + ({l261 } "[56]" {l129 }) + ({l261 } "[57]" {l264 }) + ({l261 } "[58]" {l106 }) + ({l261 } "[59]" {l277 }) + ({l261 } "[60]" {l80 }) + ({l261 } "[61]" {l394 }) + ({l261 } "[62]" {l27 }) + ({l261 } "[63]" {l370 }) + ({l261 } "[64]" {l26 }) + ({l261 } "[65]" {l285 }) + ({l261 } "[66]" {l372 }) + ({l261 } "[67]" {l79 }) + ({l261 } "[68]" {l316 }) + ({l261 } "[69]" {l99 }) + ({l261 } "[70]" {l245 }) + ({l261 } "[71]" {l105 }) + ({l261 } "[72]" {l13 }) + ({l261 } "[73]" {l200 }) + ({l261 } "[74]" {l91 }) + ({l261 } "[75]" {l143 }) + ({l261 } "[76]" {l92 }) + ({l261 } "[77]" {l148 }) + ({l261 } "[78]" {l129 }) + ({l261 } "[79]" {l264 }) + ({l261 } "[80]" {l106 }) + ({l261 } "[81]" {l277 }) + ({l261 } "[82]" {l80 }) + ({l261 } "[83]" {l394 }) + ({l261 } "[84]" {l27 }) + ({l261 } "[85]" {l370 }) + ({l261 } "[86]" {l26 }) + ({l261 } "[87]" {l285 }) + ({l261 } "[88]" {l372 }) + ({l261 } "[89]" {l79 }) + ({l261 } "[90]" {l316 }) + ({l261 } "[91]" {l99 }) + ({l261 } "[92]" {l245 }) + ({l261 } "[93]" {l105 }) + ({l261 } "[94]" {l13 }) + ({l261 } "[95]" {l200 }) + ({l261 } "[96]" {l91 }) + ({l261 } "[97]" {l143 }) + ({l36 } "[98]" {l344 }) + ({l73 } "[99]" {l207 }) + ({l77 } "[411]" {l330 }) + ({l66 } "[100]" {l36 }) + ({l260 } "[101]" {l218 }) + ({l147 } "[102]" {l232 }) + ({l135 } "[103]" {l380 }) + ({l218 } "[104]" {l261 }) + ({l415 } "[105]" {l162 }) + ({l338 } "[106]" {l158 }) + ({l119 } "[410]" {l77 }) + ({l170 } "[107]" {l230 }) + ({l134 } "[108]" {l293 }) + ({l344 } "[109]" {l74 }) + ({l342 } "[294]" {l289 }) + ({l342 } "[295]" {l323 }) + ({l342 } "[296]" {l296 }) + ({l156 } "[110]" {l249 }) + ({l378 } "[111]" {l64 }) + ({l234 } "[112]" {l194 }) + ({l172 } "[113]" {l327 }) + ({l101 } "[114]" {l347 }) + ({l296 } "[297]" {l6 }) + ({l276 } "[115]" {l213 }) + ({l309 } "[116]" {l206 }) + ({l309 } "[117]" {l58 }) + ({l347 } "[118]" {l279 }) + ({l297 } "[303]" {l259 }) + ({l202 } "[119]" {l309 }) + ({l383 } "[120]" {l101 }) + ({l306 } "[121]" {l126 }) + ({l157 } "[122]" {l212 }) + ({l327 } "[123]" {l276 }) + ({l263 } "[124]" {l49 }) + ({l174 } "[306]" {l76 }) + ({l174 } "[307]" {l364 }) + ({l174 } "[308]" {l167 }) + ({l341 } "[125]" {l153 }) + ({l53 } "[126]" {l368 }) + ({l53 } "[127]" {l274 }) + ({l53 } "[128]" {l202 }) + ({l41 } "[129]" {l267 }) + ({l400 } "[406]" {l93 }) + ({l207 } "[130]" {l90 }) + ({l349 } "[131]" {l165 }) + ({l5 } "[132]" {l250 }) + ({l266 } "[133]" {l366 }) + ({l87 } "[134]" {l415 }) + ({l293 } "[135]" {l286 }) + ({l178 } "[136]" {l263 }) + ({l9 } "[137]" {l45 }) + ({l102 } "[413]" {l384 }) + ({l102 } "[414]" {l196 }) + ({l165 } "[138]" {l141 }) + ({l194 } "[139]" {l51 }) + ({l408 } "[140]" {l282 }) + ({l363 } "[141]" {l295 }) + ({l141 } "[142]" {l147 }) + ({l58 } "[143]" {l43 }) + ({l108 } "[144]" {l224 }) + ({l143 } "[145]" {l353 }) + ({l143 } "[146]" {l1 }) + ({l143 } "[147]" {l0 }) + ({l143 } "[148]" {l303 }) + ({l143 } "[149]" {l35 }) + ({l143 } "[150]" {l319 }) + ({l143 } "[151]" {l324 }) + ({l143 } "[152]" {l255 }) + ({l143 } "[153]" {l63 }) + ({l143 } "[154]" {l193 }) + ({l143 } "[155]" {l240 }) + ({l143 } "[156]" {l317 }) + ({l143 } "[157]" {l332 }) + ({l143 } "[158]" {l363 }) + ({l380 } "[159]" {l156 }) + ({l163 } "[160]" {l389 }) + ({l167 } "[309]" {l253 }) + ({l167 } "[310]" {l118 }) + ({l167 } "[311]" {l34 }) + ({l167 } "[312]" {l298 }) + ({l167 } "[313]" {l150 }) + ({l167 } "[314]" {l387 }) + ({l167 } "[315]" {l219 }) + ({l167 } "[316]" {l329 }) + ({l167 } "[317]" {l198 }) + ({l167 } "[318]" {l310 }) + ({l167 } "[319]" {l292 }) + ({l167 } "[320]" {l69 }) + ({l167 } "[321]" {l231 }) + ({l167 } "[322]" {l247 }) + ({l167 } "[323]" {l229 }) + ({l167 } "[324]" {l52 }) + ({l167 } "[325]" {l243 }) + ({l167 } "[326]" {l171 }) + ({l167 } "[327]" {l284 }) + ({l167 } "[328]" {l4 }) + ({l167 } "[329]" {l369 }) + ({l167 } "[330]" {l395 }) + ({l167 } "[331]" {l28 }) + ({l167 } "[332]" {l244 }) + ({l167 } "[333]" {l159 }) + ({l167 } "[334]" {l251 }) + ({l167 } "[335]" {l32 }) + ({l167 } "[336]" {l83 }) + ({l167 } "[337]" {l239 }) + ({l167 } "[338]" {l308 }) + ({l167 } "[339]" {l291 }) + ({l167 } "[340]" {l322 }) + ({l167 } "[341]" {l70 }) + ({l167 } "[342]" {l333 }) + ({l167 } "[343]" {l409 }) + ({l167 } "[344]" {l391 }) + ({l167 } "[345]" {l283 }) + ({l167 } "[346]" {l95 }) + ({l167 } "[347]" {l146 }) + ({l167 } "[348]" {l385 }) + ({l167 } "[349]" {l235 }) + ({l167 } "[350]" {l379 }) + ({l167 } "[351]" {l371 }) + ({l167 } "[352]" {l270 }) + ({l167 } "[353]" {l374 }) + ({l167 } "[354]" {l109 }) + ({l167 } "[355]" {l164 }) + ({l167 } "[356]" {l335 }) + ({l167 } "[357]" {l356 }) + ({l167 } "[358]" {l312 }) + ({l167 } "[359]" {l265 }) + ({l167 } "[360]" {l411 }) + ({l167 } "[361]" {l125 }) + ({l167 } "[362]" {l71 }) + ({l167 } "[363]" {l377 }) + ({l167 } "[364]" {l8 }) + ({l167 } "[365]" {l115 }) + ({l167 } "[366]" {l75 }) + ({l167 } "[367]" {l280 }) + ({l167 } "[368]" {l396 }) + ({l167 } "[369]" {l208 }) + ({l167 } "[370]" {l139 }) + ({l167 } "[371]" {l117 }) + ({l167 } "[372]" {l50 }) + ({l167 } "[373]" {l226 }) + ({l167 } "[374]" {l154 }) + ({l167 } "[375]" {l414 }) + ({l167 } "[376]" {l47 }) + ({l167 } "[377]" {l11 }) + ({l167 } "[378]" {l326 }) + ({l167 } "[379]" {l104 }) + ({l167 } "[380]" {l182 }) + ({l167 } "[381]" {l175 }) + ({l167 } "[382]" {l307 }) + ({l167 } "[383]" {l216 }) + ({l167 } "[384]" {l176 }) + ({l167 } "[385]" {l142 }) + ({l167 } "[386]" {l137 }) + ({l167 } "[387]" {l238 }) + ({l167 } "[388]" {l222 }) + ({l167 } "[389]" {l314 }) + ({l167 } "[390]" {l340 }) + ({l167 } "[391]" {l278 }) + ({l167 } "[392]" {l82 }) + ({l167 } "[393]" {l311 }) + ({l167 } "[394]" {l67 }) + ({l167 } "[395]" {l16 }) + ({l167 } "[396]" {l100 }) + ({l167 } "[397]" {l149 }) + ({l167 } "[398]" {l355 }) + ({l167 } "[399]" {l116 }) + ({l167 } "[400]" {l160 }) + ({l167 } "[401]" {l140 }) + ({l167 } "[402]" {l361 }) + ({l167 } "[403]" {l248 }) + ({l167 } "[404]" {l299 }) + ({l167 } "[405]" {l400 }) + ({l21 } "[161]" {l215 }) + ({l158 } "[162]" {l5 }) + ({l45 } "[163]" {l350 }) + ({l136 } "[164]" {l306 }) + ({l350 } "[165]" {l408 }) + ({l54 } "[166]" {l341 }) + ({l6 } "[298]" {l96 }) + ({l6 } "[299]" {l320 }) + ({l6 } "[300]" {l72 }) + ({l357 } "[488]" {l161 }) + ({l357 } "[489]" {l181 }) + ({l357 } "[490]" {l416 }) + ({l205 } "[492]" {l78 }) + ({l155 } "[302]" {l201 }) + ({l373 } "[167]" {l399 }) + ({l196 } "[415]" {l128 }) + ({l196 } "[416]" {l318 }) + ({l196 } "[417]" {l124 }) + ({l196 } "[418]" {l7 }) + ({l196 } "[419]" {l103 }) + ({l196 } "[420]" {l220 }) + ({l196 } "[421]" {l97 }) + ({l196 } "[422]" {l269 }) + ({l196 } "[423]" {l84 }) + ({l196 } "[424]" {l46 }) + ({l196 } "[425]" {l404 }) + ({l196 } "[426]" {l20 }) + ({l196 } "[427]" {l412 }) + ({l196 } "[428]" {l402 }) + ({l196 } "[429]" {l48 }) + ({l196 } "[430]" {l107 }) + ({l196 } "[431]" {l343 }) + ({l196 } "[432]" {l398 }) + ({l196 } "[433]" {l325 }) + ({l196 } "[434]" {l29 }) + ({l196 } "[435]" {l273 }) + ({l196 } "[436]" {l334 }) + ({l196 } "[437]" {l209 }) + ({l196 } "[438]" {l15 }) + ({l196 } "[439]" {l211 }) + ({l196 } "[440]" {l94 }) + ({l196 } "[441]" {l390 }) + ({l196 } "[442]" {l227 }) + ({l196 } "[443]" {l357 }) + ({l196 } "[444]" {l269 }) + ({l196 } "[445]" {l84 }) + ({l196 } "[446]" {l46 }) + ({l196 } "[447]" {l404 }) + ({l196 } "[448]" {l20 }) + ({l196 } "[449]" {l412 }) + ({l196 } "[450]" {l402 }) + ({l196 } "[451]" {l48 }) + ({l196 } "[452]" {l107 }) + ({l196 } "[453]" {l343 }) + ({l196 } "[454]" {l398 }) + ({l196 } "[455]" {l325 }) + ({l196 } "[456]" {l29 }) + ({l196 } "[457]" {l273 }) + ({l196 } "[458]" {l334 }) + ({l196 } "[459]" {l209 }) + ({l196 } "[460]" {l15 }) + ({l196 } "[461]" {l211 }) + ({l196 } "[462]" {l94 }) + ({l196 } "[463]" {l390 }) + ({l196 } "[464]" {l227 }) + ({l196 } "[465]" {l357 }) + ({l196 } "[466]" {l269 }) + ({l196 } "[467]" {l84 }) + ({l196 } "[468]" {l46 }) + ({l196 } "[469]" {l404 }) + ({l196 } "[470]" {l20 }) + ({l196 } "[471]" {l412 }) + ({l196 } "[472]" {l402 }) + ({l196 } "[473]" {l48 }) + ({l196 } "[474]" {l107 }) + ({l196 } "[475]" {l343 }) + ({l196 } "[476]" {l398 }) + ({l196 } "[477]" {l325 }) + ({l196 } "[478]" {l29 }) + ({l196 } "[479]" {l273 }) + ({l196 } "[480]" {l334 }) + ({l196 } "[481]" {l209 }) + ({l196 } "[482]" {l15 }) + ({l196 } "[483]" {l211 }) + ({l196 } "[484]" {l94 }) + ({l196 } "[485]" {l390 }) + ({l196 } "[486]" {l227 }) + ({l196 } "[487]" {l357 }) + ({l224 } "[168]" {l42 }) + ({l230 } "[169]" {l388 }) + ({l366 } "[170]" {l157 }) + ({l212 } "[171]" {l86 }) + ({l389 } "[172]" {l73 }) + ({l90 } "[173]" {l349 }) + ({l189 l88 } "[497]" {l177 }) + ({l188 l88 } "[498]" {l189 l21 l351 }) + ({l38 } "[412]" {l102 }) + ({l86 } "[174]" {l288 }) + ({l81 } "[175]" {l53 }) + ({l3 } "[176]" {l41 }) + ({l123 } "[177]" {l197 }) + ({l328 } "[178]" {l135 }) + ({l279 } "[179]" {l172 }) + ({l190 } "[180]" {l315 }) + ({l190 } "[181]" {l101 }) + ({l348 } "[182]" {l373 }) + ({l18 } "[183]" {l81 }) + ({l388 } "[184]" {l266 }) + ({l51 l184 } "[495]" {l204 }) + ({l51 l183 } "[496]" {l18 l184 l38 }) + ({l288 } "[185]" {l54 }) + ({l416 } "[491]" {l205 }) + ({l295 } "[186]" {l151 }) + ({l295 } "[187]" {l123 }) + ({l114 } "[188]" {l163 }) + ({l250 } "[189]" {l234 }) + ({l413 } "[190]" {l134 }) + ({l42 } "[191]" {l275 }) + ({l275 } "[192]" {l66 }) + ({l74 } "[193]" {l88 }) + }, + initialMarking = {l188 l170 l183 l186 }, + acceptingPlaces = {l231 l233 l0 l235 l1 l236 l2 l238 l239 l4 l240 l7 l8 l241 l242 l243 l244 l245 l10 l246 l247 l11 l12 l13 l248 l14 l15 l16 l17 l251 l252 l253 l19 l20 l22 l254 l23 l25 l26 l255 l256 l27 l257 l258 l28 l29 l30 l31 l32 l33 l262 l34 l264 l265 l35 l268 l37 l269 l270 l271 l39 l40 l44 l273 l274 l46 l47 l48 l50 l52 l55 l56 l57 l277 l59 l278 l60 l61 l62 l63 l280 l65 l281 l67 l68 l69 l283 l70 l284 l71 l285 l75 l76 l287 l79 l289 l80 l290 l82 l291 l83 l292 l84 l294 l298 l299 l300 l85 l89 l91 l301 l302 l92 l303 l304 l94 l305 l95 l96 l97 l307 l98 l99 l308 l310 l100 l311 l103 l312 l104 l313 l105 l314 l106 l316 l317 l318 l319 l320 l321 l107 l322 l109 l110 l111 l323 l324 l325 l112 l326 l113 l329 l331 l115 l116 l117 l118 l332 l120 l333 l334 l335 l121 l122 l336 l124 l125 l128 l340 l129 l343 l130 l131 l345 l132 l346 l137 l138 l139 l140 l352 l353 l142 l354 l355 l356 l358 l144 l359 l360 l145 l361 l362 l364 l146 l148 l149 l365 l150 l151 l152 l154 l367 l368 l369 l159 l160 l161 l370 l371 l164 l372 l374 l166 l375 l376 l168 l169 l377 l171 l379 l173 l175 l381 l176 l177 l179 l180 l181 l182 l382 l185 l384 l191 l385 l192 l386 l387 l193 l195 l198 l200 l203 l204 l390 l391 l206 l392 l393 l208 l209 l394 l210 l395 l396 l211 l397 l398 l214 l401 l402 l216 l217 l403 l219 l404 l220 l221 l222 l405 l406 l407 l223 l409 l411 l412 l225 l414 l226 l227 l228 l229 } +); +FiniteAutomaton proof1 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" "[63]" "[64]" "[65]" "[66]" "[67]" "[68]" "[69]" "[70]" "[71]" "[72]" "[73]" "[74]" "[75]" "[76]" "[77]" "[78]" "[79]" "[80]" "[81]" "[82]" "[83]" "[84]" "[85]" "[86]" "[87]" "[88]" "[89]" "[90]" "[91]" "[92]" "[93]" "[94]" "[95]" "[96]" "[97]" "[98]" "[99]" "[100]" "[101]" "[102]" "[103]" "[104]" "[105]" "[106]" "[107]" "[108]" "[109]" "[110]" "[111]" "[112]" "[113]" "[114]" "[115]" "[116]" "[117]" "[118]" "[119]" "[120]" "[121]" "[122]" "[123]" "[124]" "[125]" "[126]" "[127]" "[128]" "[129]" "[130]" "[131]" "[132]" "[133]" "[134]" "[135]" "[136]" "[137]" "[138]" "[139]" "[140]" "[141]" "[142]" "[143]" "[144]" "[145]" "[146]" "[147]" "[148]" "[149]" "[150]" "[151]" "[152]" "[153]" "[154]" "[155]" "[156]" "[157]" "[158]" "[159]" "[160]" "[161]" "[162]" "[163]" "[164]" "[165]" "[166]" "[167]" "[168]" "[169]" "[170]" "[171]" "[172]" "[173]" "[174]" "[175]" "[176]" "[177]" "[178]" "[179]" "[180]" "[181]" "[182]" "[183]" "[184]" "[185]" "[186]" "[187]" "[188]" "[189]" "[190]" "[191]" "[192]" "[193]" "[194]" "[195]" "[196]" "[197]" "[198]" "[199]" "[200]" "[201]" "[202]" "[203]" "[204]" "[205]" "[206]" "[207]" "[208]" "[209]" "[210]" "[211]" "[212]" "[213]" "[214]" "[215]" "[216]" "[217]" "[218]" "[219]" "[220]" "[221]" "[222]" "[223]" "[224]" "[225]" "[226]" "[227]" "[228]" "[229]" "[230]" "[231]" "[232]" "[233]" "[234]" "[235]" "[236]" "[237]" "[238]" "[239]" "[240]" "[241]" "[242]" "[243]" "[244]" "[245]" "[246]" "[247]" "[248]" "[249]" "[250]" "[251]" "[252]" "[253]" "[254]" "[255]" "[256]" "[257]" "[258]" "[259]" "[260]" "[261]" "[262]" "[263]" "[264]" "[265]" "[266]" "[267]" "[268]" "[269]" "[270]" "[271]" "[272]" "[273]" "[274]" "[275]" "[276]" "[277]" "[278]" "[279]" "[280]" "[281]" "[282]" "[283]" "[284]" "[285]" "[286]" "[287]" "[288]" "[289]" "[290]" "[291]" "[292]" "[293]" "[294]" "[295]" "[296]" "[297]" "[298]" "[299]" "[300]" "[301]" "[302]" "[303]" "[304]" "[305]" "[306]" "[307]" "[308]" "[309]" "[310]" "[311]" "[312]" "[313]" "[314]" "[315]" "[316]" "[317]" "[318]" "[319]" "[320]" "[321]" "[322]" "[323]" "[324]" "[325]" "[326]" "[327]" "[328]" "[329]" "[330]" "[331]" "[332]" "[333]" "[334]" "[335]" "[336]" "[337]" "[338]" "[339]" "[340]" "[341]" "[342]" "[343]" "[344]" "[345]" "[346]" "[347]" "[348]" "[349]" "[350]" "[351]" "[352]" "[353]" "[354]" "[355]" "[356]" "[357]" "[358]" "[359]" "[360]" "[361]" "[362]" "[363]" "[364]" "[365]" "[366]" "[367]" "[368]" "[369]" "[370]" "[371]" "[372]" "[373]" "[374]" "[375]" "[376]" "[377]" "[378]" "[379]" "[380]" "[381]" "[382]" "[383]" "[384]" "[385]" "[386]" "[387]" "[388]" "[389]" "[390]" "[391]" "[392]" "[393]" "[394]" "[395]" "[396]" "[397]" "[398]" "[399]" "[400]" "[401]" "[402]" "[403]" "[404]" "[405]" "[406]" "[407]" "[408]" "[409]" "[410]" "[411]" "[412]" "[413]" "[414]" "[415]" "[416]" "[417]" "[418]" "[419]" "[420]" "[421]" "[422]" "[423]" "[424]" "[425]" "[426]" "[427]" "[428]" "[429]" "[430]" "[431]" "[432]" "[433]" "[434]" "[435]" "[436]" "[437]" "[438]" "[439]" "[440]" "[441]" "[442]" "[443]" "[444]" "[445]" "[446]" "[447]" "[448]" "[449]" "[450]" "[451]" "[452]" "[453]" "[454]" "[455]" "[456]" "[457]" "[458]" "[459]" "[460]" "[461]" "[462]" "[463]" "[464]" "[465]" "[466]" "[467]" "[468]" "[469]" "[470]" "[471]" "[472]" "[473]" "[474]" "[475]" "[476]" "[477]" "[478]" "[479]" "[480]" "[481]" "[482]" "[483]" "[484]" "[485]" "[486]" "[487]" "[488]" "[489]" "[490]" "[491]" "[492]" "[493]" "[494]" "[495]" "[496]" "[497]" "[498]" }, + states = {"true" "false" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("true" "[1]" "true") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[5]" "true") + ("true" "[6]" "true") + ("true" "[7]" "true") + ("true" "[8]" "true") + ("true" "[9]" "true") + ("true" "[10]" "true") + ("true" "[11]" "true") + ("true" "[12]" "true") + ("true" "[13]" "false") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "true") + ("true" "[17]" "true") + ("true" "[18]" "true") + ("true" "[19]" "false") + ("true" "[20]" "true") + ("true" "[21]" "true") + ("true" "[22]" "true") + ("true" "[23]" "true") + ("true" "[24]" "false") + ("true" "[25]" "false") + ("true" "[26]" "false") + ("true" "[27]" "false") + ("true" "[28]" "false") + ("true" "[29]" "false") + ("true" "[30]" "false") + ("true" "[31]" "false") + ("true" "[32]" "false") + ("true" "[33]" "false") + ("true" "[34]" "false") + ("true" "[35]" "false") + ("true" "[36]" "false") + ("true" "[37]" "false") + ("true" "[38]" "false") + ("true" "[39]" "false") + ("true" "[40]" "false") + ("true" "[41]" "false") + ("true" "[42]" "false") + ("true" "[43]" "false") + ("true" "[44]" "false") + ("true" "[45]" "false") + ("true" "[46]" "false") + ("true" "[47]" "false") + ("true" "[48]" "false") + ("true" "[49]" "false") + ("true" "[50]" "false") + ("true" "[51]" "false") + ("true" "[52]" "false") + ("true" "[53]" "true") + ("true" "[54]" "false") + ("true" "[55]" "false") + ("true" "[56]" "false") + ("true" "[57]" "false") + ("true" "[58]" "false") + ("true" "[59]" "false") + ("true" "[60]" "false") + ("true" "[61]" "false") + ("true" "[62]" "false") + ("true" "[63]" "false") + ("true" "[64]" "false") + ("true" "[65]" "false") + ("true" "[66]" "false") + ("true" "[67]" "false") + ("true" "[68]" "false") + ("true" "[69]" "false") + ("true" "[70]" "false") + ("true" "[71]" "false") + ("true" "[72]" "false") + ("true" "[73]" "false") + ("true" "[74]" "false") + ("true" "[75]" "true") + ("true" "[76]" "false") + ("true" "[77]" "false") + ("true" "[78]" "false") + ("true" "[79]" "false") + ("true" "[80]" "false") + ("true" "[81]" "false") + ("true" "[82]" "false") + ("true" "[83]" "false") + ("true" "[84]" "false") + ("true" "[85]" "false") + ("true" "[86]" "false") + ("true" "[87]" "false") + ("true" "[88]" "false") + ("true" "[89]" "false") + ("true" "[90]" "false") + ("true" "[91]" "false") + ("true" "[92]" "false") + ("true" "[93]" "false") + ("true" "[94]" "false") + ("true" "[95]" "false") + ("true" "[96]" "false") + ("true" "[97]" "true") + ("true" "[98]" "true") + ("true" "[99]" "true") + ("true" "[100]" "true") + ("true" "[101]" "true") + ("true" "[102]" "true") + ("true" "[103]" "true") + ("true" "[104]" "true") + ("true" "[105]" "true") + ("true" "[106]" "true") + ("true" "[107]" "true") + ("true" "[108]" "true") + ("true" "[109]" "true") + ("true" "[110]" "true") + ("true" "[111]" "true") + ("true" "[112]" "true") + ("true" "[113]" "true") + ("true" "[114]" "true") + ("true" "[115]" "true") + ("true" "[116]" "true") + ("true" "[117]" "true") + ("true" "[118]" "true") + ("true" "[119]" "true") + ("true" "[121]" "true") + ("true" "[122]" "true") + ("true" "[123]" "true") + ("true" "[124]" "true") + ("true" "[125]" "true") + ("true" "[126]" "false") + ("true" "[127]" "false") + ("true" "[128]" "true") + ("true" "[129]" "true") + ("true" "[130]" "true") + ("true" "[131]" "true") + ("true" "[132]" "true") + ("true" "[133]" "true") + ("true" "[134]" "true") + ("true" "[135]" "true") + ("true" "[136]" "true") + ("true" "[137]" "true") + ("true" "[138]" "true") + ("true" "[139]" "true") + ("true" "[140]" "true") + ("true" "[141]" "true") + ("true" "[142]" "true") + ("true" "[143]" "true") + ("true" "[144]" "true") + ("true" "[145]" "false") + ("true" "[146]" "false") + ("true" "[147]" "false") + ("true" "[148]" "false") + ("true" "[149]" "false") + ("true" "[150]" "false") + ("true" "[151]" "false") + ("true" "[152]" "false") + ("true" "[153]" "false") + ("true" "[154]" "false") + ("true" "[155]" "false") + ("true" "[156]" "false") + ("true" "[157]" "false") + ("true" "[158]" "true") + ("true" "[159]" "true") + ("true" "[160]" "true") + ("true" "[161]" "true") + ("true" "[162]" "true") + ("true" "[163]" "true") + ("true" "[164]" "true") + ("true" "[165]" "true") + ("true" "[166]" "true") + ("true" "[167]" "true") + ("true" "[168]" "true") + ("true" "[169]" "true") + ("true" "[170]" "true") + ("true" "[171]" "true") + ("true" "[172]" "true") + ("true" "[173]" "true") + ("true" "[174]" "true") + ("true" "[175]" "true") + ("true" "[176]" "true") + ("true" "[177]" "true") + ("true" "[178]" "true") + ("true" "[179]" "true") + ("true" "[180]" "true") + ("true" "[181]" "true") + ("true" "[182]" "true") + ("true" "[183]" "true") + ("true" "[184]" "true") + ("true" "[185]" "true") + ("true" "[186]" "true") + ("true" "[187]" "true") + ("true" "[188]" "true") + ("true" "[189]" "true") + ("true" "[190]" "true") + ("true" "[191]" "true") + ("true" "[192]" "true") + ("true" "[193]" "true") + ("true" "[194]" "true") + ("true" "[195]" "false") + ("true" "[196]" "false") + ("true" "[197]" "false") + ("true" "[198]" "false") + ("true" "[199]" "false") + ("true" "[200]" "false") + ("true" "[201]" "false") + ("true" "[202]" "false") + ("true" "[203]" "false") + ("true" "[204]" "false") + ("true" "[205]" "false") + ("true" "[206]" "false") + ("true" "[207]" "false") + ("true" "[208]" "false") + ("true" "[209]" "false") + ("true" "[210]" "false") + ("true" "[211]" "false") + ("true" "[212]" "false") + ("true" "[213]" "false") + ("true" "[214]" "false") + ("true" "[215]" "false") + ("true" "[216]" "false") + ("true" "[217]" "false") + ("true" "[218]" "false") + ("true" "[219]" "false") + ("true" "[220]" "false") + ("true" "[221]" "false") + ("true" "[222]" "false") + ("true" "[223]" "false") + ("true" "[224]" "false") + ("true" "[225]" "false") + ("true" "[226]" "false") + ("true" "[227]" "false") + ("true" "[228]" "false") + ("true" "[229]" "false") + ("true" "[230]" "false") + ("true" "[231]" "false") + ("true" "[232]" "false") + ("true" "[233]" "false") + ("true" "[234]" "false") + ("true" "[235]" "false") + ("true" "[236]" "false") + ("true" "[237]" "false") + ("true" "[238]" "false") + ("true" "[239]" "false") + ("true" "[240]" "false") + ("true" "[241]" "false") + ("true" "[242]" "false") + ("true" "[243]" "false") + ("true" "[244]" "false") + ("true" "[245]" "false") + ("true" "[246]" "false") + ("true" "[247]" "false") + ("true" "[248]" "false") + ("true" "[249]" "false") + ("true" "[250]" "false") + ("true" "[251]" "false") + ("true" "[252]" "false") + ("true" "[253]" "false") + ("true" "[254]" "false") + ("true" "[255]" "false") + ("true" "[256]" "false") + ("true" "[257]" "false") + ("true" "[258]" "false") + ("true" "[259]" "false") + ("true" "[260]" "false") + ("true" "[261]" "false") + ("true" "[262]" "false") + ("true" "[263]" "false") + ("true" "[264]" "false") + ("true" "[265]" "false") + ("true" "[266]" "false") + ("true" "[267]" "false") + ("true" "[268]" "false") + ("true" "[269]" "false") + ("true" "[270]" "false") + ("true" "[271]" "false") + ("true" "[272]" "false") + ("true" "[273]" "false") + ("true" "[274]" "false") + ("true" "[275]" "false") + ("true" "[276]" "false") + ("true" "[277]" "false") + ("true" "[278]" "false") + ("true" "[279]" "false") + ("true" "[280]" "false") + ("true" "[281]" "false") + ("true" "[282]" "false") + ("true" "[283]" "false") + ("true" "[284]" "false") + ("true" "[285]" "false") + ("true" "[286]" "false") + ("true" "[287]" "false") + ("true" "[288]" "false") + ("true" "[289]" "false") + ("true" "[290]" "false") + ("true" "[291]" "false") + ("true" "[292]" "false") + ("true" "[293]" "true") + ("true" "[294]" "false") + ("true" "[295]" "false") + ("true" "[296]" "true") + ("true" "[297]" "true") + ("true" "[298]" "false") + ("true" "[299]" "false") + ("true" "[300]" "true") + ("true" "[301]" "true") + ("true" "[302]" "true") + ("true" "[303]" "true") + ("true" "[304]" "false") + ("true" "[305]" "true") + ("true" "[306]" "false") + ("true" "[307]" "false") + ("true" "[308]" "true") + ("true" "[309]" "false") + ("true" "[310]" "false") + ("true" "[311]" "false") + ("true" "[312]" "false") + ("true" "[313]" "false") + ("true" "[314]" "false") + ("true" "[315]" "false") + ("true" "[316]" "false") + ("true" "[317]" "false") + ("true" "[318]" "false") + ("true" "[319]" "false") + ("true" "[320]" "false") + ("true" "[321]" "false") + ("true" "[322]" "false") + ("true" "[323]" "false") + ("true" "[324]" "false") + ("true" "[325]" "false") + ("true" "[326]" "false") + ("true" "[327]" "false") + ("true" "[328]" "false") + ("true" "[329]" "false") + ("true" "[330]" "false") + ("true" "[331]" "false") + ("true" "[332]" "false") + ("true" "[333]" "false") + ("true" "[334]" "false") + ("true" "[335]" "false") + ("true" "[336]" "false") + ("true" "[337]" "false") + ("true" "[338]" "false") + ("true" "[339]" "false") + ("true" "[340]" "false") + ("true" "[341]" "false") + ("true" "[342]" "false") + ("true" "[343]" "false") + ("true" "[344]" "false") + ("true" "[345]" "false") + ("true" "[346]" "false") + ("true" "[347]" "false") + ("true" "[348]" "false") + ("true" "[349]" "false") + ("true" "[350]" "false") + ("true" "[351]" "false") + ("true" "[352]" "false") + ("true" "[353]" "false") + ("true" "[354]" "false") + ("true" "[355]" "false") + ("true" "[356]" "false") + ("true" "[357]" "false") + ("true" "[358]" "false") + ("true" "[359]" "false") + ("true" "[360]" "false") + ("true" "[361]" "false") + ("true" "[362]" "false") + ("true" "[363]" "false") + ("true" "[364]" "false") + ("true" "[365]" "false") + ("true" "[366]" "false") + ("true" "[367]" "false") + ("true" "[368]" "false") + ("true" "[369]" "false") + ("true" "[370]" "false") + ("true" "[371]" "false") + ("true" "[372]" "false") + ("true" "[373]" "false") + ("true" "[374]" "false") + ("true" "[375]" "false") + ("true" "[376]" "false") + ("true" "[377]" "false") + ("true" "[378]" "false") + ("true" "[379]" "false") + ("true" "[380]" "false") + ("true" "[381]" "false") + ("true" "[382]" "false") + ("true" "[383]" "false") + ("true" "[384]" "false") + ("true" "[385]" "false") + ("true" "[386]" "false") + ("true" "[387]" "false") + ("true" "[388]" "false") + ("true" "[389]" "false") + ("true" "[390]" "false") + ("true" "[391]" "false") + ("true" "[392]" "false") + ("true" "[393]" "false") + ("true" "[394]" "false") + ("true" "[395]" "false") + ("true" "[396]" "false") + ("true" "[397]" "false") + ("true" "[398]" "false") + ("true" "[399]" "false") + ("true" "[400]" "false") + ("true" "[401]" "false") + ("true" "[402]" "false") + ("true" "[403]" "false") + ("true" "[404]" "false") + ("true" "[405]" "true") + ("true" "[406]" "true") + ("true" "[407]" "false") + ("true" "[408]" "false") + ("true" "[409]" "true") + ("true" "[410]" "true") + ("true" "[411]" "true") + ("true" "[412]" "true") + ("true" "[413]" "false") + ("true" "[414]" "true") + ("true" "[415]" "false") + ("true" "[416]" "false") + ("true" "[417]" "false") + ("true" "[418]" "false") + ("true" "[419]" "false") + ("true" "[420]" "false") + ("true" "[421]" "false") + ("true" "[422]" "false") + ("true" "[423]" "false") + ("true" "[424]" "false") + ("true" "[425]" "false") + ("true" "[426]" "false") + ("true" "[427]" "false") + ("true" "[428]" "false") + ("true" "[429]" "false") + ("true" "[430]" "false") + ("true" "[431]" "false") + ("true" "[432]" "false") + ("true" "[433]" "false") + ("true" "[434]" "false") + ("true" "[435]" "false") + ("true" "[436]" "false") + ("true" "[437]" "false") + ("true" "[438]" "false") + ("true" "[439]" "false") + ("true" "[440]" "false") + ("true" "[441]" "false") + ("true" "[442]" "false") + ("true" "[443]" "true") + ("true" "[444]" "false") + ("true" "[445]" "false") + ("true" "[446]" "false") + ("true" "[447]" "false") + ("true" "[448]" "false") + ("true" "[449]" "false") + ("true" "[450]" "false") + ("true" "[451]" "false") + ("true" "[452]" "false") + ("true" "[453]" "false") + ("true" "[454]" "false") + ("true" "[455]" "false") + ("true" "[456]" "false") + ("true" "[457]" "false") + ("true" "[458]" "false") + ("true" "[459]" "false") + ("true" "[460]" "false") + ("true" "[461]" "false") + ("true" "[462]" "false") + ("true" "[463]" "false") + ("true" "[464]" "false") + ("true" "[465]" "true") + ("true" "[466]" "false") + ("true" "[467]" "false") + ("true" "[468]" "false") + ("true" "[469]" "false") + ("true" "[470]" "false") + ("true" "[471]" "false") + ("true" "[472]" "false") + ("true" "[473]" "false") + ("true" "[474]" "false") + ("true" "[475]" "false") + ("true" "[476]" "false") + ("true" "[477]" "false") + ("true" "[478]" "false") + ("true" "[479]" "false") + ("true" "[480]" "false") + ("true" "[481]" "false") + ("true" "[482]" "false") + ("true" "[483]" "false") + ("true" "[484]" "false") + ("true" "[485]" "false") + ("true" "[486]" "false") + ("true" "[487]" "true") + ("true" "[488]" "false") + ("true" "[489]" "false") + ("true" "[490]" "true") + ("true" "[491]" "true") + ("true" "[492]" "true") + ("true" "[493]" "true") + ("true" "[494]" "true") + ("true" "[495]" "true") + ("true" "[496]" "true") + ("true" "[497]" "true") + ("true" "[498]" "true") + ("false" "[143]" "false") + ("false" "[144]" "false") + ("false" "[297]" "false") + ("false" "[301]" "false") + ("false" "[302]" "false") + ("false" "[303]" "false") + ("false" "[8]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + ("false" "[11]" "false") + ("false" "[12]" "false") + ("false" "[14]" "false") + ("false" "[15]" "false") + ("false" "[16]" "false") + ("false" "[17]" "false") + ("false" "[18]" "false") + ("false" "[20]" "false") + ("false" "[21]" "false") + ("false" "[22]" "false") + ("false" "[23]" "false") + ("false" "[159]" "false") + ("false" "[160]" "false") + ("false" "[406]" "false") + ("false" "[161]" "false") + ("false" "[162]" "false") + ("false" "[163]" "false") + ("false" "[164]" "false") + ("false" "[410]" "false") + ("false" "[165]" "false") + ("false" "[411]" "false") + ("false" "[166]" "false") + ("false" "[412]" "false") + ("false" "[98]" "false") + ("false" "[167]" "false") + ("false" "[99]" "false") + ("false" "[100]" "false") + ("false" "[168]" "false") + ("false" "[101]" "false") + ("false" "[169]" "false") + ("false" "[170]" "false") + ("false" "[171]" "false") + ("false" "[102]" "false") + ("false" "[172]" "false") + ("false" "[103]" "false") + ("false" "[173]" "false") + ("false" "[104]" "false") + ("false" "[174]" "false") + ("false" "[105]" "false") + ("false" "[175]" "false") + ("false" "[106]" "false") + ("false" "[176]" "false") + ("false" "[107]" "false") + ("false" "[177]" "false") + ("false" "[108]" "false") + ("false" "[178]" "false") + ("false" "[109]" "false") + ("false" "[179]" "false") + ("false" "[110]" "false") + ("false" "[180]" "false") + ("false" "[111]" "false") + ("false" "[181]" "false") + ("false" "[112]" "false") + ("false" "[182]" "false") + ("false" "[113]" "false") + ("false" "[183]" "false") + ("false" "[114]" "false") + ("false" "[184]" "false") + ("false" "[115]" "false") + ("false" "[185]" "false") + ("false" "[116]" "false") + ("false" "[186]" "false") + ("false" "[117]" "false") + ("false" "[187]" "false") + ("false" "[118]" "false") + ("false" "[119]" "false") + ("false" "[188]" "false") + ("false" "[189]" "false") + ("false" "[121]" "false") + ("false" "[190]" "false") + ("false" "[122]" "false") + ("false" "[191]" "false") + ("false" "[123]" "false") + ("false" "[192]" "false") + ("false" "[124]" "false") + ("false" "[193]" "false") + ("false" "[194]" "false") + ("false" "[125]" "false") + ("false" "[129]" "false") + ("false" "[130]" "false") + ("false" "[131]" "false") + ("false" "[132]" "false") + ("false" "[133]" "false") + ("false" "[134]" "false") + ("false" "[135]" "false") + ("false" "[136]" "false") + ("false" "[137]" "false") + ("false" "[138]" "false") + ("false" "[139]" "false") + ("false" "[140]" "false") + ("false" "[1]" "false") + ("false" "[141]" "false") + ("false" "[142]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[491]" "false") + ("false" "[492]" "false") + ("false" "[493]" "false") + ("false" "[495]" "false") + ("false" "[497]" "false") + } +); +FiniteAutomaton proof2 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" "[63]" "[64]" "[65]" "[66]" "[67]" "[68]" "[69]" "[70]" "[71]" "[72]" "[73]" "[74]" "[75]" "[76]" "[77]" "[78]" "[79]" "[80]" "[81]" "[82]" "[83]" "[84]" "[85]" "[86]" "[87]" "[88]" "[89]" "[90]" "[91]" "[92]" "[93]" "[94]" "[95]" "[96]" "[97]" "[98]" "[99]" "[100]" "[101]" "[102]" "[103]" "[104]" "[105]" "[106]" "[107]" "[108]" "[109]" "[110]" "[111]" "[112]" "[113]" "[114]" "[115]" "[116]" "[117]" "[118]" "[119]" "[120]" "[121]" "[122]" "[123]" "[124]" "[125]" "[126]" "[127]" "[128]" "[129]" "[130]" "[131]" "[132]" "[133]" "[134]" "[135]" "[136]" "[137]" "[138]" "[139]" "[140]" "[141]" "[142]" "[143]" "[144]" "[145]" "[146]" "[147]" "[148]" "[149]" "[150]" "[151]" "[152]" "[153]" "[154]" "[155]" "[156]" "[157]" "[158]" "[159]" "[160]" "[161]" "[162]" "[163]" "[164]" "[165]" "[166]" "[167]" "[168]" "[169]" "[170]" "[171]" "[172]" "[173]" "[174]" "[175]" "[176]" "[177]" "[178]" "[179]" "[180]" "[181]" "[182]" "[183]" "[184]" "[185]" "[186]" "[187]" "[188]" "[189]" "[190]" "[191]" "[192]" "[193]" "[194]" "[195]" "[196]" "[197]" "[198]" "[199]" "[200]" "[201]" "[202]" "[203]" "[204]" "[205]" "[206]" "[207]" "[208]" "[209]" "[210]" "[211]" "[212]" "[213]" "[214]" "[215]" "[216]" "[217]" "[218]" "[219]" "[220]" "[221]" "[222]" "[223]" "[224]" "[225]" "[226]" "[227]" "[228]" "[229]" "[230]" "[231]" "[232]" "[233]" "[234]" "[235]" "[236]" "[237]" "[238]" "[239]" "[240]" "[241]" "[242]" "[243]" "[244]" "[245]" "[246]" "[247]" "[248]" "[249]" "[250]" "[251]" "[252]" "[253]" "[254]" "[255]" "[256]" "[257]" "[258]" "[259]" "[260]" "[261]" "[262]" "[263]" "[264]" "[265]" "[266]" "[267]" "[268]" "[269]" "[270]" "[271]" "[272]" "[273]" "[274]" "[275]" "[276]" "[277]" "[278]" "[279]" "[280]" "[281]" "[282]" "[283]" "[284]" "[285]" "[286]" "[287]" "[288]" "[289]" "[290]" "[291]" "[292]" "[293]" "[294]" "[295]" "[296]" "[297]" "[298]" "[299]" "[300]" "[301]" "[302]" "[303]" "[304]" "[305]" "[306]" "[307]" "[308]" "[309]" "[310]" "[311]" "[312]" "[313]" "[314]" "[315]" "[316]" "[317]" "[318]" "[319]" "[320]" "[321]" "[322]" "[323]" "[324]" "[325]" "[326]" "[327]" "[328]" "[329]" "[330]" "[331]" "[332]" "[333]" "[334]" "[335]" "[336]" "[337]" "[338]" "[339]" "[340]" "[341]" "[342]" "[343]" "[344]" "[345]" "[346]" "[347]" "[348]" "[349]" "[350]" "[351]" "[352]" "[353]" "[354]" "[355]" "[356]" "[357]" "[358]" "[359]" "[360]" "[361]" "[362]" "[363]" "[364]" "[365]" "[366]" "[367]" "[368]" "[369]" "[370]" "[371]" "[372]" "[373]" "[374]" "[375]" "[376]" "[377]" "[378]" "[379]" "[380]" "[381]" "[382]" "[383]" "[384]" "[385]" "[386]" "[387]" "[388]" "[389]" "[390]" "[391]" "[392]" "[393]" "[394]" "[395]" "[396]" "[397]" "[398]" "[399]" "[400]" "[401]" "[402]" "[403]" "[404]" "[405]" "[406]" "[407]" "[408]" "[409]" "[410]" "[411]" "[412]" "[413]" "[414]" "[415]" "[416]" "[417]" "[418]" "[419]" "[420]" "[421]" "[422]" "[423]" "[424]" "[425]" "[426]" "[427]" "[428]" "[429]" "[430]" "[431]" "[432]" "[433]" "[434]" "[435]" "[436]" "[437]" "[438]" "[439]" "[440]" "[441]" "[442]" "[443]" "[444]" "[445]" "[446]" "[447]" "[448]" "[449]" "[450]" "[451]" "[452]" "[453]" "[454]" "[455]" "[456]" "[457]" "[458]" "[459]" "[460]" "[461]" "[462]" "[463]" "[464]" "[465]" "[466]" "[467]" "[468]" "[469]" "[470]" "[471]" "[472]" "[473]" "[474]" "[475]" "[476]" "[477]" "[478]" "[479]" "[480]" "[481]" "[482]" "[483]" "[484]" "[485]" "[486]" "[487]" "[488]" "[489]" "[490]" "[491]" "[492]" "[493]" "[494]" "[495]" "[496]" "[497]" "[498]" }, + states = {"(= |#race~main$tmp_guard0~0| 0)" "false" "true" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(= |#race~main$tmp_guard0~0| 0)" "[143]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[144]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[293]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[296]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[297]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[300]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[301]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[302]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[303]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[158]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[305]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[308]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[8]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[9]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[10]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[11]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[12]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[14]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[15]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[16]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[17]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[18]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[20]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[21]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[22]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[23]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[53]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[75]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[159]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[405]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[160]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[406]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[161]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[162]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[163]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[409]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[164]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[410]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[165]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[411]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[166]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[412]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[414]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[97]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[98]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[167]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[99]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[100]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[168]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[101]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[169]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[170]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[171]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[102]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[172]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[103]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[173]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[104]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[174]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[105]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[175]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[106]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[176]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[107]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[177]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[108]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[178]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[109]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[179]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[110]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[180]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[111]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[181]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[112]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[182]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[113]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[183]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[114]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[184]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[115]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[185]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[116]" "false") + ("(= |#race~main$tmp_guard0~0| 0)" "[186]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[117]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[187]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[118]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[443]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[188]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[189]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[121]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[190]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[122]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[191]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[123]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[192]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[124]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[193]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[194]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[125]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[129]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[130]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[131]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[132]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[133]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[134]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[135]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[136]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[465]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[137]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[138]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[139]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[140]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[1]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[141]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[142]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[2]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[3]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[4]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[5]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[6]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[7]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[487]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[490]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[491]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[492]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[493]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[495]" "(= |#race~main$tmp_guard0~0| 0)") + ("(= |#race~main$tmp_guard0~0| 0)" "[497]" "(= |#race~main$tmp_guard0~0| 0)") + ("false" "[143]" "false") + ("false" "[144]" "false") + ("false" "[297]" "false") + ("false" "[301]" "false") + ("false" "[302]" "false") + ("false" "[303]" "false") + ("false" "[8]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + ("false" "[11]" "false") + ("false" "[12]" "false") + ("false" "[14]" "false") + ("false" "[15]" "false") + ("false" "[16]" "false") + ("false" "[17]" "false") + ("false" "[18]" "false") + ("false" "[20]" "false") + ("false" "[21]" "false") + ("false" "[22]" "false") + ("false" "[23]" "false") + ("false" "[159]" "false") + ("false" "[160]" "false") + ("false" "[406]" "false") + ("false" "[161]" "false") + ("false" "[162]" "false") + ("false" "[163]" "false") + ("false" "[164]" "false") + ("false" "[410]" "false") + ("false" "[165]" "false") + ("false" "[411]" "false") + ("false" "[166]" "false") + ("false" "[412]" "false") + ("false" "[98]" "false") + ("false" "[167]" "false") + ("false" "[99]" "false") + ("false" "[100]" "false") + ("false" "[168]" "false") + ("false" "[101]" "false") + ("false" "[169]" "false") + ("false" "[170]" "false") + ("false" "[171]" "false") + ("false" "[102]" "false") + ("false" "[172]" "false") + ("false" "[103]" "false") + ("false" "[173]" "false") + ("false" "[104]" "false") + ("false" "[174]" "false") + ("false" "[105]" "false") + ("false" "[175]" "false") + ("false" "[106]" "false") + ("false" "[176]" "false") + ("false" "[107]" "false") + ("false" "[177]" "false") + ("false" "[108]" "false") + ("false" "[178]" "false") + ("false" "[109]" "false") + ("false" "[179]" "false") + ("false" "[110]" "false") + ("false" "[180]" "false") + ("false" "[111]" "false") + ("false" "[181]" "false") + ("false" "[112]" "false") + ("false" "[182]" "false") + ("false" "[113]" "false") + ("false" "[183]" "false") + ("false" "[114]" "false") + ("false" "[184]" "false") + ("false" "[115]" "false") + ("false" "[185]" "false") + ("false" "[186]" "false") + ("false" "[187]" "false") + ("false" "[118]" "false") + ("false" "[188]" "false") + ("false" "[189]" "false") + ("false" "[121]" "false") + ("false" "[190]" "false") + ("false" "[122]" "false") + ("false" "[191]" "false") + ("false" "[123]" "false") + ("false" "[192]" "false") + ("false" "[124]" "false") + ("false" "[193]" "false") + ("false" "[194]" "false") + ("false" "[125]" "false") + ("false" "[129]" "false") + ("false" "[130]" "false") + ("false" "[131]" "false") + ("false" "[132]" "false") + ("false" "[133]" "false") + ("false" "[134]" "false") + ("false" "[135]" "false") + ("false" "[136]" "false") + ("false" "[137]" "false") + ("false" "[138]" "false") + ("false" "[139]" "false") + ("false" "[140]" "false") + ("false" "[1]" "false") + ("false" "[141]" "false") + ("false" "[142]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[491]" "false") + ("false" "[492]" "false") + ("false" "[493]" "false") + ("false" "[495]" "false") + ("false" "[497]" "false") + ("true" "[143]" "true") + ("true" "[144]" "true") + ("true" "[293]" "true") + ("true" "[296]" "true") + ("true" "[297]" "true") + ("true" "[300]" "true") + ("true" "[301]" "true") + ("true" "[302]" "true") + ("true" "[303]" "true") + ("true" "[305]" "true") + ("true" "[308]" "true") + ("true" "[8]" "true") + ("true" "[9]" "true") + ("true" "[10]" "true") + ("true" "[11]" "true") + ("true" "[12]" "true") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "true") + ("true" "[17]" "true") + ("true" "[18]" "true") + ("true" "[20]" "true") + ("true" "[21]" "true") + ("true" "[22]" "true") + ("true" "[23]" "true") + ("true" "[159]" "true") + ("true" "[405]" "true") + ("true" "[160]" "true") + ("true" "[406]" "true") + ("true" "[161]" "true") + ("true" "[162]" "true") + ("true" "[163]" "true") + ("true" "[409]" "true") + ("true" "[164]" "true") + ("true" "[410]" "true") + ("true" "[165]" "true") + ("true" "[411]" "true") + ("true" "[166]" "true") + ("true" "[412]" "true") + ("true" "[414]" "true") + ("true" "[98]" "true") + ("true" "[167]" "true") + ("true" "[99]" "true") + ("true" "[100]" "true") + ("true" "[168]" "true") + ("true" "[101]" "true") + ("true" "[169]" "true") + ("true" "[170]" "true") + ("true" "[171]" "true") + ("true" "[102]" "true") + ("true" "[172]" "true") + ("true" "[103]" "true") + ("true" "[173]" "true") + ("true" "[104]" "true") + ("true" "[174]" "true") + ("true" "[105]" "true") + ("true" "[175]" "true") + ("true" "[106]" "true") + ("true" "[176]" "true") + ("true" "[107]" "true") + ("true" "[177]" "true") + ("true" "[108]" "true") + ("true" "[178]" "true") + ("true" "[109]" "true") + ("true" "[179]" "true") + ("true" "[110]" "true") + ("true" "[180]" "true") + ("true" "[111]" "true") + ("true" "[181]" "true") + ("true" "[112]" "true") + ("true" "[182]" "true") + ("true" "[113]" "true") + ("true" "[183]" "true") + ("true" "[114]" "true") + ("true" "[184]" "true") + ("true" "[115]" "true") + ("true" "[185]" "true") + ("true" "[186]" "true") + ("true" "[187]" "true") + ("true" "[118]" "true") + ("true" "[119]" "(= |#race~main$tmp_guard0~0| 0)") + ("true" "[443]" "true") + ("true" "[188]" "true") + ("true" "[189]" "true") + ("true" "[121]" "true") + ("true" "[190]" "true") + ("true" "[122]" "true") + ("true" "[191]" "true") + ("true" "[123]" "true") + ("true" "[192]" "true") + ("true" "[124]" "true") + ("true" "[193]" "true") + ("true" "[194]" "true") + ("true" "[125]" "true") + ("true" "[128]" "true") + ("true" "[129]" "true") + ("true" "[130]" "true") + ("true" "[131]" "true") + ("true" "[132]" "true") + ("true" "[133]" "true") + ("true" "[134]" "true") + ("true" "[135]" "true") + ("true" "[136]" "true") + ("true" "[465]" "true") + ("true" "[137]" "true") + ("true" "[138]" "true") + ("true" "[139]" "true") + ("true" "[140]" "true") + ("true" "[1]" "true") + ("true" "[141]" "true") + ("true" "[142]" "true") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[5]" "true") + ("true" "[6]" "true") + ("true" "[7]" "true") + ("true" "[487]" "true") + ("true" "[490]" "true") + ("true" "[491]" "true") + ("true" "[492]" "true") + ("true" "[493]" "true") + ("true" "[494]" "true") + ("true" "[495]" "true") + ("true" "[496]" "true") + ("true" "[497]" "true") + ("true" "[498]" "true") + } +); +FiniteAutomaton proof3 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" "[63]" "[64]" "[65]" "[66]" "[67]" "[68]" "[69]" "[70]" "[71]" "[72]" "[73]" "[74]" "[75]" "[76]" "[77]" "[78]" "[79]" "[80]" "[81]" "[82]" "[83]" "[84]" "[85]" "[86]" "[87]" "[88]" "[89]" "[90]" "[91]" "[92]" "[93]" "[94]" "[95]" "[96]" "[97]" "[98]" "[99]" "[100]" "[101]" "[102]" "[103]" "[104]" "[105]" "[106]" "[107]" "[108]" "[109]" "[110]" "[111]" "[112]" "[113]" "[114]" "[115]" "[116]" "[117]" "[118]" "[119]" "[120]" "[121]" "[122]" "[123]" "[124]" "[125]" "[126]" "[127]" "[128]" "[129]" "[130]" "[131]" "[132]" "[133]" "[134]" "[135]" "[136]" "[137]" "[138]" "[139]" "[140]" "[141]" "[142]" "[143]" "[144]" "[145]" "[146]" "[147]" "[148]" "[149]" "[150]" "[151]" "[152]" "[153]" "[154]" "[155]" "[156]" "[157]" "[158]" "[159]" "[160]" "[161]" "[162]" "[163]" "[164]" "[165]" "[166]" "[167]" "[168]" "[169]" "[170]" "[171]" "[172]" "[173]" "[174]" "[175]" "[176]" "[177]" "[178]" "[179]" "[180]" "[181]" "[182]" "[183]" "[184]" "[185]" "[186]" "[187]" "[188]" "[189]" "[190]" "[191]" "[192]" "[193]" "[194]" "[195]" "[196]" "[197]" "[198]" "[199]" "[200]" "[201]" "[202]" "[203]" "[204]" "[205]" "[206]" "[207]" "[208]" "[209]" "[210]" "[211]" "[212]" "[213]" "[214]" "[215]" "[216]" "[217]" "[218]" "[219]" "[220]" "[221]" "[222]" "[223]" "[224]" "[225]" "[226]" "[227]" "[228]" "[229]" "[230]" "[231]" "[232]" "[233]" "[234]" "[235]" "[236]" "[237]" "[238]" "[239]" "[240]" "[241]" "[242]" "[243]" "[244]" "[245]" "[246]" "[247]" "[248]" "[249]" "[250]" "[251]" "[252]" "[253]" "[254]" "[255]" "[256]" "[257]" "[258]" "[259]" "[260]" "[261]" "[262]" "[263]" "[264]" "[265]" "[266]" "[267]" "[268]" "[269]" "[270]" "[271]" "[272]" "[273]" "[274]" "[275]" "[276]" "[277]" "[278]" "[279]" "[280]" "[281]" "[282]" "[283]" "[284]" "[285]" "[286]" "[287]" "[288]" "[289]" "[290]" "[291]" "[292]" "[293]" "[294]" "[295]" "[296]" "[297]" "[298]" "[299]" "[300]" "[301]" "[302]" "[303]" "[304]" "[305]" "[306]" "[307]" "[308]" "[309]" "[310]" "[311]" "[312]" "[313]" "[314]" "[315]" "[316]" "[317]" "[318]" "[319]" "[320]" "[321]" "[322]" "[323]" "[324]" "[325]" "[326]" "[327]" "[328]" "[329]" "[330]" "[331]" "[332]" "[333]" "[334]" "[335]" "[336]" "[337]" "[338]" "[339]" "[340]" "[341]" "[342]" "[343]" "[344]" "[345]" "[346]" "[347]" "[348]" "[349]" "[350]" "[351]" "[352]" "[353]" "[354]" "[355]" "[356]" "[357]" "[358]" "[359]" "[360]" "[361]" "[362]" "[363]" "[364]" "[365]" "[366]" "[367]" "[368]" "[369]" "[370]" "[371]" "[372]" "[373]" "[374]" "[375]" "[376]" "[377]" "[378]" "[379]" "[380]" "[381]" "[382]" "[383]" "[384]" "[385]" "[386]" "[387]" "[388]" "[389]" "[390]" "[391]" "[392]" "[393]" "[394]" "[395]" "[396]" "[397]" "[398]" "[399]" "[400]" "[401]" "[402]" "[403]" "[404]" "[405]" "[406]" "[407]" "[408]" "[409]" "[410]" "[411]" "[412]" "[413]" "[414]" "[415]" "[416]" "[417]" "[418]" "[419]" "[420]" "[421]" "[422]" "[423]" "[424]" "[425]" "[426]" "[427]" "[428]" "[429]" "[430]" "[431]" "[432]" "[433]" "[434]" "[435]" "[436]" "[437]" "[438]" "[439]" "[440]" "[441]" "[442]" "[443]" "[444]" "[445]" "[446]" "[447]" "[448]" "[449]" "[450]" "[451]" "[452]" "[453]" "[454]" "[455]" "[456]" "[457]" "[458]" "[459]" "[460]" "[461]" "[462]" "[463]" "[464]" "[465]" "[466]" "[467]" "[468]" "[469]" "[470]" "[471]" "[472]" "[473]" "[474]" "[475]" "[476]" "[477]" "[478]" "[479]" "[480]" "[481]" "[482]" "[483]" "[484]" "[485]" "[486]" "[487]" "[488]" "[489]" "[490]" "[491]" "[492]" "[493]" "[494]" "[495]" "[496]" "[497]" "[498]" }, + states = {"(= |#race~main$tmp_guard1~0| 0)" "true" "false" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(= |#race~main$tmp_guard1~0| 0)" "[143]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[144]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[293]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[296]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[297]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[300]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[301]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[302]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[303]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[305]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[308]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[8]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[9]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[10]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[11]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[12]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[14]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[15]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[16]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[17]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[18]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[20]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[21]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[22]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[23]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[159]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[405]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[160]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[406]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[161]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[162]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[163]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[409]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[164]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[410]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[165]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[411]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[166]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[412]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[414]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[98]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[167]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[99]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[100]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[168]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[101]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[169]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[170]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[171]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[102]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[172]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[103]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[173]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[104]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[174]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[105]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[175]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[106]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[176]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[107]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[177]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[108]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[178]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[109]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[179]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[110]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[180]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[111]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[181]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[112]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[182]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[113]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[183]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[114]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[184]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[115]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[185]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[116]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[186]" "false") + ("(= |#race~main$tmp_guard1~0| 0)" "[117]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[187]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[118]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[119]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[443]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[188]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[189]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[121]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[190]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[122]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[191]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[123]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[192]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[124]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[193]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[194]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[125]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[129]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[130]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[131]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[132]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[133]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[134]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[135]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[136]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[465]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[137]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[138]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[139]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[140]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[1]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[142]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[2]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[3]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[4]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[5]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[6]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[7]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[487]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[490]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[491]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[492]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[493]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[495]" "(= |#race~main$tmp_guard1~0| 0)") + ("(= |#race~main$tmp_guard1~0| 0)" "[497]" "(= |#race~main$tmp_guard1~0| 0)") + ("true" "[143]" "true") + ("true" "[144]" "true") + ("true" "[293]" "true") + ("true" "[296]" "true") + ("true" "[297]" "true") + ("true" "[300]" "true") + ("true" "[301]" "true") + ("true" "[302]" "true") + ("true" "[303]" "true") + ("true" "[158]" "true") + ("true" "[305]" "true") + ("true" "[308]" "true") + ("true" "[8]" "true") + ("true" "[9]" "true") + ("true" "[10]" "true") + ("true" "[11]" "true") + ("true" "[12]" "true") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "true") + ("true" "[17]" "true") + ("true" "[18]" "true") + ("true" "[20]" "true") + ("true" "[21]" "true") + ("true" "[22]" "true") + ("true" "[23]" "true") + ("true" "[53]" "true") + ("true" "[75]" "true") + ("true" "[159]" "true") + ("true" "[405]" "true") + ("true" "[160]" "true") + ("true" "[406]" "true") + ("true" "[161]" "true") + ("true" "[162]" "true") + ("true" "[163]" "true") + ("true" "[409]" "true") + ("true" "[164]" "true") + ("true" "[410]" "true") + ("true" "[165]" "true") + ("true" "[411]" "true") + ("true" "[166]" "true") + ("true" "[412]" "true") + ("true" "[414]" "true") + ("true" "[97]" "true") + ("true" "[98]" "true") + ("true" "[167]" "true") + ("true" "[99]" "true") + ("true" "[100]" "true") + ("true" "[168]" "true") + ("true" "[101]" "true") + ("true" "[169]" "true") + ("true" "[170]" "true") + ("true" "[171]" "true") + ("true" "[102]" "true") + ("true" "[172]" "true") + ("true" "[103]" "true") + ("true" "[173]" "true") + ("true" "[104]" "true") + ("true" "[174]" "true") + ("true" "[105]" "true") + ("true" "[175]" "true") + ("true" "[106]" "true") + ("true" "[176]" "true") + ("true" "[107]" "true") + ("true" "[177]" "true") + ("true" "[108]" "true") + ("true" "[178]" "true") + ("true" "[109]" "true") + ("true" "[179]" "true") + ("true" "[110]" "true") + ("true" "[180]" "true") + ("true" "[111]" "true") + ("true" "[181]" "true") + ("true" "[112]" "true") + ("true" "[182]" "true") + ("true" "[113]" "true") + ("true" "[183]" "true") + ("true" "[114]" "true") + ("true" "[184]" "true") + ("true" "[115]" "true") + ("true" "[185]" "true") + ("true" "[116]" "true") + ("true" "[117]" "true") + ("true" "[118]" "true") + ("true" "[119]" "true") + ("true" "[443]" "true") + ("true" "[188]" "true") + ("true" "[189]" "true") + ("true" "[121]" "true") + ("true" "[190]" "true") + ("true" "[122]" "true") + ("true" "[191]" "true") + ("true" "[123]" "true") + ("true" "[192]" "true") + ("true" "[124]" "true") + ("true" "[193]" "true") + ("true" "[194]" "true") + ("true" "[125]" "true") + ("true" "[128]" "true") + ("true" "[129]" "true") + ("true" "[130]" "true") + ("true" "[131]" "true") + ("true" "[132]" "true") + ("true" "[133]" "true") + ("true" "[134]" "true") + ("true" "[135]" "true") + ("true" "[136]" "true") + ("true" "[465]" "true") + ("true" "[137]" "true") + ("true" "[138]" "true") + ("true" "[139]" "true") + ("true" "[140]" "true") + ("true" "[1]" "true") + ("true" "[141]" "(= |#race~main$tmp_guard1~0| 0)") + ("true" "[142]" "true") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[5]" "true") + ("true" "[6]" "true") + ("true" "[7]" "true") + ("true" "[487]" "true") + ("true" "[490]" "true") + ("true" "[491]" "true") + ("true" "[492]" "true") + ("true" "[493]" "true") + ("true" "[494]" "true") + ("true" "[495]" "true") + ("true" "[496]" "true") + ("true" "[497]" "true") + ("true" "[498]" "true") + ("false" "[143]" "false") + ("false" "[144]" "false") + ("false" "[297]" "false") + ("false" "[301]" "false") + ("false" "[302]" "false") + ("false" "[303]" "false") + ("false" "[8]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + ("false" "[11]" "false") + ("false" "[12]" "false") + ("false" "[14]" "false") + ("false" "[15]" "false") + ("false" "[16]" "false") + ("false" "[17]" "false") + ("false" "[18]" "false") + ("false" "[20]" "false") + ("false" "[21]" "false") + ("false" "[22]" "false") + ("false" "[23]" "false") + ("false" "[159]" "false") + ("false" "[160]" "false") + ("false" "[406]" "false") + ("false" "[161]" "false") + ("false" "[162]" "false") + ("false" "[163]" "false") + ("false" "[164]" "false") + ("false" "[410]" "false") + ("false" "[165]" "false") + ("false" "[411]" "false") + ("false" "[166]" "false") + ("false" "[412]" "false") + ("false" "[98]" "false") + ("false" "[167]" "false") + ("false" "[99]" "false") + ("false" "[100]" "false") + ("false" "[168]" "false") + ("false" "[101]" "false") + ("false" "[169]" "false") + ("false" "[170]" "false") + ("false" "[171]" "false") + ("false" "[102]" "false") + ("false" "[172]" "false") + ("false" "[103]" "false") + ("false" "[173]" "false") + ("false" "[104]" "false") + ("false" "[174]" "false") + ("false" "[105]" "false") + ("false" "[175]" "false") + ("false" "[106]" "false") + ("false" "[176]" "false") + ("false" "[107]" "false") + ("false" "[177]" "false") + ("false" "[108]" "false") + ("false" "[178]" "false") + ("false" "[109]" "false") + ("false" "[179]" "false") + ("false" "[110]" "false") + ("false" "[180]" "false") + ("false" "[111]" "false") + ("false" "[181]" "false") + ("false" "[112]" "false") + ("false" "[182]" "false") + ("false" "[113]" "false") + ("false" "[183]" "false") + ("false" "[114]" "false") + ("false" "[184]" "false") + ("false" "[115]" "false") + ("false" "[185]" "false") + ("false" "[116]" "false") + ("false" "[117]" "false") + ("false" "[118]" "false") + ("false" "[119]" "false") + ("false" "[188]" "false") + ("false" "[189]" "false") + ("false" "[121]" "false") + ("false" "[190]" "false") + ("false" "[122]" "false") + ("false" "[191]" "false") + ("false" "[123]" "false") + ("false" "[192]" "false") + ("false" "[124]" "false") + ("false" "[193]" "false") + ("false" "[194]" "false") + ("false" "[125]" "false") + ("false" "[129]" "false") + ("false" "[130]" "false") + ("false" "[131]" "false") + ("false" "[132]" "false") + ("false" "[133]" "false") + ("false" "[134]" "false") + ("false" "[135]" "false") + ("false" "[136]" "false") + ("false" "[137]" "false") + ("false" "[138]" "false") + ("false" "[139]" "false") + ("false" "[140]" "false") + ("false" "[1]" "false") + ("false" "[142]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[491]" "false") + ("false" "[492]" "false") + ("false" "[493]" "false") + ("false" "[495]" "false") + ("false" "[497]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/ReachSafety.13-privatized_47-refine-protected2_true.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/ReachSafety.13-privatized_47-refine-protected2_true.ats new file mode 100644 index 00000000000..8cbb29226c1 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/ReachSafety.13-privatized_47-refine-protected2_true.ats @@ -0,0 +1,884 @@ +// Testfile dumped by Ultimate at 2025/03/14 21:50:56 +// +// + +//@ variables (~__daylight~0 Int) (|#pthreadsMutex| (Array Int (Array Int Int))) (~tzname~0.base (Array Int Int)) (~daylight~0 Int) (~__tzname~0.offset (Array Int Int)) (~g~0 Int) (t_funThread1of1ForFork0_thidvar1 Int) (t_funThread1of1ForFork0_thidvar0 Int) (~__tzname~0.base (Array Int Int)) (~timezone~0 Int) (|#StackHeapBarrier| Int) (|~#A~0.offset| Int) (|#pthreadsForks| Int) (~__timezone~0 Int) (|#valid| (Array Int Int)) (|#memory_int| (Array Int (Array Int Int))) (|#length| (Array Int Int)) (~tzname~0.offset (Array Int Int)) (|~#A~0.base| Int) (|#Ultimate.allocInit_ptrBase| Int) (|#Ultimate.allocInit_~size| Int) (|#PthreadsMutexUnlock_#inputPtr.offset| Int) (|#PthreadsMutexUnlock_#res| Int) (|#PthreadsMutexUnlock_#inputPtr.base| Int) (|t_funThread1of1ForFork0_#in~arg.offset| Int) (t_funThread1of1ForFork0_~arg.offset Int) (|t_funThread1of1ForFork0_#t~ret2| Int) (|t_funThread1of1ForFork0_#in~arg.base| Int) (|t_funThread1of1ForFork0_#res.base| Int) (t_funThread1of1ForFork0_~arg.base Int) (|t_funThread1of1ForFork0_#res.offset| Int) (|t_funThread1of1ForFork0_#t~ret1| Int) (|#PthreadsMutexLock_#inputPtr.offset| Int) (|#PthreadsMutexLock_#res| Int) (|#PthreadsMutexLock_#inputPtr.base| Int) (|ULTIMATE.start_main_#t~nondet4#1| Int) (|ULTIMATE.start___VERIFIER_assert_#in~cond#1| Int) (|ULTIMATE.start_main_#res#1| Int) (|ULTIMATE.start_main_#t~ret6#1| Int) (|ULTIMATE.start_main_~id~0#1| Int) (|ULTIMATE.start_main_#t~ret5#1| Int) (|ULTIMATE.start___VERIFIER_assert_~cond#1| Int) (|ULTIMATE.start_#t~ret7#1| Int) (|ULTIMATE.start_main_#t~pre3#1| Int) (|write~init~int_#ptr.offset| Int) (|write~init~int_#sizeOfWrittenType| Int) (|write~init~int_#value| Int) (|write~init~int_#ptr.base| Int) (|t_fun_#in~arg.offset| Int) (|t_fun_#res.base| Int) (|t_fun_#res.offset| Int) (|t_fun_#t~ret1| Int) (t_fun_~arg.base Int) (t_fun_~arg.offset Int) (|t_fun_#t~ret2| Int) (|t_fun_#in~arg.base| Int) (~unnamed7~0~PTHREAD_PROCESS_PRIVATE Int) (~unnamed3~0~PTHREAD_PRIO_NONE Int) (~unnamed9~0~PTHREAD_CANCEL_ASYNCHRONOUS Int) (~unnamed2~0~PTHREAD_MUTEX_ROBUST Int) (~unnamed3~0~PTHREAD_PRIO_PROTECT Int) (~unnamed1~0~PTHREAD_MUTEX_RECURSIVE Int) (~unnamed3~0~PTHREAD_PRIO_INHERIT Int) (~unnamed4~0~PTHREAD_RWLOCK_DEFAULT_NP Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_READER_NP Int) (~unnamed0~0~PTHREAD_CREATE_JOINABLE Int) (~unnamed1~0~PTHREAD_MUTEX_ADAPTIVE_NP Int) (~unnamed2~0~PTHREAD_MUTEX_STALLED_NP Int) (~unnamed7~0~PTHREAD_PROCESS_SHARED Int) (~unnamed6~0~PTHREAD_SCOPE_SYSTEM Int) (~unnamed5~0~PTHREAD_EXPLICIT_SCHED Int) (~unnamed9~0~PTHREAD_CANCEL_DEFERRED Int) (~unnamed2~0~PTHREAD_MUTEX_STALLED Int) (|#funAddr~t_fun.offset| Int) (~unnamed1~0~PTHREAD_MUTEX_DEFAULT Int) (~unnamed8~0~PTHREAD_CANCEL_ENABLE Int) (|#funAddr~t_fun.base| Int) (~unnamed1~0~PTHREAD_MUTEX_NORMAL Int) (~unnamed2~0~PTHREAD_MUTEX_ROBUST_NP Int) (~unnamed0~0~PTHREAD_CREATE_DETACHED Int) (~unnamed1~0~PTHREAD_MUTEX_RECURSIVE_NP Int) (~unnamed5~0~PTHREAD_INHERIT_SCHED Int) (~unnamed1~0~PTHREAD_MUTEX_TIMED_NP Int) (~unnamed1~0~PTHREAD_MUTEX_ERRORCHECK_NP Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP Int) (~unnamed1~0~PTHREAD_MUTEX_ERRORCHECK Int) (~unnamed8~0~PTHREAD_CANCEL_DISABLE Int) (~unnamed4~0~PTHREAD_RWLOCK_PREFER_WRITER_NP Int) (~unnamed6~0~PTHREAD_SCOPE_PROCESS Int) +//@ semantics [1] {ULTIMATE.start___VERIFIER_assert_~cond#1} true +//@ semantics [2] {} (= (select (select |#memory_int| 1) 1) 0) +//@ semantics [3] {} (and (= (select |#valid| 2) 1) (= 42 (select |#length| 2))) +//@ semantics [4] {~g~0} (= ~g~0 0) +//@ semantics [5] {ULTIMATE.start___VERIFIER_assert_#in~cond#1} (= (ite (= ~g~0 0) 1 0) |ULTIMATE.start___VERIFIER_assert_#in~cond#1|) +//@ semantics [6] {} (= 48 (select (select |#memory_int| 1) 0)) +//@ semantics [7] {} (not (= ~g~0 0)) +//@ semantics [8] {} (= ~g~0 0) +//@ semantics [9] {ULTIMATE.start_main_~id~0#1} true +//@ semantics [10] {ULTIMATE.start_main_#res#1} true +//@ semantics [11] {#pthreadsMutex,ULTIMATE.start_main_#t~ret6#1} (and (= |#pthreadsMutex| (store |old(#pthreadsMutex)| |~#A~0.base| (store (select |old(#pthreadsMutex)| |~#A~0.base|) |~#A~0.offset| 0))) (= |ULTIMATE.start_main_#t~ret6#1| 0)) +//@ semantics [12] {ULTIMATE.start_main_#t~nondet4#1,ULTIMATE.start_main_#t~ret6#1,ULTIMATE.start_main_~id~0#1,ULTIMATE.start_main_#t~ret5#1,ULTIMATE.start_main_#t~pre3#1} true +//@ semantics [13] {} (= (select (select |#memory_int| |~#A~0.base|) (+ |~#A~0.offset| 4)) 0) +//@ semantics [14] {ULTIMATE.start___VERIFIER_assert_~cond#1} (= |ULTIMATE.start___VERIFIER_assert_~cond#1| |ULTIMATE.start___VERIFIER_assert_#in~cond#1|) +//@ semantics [15] {ULTIMATE.start_main_#t~nondet4#1,ULTIMATE.start_main_#t~ret6#1,ULTIMATE.start_main_~id~0#1,ULTIMATE.start_main_#t~ret5#1,ULTIMATE.start_main_#t~pre3#1} true +//@ semantics [16] {ULTIMATE.start_main_#t~pre3#1} true +//@ semantics [17] {ULTIMATE.start_#t~ret7#1} (= |ULTIMATE.start_main_#res#1| |ULTIMATE.start_#t~ret7#1|) +//@ semantics [18] {ULTIMATE.start___VERIFIER_assert_~cond#1} true +//@ semantics [19] {} (= (select (select |#memory_int| |~#A~0.base|) (+ |~#A~0.offset| 12)) 0) +//@ semantics [20] {#pthreadsForks} (= (+ 1 |old(#pthreadsForks)|) |#pthreadsForks|) +//@ semantics [21] {ULTIMATE.start___VERIFIER_assert_#in~cond#1} true +//@ semantics [22] {} true +//@ semantics [23] {t_funThread1of1ForFork0_~arg.offset,t_funThread1of1ForFork0_~arg.base} (and (= |t_funThread1of1ForFork0_#in~arg.base| t_funThread1of1ForFork0_~arg.base) (= t_funThread1of1ForFork0_~arg.offset |t_funThread1of1ForFork0_#in~arg.offset|)) +//@ semantics [24] {#pthreadsMutex,t_funThread1of1ForFork0_#t~ret1} (let ((.cse0 (select |old(#pthreadsMutex)| |~#A~0.base|))) (and (= |#pthreadsMutex| (store |old(#pthreadsMutex)| |~#A~0.base| (store .cse0 |~#A~0.offset| 1))) (= 0 |t_funThread1of1ForFork0_#t~ret1|) (= (select .cse0 |~#A~0.offset|) 0))) +//@ semantics [25] {t_funThread1of1ForFork0_#t~ret1} true +//@ semantics [26] {~g~0} (= ~g~0 1) +//@ semantics [27] {#pthreadsMutex,t_funThread1of1ForFork0_#t~ret2} (and (= 0 |t_funThread1of1ForFork0_#t~ret2|) (= (store |old(#pthreadsMutex)| |~#A~0.base| (store (select |old(#pthreadsMutex)| |~#A~0.base|) |~#A~0.offset| 0)) |#pthreadsMutex|)) +//@ semantics [28] {t_funThread1of1ForFork0_#t~ret2} true +//@ semantics [29] {t_funThread1of1ForFork0_#res.base,t_funThread1of1ForFork0_#res.offset} (and (= |t_funThread1of1ForFork0_#res.offset| 0) (= |t_funThread1of1ForFork0_#res.base| 0)) +//@ semantics [30] {} true +//@ semantics [31] {} true +//@ semantics [32] {t_funThread1of1ForFork0_#in~arg.offset,t_funThread1of1ForFork0_~arg.offset,t_funThread1of1ForFork0_#t~ret2,t_funThread1of1ForFork0_thidvar1,t_funThread1of1ForFork0_#res.base,t_funThread1of1ForFork0_#in~arg.base,t_funThread1of1ForFork0_~arg.base,t_funThread1of1ForFork0_thidvar0,t_funThread1of1ForFork0_#res.offset,t_funThread1of1ForFork0_#t~ret1} (and (= |ULTIMATE.start_main_#t~pre3#1| t_funThread1of1ForFork0_thidvar0) (= |t_funThread1of1ForFork0_#in~arg.base| 0) (= t_funThread1of1ForFork0_thidvar1 0) (= |t_funThread1of1ForFork0_#in~arg.offset| 0)) +//@ semantics [33] {ULTIMATE.start_main_#t~ret6#1} true +//@ semantics [34] {} (and (= (select |#length| 3) 24) (= (select |#valid| 3) 1)) +//@ semantics [35] {} (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0) +//@ semantics [36] {} (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) +//@ semantics [37] {} true +//@ semantics [38] {} false +//@ semantics [39] {} (= (select (select |#memory_int| |~#A~0.base|) |~#A~0.offset|) 0) +//@ semantics [40] {ULTIMATE.start_main_#t~nondet4#1} true +//@ semantics [41] {} (= (select (select |#memory_int| |~#A~0.base|) (+ |~#A~0.offset| 16)) 0) +//@ semantics [42] {ULTIMATE.start___VERIFIER_assert_#in~cond#1} (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| ~g~0) +//@ semantics [43] {} (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0) +//@ semantics [44] {} (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) +//@ semantics [45] {ULTIMATE.start___VERIFIER_assert_#in~cond#1} true +//@ semantics [46] {} (and (= (select |#valid| 1) 1) (= 2 (select |#length| 1))) +//@ semantics [47] {~#A~0.offset,~#A~0.base} (and (= |~#A~0.offset| 0) (= 3 |~#A~0.base|)) +//@ semantics [48] {ULTIMATE.start___VERIFIER_assert_~cond#1} true +//@ semantics [49] {ULTIMATE.start_main_#res#1} (= |ULTIMATE.start_main_#res#1| 0) +//@ semantics [50] {} (= (select |#valid| 0) 0) +//@ semantics [51] {ULTIMATE.start___VERIFIER_assert_~cond#1} (= |ULTIMATE.start___VERIFIER_assert_~cond#1| |ULTIMATE.start___VERIFIER_assert_#in~cond#1|) +//@ semantics [52] {} false +//@ semantics [53] {} true +//@ semantics [54] {} false +//@ semantics [55] {} (= (select (select |#memory_int| |~#A~0.base|) (+ |~#A~0.offset| 8)) 0) +//@ semantics [56] {ULTIMATE.start_main_~id~0#1} (= |ULTIMATE.start_main_#t~pre3#1| |ULTIMATE.start_main_~id~0#1|) +//@ semantics [57] {#pthreadsMutex,ULTIMATE.start_main_#t~ret5#1} (let ((.cse0 (select |old(#pthreadsMutex)| |~#A~0.base|))) (and (= |#pthreadsMutex| (store |old(#pthreadsMutex)| |~#A~0.base| (store .cse0 |~#A~0.offset| 1))) (= |ULTIMATE.start_main_#t~ret5#1| 0) (= (select .cse0 |~#A~0.offset|) 0))) +//@ semantics [58] {ULTIMATE.start_main_#t~pre3#1} (= |ULTIMATE.start_main_#t~pre3#1| |#pthreadsForks|) +//@ semantics [59] {ULTIMATE.start_main_#t~ret5#1} true +//@ semantics [60] {ULTIMATE.start___VERIFIER_assert_~cond#1} true +//@ semantics [61] {} false +//@ semantics [62] {} (< 0 |#StackHeapBarrier|) + + +PetriNet program = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" }, + places = {l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l10 l11 l12 l13 l14 l15 l16 l17 l18 l19 l20 l21 l22 l23 l24 l25 l26 l27 l28 l29 l30 l31 l32 l33 l34 l35 l36 l37 l38 l39 l40 l41 l42 l43 l44 l45 l46 l47 l48 l49 l50 l51 l52 l53 l54 l55 l56 l57 l58 l59 l60 l61 l62 }, + transitions = { + ({l53 } "[33]" {l37 }) + ({l26 } "[34]" {l2 }) + ({l56 } "[35]" {l18 }) + ({l56 } "[36]" {l47 }) + ({l18 } "[37]" {l48 }) + ({l18 } "[38]" {l38 }) + ({l45 } "[39]" {l19 }) + ({l49 } "[25]" {l42 }) + ({l14 } "[27]" {l22 }) + ({l23 } "[40]" {l52 }) + ({l32 } "[30]" {l10 }) + ({l29 } "[41]" {l12 }) + ({l61 } "[42]" {l60 }) + ({l16 } "[43]" {l15 }) + ({l16 } "[44]" {l13 }) + ({l7 } "[45]" {l44 }) + ({l17 } "[23]" {l46 }) + ({l58 } "[46]" {l54 }) + ({l2 } "[47]" {l45 }) + ({l47 } "[48]" {l7 }) + ({l37 } "[49]" {l24 }) + ({l9 } "[50]" {l59 }) + ({l46 } "[24]" {l49 }) + ({l35 } "[51]" {l16 }) + ({l27 } "[52]" {l13 }) + ({l15 } "[53]" {l21 }) + ({l15 } "[54]" {l27 }) + ({l28 } "[55]" {l51 }) + ({l30 } "[56]" {l11 }) + ({l52 } "[57]" {l31 }) + ({l1 } "[58]" {l0 }) + ({l31 } "[59]" {l40 }) + ({l3 } "[60]" {l6 }) + ({l38 } "[61]" {l47 }) + ({l59 } "[62]" {l58 }) + ({l60 } "[1]" {l35 }) + ({l55 } "[2]" {l50 }) + ({l50 } "[3]" {l57 }) + ({l57 } "[4]" {l26 }) + ({l8 } "[5]" {l3 }) + ({l25 } "[29]" {l32 }) + ({l54 } "[6]" {l55 }) + ({l40 } "[7]" {l61 }) + ({l40 } "[8]" {l8 }) + ({l34 l11 } "[31]" {l36 }) + ({l11 l33 } "[32]" {l34 l17 l5 }) + ({l4 } "[9]" {l1 }) + ({l12 } "[10]" {l41 }) + ({l44 } "[11]" {l53 }) + ({l41 } "[12]" {l4 }) + ({l42 } "[26]" {l14 }) + ({l22 } "[28]" {l25 }) + ({l19 } "[13]" {l28 }) + ({l6 } "[14]" {l56 }) + ({l62 } "[15]" {l20 }) + ({l5 } "[16]" {l23 }) + ({l24 } "[17]" {l62 }) + ({l13 } "[18]" {l43 }) + ({l51 } "[19]" {l29 }) + ({l0 } "[20]" {l30 }) + ({l43 } "[21]" {l44 }) + ({l20 } "[22]" {l39 }) + }, + initialMarking = {l9 l33 }, + acceptingPlaces = {l36 l21 l48 } +); +FiniteAutomaton proof1 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" }, + states = {"(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "false" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "true" "(= ~g~0 0)" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[2]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[3]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[6]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[9]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[10]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[12]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[13]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[14]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[15]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[16]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[17]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[19]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[20]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[22]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[23]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[25]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[33]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[27]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[34]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[28]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[29]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[30]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[37]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[31]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[39]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[40]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[41]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[45]" "true") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[46]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[47]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[49]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[50]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[53]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[55]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[56]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[58]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[59]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[60]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))" "[62]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[2]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[3]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[6]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[9]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[10]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[12]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[13]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[14]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[15]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[16]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[17]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[19]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[20]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[22]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[23]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[24]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[25]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[26]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[33]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[27]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[34]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[28]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[29]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[30]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[37]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[31]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[39]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[40]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[41]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[45]" "(= ~g~0 0)") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[46]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[47]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[49]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[50]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[53]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[55]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[56]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[58]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[59]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[60]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[62]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[2]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[3]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[6]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[9]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[10]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[12]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[13]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[15]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[16]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[17]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[19]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[20]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[22]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[23]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[24]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[25]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[26]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[33]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[27]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[34]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[28]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[35]" "false") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[29]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[36]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[30]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[37]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[31]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[39]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[40]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[41]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[46]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[47]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[48]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[49]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[50]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[53]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[55]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[56]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[58]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[59]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[62]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[2]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[3]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[6]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[9]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[10]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[12]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[13]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[15]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[16]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[17]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[18]" "true") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[19]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[20]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[22]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[23]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[25]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[33]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[27]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[34]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[28]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[29]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[30]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[37]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[31]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[39]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[40]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[41]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[46]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[47]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[48]" "true") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[49]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[50]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[53]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[55]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[56]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[58]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[59]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[62]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[6]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + ("false" "[12]" "false") + ("false" "[13]" "false") + ("false" "[15]" "false") + ("false" "[16]" "false") + ("false" "[17]" "false") + ("false" "[19]" "false") + ("false" "[20]" "false") + ("false" "[22]" "false") + ("false" "[23]" "false") + ("false" "[25]" "false") + ("false" "[33]" "false") + ("false" "[34]" "false") + ("false" "[28]" "false") + ("false" "[29]" "false") + ("false" "[30]" "false") + ("false" "[37]" "false") + ("false" "[31]" "false") + ("false" "[39]" "false") + ("false" "[40]" "false") + ("false" "[41]" "false") + ("false" "[46]" "false") + ("false" "[47]" "false") + ("false" "[49]" "false") + ("false" "[50]" "false") + ("false" "[53]" "false") + ("false" "[55]" "false") + ("false" "[56]" "false") + ("false" "[58]" "false") + ("false" "[59]" "false") + ("false" "[62]" "false") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[2]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[3]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[6]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[9]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[10]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[12]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[13]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[15]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[16]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[17]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[19]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[20]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[22]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[23]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[25]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[33]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[27]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[34]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[28]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[35]" "false") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[29]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[36]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[30]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[37]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[31]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[39]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[40]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[41]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[46]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[47]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[48]" "(not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[49]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[50]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[53]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[55]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[56]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[58]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[59]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[62]" "(and (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("true" "[1]" "true") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "(= ~g~0 0)") + ("true" "[5]" "true") + ("true" "[6]" "true") + ("true" "[7]" "true") + ("true" "[8]" "(= ~g~0 0)") + ("true" "[9]" "true") + ("true" "[10]" "true") + ("true" "[11]" "true") + ("true" "[12]" "true") + ("true" "[13]" "true") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "true") + ("true" "[17]" "true") + ("true" "[19]" "true") + ("true" "[20]" "true") + ("true" "[21]" "true") + ("true" "[22]" "true") + ("true" "[23]" "true") + ("true" "[25]" "true") + ("true" "[27]" "true") + ("true" "[28]" "true") + ("true" "[29]" "true") + ("true" "[30]" "true") + ("true" "[31]" "true") + ("true" "[33]" "true") + ("true" "[34]" "true") + ("true" "[35]" "true") + ("true" "[36]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("true" "[37]" "true") + ("true" "[38]" "false") + ("true" "[39]" "true") + ("true" "[40]" "true") + ("true" "[41]" "true") + ("true" "[42]" "true") + ("true" "[43]" "true") + ("true" "[44]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("true" "[45]" "true") + ("true" "[46]" "true") + ("true" "[47]" "true") + ("true" "[49]" "true") + ("true" "[50]" "true") + ("true" "[51]" "true") + ("true" "[53]" "true") + ("true" "[54]" "false") + ("true" "[55]" "true") + ("true" "[56]" "true") + ("true" "[57]" "true") + ("true" "[58]" "true") + ("true" "[59]" "true") + ("true" "[60]" "true") + ("true" "[62]" "true") + ("(= ~g~0 0)" "[2]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[3]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[5]" "(and (= ~g~0 0) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(= ~g~0 0)" "[6]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[7]" "false") + ("(= ~g~0 0)" "[8]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[9]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[10]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[11]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[12]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[13]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[15]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[16]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[17]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[19]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[20]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[22]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[23]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[24]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[25]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[26]" "true") + ("(= ~g~0 0)" "[33]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[27]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[34]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[28]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[29]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[30]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[37]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[31]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[32]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[39]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[40]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[41]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[46]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[47]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[49]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[50]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[53]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[55]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[56]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[57]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[58]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[59]" "(= ~g~0 0)") + ("(= ~g~0 0)" "[62]" "(= ~g~0 0)") + } +); +FiniteAutomaton proof2 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" }, + states = {"true" "false" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("true" "[1]" "true") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[5]" "true") + ("true" "[6]" "true") + ("true" "[7]" "true") + ("true" "[8]" "true") + ("true" "[9]" "true") + ("true" "[10]" "true") + ("true" "[12]" "true") + ("true" "[13]" "true") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "true") + ("true" "[17]" "true") + ("true" "[18]" "true") + ("true" "[19]" "true") + ("true" "[20]" "true") + ("true" "[21]" "true") + ("true" "[22]" "true") + ("true" "[23]" "true") + ("true" "[24]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("true" "[25]" "true") + ("true" "[26]" "true") + ("true" "[28]" "true") + ("true" "[29]" "true") + ("true" "[30]" "true") + ("true" "[31]" "true") + ("true" "[32]" "true") + ("true" "[33]" "true") + ("true" "[34]" "true") + ("true" "[35]" "true") + ("true" "[36]" "true") + ("true" "[37]" "true") + ("true" "[39]" "true") + ("true" "[40]" "true") + ("true" "[41]" "true") + ("true" "[42]" "true") + ("true" "[43]" "true") + ("true" "[44]" "true") + ("true" "[45]" "true") + ("true" "[46]" "true") + ("true" "[47]" "true") + ("true" "[48]" "true") + ("true" "[49]" "true") + ("true" "[50]" "true") + ("true" "[51]" "true") + ("true" "[53]" "true") + ("true" "[55]" "true") + ("true" "[56]" "true") + ("true" "[57]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("true" "[58]" "true") + ("true" "[59]" "true") + ("true" "[60]" "true") + ("true" "[62]" "true") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[8]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + ("false" "[12]" "false") + ("false" "[14]" "false") + ("false" "[15]" "false") + ("false" "[16]" "false") + ("false" "[17]" "false") + ("false" "[18]" "false") + ("false" "[20]" "false") + ("false" "[21]" "false") + ("false" "[22]" "false") + ("false" "[23]" "false") + ("false" "[25]" "false") + ("false" "[26]" "false") + ("false" "[33]" "false") + ("false" "[34]" "false") + ("false" "[28]" "false") + ("false" "[35]" "false") + ("false" "[29]" "false") + ("false" "[36]" "false") + ("false" "[30]" "false") + ("false" "[37]" "false") + ("false" "[31]" "false") + ("false" "[40]" "false") + ("false" "[42]" "false") + ("false" "[43]" "false") + ("false" "[44]" "false") + ("false" "[45]" "false") + ("false" "[46]" "false") + ("false" "[48]" "false") + ("false" "[49]" "false") + ("false" "[50]" "false") + ("false" "[51]" "false") + ("false" "[53]" "false") + ("false" "[56]" "false") + ("false" "[58]" "false") + ("false" "[59]" "false") + ("false" "[60]" "false") + ("false" "[62]" "false") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[1]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[2]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[3]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[4]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[5]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[6]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[7]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[8]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[9]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[10]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[11]" "true") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[12]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[14]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[15]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[16]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[17]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[18]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[20]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[21]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[22]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[23]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[24]" "false") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[25]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[26]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[27]" "true") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[28]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[29]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[30]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[31]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[33]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[34]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[35]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[36]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[37]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[40]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[42]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[43]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[44]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[45]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[46]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[48]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[49]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[50]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[51]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[53]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[56]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[57]" "false") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[58]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[59]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[60]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + ("(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)" "[62]" "(= (select (select |#pthreadsMutex| |~#A~0.base|) |~#A~0.offset|) 1)") + } +); +FiniteAutomaton proof3 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" "[23]" "[24]" "[25]" "[26]" "[27]" "[28]" "[29]" "[30]" "[31]" "[32]" "[33]" "[34]" "[35]" "[36]" "[37]" "[38]" "[39]" "[40]" "[41]" "[42]" "[43]" "[44]" "[45]" "[46]" "[47]" "[48]" "[49]" "[50]" "[51]" "[52]" "[53]" "[54]" "[55]" "[56]" "[57]" "[58]" "[59]" "[60]" "[61]" "[62]" }, + states = {"(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "true" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "(not (= ~g~0 0))" "false" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[2]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[3]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[6]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[9]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[10]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[12]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[13]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[15]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[16]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[17]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[18]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[19]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[20]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[22]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[23]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[25]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[33]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[34]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[28]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[29]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[30]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[37]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[31]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[39]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[40]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[41]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[43]" "false") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[44]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[46]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[47]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[49]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[50]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[53]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[55]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[56]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[58]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[59]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[62]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[5]" "true") + ("true" "[6]" "true") + ("true" "[8]" "true") + ("true" "[9]" "true") + ("true" "[10]" "true") + ("true" "[11]" "true") + ("true" "[12]" "true") + ("true" "[13]" "true") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "true") + ("true" "[17]" "true") + ("true" "[19]" "true") + ("true" "[20]" "true") + ("true" "[22]" "true") + ("true" "[23]" "true") + ("true" "[24]" "true") + ("true" "[25]" "true") + ("true" "[26]" "(not (= ~g~0 0))") + ("true" "[33]" "true") + ("true" "[34]" "true") + ("true" "[28]" "true") + ("true" "[29]" "true") + ("true" "[36]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("true" "[30]" "true") + ("true" "[37]" "true") + ("true" "[31]" "true") + ("true" "[32]" "true") + ("true" "[39]" "true") + ("true" "[40]" "true") + ("true" "[41]" "true") + ("true" "[45]" "true") + ("true" "[46]" "true") + ("true" "[47]" "true") + ("true" "[49]" "true") + ("true" "[50]" "true") + ("true" "[53]" "true") + ("true" "[55]" "true") + ("true" "[56]" "true") + ("true" "[57]" "true") + ("true" "[58]" "true") + ("true" "[59]" "true") + ("true" "[60]" "true") + ("true" "[62]" "true") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[1]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[2]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[3]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[6]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[9]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[10]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[12]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[13]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[15]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[16]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[17]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[19]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[20]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[21]" "(not (= ~g~0 0))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[22]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[23]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[25]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[33]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[34]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[28]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[29]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[30]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[37]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[31]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[39]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[40]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[41]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[46]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[47]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[49]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[50]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[51]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[53]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[55]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[56]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[58]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[59]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))" "[62]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[2]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[3]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[6]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[9]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[10]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[12]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[13]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[15]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[16]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[17]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[19]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[20]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[22]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[23]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[25]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[33]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[34]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[28]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[29]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[30]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[37]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[31]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[39]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[40]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[41]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[46]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[47]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[48]" "true") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[49]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[50]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[53]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[55]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[56]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[58]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[59]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))" "[62]" "(not (= |ULTIMATE.start___VERIFIER_assert_~cond#1| 0))") + ("(not (= ~g~0 0))" "[2]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[3]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[6]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[7]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[8]" "false") + ("(not (= ~g~0 0))" "[9]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[10]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[11]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[12]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[13]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[15]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[16]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[17]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[19]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[20]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[22]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[23]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[25]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[33]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[27]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[34]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[28]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[29]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[30]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[37]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[31]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[39]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[40]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[41]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[42]" "(and (not (= ~g~0 0)) (not (= |ULTIMATE.start___VERIFIER_assert_#in~cond#1| 0)))") + ("(not (= ~g~0 0))" "[46]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[47]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[49]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[50]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[53]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[55]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[56]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[57]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[58]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[59]" "(not (= ~g~0 0))") + ("(not (= ~g~0 0))" "[62]" "(not (= ~g~0 0))") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[6]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + ("false" "[12]" "false") + ("false" "[13]" "false") + ("false" "[15]" "false") + ("false" "[16]" "false") + ("false" "[17]" "false") + ("false" "[19]" "false") + ("false" "[20]" "false") + ("false" "[22]" "false") + ("false" "[23]" "false") + ("false" "[25]" "false") + ("false" "[33]" "false") + ("false" "[34]" "false") + ("false" "[28]" "false") + ("false" "[29]" "false") + ("false" "[30]" "false") + ("false" "[37]" "false") + ("false" "[31]" "false") + ("false" "[39]" "false") + ("false" "[40]" "false") + ("false" "[41]" "false") + ("false" "[46]" "false") + ("false" "[47]" "false") + ("false" "[49]" "false") + ("false" "[50]" "false") + ("false" "[53]" "false") + ("false" "[55]" "false") + ("false" "[56]" "false") + ("false" "[58]" "false") + ("false" "[59]" "false") + ("false" "[62]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/auxvar.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/auxvar.ats new file mode 100644 index 00000000000..53b1db7e051 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/auxvar.ats @@ -0,0 +1,34 @@ +// Check that we can use transformulas with auxvars. +// This is really a test of the test suite. +// ------------------------------------------------------ + +//@ variables (x Int) (y Int) + +//@ semantics [1] {x} (= x y) +//@ semantics [2] {x,y} [(z Int)] (and (= x z) (= y z)) +//@ semantics [3] { } (distinct x y) + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" }, + places = { "l0" "l1" "l2" "e" }, + transitions = { + ({ "l0" } "[1]" { "l1" "l2" }) + ({ "l2" } "[2]" { "l2" }) + ({ "l1" } "[3]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[1]" "[2]" "[3]" }, + states = { "true" "(= x y)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(= x y)") + ("(= x y)" "[2]" "(= x y)") + ("(= x y)" "[3]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/barrier-join.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/barrier-join.ats new file mode 100644 index 00000000000..b37e1e20b80 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/barrier-join.ats @@ -0,0 +1,43 @@ +// Simple test for computation of Owicki-Gries annotation with a main thread and a worker thread and a barrier represented by a join +// --------------------------------------------------------------------------------------------------------------------------------------- + +//@ variables (z Int) (a Int) (y Int) + +//@ semantics [0] {z} (= z 0) +//@ semantics [1] {a} (= a 1) +//@ semantics [2] {z} (= z (+ |old(z)| 1)) +//@ semantics [3] {y} (= y (+ a 1)) +//@ semantics [4] { } (distinct y 2) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + places = { "main.l0" "main.l1" "main.l2" "worker.l0" "worker.l1" "worker.l2" "e" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "worker.l0" } "[1]" { "worker.l1" }) + ({ "main.l1" } "[2]" { "main.l2" }) + ({ "worker.l1" } "[3]" { "worker.l2" }) + ({ "main.l2" "worker.l2" } "[4]" { "e" }) + }, + initialMarking = { "main.l0" "worker.l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= a 1)" "(= y 2)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(= a 1)") + ("(= a 1)" "[0]" "(= a 1)") + ("(= a 1)" "[2]" "(= a 1)") + ("(= a 1)" "[3]" "(= y 2)") + ("(= y 2)" "[0]" "(= y 2)") + ("(= y 2)" "[2]" "(= y 2)") + ("(= y 2)" "[4]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/barrier-var.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/barrier-var.ats new file mode 100644 index 00000000000..881865da014 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/barrier-var.ats @@ -0,0 +1,48 @@ +// Simple test for computation of Owicki-Gries annotation with a main thread and a worker thread and a barrier represented by a variable b +// --------------------------------------------------------------------------------------------------------------------------------------- + +//@ variables (z Int) (b Int) (y Int) + +//@ semantics [0] {z,b} (and (= z 0) (= b 0)) +//@ semantics [1] {y} (= y 2) +//@ semantics [2] {z} (= z (+ |old(z)| 1)) +//@ semantics [3] { } (distinct y 2) +//@ semantics [4] { } (= b 1) +//@ semantics [5] {b} (= b 1) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" }, + places = { "main.l0" "main.l1" "main.l2" "main.l3" "worker.l0" "worker.l1" "worker.l2" "worker.l3" "e" }, + transitions = { + ({ "main.l0" "worker.l0" } "[0]" { "main.l1" "worker.l1" }) + ({ "worker.l1" } "[1]" { "worker.l2" }) + ({ "main.l1" } "[2]" { "main.l2" }) + ({ "main.l2" } "[4]" { "main.l3" }) + ({ "worker.l2" } "[5]" { "worker.l3" }) + ({ "main.l3" } "[3]" { "e" }) + }, + initialMarking = { "main.l0" "worker.l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" }, + states = { "true" "(= b 0)" "(and (= b 0) (= y 2))" "(and (= b 1) (= y 2))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= b 0)") + ("(= b 0)" "[1]" "(and (= b 0) (= y 2))") + ("(= b 0)" "[2]" "(= b 0)") + ("(= b 0)" "[4]" "false") + ("(and (= b 0) (= y 2))" "[4]" "false") + ("(and (= b 0) (= y 2))" "[2]" "(and (= b 0) (= y 2))") + ("(and (= b 0) (= y 2))" "[5]" "(and (= b 1) (= y 2))") + ("(and (= b 1) (= y 2))" "[2]" "(and (= b 1) (= y 2))") + ("(and (= b 1) (= y 2))" "[4]" "(and (= b 1) (= y 2))") + ("(and (= b 1) (= y 2))" "[3]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/blocked.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/blocked.ats new file mode 100644 index 00000000000..861063e6450 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/blocked.ats @@ -0,0 +1,25 @@ +// See block.empire.yml for more information on this example.; + +// The statement [0] is a "skip" statement that modifies no variables and has transition formula true. +//@ semantics [0] { } true + +PetriNet program = ( + alphabet = { "[0]" }, + places = { "p1" "p2" "p3" }, + transitions = { + ({ "p1" } "[0]" { "p2" }) + ({ "p1" "p2" } "[0]" { "p3" }) + }, + initialMarking = { "p1" }, + acceptingPlaces = { "p3" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" }, + states = { "true" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "true") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/bridge-cycle.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/bridge-cycle.ats new file mode 100644 index 00000000000..46f8c73df72 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/bridge-cycle.ats @@ -0,0 +1,65 @@ +// Simple test for computation of Owicki-Gries annotation for the case of a cycle where at first a pair is not a bridge and after second arriving it becomes a bridge +// ------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +//@ variables (g Int) + +//@ semantics [0] {g} (= g 0) +//@ semantics [1] { } true +//@ semantics [2] {g} (= g 1) +//@ semantics [3] { } (= g 0) +//@ semantics [4] {g} (and (= |old(g)| 1) (= g 2)) +//@ semantics [5] {g} (and (= |old(g)| 2) (= g 0)) +//@ semantics [6] { } false + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" }, + places = { "i" "p1" "p2" "p3" "p4" "p5" "e" }, + transitions = { + ({ "i" } "[0]" { "p1" "p3" }) + ({ "p1" } "[1]" { "p2" }) + ({ "p3" } "[2]" { "p5" }) + ({ "p2" } "[3]" { "p4" }) + ({ "p4" "p5" } "[4]" { "p1" "p5" }) + ({ "p5" } "[5]" { "p3" }) + ({ "p5" } "[6]" { "e" }) + }, + initialMarking = { "i" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" }, + states = { "true" "(= g 0)" "(= g 1)" "(= g 2)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= g 0)") + + ("(= g 0)" "[0]" "(= g 0)") + ("(= g 0)" "[1]" "(= g 0)") + ("(= g 0)" "[2]" "(= g 1)") + ("(= g 0)" "[3]" "(= g 0)") + ("(= g 0)" "[4]" "false") + ("(= g 0)" "[5]" "false") + ("(= g 0)" "[6]" "false") + + ("(= g 1)" "[0]" "(= g 0)") + ("(= g 1)" "[1]" "(= g 1)") + ("(= g 1)" "[2]" "(= g 1)") + ("(= g 1)" "[3]" "false") + ("(= g 1)" "[4]" "(= g 2)") + ("(= g 1)" "[5]" "false") + ("(= g 1)" "[6]" "false") + + ("(= g 2)" "[0]" "(= g 0)") + ("(= g 2)" "[1]" "(= g 2)") + ("(= g 2)" "[2]" "(= g 1)") + ("(= g 2)" "[3]" "false") + ("(= g 2)" "[4]" "false") + ("(= g 2)" "[5]" "(= g 0)") + ("(= g 2)" "[6]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/bystander-subset-error.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/bystander-subset-error.ats new file mode 100644 index 00000000000..00b86cfb878 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/bystander-subset-error.ats @@ -0,0 +1,43 @@ +// Simple scalable test for computation of Owicki-Gries annotation for Petri Net with a main thread and a temporary worker thread +// ------------------------------------------------------------------------------------------------------------------------------ + +//@ variables (g Int) + +//@ semantics [0] {g} (= g 0) +//@ semantics [1] { } true +//@ semantics [2] { } (= g 1) +//@ semantics [3] {g} (= g 1) +//@ semantics [4] { } false + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + places = { "i" "p1" "p2" "p3" "p4" "p5" "e" }, + transitions = { + ({ "i" } "[0]" { "p1" "p2" }) + ({ "p1" } "[1]" { "p3" }) + ({ "p3" } "[2]" { "p5" }) + ({ "p2" } "[3]" { "p4" }) + ({ "p5" } "[4]" { "e" }) + }, + initialMarking = { "i" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= g 0)" "(= g 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= g 0)") + ("(= g 0)" "[1]" "(= g 0)") + ("(= g 0)" "[2]" "false") + ("(= g 0)" "[3]" "(= g 1)") + ("(= g 1)" "[1]" "(= g 1)") + ("(= g 1)" "[2]" "(= g 1)") + ("(= g 1)" "[4]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/client-server-choice.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/client-server-choice.ats new file mode 100644 index 00000000000..c81a7c91773 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/client-server-choice.ats @@ -0,0 +1,107 @@ +// Simple scalable test for computation of Owicki-Gries annotation for Petri Net of a server-client interaction with a choice between different requests +// ----------------------------------------------------------------------------------------------------------------------------------------------------- + +//@ variables (req Int) (res Int) (x Int) + +//@ semantics [0] {req,res,x} (and (= req 0) (= res 0) (= x 0)) +//@ semantics [1] {req} (= req 1) +//@ semantics [2] {req} (= req 2) +//@ semantics [3] { } (> req 0) +//@ semantics [4] { } (= req 1) +//@ semantics [5] { } (= req 2) +//@ semantics [6] {res,x} (and (= x (- 5)) (= res 1)) +//@ semantics [7] {res,x} (and (= x 5) (= res 1)) +//@ semantics [8] { } (= res 1) +//@ semantics [9] { } (>= x 0) +//@ semantics [10] { } (<= x 0) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" }, + places = { "m" "s.l0" "s.l1" "s.l2" "s.l3" "s.l4" "s.l5" "c.l0" "c.l1" "c.l2" "c.l3" "c.l4" "e1" "e2" }, + transitions = { + ({ "m" } "[0]" { "s.l0" "c.l0" }) + ({ "s.l0" } "[3]" { "s.l1" }) + ({ "s.l1" } "[4]" { "s.l2" }) + ({ "s.l1" } "[5]" { "s.l3" }) + ({ "s.l2" } "[6]" { "s.l4" }) + ({ "s.l3" } "[7]" { "s.l5" }) + ({ "c.l0" } "[1]" { "c.l1" }) + ({ "c.l0" } "[2]" { "c.l2" }) + ({ "c.l1" } "[8]" { "c.l3" }) + ({ "c.l2" } "[8]" { "c.l4" }) + ({ "c.l3" } "[9]" { "e1" }) + ({ "c.l4" } "[10]" { "e2" }) + }, + initialMarking = { "m" }, + acceptingPlaces = { "e1" "e2" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" }, + states = { "true" "(and (= req 0) (= res 0))" "(and (= req 1) (= res 0))" "(and (= req 1) (< x 0) (= res 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(and (= req 0) (= res 0))") + ("(and (= req 0) (= res 0))" "[1]" "(and (= req 1) (= res 0))") + ("(and (= req 0) (= res 0))" "[2]" "true") + ("(and (= req 0) (= res 0))" "[3]" "false") + ("(and (= req 0) (= res 0))" "[4]" "false") + ("(and (= req 0) (= res 0))" "[5]" "false") + ("(and (= req 0) (= res 0))" "[8]" "false") + ("(and (= req 1) (= res 0))" "[3]" "(and (= req 1) (= res 0))") + ("(and (= req 1) (= res 0))" "[4]" "(and (= req 1) (= res 0))") + ("(and (= req 1) (= res 0))" "[5]" "false") + ("(and (= req 1) (= res 0))" "[6]" "(and (= req 1) (< x 0) (= res 1))") + ("(and (= req 1) (= res 0))" "[8]" "false") + ("(and (= req 1) (< x 0) (= res 1))" "[8]" "(and (= req 1) (< x 0) (= res 1))") + ("(and (= req 1) (< x 0) (= res 1))" "[9]" "false") + ("false" "[0]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[8]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" }, + states = { "true" "(and (= req 0) (= res 0))" "(and (= req 2) (= res 0))" "(and (= req 2) (> x 0) (= res 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(and (= req 0) (= res 0))") + ("(and (= req 0) (= res 0))" "[1]" "true") + ("(and (= req 0) (= res 0))" "[2]" "(and (= req 2) (= res 0))") + ("(and (= req 0) (= res 0))" "[3]" "false") + ("(and (= req 0) (= res 0))" "[4]" "false") + ("(and (= req 0) (= res 0))" "[5]" "false") + ("(and (= req 0) (= res 0))" "[8]" "false") + ("(and (= req 2) (= res 0))" "[3]" "(and (= req 2) (= res 0))") + ("(and (= req 2) (= res 0))" "[4]" "false") + ("(and (= req 2) (= res 0))" "[5]" "(and (= req 2) (= res 0))") + ("(and (= req 2) (= res 0))" "[7]" "(and (= req 2) (> x 0) (= res 1))") + ("(and (= req 2) (= res 0))" "[8]" "false") + ("(and (= req 2) (> x 0) (= res 1))" "[8]" "(and (= req 2) (> x 0) (= res 1))") + ("(and (= req 2) (> x 0) (= res 1))" "[10]" "false") + ("false" "[0]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[8]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + } +); + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/client-server-trivial.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/client-server-trivial.ats new file mode 100644 index 00000000000..c098c9a1dd2 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/client-server-trivial.ats @@ -0,0 +1,46 @@ +// Simple scalable test for computation of Owicki-Gries annotation for Petri Net of a trivial server-client interaction +// -------------------------------------------------------------------------------------------------------------------- + +//@ variables (req Int) (res Int) + +//@ semantics [0] {req,res} (and (= req 0) (= res 0)) +//@ semantics [1] {req} (= req 1) +//@ semantics [2] { } (= req 1) +//@ semantics [3] {res} (= res 1) +//@ semantics [4] { } (= res 1) +//@ semantics [5] { } (or (distinct req 1) (distinct res 1)) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" }, + places = { "m" "s.l0" "s.l1" "s.l2" "c.l0" "c.l1" "c.l2" "e" }, + transitions = { + ({ "m" } "[0]" { "s.l0" "c.l0" }) + ({ "s.l0" } "[2]" { "s.l1" }) + ({ "s.l1" } "[3]" { "s.l2" }) + ({ "c.l0" } "[1]" { "c.l1" }) + ({ "c.l1" } "[4]" { "c.l2" }) + ({ "c.l2" } "[5]" { "e" }) + }, + initialMarking = { "m" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]"}, + states = { "true" "(and (= req 0) (= res 0))" "(and (= req 1) (= res 0))" "(and (= req 1) (= res 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(and (= req 0) (= res 0))") + ("(and (= req 0) (= res 0))" "[1]" "(and (= req 1) (= res 0))") + ("(and (= req 0) (= res 0))" "[2]" "false") + ("(and (= req 1) (= res 0))" "[3]" "(and (= req 1) (= res 1))") + ("(and (= req 1) (= res 0))" "[2]" "(and (= req 1) (= res 0))") + ("(and (= req 1) (= res 0))" "[4]" "false") + ("(and (= req 1) (= res 1))" "[4]" "(and (= req 1) (= res 1))") + ("(and (= req 1) (= res 1))" "[5]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/conflict.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/conflict.ats new file mode 100644 index 00000000000..ad22b4e6397 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/conflict.ats @@ -0,0 +1,45 @@ +// Simple test for conflicts +// ------------------------------------------------------------------------------------------- + +//@ variables (x Int) + +//@ semantics [0] { } (> x 0) +//@ semantics [1] { } (<= x 0) +//@ semantics [2] {x} (= x 5) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" }, + places = { "l0" "l1" "l2" "l3" "e" }, + transitions = { + ({ "l0" } "[0]" { "l1" }) + ({ "l0" } "[1]" { "l2" }) + ({ "l1" } "[1]" { "e" }) + ({ "l2" } "[2]" { "l3" }) + ({ "l3" } "[1]" { "e" }) +}, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" }, + states = { "true" "(> x 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(> x 0)") + ("(> x 0)" "[1]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" }, + states = { "true" "(<= x 0)" "(> x 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(<= x 0)") + ("(<= x 0)" "[2]" "(> x 0)") + ("(> x 0)" "[1]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/counter-example-region-intersection.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/counter-example-region-intersection.ats new file mode 100644 index 00000000000..75e8507eee1 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/counter-example-region-intersection.ats @@ -0,0 +1,64 @@ +// Simple counterexample that proves that "hollowness" is not a necessary condition for an un-safe Empire product +// -------------------------------------------------------------------------------------------------------------- + +//@ variables (x Int) (y Int) + +//@ semantics [1] {x} (= x 1) +//@ semantics [2] {y} (= y 1) +//@ semantics [3] { } (distinct x 1) +//@ semantics [4] { } (distinct y 1) +//@ semantics [5] {x} (= x y) +//@ semantics [6] {y} (= y x) + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" }, + places = { "l0" "l1" "l2" "e" }, + transitions = { + ({ "l0" } "[1]" { "l1" }) + ({ "l1" } "[6]" { "l2" }) + ({ "l0" } "[2]" { "l2" }) + ({ "l2" } "[5]" { "l1" }) + ({ "l1" } "[3]" { "e" }) + ({ "l2" } "[4]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" }, + states = { "true" "(= x 1)" "(and (= x 1) (= y 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(= x 1)") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("(= x 1)" "[6]" "(and (= x 1) (= y 1))") + ("(and (= x 1) (= y 1))" "[5]" "(and (= x 1) (= y 1))") + ("(and (= x 1) (= y 1))" "[6]" "(and (= x 1) (= y 1))") + ("(and (= x 1) (= y 1))" "[3]" "false") + ("(and (= x 1) (= y 1))" "[4]" "false") + ("(= x 1)" "[3]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" }, + states = { "true" "(= y 1)" "(and (= x 1) (= y 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[2]" "(= y 1)") + ("true" "[1]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("(= y 1)" "[5]" "(and (= x 1) (= y 1))") + ("(and (= x 1) (= y 1))" "[5]" "(and (= x 1) (= y 1))") + ("(and (= x 1) (= y 1))" "[6]" "(and (= x 1) (= y 1))") + ("(and (= x 1) (= y 1))" "[3]" "false") + ("(and (= x 1) (= y 1))" "[4]" "false") + ("(= y 1)" "[4]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/data-race.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/data-race.ats new file mode 100644 index 00000000000..569cfec3c1d --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/data-race.ats @@ -0,0 +1,52 @@ +// Simple scalable test for computation of Owicki-Gries annotation for Petri Net with a simple data race +// ----------------------------------------------------------------------------------------------------- + +//@ variables (x Int) (s Int) (c Int) + +//@ semantics [0] {x,s} (and (= x 0) (= s 0) (= c 0)) +//@ semantics [1] {s} (and (= |old(s)| 0) (= s 1)) +//@ semantics [2] {s} (and (= s 0) (= c 0)) +//@ semantics [3] {x} (= x (+ |old(x)| 1)) +//@ semantics [4] { } (> c 1) +//@ semantics [5] {c} (= c 0) +//@ semantics [6] {c} (= c (+ |old(c)| 1)) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" }, + places = { "m" "t1.l0" "t1.l1" "t1.l2" "t1.l3" "t1.l4" "t2.l0" "t2.l1" "t2.l2" "t2.l3" "t2.l4" "e1" "e2" }, + transitions = { + ({ "m" } "[0]" { "t1.l0" "t2.l0" }) + ({ "t1.l0" } "[1]" { "t1.l1" }) + ({ "t1.l1" } "[6]" { "t1.l2" }) + ({ "t1.l2" } "[3]" { "t1.l3" }) + ({ "t1.l2" } "[4]" { "e1" }) + ({ "t1.l3" } "[2]" { "t1.l4" }) + ({ "t2.l0" } "[1]" { "t2.l1" }) + ({ "t2.l1" } "[6]" { "t2.l2" }) + ({ "t2.l2" } "[3]" { "t2.l3" }) + ({ "t2.l2" } "[4]" { "e2" }) + ({ "t2.l3" } "[2]" { "t2.l4" }) + }, + initialMarking = { "m" }, + acceptingPlaces = { "e1" "e2" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" }, + states = { "true" "(and (= c 0) (= s 0))" "(and (= c 0) (= s 1))" "(and (= c 1) (= s 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(and (= c 0) (= s 0))") + ("(and (= c 0) (= s 0))" "[1]" "(and (= c 0) (= s 1))") + ("(and (= c 0) (= s 1))" "[6]" "(and (= c 1) (= s 1))") + ("(and (= c 0) (= s 1))" "[1]" "false") + ("(and (= c 1) (= s 1))" "[2]" "(and (= c 0) (= s 0))") + ("(and (= c 1) (= s 1))" "[3]" "(and (= c 1) (= s 1))") + ("(and (= c 1) (= s 1))" "[4]" "false") + ("(and (= c 1) (= s 1))" "[1]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/error-place-extention.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/error-place-extention.ats new file mode 100644 index 00000000000..c3cce3c69c3 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/error-place-extention.ats @@ -0,0 +1,50 @@ +// Simple test for computation of Owicki-Gries annotation where the error may occur, that an error place falsly gets extended into the initial territory +// ----------------------------------------------------------------------------------------------------------------------------------------------------- + +//@ variables (x Int) (y Int) + +//@ semantics [1] {x} (= x 1) +//@ semantics [2] {y} (= y 1) +//@ semantics [3] { } (distinct x 1) +//@ semantics [4] { } (distinct y 1) + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" }, + places = { "l0" "l1" "l2" "e" }, + transitions = { + ({ "l0" } "[1]" { "l1" }) + ({ "l0" } "[2]" { "l2" }) + ({ "l1" } "[3]" { "e" }) + ({ "l2" } "[4]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= x 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(= x 1)") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("(= x 1)" "[3]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= y 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[2]" "(= y 1)") + ("true" "[1]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("(= y 1)" "[4]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/error-place-extention2.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/error-place-extention2.ats new file mode 100644 index 00000000000..ee0764bcde1 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/error-place-extention2.ats @@ -0,0 +1,57 @@ +// Simple test for computation of Owicki-Gries annotation where the error may occur, where an error place falsly gets extended into (non-initial) "equivalent" territories of the product empire +// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +//@ variables (x Int) (y Int) (z Int) + +//@ semantics [1] {x} (= x z) +//@ semantics [2] {y} (= y z) +//@ semantics [3] { } (distinct x 1) +//@ semantics [4] { } (distinct y 1) +//@ semantics [5] {z} (= z 1) + + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" "[5]" }, + places = { "l0" "l1" "l2" "l3" "e" }, + transitions = { + ({ "l0" } "[5]" { "l1" }) + ({ "l1" } "[1]" { "l2" }) + ({ "l1" } "[2]" { "l3" }) + ({ "l2" } "[3]" { "e" }) + ({ "l3" } "[4]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" "[5]" }, + states = { "true" "(= z 1)" "(= x 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[5]" "(= z 1)") + ("(= z 1)" "[1]" "(= x 1)") + ("(= z 1)" "[2]" "(= z 1)") + ("(= z 1)" "[3]" "(= z 1)") + ("(= z 1)" "[4]" "(= z 1)") + ("(= z 1)" "[5]" "(= z 1)") + ("(= x 1)" "[3]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" "[5]" }, + states = { "true" "(= z 1)" "(= y 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[5]" "(= z 1)") + ("(= z 1)" "[1]" "(= z 1)") + ("(= z 1)" "[2]" "(= y 1)") + ("(= z 1)" "[3]" "(= z 1)") + ("(= z 1)" "[4]" "(= z 1)") + ("(= z 1)" "[5]" "(= z 1)") + ("(= y 1)" "[4]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/error-place-extention3.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/error-place-extention3.ats new file mode 100644 index 00000000000..8e1d81286b4 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/error-place-extention3.ats @@ -0,0 +1,48 @@ +// Simple test for computation of Owicki-Gries annotation where the error may occur, where an error place falsly gets extended into (non-initial) "equivalent" territories of the product empire +// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +//@ variables (x Int) + +//@ semantics [1] {x} (= x 0) +//@ semantics [2] {x} (= x 1) +//@ semantics [3] { } (= x 2) +//@ semantics [4] { } true + + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" }, + places = { "l0" "l1" "l2" "l3" "e" }, + transitions = { + ({ "l0" } "[1]" { "l1" }) + ({ "l0" } "[2]" { "l2" }) + ({ "l1" } "[4]" { "l3" }) + ({ "l2" } "[4]" { "l3" }) + ({ "l3" } "[3]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= x 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(= x 0)") + ("(= x 0)" "[4]" "(= x 0)") + ("(= x 0)" "[3]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= x 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[2]" "(= x 1)") + ("(= x 1)" "[4]" "(= x 1)") + ("(= x 1)" "[3]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/example_interleaving_simple.bpl_BEv2_AllErrorsAtOnce.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/example_interleaving_simple.bpl_BEv2_AllErrorsAtOnce.ats new file mode 100644 index 00000000000..6a260340be0 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/example_interleaving_simple.bpl_BEv2_AllErrorsAtOnce.ats @@ -0,0 +1,85 @@ +// Testfile dumped by Ultimate at 2023/11/28 20:46:30 +// +// + +//@ variables (set_xThread1of1ForFork0_thidvar0 Int) (y Int) (x Int) +//@ semantics [1] {x} (= x 0) +//@ semantics [2] {} true +//@ semantics [3] {} true +//@ semantics [4] {set_xThread1of1ForFork0_thidvar0} (= set_xThread1of1ForFork0_thidvar0 1) +//@ semantics [5] {} (= set_xThread1of1ForFork0_thidvar0 1) +//@ semantics [6] {y} (= y 0) +//@ semantics [7] {} (not (= y x)) +//@ semantics [8] {} (= y x) +//@ semantics [9] {} true + + +PetriNet program = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" }, + places = {l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 }, + transitions = { + ({l3 } "[6]" {l1 }) + ({l0 l8 l1 } "[5]" {l7 l9 }) + ({l4 l7 } "[4]" {l3 l5 l8 }) + ({l5 } "[1]" {l6 }) + ({l9 } "[7]" {l2 }) + ({l6 } "[2]" {l0 }) + }, + initialMarking = {l4 l7 }, + acceptingPlaces = {l2 } +); +FiniteAutomaton proof1 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" }, + states = {"false" "(= y 0)" "true" "(and (= y 0) (= x 0))" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[9]" "false") + ("(= y 0)" "[1]" "(and (= y 0) (= x 0))") + ("(= y 0)" "[2]" "(= y 0)") + ("(= y 0)" "[3]" "(= y 0)") + ("(= y 0)" "[5]" "(= y 0)") + ("(= y 0)" "[7]" "(= y 0)") + ("(= y 0)" "[9]" "(= y 0)") + ("true" "[1]" "true") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[6]" "(= y 0)") + ("true" "[9]" "true") + ("(and (= y 0) (= x 0))" "[2]" "(and (= y 0) (= x 0))") + ("(and (= y 0) (= x 0))" "[3]" "(and (= y 0) (= x 0))") + ("(and (= y 0) (= x 0))" "[5]" "(and (= y 0) (= x 0))") + ("(and (= y 0) (= x 0))" "[7]" "false") + ("(and (= y 0) (= x 0))" "[9]" "(and (= y 0) (= x 0))") + } +); +FiniteAutomaton proof2 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" }, + states = {"(= x 0)" "(and (= y 0) (= x 0))" "true" "false" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(= x 0)" "[2]" "(= x 0)") + ("(= x 0)" "[3]" "(= x 0)") + ("(= x 0)" "[5]" "(= x 0)") + ("(= x 0)" "[6]" "(and (= y 0) (= x 0))") + ("(= x 0)" "[9]" "(= x 0)") + ("(and (= y 0) (= x 0))" "[2]" "(and (= y 0) (= x 0))") + ("(and (= y 0) (= x 0))" "[3]" "(and (= y 0) (= x 0))") + ("(and (= y 0) (= x 0))" "[5]" "(and (= y 0) (= x 0))") + ("(and (= y 0) (= x 0))" "[7]" "false") + ("(and (= y 0) (= x 0))" "[9]" "(and (= y 0) (= x 0))") + ("true" "[1]" "(= x 0)") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "true") + ("true" "[6]" "true") + ("true" "[9]" "true") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[9]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/localinvariant-combined.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/localinvariant-combined.ats new file mode 100644 index 00000000000..496c3cc835d --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/localinvariant-combined.ats @@ -0,0 +1,91 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ +// The idea is that the invariant (= |main.x| 0) needed to prove unreachability +// of the main thread's error location should be "transported" only along the +// main thread. Conversely, the invariant (>= y 0) needed to prove unreachability +// of the forked thread's error location should be "transported" only along the +// forked thread. + +//@ variables (y Int) (|main.x| Int) + +//@ semantics [0] {main.x,y} (and (= |main.x| 0) (= y 0)) +//@ semantics [1] { } true +//@ semantics [2] {y} (= y 7) +//@ semantics [3] { } true +//@ semantics [4] { } (distinct |main.x| 0) +//@ semantics [5] {y} (= y (+ |old(y)| 1)) +//@ semantics [6] {y} (= y (+ |old(y)| 2)) +//@ semantics [7] { } (< y 0) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" }, + places = { "main.l0" "main.l1" "main.l2" "main.l3" "main.l4" "main.e" "t.l1" "t.l2" "t.l3" "t.e" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "main.l1" } "[1]" { "main.l2" "t.l1" }) + ({ "main.l2" } "[2]" { "main.l3" }) + ({ "main.l3" "t.l3" } "[3]" { "main.l4" }) + ({ "main.l4" } "[4]" { "main.e" }) + ({ "t.l1" } "[5]" { "t.l2" }) + ({ "t.l2" } "[6]" { "t.l3" }) + ({ "t.l3" } "[7]" { "t.e" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "main.e" "t.e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" }, + states = { "true" "(= |main.x| 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= |main.x| 0)") + + ("(= |main.x| 0)" "[1]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[2]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[3]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[5]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[6]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[7]" "(= |main.x| 0)") + + ("(= |main.x| 0)" "[4]" "false") + + ("false" "[0]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" }, + states = { "true" "(>= y 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(>= y 0)") + + ("(>= y 0)" "[1]" "(>= y 0)") + ("(>= y 0)" "[2]" "(>= y 0)") + ("(>= y 0)" "[5]" "(>= y 0)") + ("(>= y 0)" "[6]" "(>= y 0)") + + ("(>= y 0)" "[7]" "false") + + ("false" "[0]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + } +); + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/localinvariant-fork-minimal.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/localinvariant-fork-minimal.ats new file mode 100644 index 00000000000..d8b025eeabe --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/localinvariant-fork-minimal.ats @@ -0,0 +1,50 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ +// The idea is that the invariant (= |main.x| 0) needed to prove unreachability +// of the error location should be "transported" only along the main thread. +// The forked thread can have "true" as O/G annotation at every location. + +//@ variables (y Int) (|main.x| Int) + +//@ semantics [0] {main.x} (= |main.x| 0) +//@ semantics [1] {y} (= y |main.x|) +//@ semantics [2] { } (distinct |main.x| 0) +//@ semantics [3] {y} (= y (+ |old(y)| 1)) +//@ semantics [4] {y} (= y (- |old(y)| 1)) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + places = { "main.l0" "main.l1" "main.l2" "main.e" "t.l1" "t.l2" "t.l3" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" "t.l1" }) + ({ "main.l1" } "[1]" { "main.l2" }) + ({ "main.l2" "t.l3" } "[2]" { "main.e" }) + ({ "t.l1" } "[3]" { "t.l2" }) + ({ "t.l2" } "[4]" { "t.l3" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "main.e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= |main.x| 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= |main.x| 0)") + + ("(= |main.x| 0)" "[1]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[3]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[4]" "(= |main.x| 0)") + + ("(= |main.x| 0)" "[2]" "false") + + ("false" "[0]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/localinvariant-fork.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/localinvariant-fork.ats new file mode 100644 index 00000000000..9a725db0218 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/localinvariant-fork.ats @@ -0,0 +1,58 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ +// The idea is that the invariant (= |main.x| 0) needed to prove unreachability +// of the error location should be "transported" only along the main thread. +// The forked thread can have "true" as O/G annotation at every location. + +//@ variables (y Int) (|main.x| Int) + +//@ semantics [0] {main.x} (= |main.x| 0) +//@ semantics [1] { } true +//@ semantics [2] {y} (= y |main.x|) +//@ semantics [3] { } true +//@ semantics [4] { } (distinct |main.x| 0) +//@ semantics [5] {y} (= y (+ |old(y)| 1)) +//@ semantics [6] {y} (= y (- |old(y)| 1)) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" }, + places = { "main.l0" "main.l1" "main.l2" "main.l3" "main.l4" "main.e" "t.l1" "t.l2" "t.l3" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "main.l1" } "[1]" { "main.l2" "t.l1" }) + ({ "main.l2" } "[2]" { "main.l3" }) + ({ "main.l3" "t.l3" } "[3]" { "main.l4" }) + ({ "main.l4" } "[4]" { "main.e" }) + ({ "t.l1" } "[5]" { "t.l2" }) + ({ "t.l2" } "[6]" { "t.l3" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "main.e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" }, + states = { "true" "(= |main.x| 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= |main.x| 0)") + + ("(= |main.x| 0)" "[1]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[2]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[3]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[5]" "(= |main.x| 0)") + ("(= |main.x| 0)" "[6]" "(= |main.x| 0)") + + ("(= |main.x| 0)" "[4]" "false") + + ("false" "[0]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/needs-local.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/needs-local.ats new file mode 100644 index 00000000000..6905352e865 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/needs-local.ats @@ -0,0 +1,53 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ + +//@ variables (y Int) (|main.x| Int) (|t2.arg| Int) + +//@ semantics [0] { } (= y 0) +//@ semantics [1] {|main.x|} true +//@ semantics [2] {|t2.arg|} (= |t2.arg| |main.x|) +//@ semantics [3] { } (and (distinct y 0) (distinct y |main.x|)) +//@ semantics [4] {y} (= y |t2.arg|) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + places = { "main.l0" "main.l1" "main.l2" "main.l3" "main.l4" "t2.l0" "t2.l1" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "main.l1" } "[1]" { "main.l2" }) + ({ "main.l2" } "[2]" { "main.l3" "t2.l0" }) + ({ "main.l3" } "[3]" { "main.l4" }) + ({ "t2.l0" } "[4]" { "t2.l1" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "main.l4" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= y 0)" "(= |t2.arg| |main.x|)" "(or (= y 0) (= y |main.x|))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= y 0)") + ("(= y 0)" "[1]" "(= y 0)") + ("(= y 0)" "[2]" "(or (= y 0) (= y |main.x|))") + ("(or (= y 0) (= y |main.x|))" "[3]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= y 0)" "(= |t2.arg| |main.x|)" "(or (= y 0) (= y |main.x|))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= y 0)") + ("(= y 0)" "[1]" "(= y 0)") + ("(= y 0)" "[2]" "(= |t2.arg| |main.x|)") + ("(= |t2.arg| |main.x|)" "[4]" "(or (= y 0) (= y |main.x|))") + ("(or (= y 0) (= y |main.x|))" "[3]" "false") + } +); + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/nested-fork.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/nested-fork.ats new file mode 100644 index 00000000000..5aed351b3e4 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/nested-fork.ats @@ -0,0 +1,33 @@ +// Simple scalable test for computation of Owicki-Gries annotation for Petri Net with nested fork +// ---------------------------------------------------------------------------------------------- + +//@ variables (x Int) + +//@ semantics [0] { } true +//@ semantics [1] { } false + +PetriNet program = ( + alphabet = { "[0]" "[1]" }, + places = { "l0" "l1" "l2" "l3" "l4" "l5" "l6" "e" }, + transitions = { + ({ "l0" } "[0]" { "l1" "l2" }) + ({ "l1" } "[0]" { "l3" "l4" }) + ({ "l2" } "[0]" { "l5" "l6" }) + ({ "l3" "l4" "l5" "l6"} "[1]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]"}, + states = { "true" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/odd.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/odd.ats new file mode 100644 index 00000000000..4049338be77 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/odd.ats @@ -0,0 +1,56 @@ +// Simplest case of Owicki-Gries annotation: a sequential program. +// --------------------------------------------------------------- + +// The following line specifies the program variables. +// +//@ variables (x Int) + +// The following lines define the semantics of program statements. +// Each line consists of the prefix '//@ semantics ', followed by +// - a statement id in [ ], +// - a set of modifiable program variables in { }, +// - and an SMT-LIB formula defining the transition formula. +// For every modifiable variable x, the transition formula uses "x" to refer to the new value after the statement, +// while "|old(x)|" refers to the value of x before the statement is executed. +// +//@ semantics [1] {x} (= x 2) +//@ semantics [2] {x} (= x (* |old(x)| 2)) +//@ semantics [3] { } (= (mod x 2) 1) + +// The PetriNet named "program" defines the Petri program for which an Owicki-Gries annotation is computed. +// +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" }, + places = { "l0" "l1" "l2" "e" }, + transitions = { + ({ "l0" } "[1]" { "l1" }) + ({ "l1" } "[2]" { "l2" }) + ({ "l2" } "[3]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +// Finite automata whose name starts with "proof" are used to refine the Petri program. +// The states of such automata must be SMT-LIB formulae. +// Each transition must correspond to a valid Hoare triple, the initial state must be "true", the accepting state "false". +// The accepting state must have a self-loop for every letter in the alphabet. +// +FiniteAutomaton proof = ( + alphabet = { "[1]" "[2]" "[3]" }, + states = { "true" "(= (mod x 2) 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(= (mod x 2) 0)") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("(= (mod x 2) 0)" "[1]" "(= (mod x 2) 0)") + ("(= (mod x 2) 0)" "[2]" "(= (mod x 2) 0)") + ("(= (mod x 2) 0)" "[3]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/popl2026.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/popl2026.ats new file mode 100644 index 00000000000..547f89e40d8 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/popl2026.ats @@ -0,0 +1,71 @@ +// Example used in the POPL'26 paper. +// ------------------------------------------------------ + +//@ variables (x Int) (y Int) (z Int) + +//@ semantics [0] { } (> x 0) +//@ semantics [1] {y} (= y x) +//@ semantics [2] { } (> y 0) +//@ semantics [3] {y} (= y (- |old(y)| 1)) +//@ semantics [4] {x} (= x (+ |old(x)| 1)) +//@ semantics [5] { } (>= y x) +//@ semantics [6] { } (distinct x 0) +//@ semantics [7] {z} (= z (div z x)) +//@ semantics [8] {x} (= x (+ |old(x)| 1)) +//@ semantics [9] { } (< x 3) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" }, + places = { "p0" "p1" "p2" "p3" "p4" "p5" "p6" "p7" "e1" "e2" }, + transitions = { + ({ "p0" } "[0]" { "p1" "p5" }) + ({ "p1" } "[1]" { "p2" }) + ({ "p2" } "[2]" { "p3" }) + ({ "p3" } "[3]" { "p2" }) + ({ "p2" } "[4]" { "p4" }) + ({ "p4" } "[5]" { "e1" }) + ({ "p5" } "[6]" { "p6" }) + ({ "p6" } "[7]" { "p5" }) + ({ "p5" } "[8]" { "p7" }) + ({ "p4" "p7" } "[9]" { "e2" }) + }, + initialMarking = { "p0" }, + acceptingPlaces = { "e1" "e2" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" }, + states = { "true" "(> x 0)" "(and (> x 0) (<= y x))" "(> x 1)" "(and (> x 1) (<= y x))" "(and (> x 1) (< y x))" "(and (> x 2) (< y x))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(> x 0)") + + ("(> x 0)" "[6]" "(> x 0)") + ("(> x 0)" "[7]" "(> x 0)") + ("(> x 0)" "[1]" "(and (> x 0) (<= y x))") + ("(> x 0)" "[8]" "(> x 1)") + + ("(and (> x 0) (<= y x))" "[2]" "(and (> x 0) (<= y x))") + ("(and (> x 0) (<= y x))" "[3]" "(and (> x 0) (<= y x))") + ("(and (> x 0) (<= y x))" "[6]" "(and (> x 0) (<= y x))") + ("(and (> x 0) (<= y x))" "[7]" "(and (> x 0) (<= y x))") + ("(and (> x 0) (<= y x))" "[4]" "(and (> x 1) (< y x))") + ("(and (> x 0) (<= y x))" "[8]" "(and (> x 1) (<= y x))") + + ("(> x 1)" "[1]" "(and (> x 1) (<= y x))") + + ("(and (> x 1) (< y x))" "[6]" "(and (> x 1) (< y x))") + ("(and (> x 1) (< y x))" "[7]" "(and (> x 1) (< y x))") + ("(and (> x 1) (< y x))" "[8]" "(and (> x 2) (< y x))") + ("(and (> x 1) (< y x))" "[5]" "false") + + ("(and (> x 1) (<= y x))" "[2]" "(and (> x 1) (<= y x))") + ("(and (> x 1) (<= y x))" "[3]" "(and (> x 1) (<= y x))") + ("(and (> x 1) (<= y x))" "[4]" "(and (> x 2) (< y x))") + + ("(and (> x 2) (< y x))" "[5]" "false") + ("(and (> x 2) (< y x))" "[9]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-base.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-base.ats new file mode 100644 index 00000000000..e5702acb422 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-base.ats @@ -0,0 +1,67 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ + +//@ variables (z1 Int) (z2 Int) + +//@ semantics [0] {z1,z2} (and (= z1 1) (= z2 1)) +//@ semantics [1] {z1} (= z1 (+ |old(z1)| 1)) +//@ semantics [2] { } (< z1 2) +//@ semantics [3] {z2} (= z2 (+ |old(z2)| 1)) +//@ semantics [4] { } (< z2 2) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + places = { "main.l0" "t1.l1" "t1.l2" "t1.e" "t2.l1" "t2.l2" "t2.e" }, + transitions = { + ({ "main.l0" } "[0]" { "t1.l1" "t2.l1" }) + ({ "t1.l1" } "[1]" { "t1.l2" }) + ({ "t1.l2" } "[2]" { "t1.e" }) + ({ "t2.l1" } "[3]" { "t2.l2" }) + ({ "t2.l2" } "[4]" { "t2.e" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "t1.e" "t2.e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= z1 1)" "(= z1 2)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= z1 1)") + + ("(= z1 1)" "[3]" "(= z1 1)") + ("(= z1 1)" "[4]" "(= z1 1)") + ("(= z1 1)" "[1]" "(= z1 2)") + + ("(= z1 2)" "[3]" "(= z1 2)") + ("(= z1 2)" "[4]" "(= z1 2)") + ("(= z1 2)" "[2]" "false") + + ("false" "[3]" "false") + ("false" "[4]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= z2 1)" "(= z2 2)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= z2 1)") + + ("(= z2 1)" "[1]" "(= z2 1)") + ("(= z2 1)" "[2]" "(= z2 1)") + ("(= z2 1)" "[3]" "(= z2 2)") + + ("(= z2 2)" "[1]" "(= z2 2)") + ("(= z2 2)" "[2]" "(= z2 2)") + ("(= z2 2)" "[4]" "false") + + ("false" "[1]" "false") + ("false" "[2]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-init.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-init.ats new file mode 100644 index 00000000000..aa7d5847dd3 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-init.ats @@ -0,0 +1,71 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ + +//@ variables (y Int) (x Int) (z1 Int) (z2 Int) + +//@ semantics [0] {x} (= x 1) +//@ semantics [1] {y} (= y 1) +//@ semantics [2] {z1,z2} (and (= z1 x) (= z2 y)) +//@ semantics [3] {z1} (= z1 (+ |old(z1)| 1)) +//@ semantics [4] {z1} (= z1 (* |old(z1)| 2)) +//@ semantics [5] { } (= x 0) +//@ semantics [6] {z2} (= z2 (+ |old(z2)| 1)) +//@ semantics [7] {z2} (= z2 (* |old(z2)| 2)) +//@ semantics [8] { } (= y 0) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + places = { "main.l0" "main.l1" "main.l2" "t1.l1" "t1.l2" "t1.l3" "t1.e" "t2.l1" "t2.l2" "t2.l3" "t2.e" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "main.l1" } "[1]" { "main.l2" }) + ({ "main.l2" } "[2]" { "t1.l1" "t2.l1" }) + ({ "t1.l1" } "[3]" { "t1.l2" }) + ({ "t1.l2" } "[4]" { "t1.l3" }) + ({ "t1.l3" } "[5]" { "t1.e" }) + ({ "t2.l1" } "[6]" { "t2.l2" }) + ({ "t2.l2" } "[7]" { "t2.l3" }) + ({ "t2.l3" } "[8]" { "t2.e" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "t1.e" "t2.e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + states = { "true" "(= x 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= x 1)") + ("(= x 1)" "[0]" "(= x 1)") + ("(= x 1)" "[1]" "(= x 1)") + ("(= x 1)" "[2]" "(= x 1)") + ("(= x 1)" "[3]" "(= x 1)") + ("(= x 1)" "[4]" "(= x 1)") + ("(= x 1)" "[6]" "(= x 1)") + ("(= x 1)" "[7]" "(= x 1)") + ("(= x 1)" "[8]" "(= x 1)") + ("(= x 1)" "[5]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + states = { "true" "(= y 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(= y 1)") + ("(= y 1)" "[0]" "(= y 1)") + ("(= y 1)" "[1]" "(= y 1)") + ("(= y 1)" "[2]" "(= y 1)") + ("(= y 1)" "[3]" "(= y 1)") + ("(= y 1)" "[4]" "(= y 1)") + ("(= y 1)" "[5]" "(= y 1)") + ("(= y 1)" "[6]" "(= y 1)") + ("(= y 1)" "[7]" "(= y 1)") + ("(= y 1)" "[8]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-interaction.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-interaction.ats new file mode 100644 index 00000000000..4fd75554dbf --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-interaction.ats @@ -0,0 +1,57 @@ +// Simple test for computation of Owicki-Gries annotation where some ghost variables are necessary +// ------------------------------------------------------------------------------------------------------------------------------ + +//@ variables (g Int) (z1 Int) (z2 Int) + +//@ semantics [0] {g} (= g 0) +//@ semantics [1] {z1,z2} (and (= z1 1) (= z2 1)) +//@ semantics [2] {z1,z2} (and (= z1 (* |old(z1)| 2)) (= z2 (* |old(z2)| 2))) +//@ semantics [3] {g} (and (= |old(g)| 0) (= g 1)) +//@ semantics [4] { } (= g 1) +//@ semantics [5] {z1} (= z1 (+ |old(z1)| 1)) +//@ semantics [6] {z2} (= z2 (+ |old(z2)| 1)) +//@ semantics [7] { } (distinct 5 (+ z1 z2)) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" }, + places = { "m.l0" "m.l1" "t1.l0" "t1.l1" "t1.l2" "t1.l3" "t2.l0" "t2.l1" "t2.l2" "t2.l3" "e" }, + transitions = { + ({ "m.l0" } "[0]" { "m.l1" }) + ({ "m.l1" } "[1]" { "t1.l0" "t2.l0" }) + ({ "t1.l0" "t2.l0" } "[2]" { "t1.l1" "t2.l1" }) + ({ "t1.l1" } "[3]" { "t1.l2" }) + ({ "t1.l1" } "[4]" { "t1.l3" }) + ({ "t1.l2" } "[5]" { "t1.l3" }) + ({ "t2.l1" } "[3]" { "t2.l2" }) + ({ "t2.l1" } "[4]" { "t2.l3" }) + ({ "t2.l2" } "[6]" { "t2.l3" }) + ({ "t1.l3" "t2.l3" } "[7]" { "e" }) + }, + initialMarking = { "m.l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" }, + states = { "true" "(= g 0)" "(and (= g 0) (= z1 1) (= z2 1))" "(and (= g 0) (= z1 2) (= z2 2))" "(and (= g 1) (= z1 2) (= z2 2))" "(and (= g 1) (= z1 3) (= z2 2))" "(and (= g 1) (= z1 2) (= z2 3))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= g 0)") + ("(= g 0)" "[1]" "(and (= g 0) (= z1 1) (= z2 1))") + ("(and (= g 0) (= z1 1) (= z2 1))" "[2]" "(and (= g 0) (= z1 2) (= z2 2))") + ("(and (= g 0) (= z1 2) (= z2 2))" "[3]" "(and (= g 1) (= z1 2) (= z2 2))") + ("(and (= g 0) (= z1 2) (= z2 2))" "[4]" "false") + ("(and (= g 1) (= z1 2) (= z2 2))" "[4]" "(and (= g 1) (= z1 2) (= z2 2))") + ("(and (= g 1) (= z1 2) (= z2 2))" "[5]" "(and (= g 1) (= z1 3) (= z2 2))") + ("(and (= g 1) (= z1 2) (= z2 2))" "[6]" "(and (= g 1) (= z1 2) (= z2 3))") + ("(and (= g 1) (= z1 2) (= z2 2))" "[3]" "false") + ("(and (= g 1) (= z1 3) (= z2 2))" "[4]" "(and (= g 1) (= z1 3) (= z2 2))") + ("(and (= g 1) (= z1 3) (= z2 2))" "[7]" "false") + ("(and (= g 1) (= z1 3) (= z2 2))" "[3]" "false") + ("(and (= g 1) (= z1 2) (= z2 3))" "[4]" "(and (= g 1) (= z1 2) (= z2 3))") + ("(and (= g 1) (= z1 2) (= z2 3))" "[7]" "false") + ("(and (= g 1) (= z1 2) (= z2 3))" "[3]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-locks1.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-locks1.ats new file mode 100644 index 00000000000..459dd66b72a --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-locks1.ats @@ -0,0 +1,122 @@ +// Simple test for computation of Owicki-Gries annotation +// (Variant with a boolean lock) +// ------------------------------------------------------ + +//@ variables (y Int) (x Int) (z1 Int) (z2 Int) (m Bool) + +//@ semantics [0] { } (not m) +//@ semantics [1] {x,y} (and (= x 1) (= y 1)) +//@ semantics [2] {z1,z2} (and (= z1 x) (= z2 y)) +//@ semantics [3] {m} (and (not |old(m)|) m) +//@ semantics [4] {y} (= y (+ |old(y)| 1)) +//@ semantics [5] {y} (= y (- |old(y)| 1)) +//@ semantics [6] {m} (not m) +//@ semantics [7] { } (distinct z1 x) +//@ semantics [8] {m} (and (not |old(m)|) m) +//@ semantics [9] {x} (= x (+ |old(x)| 1)) +//@ semantics [10] {x} (= x (- |old(x)| 1)) +//@ semantics [11] {m} (not m) +//@ semantics [12] { } (distinct z2 y) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" }, + places = { "main.l0" "main.l1" "main.l2" "t1.l1" "t1.l2" "t1.l3" "t1.l4" "t1.l5" "t1.e" "t2.l1" "t2.l2" "t2.l3" "t2.l4" "t2.l5" "t2.e" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "main.l1" } "[1]" { "main.l2" }) + ({ "main.l2" } "[2]" { "t1.l1" "t2.l1" }) + ({ "t1.l1" } "[3]" { "t1.l2" }) + ({ "t1.l2" } "[4]" { "t1.l3" }) + ({ "t1.l3" } "[5]" { "t1.l4" }) + ({ "t1.l4" } "[6]" { "t1.l5" }) + ({ "t1.l4" } "[7]" { "t1.e" }) + ({ "t2.l1" } "[8]" { "t2.l2" }) + ({ "t2.l2" } "[9]" { "t2.l3" }) + ({ "t2.l3" } "[10]" { "t2.l4" }) + ({ "t2.l4" } "[11]" { "t2.l5" }) + ({ "t2.l4" } "[12]" { "t2.e" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "t1.e" "t2.e" } +); + +// Proof for all traces in which t1 reaches the error location, and the lock is not relevant. +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" }, + states = { "true" "(= x z1)" "(= x (+ z1 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[2]" "(= x z1)") + + ("(= x z1)" "[3]" "(= x z1)") + ("(= x z1)" "[4]" "(= x z1)") + ("(= x z1)" "[5]" "(= x z1)") + ("(= x z1)" "[6]" "(= x z1)") + ("(= x z1)" "[8]" "(= x z1)") + ("(= x z1)" "[11]" "(= x z1)") + ("(= x z1)" "[12]" "(= x z1)") + + ("(= x z1)" "[9]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[10]" "(= x z1)") + ("(= x z1)" "[7]" "false") + + ("(= x (+ z1 1))" "[3]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[4]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[5]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[6]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[7]" "(= x (+ z1 1))") + } +); + +// Proof for all traces in which t2 reaches the error location, and the lock is not relevant. +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" }, + states = { "true" "(= y z2)" "(= y (+ z2 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[2]" "(= y z2)") + + ("(= y z2)" "[8]" "(= y z2)") + ("(= y z2)" "[9]" "(= y z2)") + ("(= y z2)" "[10]" "(= y z2)") + ("(= y z2)" "[11]" "(= y z2)") + ("(= y z2)" "[3]" "(= y z2)") + ("(= y z2)" "[6]" "(= y z2)") + ("(= y z2)" "[7]" "(= y z2)") + + ("(= y z2)" "[4]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[5]" "(= y z2)") + ("(= y z2)" "[12]" "false") + + ("(= y (+ z2 1))" "[7]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[8]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[9]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[10]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[12]" "(= y (+ z2 1))") + } +); + +// Proof for all traces made them infeasible by the lock +FiniteAutomaton proof3 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" }, + states = { "true" "m" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[3]" "m") + ("true" "[8]" "m") + + ("m" "[4]" "m") + ("m" "[5]" "m") + ("m" "[7]" "m") + ("m" "[9]" "m") + ("m" "[10]" "m") + ("m" "[12]" "m") + + ("m" "[3]" "false") + ("m" "[8]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-locks2.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-locks2.ats new file mode 100644 index 00000000000..3871516a2a7 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-locks2.ats @@ -0,0 +1,140 @@ +// Simple test for computation of Owicki-Gries annotation +// (Variant with a thread ID-based lock) +// ------------------------------------------------------ + +//@ variables (y Int) (x Int) (z1 Int) (z2 Int) (m Int) + +//@ semantics [0] { } (= m 0) +//@ semantics [1] {x,y} (and (= x 1) (= y 1)) +//@ semantics [2] {z1,z2} (and (= z1 x) (= z2 y)) +//@ semantics [3] {m} (and (= |old(m)| 0) (= m 1)) +//@ semantics [4] {y} (= y (+ |old(y)| 1)) +//@ semantics [5] {y} (= y (- |old(y)| 1)) +//@ semantics [6] {m} (= m 0) +//@ semantics [7] { } (distinct z1 x) +//@ semantics [8] {m} (and (= |old(m)| 0) (= m 2)) +//@ semantics [9] {x} (= x (+ |old(x)| 1)) +//@ semantics [10] {x} (= x (- |old(x)| 1)) +//@ semantics [11] {m} (= m 0) +//@ semantics [12] { } (distinct z2 y) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" }, + places = { "main.l0" "main.l1" "main.l2" "t1.l1" "t1.l2" "t1.l3" "t1.l4" "t1.l5" "t1.e" "t2.l1" "t2.l2" "t2.l3" "t2.l4" "t2.l5" "t2.e" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "main.l1" } "[1]" { "main.l2" }) + ({ "main.l2" } "[2]" { "t1.l1" "t2.l1" }) + ({ "t1.l1" } "[3]" { "t1.l2" }) + ({ "t1.l2" } "[4]" { "t1.l3" }) + ({ "t1.l3" } "[5]" { "t1.l4" }) + ({ "t1.l4" } "[6]" { "t1.l5" }) + ({ "t1.l4" } "[7]" { "t1.e" }) + ({ "t2.l1" } "[8]" { "t2.l2" }) + ({ "t2.l2" } "[9]" { "t2.l3" }) + ({ "t2.l3" } "[10]" { "t2.l4" }) + ({ "t2.l4" } "[11]" { "t2.l5" }) + ({ "t2.l4" } "[12]" { "t2.e" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "t1.e" "t2.e" } +); + +// Proof for all traces in which t1 reaches the error location, and the lock is not relevant. +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" }, + states = { "true" "(= x z1)" "(= x (+ z1 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[2]" "(= x z1)") + + ("(= x z1)" "[3]" "(= x z1)") + ("(= x z1)" "[4]" "(= x z1)") + ("(= x z1)" "[5]" "(= x z1)") + ("(= x z1)" "[6]" "(= x z1)") + ("(= x z1)" "[8]" "(= x z1)") + ("(= x z1)" "[11]" "(= x z1)") + ("(= x z1)" "[12]" "(= x z1)") + + ("(= x z1)" "[9]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[10]" "(= x z1)") + ("(= x z1)" "[7]" "false") + + ("(= x (+ z1 1))" "[3]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[4]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[5]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[6]" "(= x (+ z1 1))") + ("(= x (+ z1 1))" "[7]" "(= x (+ z1 1))") + } +); + +// Proof for all traces in which t2 reaches the error location, and the lock is not relevant. +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" }, + states = { "true" "(= y z2)" "(= y (+ z2 1))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[2]" "(= y z2)") + + ("(= y z2)" "[8]" "(= y z2)") + ("(= y z2)" "[9]" "(= y z2)") + ("(= y z2)" "[10]" "(= y z2)") + ("(= y z2)" "[11]" "(= y z2)") + ("(= y z2)" "[3]" "(= y z2)") + ("(= y z2)" "[6]" "(= y z2)") + ("(= y z2)" "[7]" "(= y z2)") + + ("(= y z2)" "[4]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[5]" "(= y z2)") + ("(= y z2)" "[12]" "false") + + ("(= y (+ z2 1))" "[7]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[8]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[9]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[10]" "(= y (+ z2 1))") + ("(= y (+ z2 1))" "[12]" "(= y (+ z2 1))") + } +); + +// Proof for all traces made them infeasible by the lock, and t1 takes it first +FiniteAutomaton proof3 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" }, + states = { "true" "(= m 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[3]" "(= m 1)") + + ("(= m 1)" "[4]" "(= m 1)") + ("(= m 1)" "[5]" "(= m 1)") + ("(= m 1)" "[7]" "(= m 1)") + ("(= m 1)" "[9]" "(= m 1)") + ("(= m 1)" "[10]" "(= m 1)") + ("(= m 1)" "[12]" "(= m 1)") + + ("(= m 1)" "[8]" "false") + } +); + +// Proof for all traces made them infeasible by the lock, and t2 takes it first +FiniteAutomaton proof4 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" }, + states = { "true" "(= m 2)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[8]" "(= m 2)") + + ("(= m 2)" "[4]" "(= m 2)") + ("(= m 2)" "[5]" "(= m 2)") + ("(= m 2)" "[7]" "(= m 2)") + ("(= m 2)" "[9]" "(= m 2)") + ("(= m 2)" "[10]" "(= m 2)") + ("(= m 2)" "[12]" "(= m 2)") + + ("(= m 2)" "[3]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-loops.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-loops.ats new file mode 100644 index 00000000000..208d1e6b6b5 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-loops.ats @@ -0,0 +1,114 @@ +// Simple test for computation of Owicki-Gries annotation +// (Variant with loops) +// ------------------------------------------------------ + +//@ variables (y Int) (x Int) (z1 Int) (z2 Int) + +//@ semantics [0] {x} (= x 1) +//@ semantics [1] {y} (= y 1) +//@ semantics [2] {z1,z2} (and (= z1 x) (= z2 y)) +//@ semantics [3] {z1} (= z1 (+ |old(z1)| 1)) +//@ semantics [4] {z1} (= z1 (* |old(z1)| 2)) +//@ semantics [5] { } true +//@ semantics [6] { } (< z1 4) +//@ semantics [7] {z2} (= z2 (+ |old(z2)| 1)) +//@ semantics [8] {z2} (= z2 (* |old(z2)| 2)) +//@ semantics [9] { } true +//@ semantics [10] { } (< z2 4) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" }, + places = { "main.l0" "main.l1" "main.l2" "t1.l1" "t1.l2" "t1.l3" "t1.e" "t2.l1" "t2.l2" "t2.l3" "t2.e" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "main.l1" } "[1]" { "main.l2" }) + ({ "main.l2" } "[2]" { "t1.l1" "t2.l1" }) + ({ "t1.l1" } "[3]" { "t1.l2" }) + ({ "t1.l2" } "[4]" { "t1.l3" }) + ({ "t1.l3" } "[5]" { "t1.l1" }) + ({ "t1.l3" } "[6]" { "t1.e" }) + ({ "t2.l1" } "[7]" { "t2.l2" }) + ({ "t2.l2" } "[8]" { "t2.l3" }) + ({ "t2.l3" } "[9]" { "t2.l1" }) + ({ "t2.l3" } "[10]" { "t2.e" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "t1.e" "t2.e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" }, + states = { "true" "(= x 1)" "(= z1 1)" "(= z1 2)" "(>= z1 4)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= x 1)") + ("(= x 1)" "[1]" "(= x 1)") + ("(= x 1)" "[2]" "(= z1 1)") + + ("(= z1 1)" "[7]" "(= z1 1)") + ("(= z1 1)" "[8]" "(= z1 1)") + ("(= z1 1)" "[9]" "(= z1 1)") + ("(= z1 1)" "[10]" "(= z1 1)") + ("(= z1 1)" "[3]" "(= z1 2)") + + ("(= z1 2)" "[7]" "(= z1 2)") + ("(= z1 2)" "[8]" "(= z1 2)") + ("(= z1 2)" "[9]" "(= z1 2)") + ("(= z1 2)" "[10]" "(= z1 2)") + ("(= z1 2)" "[4]" "(>= z1 4)") + + ("(>= z1 4)" "[7]" "(>= z1 4)") + ("(>= z1 4)" "[8]" "(>= z1 4)") + ("(>= z1 4)" "[9]" "(>= z1 4)") + ("(>= z1 4)" "[10]" "(>= z1 4)") + ("(>= z1 4)" "[3]" "(>= z1 4)") + ("(>= z1 4)" "[4]" "(>= z1 4)") + ("(>= z1 4)" "[5]" "(>= z1 4)") + ("(>= z1 4)" "[6]" "false") + + ("false" "[7]" "false") + ("false" "[8]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" }, + states = { "true" "(= y 1)" "(= z2 1)" "(= z2 2)" "(>= z2 4)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "true") + ("true" "[1]" "(= y 1)") + ("(= y 1)" "[2]" "(= z2 1)") + + ("(= z2 1)" "[3]" "(= z2 1)") + ("(= z2 1)" "[4]" "(= z2 1)") + ("(= z2 1)" "[5]" "(= z2 1)") + ("(= z2 1)" "[6]" "(= z2 1)") + ("(= z2 1)" "[7]" "(= z2 2)") + + ("(= z2 2)" "[3]" "(= z2 2)") + ("(= z2 2)" "[4]" "(= z2 2)") + ("(= z2 2)" "[5]" "(= z2 2)") + ("(= z2 2)" "[6]" "(= z2 2)") + ("(= z2 2)" "[8]" "(>= z2 4)") + + ("(>= z2 4)" "[3]" "(>= z2 4)") + ("(>= z2 4)" "[4]" "(>= z2 4)") + ("(>= z2 4)" "[5]" "(>= z2 4)") + ("(>= z2 4)" "[6]" "(>= z2 4)") + ("(>= z2 4)" "[7]" "(>= z2 4)") + ("(>= z2 4)" "[8]" "(>= z2 4)") + ("(>= z2 4)" "[9]" "(>= z2 4)") + ("(>= z2 4)" "[10]" "false") + + ("false" "[3]" "false") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[6]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-trivial.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-trivial.ats new file mode 100644 index 00000000000..68bedb0eb43 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads-trivial.ats @@ -0,0 +1,44 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ + +//@ variables (y Int) (x Int) (z1 Int) (z2 Int) + +//@ semantics [0] {x} (= x 1) +//@ semantics [1] {y} (= y 1) +//@ semantics [2] {z1,z2} (and (= z1 x) (= z2 y)) +//@ semantics [3] {z1} (= z1 (+ |old(z1)| 1)) +//@ semantics [4] {z1} (= z1 (* |old(z1)| 2)) +//@ semantics [5] { } false +//@ semantics [6] {z2} (= z2 (+ |old(z2)| 1)) +//@ semantics [7] {z2} (= z2 (* |old(z2)| 2)) +//@ semantics [8] { } false + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + places = { "main.l0" "main.l1" "main.l2" "t1.l1" "t1.l2" "t1.l3" "t1.e" "t2.l1" "t2.l2" "t2.l3" "t2.e" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "main.l1" } "[1]" { "main.l2" }) + ({ "main.l2" } "[2]" { "t1.l1" "t2.l1" }) + ({ "t1.l1" } "[3]" { "t1.l2" }) + ({ "t1.l2" } "[4]" { "t1.l3" }) + ({ "t1.l3" } "[5]" { "t1.e" }) + ({ "t2.l1" } "[6]" { "t2.l2" }) + ({ "t2.l2" } "[7]" { "t2.l3" }) + ({ "t2.l3" } "[8]" { "t2.e" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "t1.e" "t2.e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + states = { "true" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[5]" "false") + ("true" "[8]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads.ats new file mode 100644 index 00000000000..ac71e0e96cd --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/separate-threads.ats @@ -0,0 +1,111 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ + +//@ variables (y Int) (x Int) (z1 Int) (z2 Int) + +//@ semantics [0] {x} (= x 1) +//@ semantics [1] {y} (= y 1) +//@ semantics [2] {z1,z2} (and (= z1 x) (= z2 y)) +//@ semantics [3] {z1} (= z1 (+ |old(z1)| 1)) +//@ semantics [4] {z1} (= z1 (* |old(z1)| 2)) +//@ semantics [5] { } (< z1 4) +//@ semantics [6] {z2} (= z2 (+ |old(z2)| 1)) +//@ semantics [7] {z2} (= z2 (* |old(z2)| 2)) +//@ semantics [8] { } (< z2 4) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + places = { "main.l0" "main.l1" "main.l2" "t1.l1" "t1.l2" "t1.l3" "t1.e" "t2.l1" "t2.l2" "t2.l3" "t2.e" }, + transitions = { + ({ "main.l0" } "[0]" { "main.l1" }) + ({ "main.l1" } "[1]" { "main.l2" }) + ({ "main.l2" } "[2]" { "t1.l1" "t2.l1" }) + ({ "t1.l1" } "[3]" { "t1.l2" }) + ({ "t1.l2" } "[4]" { "t1.l3" }) + ({ "t1.l3" } "[5]" { "t1.e" }) + ({ "t2.l1" } "[6]" { "t2.l2" }) + ({ "t2.l2" } "[7]" { "t2.l3" }) + ({ "t2.l3" } "[8]" { "t2.e" }) + }, + initialMarking = { "main.l0" }, + acceptingPlaces = { "t1.e" "t2.e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + states = { "true" "(= x 1)" "(= z1 1)" "(= z1 2)" "(= z1 4)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= x 1)") + + ("(= x 1)" "[1]" "(= x 1)") + ("(= x 1)" "[6]" "(= x 1)") + ("(= x 1)" "[7]" "(= x 1)") + ("(= x 1)" "[8]" "(= x 1)") + ("(= x 1)" "[2]" "(= z1 1)") + + ("(= z1 1)" "[1]" "(= z1 1)") + ("(= z1 1)" "[6]" "(= z1 1)") + ("(= z1 1)" "[7]" "(= z1 1)") + ("(= z1 1)" "[8]" "(= z1 1)") + ("(= z1 1)" "[3]" "(= z1 2)") + + ("(= z1 2)" "[1]" "(= z1 2)") + ("(= z1 2)" "[6]" "(= z1 2)") + ("(= z1 2)" "[7]" "(= z1 2)") + ("(= z1 2)" "[8]" "(= z1 2)") + ("(= z1 2)" "[4]" "(= z1 4)") + + ("(= z1 4)" "[1]" "(= z1 4)") + ("(= z1 4)" "[6]" "(= z1 4)") + ("(= z1 4)" "[7]" "(= z1 4)") + ("(= z1 4)" "[8]" "(= z1 4)") + ("(= z1 4)" "[5]" "false") + + ("false" "[1]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[8]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + states = { "true" "(= y 1)" "(= z2 1)" "(= z2 2)" "(= z2 4)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(= y 1)") + + ("(= y 1)" "[0]" "(= y 1)") + ("(= y 1)" "[3]" "(= y 1)") + ("(= y 1)" "[4]" "(= y 1)") + ("(= y 1)" "[5]" "(= y 1)") + ("(= y 1)" "[2]" "(= z2 1)") + + ("(= z2 1)" "[0]" "(= z2 1)") + ("(= z2 1)" "[3]" "(= z2 1)") + ("(= z2 1)" "[4]" "(= z2 1)") + ("(= z2 1)" "[5]" "(= z2 1)") + ("(= z2 1)" "[6]" "(= z2 2)") + + ("(= z2 2)" "[0]" "(= z2 2)") + ("(= z2 2)" "[3]" "(= z2 2)") + ("(= z2 2)" "[4]" "(= z2 2)") + ("(= z2 2)" "[5]" "(= z2 2)") + ("(= z2 2)" "[7]" "(= z2 4)") + + ("(= z2 4)" "[0]" "(= z2 4)") + ("(= z2 4)" "[3]" "(= z2 4)") + ("(= z2 4)" "[4]" "(= z2 4)") + ("(= z2 4)" "[5]" "(= z2 4)") + ("(= z2 4)" "[8]" "false") + + ("false" "[0]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[8]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/sequential.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/sequential.ats new file mode 100644 index 00000000000..c4d887ddba7 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/sequential.ats @@ -0,0 +1,56 @@ +// Simplest case of Owicki-Gries annotation: a sequential program. +// --------------------------------------------------------------- + +// The following line specifies the program variables. +// +//@ variables (x Int) + +// The following lines define the semantics of program statements. +// Each line consists of the prefix '//@ semantics ', followed by +// - a statement id in [ ], +// - a set of modifiable program variables in { }, +// - and an SMT-LIB formula defining the transition formula. +// For every modifiable variable x, the transition formula uses "x" to refer to the new value after the statement, +// while "|old(x)|" refers to the value of x before the statement is executed. +// +//@ semantics [1] {x} (= x 0) +//@ semantics [2] {x} (= x (+ |old(x)| 1)) +//@ semantics [3] { } (< x 0) + +// The PetriNet named "program" defines the Petri program for which an Owicki-Gries annotation is computed. +// +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" }, + places = { "l0" "l1" "l2" "e" }, + transitions = { + ({ "l0" } "[1]" { "l1" }) + ({ "l1" } "[2]" { "l2" }) + ({ "l2" } "[3]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +// Finite automata whose name starts with "proof" are used to refine the Petri program. +// The states of such automata must be SMT-LIB formulae. +// Each transition must correspond to a valid Hoare triple, the initial state must be "true", the accepting state "false". +// The accepting state must have a self-loop for every letter in the alphabet. +// +FiniteAutomaton proof = ( + alphabet = { "[1]" "[2]" "[3]" }, + states = { "true" "(>= x 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(>= x 0)") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("(>= x 0)" "[1]" "(>= x 0)") + ("(>= x 0)" "[2]" "(>= x 0)") + ("(>= x 0)" "[3]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/simple-cycle.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/simple-cycle.ats new file mode 100644 index 00000000000..3b40b786940 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/simple-cycle.ats @@ -0,0 +1,36 @@ +// Simple scalable test for computation of Owicki-Gries annotation for Petri Net with a cycle such that init marking can be reached infinitely often +// ------------------------------------------------------------------------------------------------------------------------------------------------- + +//@ variables (x Int) + +//@ semantics [0] {x} (= x 0) +//@ semantics [1] { } (= x 0) +//@ semantics [2] { } (distinct x 0) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" }, + places = { "l0" "l1" "e" }, + transitions = { + ({ "l0" } "[0]" { "l1" }) + ({ "l1" } "[1]" { "l0" }) + ({ "l1" } "[2]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" }, + states = { "true" "(= x 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= x 0)") + ("(= x 0)" "[0]" "(= x 0)") + ("(= x 0)" "[1]" "(= x 0)") + ("(= x 0)" "[2]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/slow/TwoActiveWorkersSirius-noassert.bpl_BEv2_AllErrorsAtOnce.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/slow/TwoActiveWorkersSirius-noassert.bpl_BEv2_AllErrorsAtOnce.ats new file mode 100644 index 00000000000..aef545985e3 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/slow/TwoActiveWorkersSirius-noassert.bpl_BEv2_AllErrorsAtOnce.ats @@ -0,0 +1,142 @@ +// Testfile dumped by Ultimate at 2023/12/18 16:50:12 +// +// + +//@ variables (workerThread2of2ForFork0_thidvar0 Int) (i Int) (workerThread1of2ForFork0_thidvar0 Int) (c Int) +//@ semantics [1] {workerThread2of2ForFork0_thidvar0} (= i workerThread2of2ForFork0_thidvar0) +//@ semantics [2] {} (= (+ workerThread1of2ForFork0_thidvar0 1) i) +//@ semantics [3] {} (= i (+ workerThread2of2ForFork0_thidvar0 1)) +//@ semantics [4] {} false +//@ semantics [5] {i} (= i 0) +//@ semantics [6] {c} (= c 0) +//@ semantics [7] {i} (= i (+ |old(i)| 1)) +//@ semantics [8] {} (< 0 i) +//@ semantics [9] {} (<= i 0) +//@ semantics [10] {} true +//@ semantics [11] {c} (= (+ i |old(c)|) c) +//@ semantics [12] {} false +//@ semantics [13] {c} (= |old(c)| (+ i c)) +//@ semantics [14] {} true +//@ semantics [15] {c} (= (+ i |old(c)|) c) +//@ semantics [16] {} false +//@ semantics [17] {c} (= |old(c)| (+ i c)) +//@ semantics [18] {} true +//@ semantics [19] {} true +//@ semantics [20] {workerThread1of2ForFork0_thidvar0} (= i workerThread1of2ForFork0_thidvar0) + + +PetriNet program = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" }, + places = {l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l10 l11 l12 l13 l14 l15 l16 l17 l18 l19 l20 l21 l22 }, + transitions = { + ({l4 } "[11]" {l2 }) + ({l10 } "[18]" {l0 }) + ({l19 } "[4]" {l3 }) + ({l15 l17 l19 } "[19]" {l8 }) + ({l14 l19 } "[20]" {l11 l15 l5 }) + ({l15 l16 l19 } "[1]" {l4 l15 l5 l17 }) + ({l15 l20 l0 } "[2]" {l14 l6 }) + ({l1 } "[5]" {l19 }) + ({l17 l20 l9 } "[3]" {l16 l6 }) + ({l18 } "[14]" {l9 }) + ({l21 } "[6]" {l1 }) + ({l6 } "[7]" {l19 }) + ({l13 } "[16]" {l12 }) + ({l13 } "[17]" {l10 }) + ({l5 } "[8]" {l20 }) + ({l5 } "[9]" {l6 }) + ({l11 } "[15]" {l13 }) + ({l2 } "[12]" {l22 }) + ({l2 } "[13]" {l18 }) + ({l3 } "[10]" {l7 }) + }, + initialMarking = {l14 l16 l21 }, + acceptingPlaces = {l12 l8 l22 } +); +FiniteAutomaton proof1 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" }, + states = {"false" "true" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("false" "[5]" "false") + ("false" "[6]" "false") + ("false" "[7]" "false") + ("false" "[8]" "false") + ("false" "[9]" "false") + ("false" "[10]" "false") + ("false" "[11]" "false") + ("false" "[13]" "false") + ("false" "[14]" "false") + ("false" "[15]" "false") + ("false" "[17]" "false") + ("false" "[18]" "false") + ("false" "[19]" "false") + ("true" "[1]" "true") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("true" "[4]" "false") + ("true" "[5]" "true") + ("true" "[6]" "true") + ("true" "[7]" "true") + ("true" "[8]" "true") + ("true" "[9]" "true") + ("true" "[10]" "true") + ("true" "[11]" "true") + ("true" "[12]" "false") + ("true" "[13]" "true") + ("true" "[14]" "true") + ("true" "[15]" "true") + ("true" "[16]" "false") + ("true" "[17]" "true") + ("true" "[18]" "true") + ("true" "[19]" "true") + ("true" "[20]" "true") + } +); +FiniteAutomaton proof2 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" }, + states = {"false" "(<= 0 i)" "(<= 1 i)" "true" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("false" "[6]" "false") + ("false" "[10]" "false") + ("false" "[14]" "false") + ("false" "[18]" "false") + ("false" "[19]" "false") + ("(<= 0 i)" "[6]" "(<= 0 i)") + ("(<= 0 i)" "[7]" "(<= 1 i)") + ("(<= 0 i)" "[8]" "(<= 1 i)") + ("(<= 0 i)" "[9]" "(<= 0 i)") + ("(<= 0 i)" "[10]" "(<= 0 i)") + ("(<= 0 i)" "[14]" "(<= 0 i)") + ("(<= 0 i)" "[15]" "(<= 0 i)") + ("(<= 0 i)" "[17]" "(<= 0 i)") + ("(<= 0 i)" "[18]" "(<= 0 i)") + ("(<= 0 i)" "[19]" "(<= 0 i)") + ("(<= 0 i)" "[20]" "(<= 0 i)") + ("(<= 1 i)" "[1]" "(<= 1 i)") + ("(<= 1 i)" "[2]" "(<= 1 i)") + ("(<= 1 i)" "[3]" "(<= 1 i)") + ("(<= 1 i)" "[6]" "(<= 1 i)") + ("(<= 1 i)" "[7]" "(<= 1 i)") + ("(<= 1 i)" "[8]" "(<= 1 i)") + ("(<= 1 i)" "[9]" "false") + ("(<= 1 i)" "[10]" "(<= 1 i)") + ("(<= 1 i)" "[11]" "(<= 1 i)") + ("(<= 1 i)" "[13]" "(<= 1 i)") + ("(<= 1 i)" "[14]" "(<= 1 i)") + ("(<= 1 i)" "[15]" "(<= 1 i)") + ("(<= 1 i)" "[17]" "(<= 1 i)") + ("(<= 1 i)" "[18]" "(<= 1 i)") + ("(<= 1 i)" "[19]" "(<= 1 i)") + ("(<= 1 i)" "[20]" "(<= 1 i)") + ("true" "[6]" "true") + ("true" "[10]" "true") + ("true" "[14]" "true") + ("true" "[5]" "(<= 0 i)") + ("true" "[18]" "true") + ("true" "[19]" "true") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/slow/TwoActiveWorkersSirius.bpl_BEv2_AllErrorsAtOnce.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/slow/TwoActiveWorkersSirius.bpl_BEv2_AllErrorsAtOnce.ats new file mode 100644 index 00000000000..a207b3e6b88 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/slow/TwoActiveWorkersSirius.bpl_BEv2_AllErrorsAtOnce.ats @@ -0,0 +1,416 @@ +// Testfile dumped by Ultimate at 2023/12/18 16:48:36 +// +// + +//@ variables (workerThread2of2ForFork0_thidvar0 Int) (i Int) (workerThread1of2ForFork0_thidvar0 Int) (c Int) +//@ semantics [1] {} (< (* 2 i) c) +//@ semantics [2] {} (<= c (* 2 i)) +//@ semantics [3] {c} (= |old(c)| (+ i c)) +//@ semantics [4] {} true +//@ semantics [5] {} true +//@ semantics [6] {workerThread1of2ForFork0_thidvar0} (= i workerThread1of2ForFork0_thidvar0) +//@ semantics [7] {workerThread2of2ForFork0_thidvar0} (= i workerThread2of2ForFork0_thidvar0) +//@ semantics [8] {} (= (+ workerThread1of2ForFork0_thidvar0 1) i) +//@ semantics [9] {} (= i (+ workerThread2of2ForFork0_thidvar0 1)) +//@ semantics [10] {} false +//@ semantics [11] {i} (= i 0) +//@ semantics [12] {c} (= c 0) +//@ semantics [13] {i} (= i (+ |old(i)| 1)) +//@ semantics [14] {} (< 0 i) +//@ semantics [15] {} (<= i 0) +//@ semantics [16] {} true +//@ semantics [17] {c} (= (+ i |old(c)|) c) +//@ semantics [18] {} (< (* 2 i) c) +//@ semantics [19] {} (<= c (* 2 i)) +//@ semantics [20] {c} (= |old(c)| (+ i c)) +//@ semantics [21] {} true +//@ semantics [22] {c} (= (+ i |old(c)|) c) + + +PetriNet program = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" }, + places = {l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l10 l11 l12 l13 l14 l15 l16 l17 l18 l19 l20 l21 l22 l23 l24 }, + transitions = { + ({l2 } "[17]" {l1 }) + ({l19 } "[20]" {l14 }) + ({l17 } "[4]" {l12 }) + ({l13 } "[10]" {l9 }) + ({l13 l5 l10 } "[5]" {l6 }) + ({l13 l4 } "[6]" {l0 l5 l11 }) + ({l13 l5 l7 } "[7]" {l0 l2 l5 l10 }) + ({l23 l5 l12 } "[8]" {l4 l15 }) + ({l18 } "[3]" {l17 }) + ({l24 } "[11]" {l13 }) + ({l23 l22 l10 } "[9]" {l15 l7 }) + ({l14 } "[21]" {l22 }) + ({l3 } "[12]" {l24 }) + ({l15 } "[13]" {l13 }) + ({l20 } "[1]" {l21 }) + ({l20 } "[2]" {l18 }) + ({l0 } "[14]" {l23 }) + ({l0 } "[15]" {l15 }) + ({l11 } "[22]" {l20 }) + ({l1 } "[18]" {l8 }) + ({l1 } "[19]" {l19 }) + ({l9 } "[16]" {l16 }) + }, + initialMarking = {l3 l4 l7 }, + acceptingPlaces = {l21 l6 l8 } +); +FiniteAutomaton proof1 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" }, + states = {"(and (<= c 0) (<= c i))" "(<= c 0)" "(and (<= c 0) (<= c (* 2 i)))" "false" "(<= c (* 2 i))" "true" "(<= c i)" "(and (<= c i) (<= c (* 2 i)))" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(and (<= c 0) (<= c i))" "[1]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[2]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c i))" "[3]" "(<= c 0)") + ("(and (<= c 0) (<= c i))" "[4]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[5]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[6]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[7]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[8]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[9]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[10]" "false") + ("(and (<= c 0) (<= c i))" "[13]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[14]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c i))" "[15]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[16]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[17]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c i))" "[18]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[19]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c i))" "[20]" "(<= c 0)") + ("(and (<= c 0) (<= c i))" "[21]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[22]" "(and (<= c i) (<= c (* 2 i)))") + ("(<= c 0)" "[4]" "(<= c 0)") + ("(<= c 0)" "[5]" "(<= c 0)") + ("(<= c 0)" "[6]" "(<= c 0)") + ("(<= c 0)" "[7]" "(<= c 0)") + ("(<= c 0)" "[8]" "(<= c 0)") + ("(<= c 0)" "[9]" "(<= c 0)") + ("(<= c 0)" "[10]" "false") + ("(<= c 0)" "[11]" "(and (<= c 0) (<= c (* 2 i)))") + ("(<= c 0)" "[13]" "(<= c 0)") + ("(<= c 0)" "[14]" "(and (<= c 0) (<= c (* 2 i)))") + ("(<= c 0)" "[15]" "(<= c 0)") + ("(<= c 0)" "[16]" "(<= c 0)") + ("(<= c 0)" "[17]" "(<= c i)") + ("(<= c 0)" "[21]" "(<= c 0)") + ("(<= c 0)" "[22]" "(<= c i)") + ("(and (<= c 0) (<= c (* 2 i)))" "[1]" "false") + ("(and (<= c 0) (<= c (* 2 i)))" "[2]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[3]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c (* 2 i)))" "[4]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[5]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[6]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[7]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[8]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[9]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[10]" "false") + ("(and (<= c 0) (<= c (* 2 i)))" "[13]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[14]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[15]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[16]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[17]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[18]" "false") + ("(and (<= c 0) (<= c (* 2 i)))" "[19]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[20]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c (* 2 i)))" "[21]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c (* 2 i)))" "[22]" "(and (<= c i) (<= c (* 2 i)))") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[16]" "false") + ("false" "[21]" "false") + ("(<= c (* 2 i))" "[1]" "false") + ("(<= c (* 2 i))" "[2]" "(<= c (* 2 i))") + ("(<= c (* 2 i))" "[3]" "(<= c i)") + ("(<= c (* 2 i))" "[4]" "(<= c (* 2 i))") + ("(<= c (* 2 i))" "[5]" "(<= c (* 2 i))") + ("(<= c (* 2 i))" "[10]" "false") + ("(<= c (* 2 i))" "[13]" "(<= c (* 2 i))") + ("(<= c (* 2 i))" "[14]" "(<= c (* 2 i))") + ("(<= c (* 2 i))" "[15]" "(and (<= c 0) (<= c (* 2 i)))") + ("(<= c (* 2 i))" "[16]" "(<= c (* 2 i))") + ("(<= c (* 2 i))" "[18]" "false") + ("(<= c (* 2 i))" "[19]" "(<= c (* 2 i))") + ("(<= c (* 2 i))" "[20]" "(<= c i)") + ("(<= c (* 2 i))" "[21]" "(<= c (* 2 i))") + ("true" "[4]" "true") + ("true" "[5]" "true") + ("true" "[12]" "(<= c 0)") + ("true" "[16]" "true") + ("true" "[21]" "true") + ("(<= c i)" "[1]" "(and (<= c 0) (<= c i))") + ("(<= c i)" "[2]" "(and (<= c i) (<= c (* 2 i)))") + ("(<= c i)" "[3]" "(<= c 0)") + ("(<= c i)" "[4]" "(<= c i)") + ("(<= c i)" "[5]" "(<= c i)") + ("(<= c i)" "[6]" "(<= c i)") + ("(<= c i)" "[7]" "(<= c i)") + ("(<= c i)" "[8]" "(<= c i)") + ("(<= c i)" "[9]" "(<= c i)") + ("(<= c i)" "[10]" "false") + ("(<= c i)" "[13]" "(<= c i)") + ("(<= c i)" "[14]" "(and (<= c i) (<= c (* 2 i)))") + ("(<= c i)" "[15]" "(and (<= c 0) (<= c i))") + ("(<= c i)" "[16]" "(<= c i)") + ("(<= c i)" "[17]" "(<= c (* 2 i))") + ("(<= c i)" "[18]" "(and (<= c 0) (<= c i))") + ("(<= c i)" "[19]" "(and (<= c i) (<= c (* 2 i)))") + ("(<= c i)" "[20]" "(<= c 0)") + ("(<= c i)" "[21]" "(<= c i)") + ("(<= c i)" "[22]" "(<= c (* 2 i))") + ("(and (<= c i) (<= c (* 2 i)))" "[1]" "false") + ("(and (<= c i) (<= c (* 2 i)))" "[2]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[3]" "(and (<= c 0) (<= c i))") + ("(and (<= c i) (<= c (* 2 i)))" "[4]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[5]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[6]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[7]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[8]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[9]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[10]" "false") + ("(and (<= c i) (<= c (* 2 i)))" "[13]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[14]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[15]" "(and (<= c 0) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[16]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[17]" "(<= c (* 2 i))") + ("(and (<= c i) (<= c (* 2 i)))" "[18]" "false") + ("(and (<= c i) (<= c (* 2 i)))" "[19]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[20]" "(and (<= c 0) (<= c i))") + ("(and (<= c i) (<= c (* 2 i)))" "[21]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[22]" "(<= c (* 2 i))") + } +); +FiniteAutomaton proof2 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" }, + states = {"(<= 1 i)" "true" "(<= 0 i)" "false" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(<= 1 i)" "[1]" "(<= 1 i)") + ("(<= 1 i)" "[2]" "(<= 1 i)") + ("(<= 1 i)" "[3]" "(<= 1 i)") + ("(<= 1 i)" "[4]" "(<= 1 i)") + ("(<= 1 i)" "[5]" "(<= 1 i)") + ("(<= 1 i)" "[6]" "(<= 1 i)") + ("(<= 1 i)" "[7]" "(<= 1 i)") + ("(<= 1 i)" "[8]" "(<= 1 i)") + ("(<= 1 i)" "[9]" "(<= 1 i)") + ("(<= 1 i)" "[12]" "(<= 1 i)") + ("(<= 1 i)" "[13]" "(<= 1 i)") + ("(<= 1 i)" "[14]" "(<= 1 i)") + ("(<= 1 i)" "[15]" "false") + ("(<= 1 i)" "[16]" "(<= 1 i)") + ("(<= 1 i)" "[17]" "(<= 1 i)") + ("(<= 1 i)" "[18]" "(<= 1 i)") + ("(<= 1 i)" "[19]" "(<= 1 i)") + ("(<= 1 i)" "[20]" "(<= 1 i)") + ("(<= 1 i)" "[21]" "(<= 1 i)") + ("(<= 1 i)" "[22]" "(<= 1 i)") + ("true" "[11]" "(<= 0 i)") + ("true" "[4]" "true") + ("true" "[5]" "true") + ("true" "[12]" "true") + ("true" "[16]" "true") + ("true" "[21]" "true") + ("(<= 0 i)" "[2]" "(<= 0 i)") + ("(<= 0 i)" "[3]" "(<= 0 i)") + ("(<= 0 i)" "[4]" "(<= 0 i)") + ("(<= 0 i)" "[5]" "(<= 0 i)") + ("(<= 0 i)" "[6]" "(<= 0 i)") + ("(<= 0 i)" "[12]" "(<= 0 i)") + ("(<= 0 i)" "[13]" "(<= 1 i)") + ("(<= 0 i)" "[14]" "(<= 1 i)") + ("(<= 0 i)" "[15]" "(<= 0 i)") + ("(<= 0 i)" "[16]" "(<= 0 i)") + ("(<= 0 i)" "[21]" "(<= 0 i)") + ("(<= 0 i)" "[22]" "(<= 0 i)") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[12]" "false") + ("false" "[16]" "false") + ("false" "[21]" "false") + } +); +FiniteAutomaton proof3 = ( + alphabet = {"[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[11]" "[12]" "[13]" "[14]" "[15]" "[16]" "[17]" "[18]" "[19]" "[20]" "[21]" "[22]" }, + states = {"(and (<= (+ c 1) i) (<= 1 i))" "(and (<= c 0) (<= 1 i))" "(and (<= c i) (<= (+ 2 c) (* 2 i)))" "(and (<= c 0) (<= c i))" "(and (<= c i) (<= 0 i))" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "false" "true" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "(and (<= c i) (<= c (* 2 i)))" "(<= c 0)" "(and (<= c (* 3 i)) (<= c (* 2 i)))" "(and (<= c i) (<= 1 i))" "(and (<= c 0) (<= 0 i))" }, + initialStates = {"true" }, + finalStates = {"false" }, + transitions = { + ("(and (<= (+ c 1) i) (<= 1 i))" "[1]" "false") + ("(and (<= (+ c 1) i) (<= 1 i))" "[2]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[3]" "(and (<= c 0) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[4]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[5]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[6]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[7]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[8]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[9]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[13]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[14]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[16]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[17]" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[18]" "false") + ("(and (<= (+ c 1) i) (<= 1 i))" "[19]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[20]" "(and (<= c 0) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[21]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) i) (<= 1 i))" "[22]" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[1]" "false") + ("(and (<= c 0) (<= 1 i))" "[2]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[3]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[4]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[5]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[6]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[7]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[8]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[9]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[13]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[14]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[16]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[17]" "(and (<= c i) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[18]" "false") + ("(and (<= c 0) (<= 1 i))" "[19]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[20]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[21]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 1 i))" "[22]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[1]" "false") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[2]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[3]" "(and (<= c 0) (<= c i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[4]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[5]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[6]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[7]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[8]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[9]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[13]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[14]" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[16]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[17]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[18]" "false") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[19]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[20]" "(and (<= c 0) (<= c i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[21]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)))" "[22]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c 0) (<= c i))" "[4]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[5]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[6]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[7]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[13]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[8]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[14]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= c i))" "[9]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[16]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[17]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c 0) (<= c i))" "[21]" "(and (<= c 0) (<= c i))") + ("(and (<= c 0) (<= c i))" "[22]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= 0 i))" "[2]" "(and (<= c i) (<= 0 i))") + ("(and (<= c i) (<= 0 i))" "[3]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c i) (<= 0 i))" "[4]" "(and (<= c i) (<= 0 i))") + ("(and (<= c i) (<= 0 i))" "[5]" "(and (<= c i) (<= 0 i))") + ("(and (<= c i) (<= 0 i))" "[13]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= c i) (<= 0 i))" "[14]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 0 i))" "[15]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c i) (<= 0 i))" "[16]" "(and (<= c i) (<= 0 i))") + ("(and (<= c i) (<= 0 i))" "[21]" "(and (<= c i) (<= 0 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[2]" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[3]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[4]" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[5]" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[8]" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[9]" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[13]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[16]" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[17]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[19]" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[20]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[21]" "(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))") + ("(and (<= c i) (<= (+ 2 c) (* 2 i)) (<= 1 i))" "[22]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("false" "[4]" "false") + ("false" "[5]" "false") + ("false" "[16]" "false") + ("false" "[21]" "false") + ("true" "[4]" "true") + ("true" "[5]" "true") + ("true" "[12]" "(<= c 0)") + ("true" "[16]" "true") + ("true" "[21]" "true") + ("(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "[2]" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))") + ("(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "[3]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "[4]" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))") + ("(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "[5]" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))") + ("(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "[14]" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))") + ("(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "[16]" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))") + ("(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "[19]" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))") + ("(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "[20]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= (+ c 1) (* 2 i)) (<= 1 i))" "[21]" "(and (<= (+ c 1) (* 2 i)) (<= 1 i))") + ("(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "[2]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "[3]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "[4]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "[5]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "[14]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "[16]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "[19]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "[20]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))" "[21]" "(and (<= c (* 2 i)) (<= (+ 2 c) (* 3 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[1]" "false") + ("(and (<= c i) (<= c (* 2 i)))" "[2]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[3]" "(and (<= c 0) (<= c i))") + ("(and (<= c i) (<= c (* 2 i)))" "[4]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[5]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[8]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[9]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[13]" "(and (<= c i) (<= (+ 2 c) (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[14]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= c (* 2 i)))" "[16]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[18]" "false") + ("(and (<= c i) (<= c (* 2 i)))" "[19]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c i) (<= c (* 2 i)))" "[20]" "(and (<= c 0) (<= c i))") + ("(and (<= c i) (<= c (* 2 i)))" "[21]" "(and (<= c i) (<= c (* 2 i)))") + ("(<= c 0)" "[11]" "(and (<= c 0) (<= 0 i))") + ("(<= c 0)" "[4]" "(<= c 0)") + ("(<= c 0)" "[5]" "(<= c 0)") + ("(<= c 0)" "[16]" "(<= c 0)") + ("(<= c 0)" "[21]" "(<= c 0)") + ("(and (<= c (* 3 i)) (<= c (* 2 i)))" "[2]" "(and (<= c (* 3 i)) (<= c (* 2 i)))") + ("(and (<= c (* 3 i)) (<= c (* 2 i)))" "[3]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c (* 3 i)) (<= c (* 2 i)))" "[4]" "(and (<= c (* 3 i)) (<= c (* 2 i)))") + ("(and (<= c (* 3 i)) (<= c (* 2 i)))" "[5]" "(and (<= c (* 3 i)) (<= c (* 2 i)))") + ("(and (<= c (* 3 i)) (<= c (* 2 i)))" "[14]" "(and (<= c (* 3 i)) (<= c (* 2 i)))") + ("(and (<= c (* 3 i)) (<= c (* 2 i)))" "[16]" "(and (<= c (* 3 i)) (<= c (* 2 i)))") + ("(and (<= c (* 3 i)) (<= c (* 2 i)))" "[19]" "(and (<= c (* 3 i)) (<= c (* 2 i)))") + ("(and (<= c (* 3 i)) (<= c (* 2 i)))" "[20]" "(and (<= c i) (<= c (* 2 i)))") + ("(and (<= c (* 3 i)) (<= c (* 2 i)))" "[21]" "(and (<= c (* 3 i)) (<= c (* 2 i)))") + ("(and (<= c i) (<= 1 i))" "[1]" "false") + ("(and (<= c i) (<= 1 i))" "[2]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[3]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[4]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[5]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[6]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[7]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[8]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[9]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[13]" "(and (<= (+ c 1) i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[14]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[16]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[17]" "(and (<= c (* 3 i)) (<= c (* 2 i)))") + ("(and (<= c i) (<= 1 i))" "[18]" "false") + ("(and (<= c i) (<= 1 i))" "[19]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[20]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[21]" "(and (<= c i) (<= 1 i))") + ("(and (<= c i) (<= 1 i))" "[22]" "(and (<= c (* 3 i)) (<= c (* 2 i)))") + ("(and (<= c 0) (<= 0 i))" "[2]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c 0) (<= 0 i))" "[3]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c 0) (<= 0 i))" "[4]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c 0) (<= 0 i))" "[5]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c 0) (<= 0 i))" "[6]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c 0) (<= 0 i))" "[13]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 0 i))" "[14]" "(and (<= c 0) (<= 1 i))") + ("(and (<= c 0) (<= 0 i))" "[15]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c 0) (<= 0 i))" "[16]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c 0) (<= 0 i))" "[21]" "(and (<= c 0) (<= 0 i))") + ("(and (<= c 0) (<= 0 i))" "[22]" "(and (<= c i) (<= 0 i))") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/sometimes-enabled-cycle.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/sometimes-enabled-cycle.ats new file mode 100644 index 00000000000..81cb9ddb5e0 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/sometimes-enabled-cycle.ats @@ -0,0 +1,32 @@ +// Simple test for transitions that are not always enabled if a marking contains a predecessor +// ------------------------------------------------------------------------------------------- + +//@ variables (y Int) + +//@ semantics [0] { } true +//@ semantics [1] { } false + +PetriNet program = ( + alphabet = { "[0]" "[1]" }, + places = { "l0" "l1" "l2" "l3" "l4" "l5" "e" }, + transitions = { + ({ "l0" } "[0]" { "l1" "l2" }) + ({ "l1" "l2" } "[0]" { "l3" }) + ({ "l3" } "[0]" { "l2" "l4" }) + ({ "l2" "l4" } "[0]" { "l5" }) + ({ "l5" } "[0]" { "l0" }) + ({ "l3" } "[1]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" }, + states = { "true" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/sometimes-enabled.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/sometimes-enabled.ats new file mode 100644 index 00000000000..c20d867fd10 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/sometimes-enabled.ats @@ -0,0 +1,32 @@ +// Simple test for transitions that are not always enabled if a marking contains a predecessor +// ------------------------------------------------------------------------------------------- + +//@ variables (y Int) + +//@ semantics [0] { } true +//@ semantics [1] { } false + +PetriNet program = ( + alphabet = { "[0]" "[1]" }, + places = { "l0" "l1" "l2" "l3" "l4" "l5" "e" }, + transitions = { + ({ "l0" } "[0]" { "l1" "l2" }) + ({ "l1" "l2" } "[0]" { "l3" }) + ({ "l3" } "[0]" { "l2" "l4" }) + ({ "l2" "l4" } "[0]" { "l5" }) + ({ "l3" } "[1]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" }, + states = { "true" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/subset-marking.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/subset-marking.ats new file mode 100644 index 00000000000..638e42e332f --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/subset-marking.ats @@ -0,0 +1,37 @@ +// Test where one marking is subset of another, +// and corresponding assertions differ. +// ------------------------------------------------------ + +//@ variables (y Int) (x Int) + +//@ semantics [0] {x} (= x 1) +//@ semantics [1] {y} (= y 1) +//@ semantics [2] { } (and (= x 0) (= y 0)) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" }, + places = { "l0" "l1" "l2" "e" }, + transitions = { + ({ "l0" } "[0]" { "l1" }) + ({ "l0" } "[1]" { "l1" "l2" }) + ({ "l1" } "[2]" { "e" }) + ({ "l1" "l2" } "[2]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" }, + states = { "true" "(= x 1)" "(= y 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= x 1)") + ("true" "[1]" "(= y 1)") + ("(= x 1)" "[2]" "false") + ("(= y 1)" "[2]" "false") + } +); + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/temporary-worker.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/temporary-worker.ats new file mode 100644 index 00000000000..3979c10095e --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/temporary-worker.ats @@ -0,0 +1,41 @@ +// Simple scalable test for computation of Owicki-Gries annotation for Petri Net with a main thread and a temporary worker thread +// ------------------------------------------------------------------------------------------------------------------------------ + +//@ variables (x Int) (z1 Int) (z2 Int) + +//@ semantics [0] {x} (= x 0) +//@ semantics [1] {z1,z2} (and (= z1 1) (= z2 1)) +//@ semantics [2] {x} (= x (+ |old(x)| z1 z2)) +//@ semantics [3] {x} (= x (* |old(x)| 10)) +//@ semantics [4] { } (distinct x 20) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + places = { "m.l0" "m.l1" "m.l2" "m.l3" "t.l0" "t.l1" "e" }, + transitions = { + ({ "m.l0" } "[0]" { "m.l1" "t.l0" }) + ({ "t.l0" } "[1]" { "t.l1" }) + ({ "m.l1" "t.l1" } "[2]" { "m.l2" }) + ({ "m.l2" } "[3]" { "m.l3" }) + ({ "m.l3" } "[4]" { "e" }) + }, + initialMarking = { "m.l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= x 0)" "(and (= x 0) (= z1 1) (= z2 1))" "(= x 2)" "(= x 20)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= x 0)") + ("(= x 0)" "[1]" "(and (= x 0) (= z1 1) (= z2 1))") + ("(and (= x 0) (= z1 1) (= z2 1))" "[2]" "(= x 2)") + ("(= x 2)" "[3]" "(= x 20)") + ("(= x 20)" "[4]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-bystander.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-bystander.ats new file mode 100644 index 00000000000..9188e48fda2 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-bystander.ats @@ -0,0 +1,39 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ + +//@ variables (x Int) + +//@ semantics [1] {x} (>= x 0) +//@ semantics [2] {x} (= x (+ |old(x)| 1)) +//@ semantics [3] { } (< x 0) + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" }, + places = { "l0" "l1" "l2" "l3" "e" }, + transitions = { + ({ "l0" } "[1]" { "l1" "l2" }) + ({ "l2" } "[2]" { "l2" }) + ({ "l1" } "[3]" { "e" }) + }, + initialMarking = { "l0" "l3" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[1]" "[2]" "[3]" }, + states = { "true" "(>= x 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(>= x 0)") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("(>= x 0)" "[1]" "(>= x 0)") + ("(>= x 0)" "[2]" "(>= x 0)") + ("(>= x 0)" "[3]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-fork-join.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-fork-join.ats new file mode 100644 index 00000000000..3aac6155f60 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-fork-join.ats @@ -0,0 +1,40 @@ +// Simple test for computation of Owicki-Gries annotation with a fork-join pattern +// ------------------------------------------------------------------------------- + +//@ variables (x Int) + +//@ semantics [1] {x} (>= x 0) +//@ semantics [2] {x} (= x (+ |old(x)| 1)) +//@ semantics [3] { } (< x 0) + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" }, + places = { "l0" "l1" "l2" "l3" "l4" "e" }, + transitions = { + ({ "l0" } "[1]" { "l1" "l2" }) + ({ "l1" } "[2]" { "l3" }) + ({ "l2" "l3" } "[1]" { "l4" }) + ({ "l2" } "[3]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[1]" "[2]" "[3]" }, + states = { "true" "(>= x 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(>= x 0)") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("(>= x 0)" "[1]" "(>= x 0)") + ("(>= x 0)" "[2]" "(>= x 0)") + ("(>= x 0)" "[3]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-join.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-join.ats new file mode 100644 index 00000000000..3907e4fa864 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-join.ats @@ -0,0 +1,48 @@ +// Simple test for computation of Owicki-Gries annotation with a fork-join pattern +// ------------------------------------------------------------------------------- + +//@ variables (x Int) (y Int) (z Int) + +//@ semantics [1] {x} (= x 0) +//@ semantics [2] {y} (= y 0) +//@ semantics [3] {z} (= z (+ x y)) +//@ semantics [4] { } (distinct z 0) + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" }, + places = { "l0" "l1" "l2" "l3" "l4" "e" }, + transitions = { + ({ "l0" } "[1]" { "l2" }) + ({ "l1" } "[2]" { "l3" }) + ({ "l2" "l3" } "[3]" { "l4" }) + ({ "l4" } "[4]" { "e" }) + }, + initialMarking = { "l0" "l1"}, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof1 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= x 0)" "(and (= x 0) (= y 0))" "(= z 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(= x 0)") + ("(= x 0)" "[2]" "(and (= x 0) (= y 0))") + ("(and (= x 0) (= y 0))" "[3]" "(= z 0)") + ("(= z 0)" "[4]" "false") + } +); + +FiniteAutomaton proof2 = ( + alphabet = { "[1]" "[2]" "[3]" "[4]" }, + states = { "true" "(= y 0)" "(and (= x 0) (= y 0))" "(= z 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[2]" "(= y 0)") + ("(= y 0)" "[1]" "(and (= x 0) (= y 0))") + ("(and (= x 0) (= y 0))" "[3]" "(= z 0)") + ("(= z 0)" "[4]" "false") + } +); diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-recursive-post-processing.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-recursive-post-processing.ats new file mode 100644 index 00000000000..580ae59a010 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test-recursive-post-processing.ats @@ -0,0 +1,48 @@ +// Simple test for computation of Owicki-Gries annotation for the case of recursive post-processing +// ------------------------------------------------------------------------------------------------ + +//@ variables (x Int) + +//@ semantics [0] {x} (= x 0) +//@ semantics [1] {x} (= x 1) +//@ semantics [2] { } true +//@ semantics [3] { } false + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" }, + places = { "m.l0" "m.l1" "m.l2" "t.l0" "t.l1" "t.l2" "e" }, + transitions = { + ({ "m.l0" } "[0]" { "m.l1" }) + ({ "m.l1" "t.l1" } "[2]" { "m.l2" "t.l2" }) + ({ "m.l2" "t.l2" } "[1]" { "m.l1" "t.l1" }) + ({ "t.l0" } "[2]" { "t.l1" }) + ({ "m.l2" } "[3]" { "e" }) + }, + initialMarking = { "m.l0" "t.l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" }, + states = { "true" "(= x 0)" "(= x 1)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[0]" "(= x 0)") + ("(= x 0)" "[0]" "(= x 0)") + ("(= x 0)" "[1]" "(= x 1)") + ("(= x 0)" "[2]" "(= x 0)") + ("(= x 0)" "[3]" "false") + ("(= x 1)" "[0]" "(= x 0)") + ("(= x 1)" "[1]" "(= x 1)") + ("(= x 1)" "[2]" "(= x 1)") + ("(= x 1)" "[3]" "false") + ("false" "[0]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + } +); + + + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/test.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test.ats new file mode 100644 index 00000000000..b1b87fdd32f --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test.ats @@ -0,0 +1,39 @@ +// Simple test for computation of Owicki-Gries annotation +// ------------------------------------------------------ + +//@ variables (x Int) + +//@ semantics [1] {x} (>= x 0) +//@ semantics [2] {x} (= x (+ |old(x)| 1)) +//@ semantics [3] { } (< x 0) + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" }, + places = { "l0" "l1" "l2" "e" }, + transitions = { + ({ "l0" } "[1]" { "l1" "l2" }) + ({ "l2" } "[2]" { "l2" }) + ({ "l1" } "[3]" { "e" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[1]" "[2]" "[3]" }, + states = { "true" "(>= x 0)" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[1]" "(>= x 0)") + ("true" "[2]" "true") + ("true" "[3]" "true") + ("(>= x 0)" "[1]" "(>= x 0)") + ("(>= x 0)" "[2]" "(>= x 0)") + ("(>= x 0)" "[3]" "false") + ("false" "[1]" "false") + ("false" "[2]" "false") + ("false" "[3]" "false") + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/test_foundation.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test_foundation.ats new file mode 100644 index 00000000000..480adea016f --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/test_foundation.ats @@ -0,0 +1,32 @@ +// Simple test for foundation (and immigration) case in CrownExpansion +// ------------------------------------------------------ + +//@ variables (x Int) + +//@ semantics [1] { } (= x x) +//@ semantics [2] { } (= x 0) +//@ semantics [3] { } (> x 0) + +PetriNet program = ( + alphabet = { "[1]" "[2]" "[3]" }, + places = { "l0" "l1" "l2" "l3" "l4" "l5" "e"}, + transitions = { + ({ "l0" } "[1]" { "l1" "l2" "l5" }) + ({ "l1" "l2" } "[2]" { "l3" "l4" }) + ({ "l1" "l2" } "[3]" { "l3" "l4" }) + }, + initialMarking = { "l0" }, + acceptingPlaces = { "e" } +); + +FiniteAutomaton proof = ( + alphabet = { "[1]" "[2]" "[3]" }, + states = { "true" }, + initialStates = { "true" }, + finalStates = { }, + transitions = { + ("true" "[1]" "true") + ("true" "[2]" "true") + ("true" "[3]" "true") + } +); \ No newline at end of file diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/thread-bound1.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/thread-bound1.ats new file mode 100644 index 00000000000..3f45ded0d6d --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/thread-bound1.ats @@ -0,0 +1,29 @@ +// Owicki-Gries annotation for program proving only thread bound +// ------------------------------------------------------------- + +//@ variables (x Int) + +//@ semantics [1] { } true +//@ semantics [2] { } true + +PetriNet program = ( + alphabet = { "[1]" "[2]" }, + places = { "main.l0" "main.l1" "t.l0" "notInUse" "inUse" "insufficient" }, + transitions = { + ({ "main.l0" "notInUse" } "[1]" { "main.l1" "t.l0" "inUse" }) + ({ "main.l0" "inUse" } "[1]" { "insufficient" }) + ({ "main.l1" "t.l0" "inUse" } "[2]" { "main.l0" "notInUse" }) + }, + initialMarking = { "main.l0" "notInUse" }, + acceptingPlaces = { "insufficient" } +); + +FiniteAutomaton proof = ( + alphabet = { "[1]" "[2]" }, + states = { "true" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/thread-bound2.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/thread-bound2.ats new file mode 100644 index 00000000000..6050ef45f06 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/thread-bound2.ats @@ -0,0 +1,42 @@ +// Owicki-Gries annotation for program proving only thread bound +// ------------------------------------------------------------- + +//@ variables (x Int) + +//@ semantics [0] { } true +//@ semantics [1] { } true +//@ semantics [2] { } true +//@ semantics [3] { } true +//@ semantics [4] { } true +//@ semantics [5] { } true +//@ semantics [6] { } true +//@ semantics [7] { } true + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" }, + places = { "main.l0" "main.l1" "main.l2" "main.l3" "t1.l0" "t2.l0" "notInUse1" "inUse1" "notInUse2" "inUse2" "insufficient" }, + transitions = { + ({ "main.l0" "notInUse1" } "[0]" { "main.l1" "t1.l0" "inUse1" }) + ({ "main.l0" "inUse1" "notInUse2" } "[1]" { "main.l1" "t2.l0" "inUse2" }) + ({ "main.l0" "inUse1" "inUse2" } "[2]" { "insufficient" }) + + ({ "main.l1" "notInUse1" } "[3]" { "main.l2" "t1.l0" "inUse1" }) + ({ "main.l1" "inUse1" "notInUse2" } "[4]" { "main.l2" "t2.l0" "inUse1" "inUse2" }) + ({ "main.l1" "inUse1" "inUse2" } "[5]" { "insufficient" }) + + ({ "main.l2" "t1.l0" "inUse1" } "[6]" { "main.l3" "notInUse1" }) + ({ "main.l3" "t2.l0" "inUse2" } "[7]" { "main.l0" "notInUse2" }) + }, + initialMarking = { "main.l0" "notInUse1" "notInUse2" }, + acceptingPlaces = { "insufficient" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" }, + states = { "true" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + } +); + diff --git a/trunk/examples/concurrent/OwickiGries/PetriPrograms/thread-race.ats b/trunk/examples/concurrent/OwickiGries/PetriPrograms/thread-race.ats new file mode 100644 index 00000000000..c539c764b05 --- /dev/null +++ b/trunk/examples/concurrent/OwickiGries/PetriPrograms/thread-race.ats @@ -0,0 +1,54 @@ +// Simple scalable test for computation of Owicki-Gries annotation for Petri Net with two threads having a race to write a variable +// -------------------------------------------------------------------------------------------------------------------------------- + +//@ variables (x Int) (g Int) (z1 Int) (z2 Int) + +//@ semantics [0] {g} (= g 0) +//@ semantics [1] {z1} (= z1 0) +//@ semantics [2] {z1} (= z1 (+ |old(z1)| 1)) +//@ semantics [3] {z2} (= z2 0) +//@ semantics [4] {z2} (= z2 (+ |old(z2)| 1)) +//@ semantics [5] {g,x} (and (= |old(g)| 0) (= g 1) (= x 1)) +//@ semantics [6] { } (distinct x 1) +//@ semantics [7] {g,x} (and (= |old(g)| 0) (= g 1) (= x 2)) +//@ semantics [8] { } (distinct x 2) + +PetriNet program = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + places = { "m" "t1.l0" "t1.l1" "t1.l2" "t1.l3" "t2.l0" "t2.l1" "t2.l2" "t2.l3" "e1" "e2" }, + transitions = { + ({ "m" } "[0]" { "t1.l0" "t2.l0" }) + ({ "t1.l0" } "[1]" { "t1.l1" }) + ({ "t1.l1" } "[2]" { "t1.l2" }) + ({ "t1.l2" } "[5]" { "t1.l3" }) + ({ "t1.l3" } "[6]" { "e1" }) + ({ "t2.l0" } "[3]" { "t2.l1" }) + ({ "t2.l1" } "[4]" { "t2.l2" }) + ({ "t2.l2" } "[7]" { "t2.l3" }) + ({ "t2.l3" } "[8]" { "e2" }) + }, + initialMarking = { "m" }, + acceptingPlaces = { "e1" "e2" } +); + +FiniteAutomaton proof = ( + alphabet = { "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" }, + states = { "true" "(and (= g 1) (= x 1))" "(and (= g 1) (= x 2))" "false" }, + initialStates = { "true" }, + finalStates = { "false" }, + transitions = { + ("true" "[5]" "(and (= g 1) (= x 1))") + ("(and (= g 1) (= x 1))" "[3]" "(and (= g 1) (= x 1))") + ("(and (= g 1) (= x 1))" "[4]" "(and (= g 1) (= x 1))") + ("(and (= g 1) (= x 1))" "[6]" "false") + ("(and (= g 1) (= x 1))" "[7]" "false") + + ("true" "[7]" "(and (= g 1) (= x 2))") + ("(and (= g 1) (= x 2))" "[1]" "(and (= g 1) (= x 2))") + ("(and (= g 1) (= x 2))" "[2]" "(and (= g 1) (= x 2))") + ("(and (= g 1) (= x 2))" "[5]" "false") + ("(and (= g 1) (= x 2))" "[8]" "false") + } +); + + diff --git a/trunk/examples/settings/default/gemcutter/svcomp-DataRace-32bit-GemCutter_Bitvector.epf b/trunk/examples/settings/default/gemcutter/svcomp-DataRace-32bit-GemCutter_Bitvector.epf index bbed89f7e93..bcdf01b1bd4 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-DataRace-32bit-GemCutter_Bitvector.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-DataRace-32bit-GemCutter_Bitvector.epf @@ -61,7 +61,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Logic\ for\ external\ solver=ALL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=cvc4 --incremental --print-success --lang smt -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=FOX /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-DataRace-32bit-GemCutter_Default.epf b/trunk/examples/settings/default/gemcutter/svcomp-DataRace-32bit-GemCutter_Default.epf index 2912d12680b..ffe0aaa6244 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-DataRace-32bit-GemCutter_Default.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-DataRace-32bit-GemCutter_Default.epf @@ -57,7 +57,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-DataRace-64bit-GemCutter_Bitvector.epf b/trunk/examples/settings/default/gemcutter/svcomp-DataRace-64bit-GemCutter_Bitvector.epf index 0c347e49614..d1cba2ca194 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-DataRace-64bit-GemCutter_Bitvector.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-DataRace-64bit-GemCutter_Bitvector.epf @@ -58,7 +58,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Logic\ for\ external\ solver=ALL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=cvc4 --incremental --print-success --lang smt -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=FOX /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-DataRace-64bit-GemCutter_Default.epf b/trunk/examples/settings/default/gemcutter/svcomp-DataRace-64bit-GemCutter_Default.epf index c57ec531def..ecdf76a046f 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-DataRace-64bit-GemCutter_Default.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-DataRace-64bit-GemCutter_Default.epf @@ -54,7 +54,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-Overflow-32bit-GemCutter_Bitvector.epf b/trunk/examples/settings/default/gemcutter/svcomp-Overflow-32bit-GemCutter_Bitvector.epf index bb073f2932a..2103632c0fb 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-Overflow-32bit-GemCutter_Bitvector.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-Overflow-32bit-GemCutter_Bitvector.epf @@ -63,7 +63,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Logic\ for\ external\ solver=ALL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=cvc4 --incremental --print-success --lang smt -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=FOX /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-Overflow-32bit-GemCutter_Default.epf b/trunk/examples/settings/default/gemcutter/svcomp-Overflow-32bit-GemCutter_Default.epf index 84a0538d7e3..88fc71076be 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-Overflow-32bit-GemCutter_Default.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-Overflow-32bit-GemCutter_Default.epf @@ -59,7 +59,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-Overflow-64bit-GemCutter_Bitvector.epf b/trunk/examples/settings/default/gemcutter/svcomp-Overflow-64bit-GemCutter_Bitvector.epf index 4b1e66bef76..f098e9ecdd1 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-Overflow-64bit-GemCutter_Bitvector.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-Overflow-64bit-GemCutter_Bitvector.epf @@ -60,7 +60,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Logic\ for\ external\ solver=ALL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=cvc4 --incremental --print-success --lang smt -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=FOX /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-Overflow-64bit-GemCutter_Default.epf b/trunk/examples/settings/default/gemcutter/svcomp-Overflow-64bit-GemCutter_Default.epf index f73fc02741e..47e795e8ca2 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-Overflow-64bit-GemCutter_Default.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-Overflow-64bit-GemCutter_Default.epf @@ -56,7 +56,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-Reach-32bit-GemCutter_Bitvector.epf b/trunk/examples/settings/default/gemcutter/svcomp-Reach-32bit-GemCutter_Bitvector.epf index 3af7bafda19..3a2a0841fdf 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-Reach-32bit-GemCutter_Bitvector.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-Reach-32bit-GemCutter_Bitvector.epf @@ -61,7 +61,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Logic\ for\ external\ solver=ALL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=cvc4 --incremental --print-success --lang smt -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=FOX /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-Reach-32bit-GemCutter_Default.epf b/trunk/examples/settings/default/gemcutter/svcomp-Reach-32bit-GemCutter_Default.epf index e6b812d0926..1a4d087f5f7 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-Reach-32bit-GemCutter_Default.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-Reach-32bit-GemCutter_Default.epf @@ -57,7 +57,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-Reach-64bit-GemCutter_Bitvector.epf b/trunk/examples/settings/default/gemcutter/svcomp-Reach-64bit-GemCutter_Bitvector.epf index 4244f38a55c..259863764d1 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-Reach-64bit-GemCutter_Bitvector.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-Reach-64bit-GemCutter_Bitvector.epf @@ -58,7 +58,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Logic\ for\ external\ solver=ALL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=cvc4 --incremental --print-success --lang smt -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=FOX /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/default/gemcutter/svcomp-Reach-64bit-GemCutter_Default.epf b/trunk/examples/settings/default/gemcutter/svcomp-Reach-64bit-GemCutter_Default.epf index 3e6e52bd0f2..5a257f321d4 100644 --- a/trunk/examples/settings/default/gemcutter/svcomp-Reach-64bit-GemCutter_Default.epf +++ b/trunk/examples/settings/default/gemcutter/svcomp-Reach-64bit-GemCutter_Default.epf @@ -54,7 +54,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Compute\ procedure\ contracts=false /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA diff --git a/trunk/examples/settings/gemcutter/NewStatesSleep-Symm.epf b/trunk/examples/settings/gemcutter/NewStatesSleep-Symm.epf index c691360c243..82b3b36f2d6 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleep-Symm.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleep-Symm.epf @@ -44,7 +44,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleep-Uncond.epf b/trunk/examples/settings/gemcutter/NewStatesSleep-Uncond.epf index b07eeaeface..8c09f1055b3 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleep-Uncond.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleep-Uncond.epf @@ -44,7 +44,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleep-VarAbsGlobalSyntactic.epf b/trunk/examples/settings/gemcutter/NewStatesSleep-VarAbsGlobalSyntactic.epf index 11fd64c9656..4754b915797 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleep-VarAbsGlobalSyntactic.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleep-VarAbsGlobalSyntactic.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleep.epf b/trunk/examples/settings/gemcutter/NewStatesSleep.epf index cccf42184d3..863429851f1 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleep.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleep.epf @@ -44,7 +44,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleepPersistent.epf b/trunk/examples/settings/gemcutter/NewStatesSleepPersistent.epf index ccf8a9d0d99..78b199bc9c3 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleepPersistent.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleepPersistent.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-CANONICAL.epf b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-CANONICAL.epf index 17527111683..fe897aafbde 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-CANONICAL.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-CANONICAL.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-ConcreteSyntactic.epf b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-ConcreteSyntactic.epf index 700f6809b89..01e8cffebb7 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-ConcreteSyntactic.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-ConcreteSyntactic.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSmt-CANONICAL.epf b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSmt-CANONICAL.epf index d8d1d3e486a..cbc44c1499e 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSmt-CANONICAL.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSmt-CANONICAL.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSmt.epf b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSmt.epf index 6424aa41685..4620221775e 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSmt.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSmt.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSyntactic.epf b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSyntactic.epf index 6a8ef4e5543..2ec7d619b59 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSyntactic.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsGlobalSyntactic.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsSpecificSmt-CANONICAL.epf b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsSpecificSmt-CANONICAL.epf index 55231b02723..c5161e443a7 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsSpecificSmt-CANONICAL.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder-VarAbsSpecificSmt-CANONICAL.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder.epf b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder.epf index aab35280aef..fc10994a339 100644 --- a/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder.epf +++ b/trunk/examples/settings/gemcutter/NewStatesSleepPersistentFixedOrder.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/None.epf b/trunk/examples/settings/gemcutter/None.epf index cef52ff0857..81eac0ae2b2 100644 --- a/trunk/examples/settings/gemcutter/None.epf +++ b/trunk/examples/settings/gemcutter/None.epf @@ -44,7 +44,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/Persistent.epf b/trunk/examples/settings/gemcutter/Persistent.epf index a738343bdb6..ab8077f8e7c 100644 --- a/trunk/examples/settings/gemcutter/Persistent.epf +++ b/trunk/examples/settings/gemcutter/Persistent.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/SleepMap-ConcreteSmt-VarAbsGlobalSyntactic.epf b/trunk/examples/settings/gemcutter/SleepMap-ConcreteSmt-VarAbsGlobalSyntactic.epf index ebdeee0dcf3..057cfa18e05 100644 --- a/trunk/examples/settings/gemcutter/SleepMap-ConcreteSmt-VarAbsGlobalSyntactic.epf +++ b/trunk/examples/settings/gemcutter/SleepMap-ConcreteSmt-VarAbsGlobalSyntactic.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/examples/settings/gemcutter/SleepMapPersistentFixedOrder-ConcreteSmt-VarAbsGlobalSyntactic.epf b/trunk/examples/settings/gemcutter/SleepMapPersistentFixedOrder-ConcreteSmt-VarAbsGlobalSyntactic.epf index a1c705b6b0e..4522b0c8019 100644 --- a/trunk/examples/settings/gemcutter/SleepMapPersistentFixedOrder-ConcreteSmt-VarAbsGlobalSyntactic.epf +++ b/trunk/examples/settings/gemcutter/SleepMapPersistentFixedOrder-ConcreteSmt-VarAbsGlobalSyntactic.epf @@ -45,7 +45,6 @@ file_export_version=3.0 /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Use\ separate\ solver\ for\ trace\ checks=true /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/SMT\ solver=External_ModelsAndUnsatCoreMode /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Command\ for\ external\ solver=z3 SMTLIB2_COMPLIANT\=true -memory\:2024 -smt2 -in -/instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Positions\ where\ we\ compute\ the\ Hoare\ Annotation=LoopHeads /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Trace\ refinement\ strategy=CAMEL /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Automaton\ type\ used\ in\ concurrency\ analysis=PARTIAL_ORDER_FA /instance/de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction/Apply\ one-shot\ large\ block\ encoding\ in\ concurrent\ analysis=false diff --git a/trunk/source/AutomataScriptInterpreter/src/de/uni_freiburg/informatik/ultimate/plugins/generator/automatascriptinterpreter/IMessagePrinter.java b/trunk/source/AutomataScriptInterpreter/src/de/uni_freiburg/informatik/ultimate/plugins/generator/automatascriptinterpreter/IMessagePrinter.java index 16037a12ec3..b375c4c86d4 100644 --- a/trunk/source/AutomataScriptInterpreter/src/de/uni_freiburg/informatik/ultimate/plugins/generator/automatascriptinterpreter/IMessagePrinter.java +++ b/trunk/source/AutomataScriptInterpreter/src/de/uni_freiburg/informatik/ultimate/plugins/generator/automatascriptinterpreter/IMessagePrinter.java @@ -34,7 +34,7 @@ * @author Daniel Dietsch (dietsch@informatik.uni-freiburg.de) */ @FunctionalInterface -interface IMessagePrinter { +public interface IMessagePrinter { /** * Reports the given string to the logger and to Ultimate as a GenericResult. * diff --git a/trunk/source/BA_MavenParentUltimate/pom.xml b/trunk/source/BA_MavenParentUltimate/pom.xml index f171c4993bd..7d9bec9d1b6 100644 --- a/trunk/source/BA_MavenParentUltimate/pom.xml +++ b/trunk/source/BA_MavenParentUltimate/pom.xml @@ -353,6 +353,7 @@ ../Library-AutomataTest ../Library-IcfgTransformerTest ../Library-ModelCheckerUtilsTest + ../Library-ProofsTest ../Library-TraceCheckerUtilsTest ../Library-MSODTest ../Library-SMTLIBTest diff --git a/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/cdt/translation/implementation/CLocation.java b/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/cdt/translation/implementation/CLocation.java index dead9df9223..8c497027dfe 100644 --- a/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/cdt/translation/implementation/CLocation.java +++ b/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/cdt/translation/implementation/CLocation.java @@ -223,8 +223,14 @@ private static boolean hasParent(final IASTNode node, final Set otherN @Override public String getFunction() { - return getUniqueElementOrNull( - mNodes.stream().map(x -> CdtASTUtils.findScope(x).getDeclarator().getName().toString())); + return getUniqueElementOrNull(mNodes.stream().map(x -> { + final var scope = CdtASTUtils.findScope(x); + if (scope == null) { + // global scope + return null; + } + return scope.getDeclarator().getName().toString(); + })); } /** diff --git a/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/Boogie2ACSL.java b/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/Boogie2ACSL.java index 7e78e3d20a0..d47e19f43c3 100644 --- a/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/Boogie2ACSL.java +++ b/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/Boogie2ACSL.java @@ -30,16 +30,20 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.function.Consumer; import java.util.function.Function; +import java.util.regex.Pattern; import java.util.stream.Collectors; import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; +import de.uni_freiburg.informatik.ultimate.boogie.BoogieUtils; import de.uni_freiburg.informatik.ultimate.boogie.ast.BitvecLiteral; import de.uni_freiburg.informatik.ultimate.boogie.ast.TypeDeclaration; import de.uni_freiburg.informatik.ultimate.cdt.translation.implementation.CLocation; @@ -84,6 +88,8 @@ public final class Boogie2ACSL { private final FlatSymbolTable mSymbolTable; private final Consumer mReporter; + private final Map mAuxVariables = new HashMap<>(); + public Boogie2ACSL(final TypeSizes typeSizes, final CACSL2BoogieBacktranslatorMapping mapping, final FlatSymbolTable symbolTable, final Consumer reporter) { mTypeSizes = typeSizes; @@ -271,6 +277,8 @@ private BacktranslatedExpression translateIdentifierExpression( // of the parameter in C (because params can be re-assigned). return new BacktranslatedExpression(new AtLabelExpression(new IdentifierExpression(pair.getFirst()), "Pre"), pair.getSecond(), range); + } else if (mAuxVariables.containsKey(boogieId)) { + return mAuxVariables.get(boogieId); } mReporter.accept("Unknown variable: " + expr.getIdentifier()); return null; @@ -872,6 +880,27 @@ private BacktranslatedExpression translateArrayAccess( return new BacktranslatedExpression(result, resultType, range); } + public BacktranslatedExpression declareAndTranslateAuxiliaryVariable( + final de.uni_freiburg.informatik.ultimate.boogie.ast.IdentifierExpression variable) { + final String identifier = variable.getIdentifier(); + if (mAuxVariables.containsKey(identifier)) { + throw new UnsupportedOperationException("Auxiliary variable already declared"); + } + + final String newIdentifier; + if (Pattern.matches(BoogieUtils.GHOST_VARIABLE_PREFIX + "([a-zA-Z0-9]*)", identifier)) { + // To avoid stacking "ghost" prefixes but still preserve meaningful variable names and guarantee uniqueness, + // we treat identifiers specially if they start with the prefix added during Boogie backtranslation. + newIdentifier = "__ULTIMATE_ghost_" + identifier.substring(BoogieUtils.GHOST_VARIABLE_PREFIX.length()); + } else { + newIdentifier = "__ULTIMATE_C_ghost_" + mAuxVariables.size(); + } + + final var idExpr = new BacktranslatedExpression(new IdentifierExpression(newIdentifier)); + mAuxVariables.put(identifier, idExpr); + return idExpr; + } + private enum Approximation { OVERAPPROXIMATION, UNDERAPPROXIMATION, PRECISE; diff --git a/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/CACSL2BoogieBacktranslator.java b/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/CACSL2BoogieBacktranslator.java index 518e6b50ddb..05cf0ef6279 100644 --- a/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/CACSL2BoogieBacktranslator.java +++ b/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/CACSL2BoogieBacktranslator.java @@ -147,6 +147,11 @@ public CACSL2BoogieBacktranslator(final IUltimateServiceProvider services, final mBoogie2ACSL = new Boogie2ACSL(typeSizes, mapping, symbolTable, this::reportUnfinishedBacktranslation); } + @Override + public BacktranslatedExpression declareAndTranslateAuxiliaryVariable(final Expression variable) { + return mBoogie2ACSL.declareAndTranslateAuxiliaryVariable((IdentifierExpression) variable); + } + @Override public List translateTrace(final List trace) { // dirty but quick: convert trace to program execution diff --git a/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/witness/ExtractedGhostUpdate.java b/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/witness/ExtractedGhostUpdate.java index cfa5395a12d..edd242842d7 100644 --- a/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/witness/ExtractedGhostUpdate.java +++ b/trunk/source/CACSL2BoogieTranslator/src/de/uni_freiburg/informatik/ultimate/plugins/generator/cacsl2boogietranslator/witness/ExtractedGhostUpdate.java @@ -44,6 +44,7 @@ import de.uni_freiburg.informatik.ultimate.boogie.ast.AtomicStatement; import de.uni_freiburg.informatik.ultimate.boogie.ast.CallStatement; import de.uni_freiburg.informatik.ultimate.boogie.ast.ForkStatement; +import de.uni_freiburg.informatik.ultimate.boogie.ast.JoinStatement; import de.uni_freiburg.informatik.ultimate.boogie.ast.Statement; import de.uni_freiburg.informatik.ultimate.cdt.translation.implementation.base.IDispatcher; import de.uni_freiburg.informatik.ultimate.cdt.translation.implementation.base.chandler.MemoryModelDeclarations; @@ -157,6 +158,23 @@ private static List annotateFork(final ILocation loc, final List annotateJoin(final ILocation loc, final List programStatements, + final List ghostUpdate) { + final List result = new ArrayList<>(); + boolean isAnnotated = false; + for (final Statement st : programStatements) { + if (!isAnnotated && st instanceof JoinStatement) { + isAnnotated = true; + result.add(StatementFactory.constructAtomicStatement(loc, ghostUpdate)); + } + result.add(st); + } + if (!isAnnotated) { + throw new UnsupportedOperationException("No statement found to annotate with the expected ghost update"); + } + return result; + } + @Override public ExpressionResult transform(final ILocation loc, final IDispatcher dispatcher, final ExpressionResult expressionResult) { @@ -207,6 +225,14 @@ public ExpressionResult transform(final ILocation loc, final IDispatcher dispatc return new ExpressionResultBuilder(expressionResult).addAllExceptLrValueAndStatements(witness) .resetStatements(annotateFork(loc, expressionResult.getStatements(), witness.getStatements())) .build(); + case "pthread_join": + // Make the ghost update itself atomic and insert it just before the join. + // TODO: Maybe we should do this atomically, but the CFG builder crashes for that case + // We are not sure, if this does have any different semantics. + return new ExpressionResultBuilder(expressionResult).addAllExceptLrValueAndStatements(witness) + .resetStatements(annotateJoin(loc, expressionResult.getStatements(), witness.getStatements())) + .build(); + default: throw new UnsupportedOperationException( "The following statement is not yet supported for ghost updates: " + loc); diff --git a/trunk/source/CoreRCP/src/de/uni_freiburg/informatik/ultimate/core/coreplugin/services/BacktranslationService.java b/trunk/source/CoreRCP/src/de/uni_freiburg/informatik/ultimate/core/coreplugin/services/BacktranslationService.java index 2df5a4f3dc5..4951126cadd 100644 --- a/trunk/source/CoreRCP/src/de/uni_freiburg/informatik/ultimate/core/coreplugin/services/BacktranslationService.java +++ b/trunk/source/CoreRCP/src/de/uni_freiburg/informatik/ultimate/core/coreplugin/services/BacktranslationService.java @@ -140,4 +140,9 @@ public String toString() { public void destroy() { mTranslatorSequence = null; } + + @Override + public TE declareAndTranslateAuxiliaryVariable(final SE variable) { + return mTranslatorSequence.declareAndTranslateAuxiliaryVariable(variable); + } } diff --git a/trunk/source/CoreRCP/src/de/uni_freiburg/informatik/ultimate/core/coreplugin/services/ModelTranslationContainer.java b/trunk/source/CoreRCP/src/de/uni_freiburg/informatik/ultimate/core/coreplugin/services/ModelTranslationContainer.java index cda50137109..093e4c302ea 100644 --- a/trunk/source/CoreRCP/src/de/uni_freiburg/informatik/ultimate/core/coreplugin/services/ModelTranslationContainer.java +++ b/trunk/source/CoreRCP/src/de/uni_freiburg/informatik/ultimate/core/coreplugin/services/ModelTranslationContainer.java @@ -404,4 +404,19 @@ public IBacktranslationService getTranslationServiceCopy() { public String toString() { return CoreUtil.join(mTranslationSequence, ","); } + + @Override + public TE declareAndTranslateAuxiliaryVariable(final SE variable) { + final var remaining = prepareTranslatorStackAndCheckSourceExpression(variable.getClass()); + return declareAndTranslateAuxiliaryVariable(remaining, variable); + } + + private TE declareAndTranslateAuxiliaryVariable(final Stack> remaining, + final SE variable) { + if (remaining.isEmpty()) { + return (TE) variable; + } + final ITranslator tmp = (ITranslator) remaining.pop(); + return declareAndTranslateAuxiliaryVariable(remaining, tmp.declareAndTranslateAuxiliaryVariable(variable)); + } } diff --git a/trunk/source/IcfgBuilder/src/de/uni_freiburg/informatik/ultimate/plugins/generator/icfgbuilder/IcfgBacktranslator.java b/trunk/source/IcfgBuilder/src/de/uni_freiburg/informatik/ultimate/plugins/generator/icfgbuilder/IcfgBacktranslator.java index a9576b85918..c62453a452b 100644 --- a/trunk/source/IcfgBuilder/src/de/uni_freiburg/informatik/ultimate/plugins/generator/icfgbuilder/IcfgBacktranslator.java +++ b/trunk/source/IcfgBuilder/src/de/uni_freiburg/informatik/ultimate/plugins/generator/icfgbuilder/IcfgBacktranslator.java @@ -451,4 +451,8 @@ private StepInfo getStepInfoFromCondition(final Expression input, final Expressi return getStepInfoFromCondition(inputCond.getExpr(), outputCond.getExpr()); } + @Override + public Expression declareAndTranslateAuxiliaryVariable(final Term variable) { + return mTerm2Expression.declareAndTranslateAuxiliaryVariable((TermVariable) variable); + } } diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/NestedWordAutomataUtils.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/NestedWordAutomataUtils.java index 8c7b4172e55..95316d58b85 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/NestedWordAutomataUtils.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/NestedWordAutomataUtils.java @@ -489,4 +489,30 @@ public static STATE getSuccessorState( } + public static boolean isSinkState(final INestedWordAutomaton automaton, + final STATE state) { + final var alphabet = automaton.getVpAlphabet(); + for (final var letter : alphabet.getInternalAlphabet()) { + for (final var transition : automaton.internalSuccessors(state, letter)) { + if (!state.equals(transition.getSucc())) { + return false; + } + } + } + for (final var letter : alphabet.getCallAlphabet()) { + for (final var transition : automaton.callSuccessors(state, letter)) { + if (!state.equals(transition.getSucc())) { + return false; + } + } + } + for (final var letter : alphabet.getReturnAlphabet()) { + for (final var transition : automaton.returnSuccessors(state, letter)) { + if (!state.equals(transition.getSucc())) { + return false; + } + } + } + return true; + } } diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/operations/TotalizeNwa.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/operations/TotalizeNwa.java index 76ea46760d8..582ff92b08e 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/operations/TotalizeNwa.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/operations/TotalizeNwa.java @@ -387,7 +387,7 @@ public int size() { @Override public Set getAlphabet() { - throw new UnsupportedOperationException(); + return mOperand.getAlphabet(); } @Override diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/visualization/AutomatonTransition.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/visualization/AutomatonTransition.java index 7e55efc1116..18c8d20de6f 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/visualization/AutomatonTransition.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/nestedword/visualization/AutomatonTransition.java @@ -26,6 +26,8 @@ */ package de.uni_freiburg.informatik.ultimate.automata.nestedword.visualization; +import java.util.Map; + import de.uni_freiburg.informatik.ultimate.core.lib.models.ModifiableMultigraphEdge; import de.uni_freiburg.informatik.ultimate.core.model.models.annotation.IAnnotations; import de.uni_freiburg.informatik.ultimate.core.model.models.annotation.Visualizable; @@ -96,9 +98,14 @@ public AutomatonTransition(final AutomatonState state, final Transition type, fi mName = mName + " " + hierPred; } + final IAnnotations symbolAnnotation; if (transitionLabel instanceof IAnnotations) { - getPayload().getAnnotations().put("Symbol", (IAnnotations) transitionLabel); + symbolAnnotation = (IAnnotations) transitionLabel; + } else { + symbolAnnotation = new SymbolAnnotation(transitionLabel); } + getPayload().getAnnotations().put("Symbol", symbolAnnotation); + state.addOutgoing(this); succState.addIncoming(this); } @@ -112,4 +119,22 @@ public String toString() { public AutomatonTransition getLabel() { return this; } + + private static class SymbolAnnotation implements IAnnotations { + private final Object mSymbol; + + public SymbolAnnotation(final Object symbol) { + mSymbol = symbol; + } + + @Override + public Map getAnnotationsAsMap() { + return Map.of(mSymbol.getClass().getSimpleName(), mSymbol); + } + + @Override + public String toString() { + return mSymbol.toString(); + } + } } diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/EnumerateRuns.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/EnumerateRuns.java index 8ca394b804c..f9fab3bffa0 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/EnumerateRuns.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/EnumerateRuns.java @@ -38,7 +38,6 @@ import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; import de.uni_freiburg.informatik.ultimate.util.BFSIterator; import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableList; -import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; /** @@ -61,14 +60,10 @@ private static class RunEnumerator extends BFSIterator, Transit private final IPetriNet mNet; public RunEnumerator(final IPetriNet net) { - super(List.of(getInitialMarking(net))); + super(List.of(Marking.initial(net))); mNet = net; } - private static

Marking

getInitialMarking(final IPetriNet net) { - return new Marking<>(ImmutableSet.copyOf(net.getInitialPlaces())); - } - @Override protected Iterable> getOutgoing(final Marking

marking) { return mNet.getTransitions().stream().filter(marking::isTransitionEnabled).collect(Collectors.toList()); diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/Marking.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/Marking.java index 59aa609fcd3..3615b06a0a1 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/Marking.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/Marking.java @@ -195,4 +195,12 @@ public String toString() { public Stream stream() { return mPlaces.stream(); } + + public ImmutableSet getPlaces() { + return mPlaces; + } + + public static

Marking

initial(final IPetriNetSuccessorProvider petriNet) { + return new Marking<>(ImmutableSet.copyOf(petriNet.getInitialPlaces())); + } } diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/Accepts.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/Accepts.java index 91e5c04ec0c..56a0e8d6a1a 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/Accepts.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/Accepts.java @@ -41,7 +41,6 @@ import de.uni_freiburg.informatik.ultimate.automata.petrinet.UnaryNetOperation; import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IPetriNet2FiniteAutomatonStateFactory; -import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; /** * Acceptance test for Petri nets. @@ -82,7 +81,7 @@ public Accepts(final AutomataLibraryServices services, final IPetriNetTransition mLogger.info(startMessage()); } - mResult = getResultHelper(0, new Marking<>(ImmutableSet.of(operand.getInitialPlaces()))); + mResult = getResultHelper(0, Marking.initial(operand)); if (mLogger.isInfoEnabled()) { mLogger.info(exitMessage()); diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/AcceptsInfiniteWords.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/AcceptsInfiniteWords.java index af41def08d2..74f3d2e0629 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/AcceptsInfiniteWords.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/AcceptsInfiniteWords.java @@ -39,7 +39,6 @@ import de.uni_freiburg.informatik.ultimate.automata.petrinet.UnaryNetOperation; import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IPetriNet2FiniteAutomatonStateFactory; -import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; /** @@ -95,7 +94,7 @@ public AcceptsInfiniteWords(final AutomataLibraryServices services, throws PetriNetNot1SafeException { super(services); mOperand = operand; - mInitialMarking = new Marking<>(ImmutableSet.of(operand.getInitialPlaces())); + mInitialMarking = Marking.initial(operand); mLassoWord = word; mFireSequenceTreeMarkings = new HashSet<>(); mFireSequenceIndex = 0; diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/BuchiPetriNet2FiniteAutomaton.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/BuchiPetriNet2FiniteAutomaton.java index a62bc5fc907..50e3119d188 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/BuchiPetriNet2FiniteAutomaton.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/BuchiPetriNet2FiniteAutomaton.java @@ -51,7 +51,6 @@ import de.uni_freiburg.informatik.ultimate.automata.statefactory.IPetriNet2FiniteAutomatonStateFactory; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IStateFactory; import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.RunningTaskInfo; -import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; /** @@ -128,7 +127,7 @@ public BuchiPetriNet2FiniteAutomaton(final AutomataLibraryServices services, final VpAlphabet vpAlphabet = new VpAlphabet<>(alphabet, Collections.emptySet(), Collections.emptySet()); mResult = new NestedWordAutomaton<>(mServices, vpAlphabet, factory); - getState(new Marking<>(ImmutableSet.of(operand.getInitialPlaces())), true, false); + getState(Marking.initial(operand), true, false); while (!mWorklist.isEmpty()) { final Pair, Boolean> markingWithAcptBool = mWorklist.remove(0); // final Marking marking = mWorklist.remove(0); diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/DifferencePairwiseOnDemand.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/DifferencePairwiseOnDemand.java index ee2605a127d..0e32514fcd2 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/DifferencePairwiseOnDemand.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/DifferencePairwiseOnDemand.java @@ -231,21 +231,26 @@ public boolean checkResult(final CRSF stateFactory) throws AutomataLibraryExcept } - private static Set - determineUniversalLoopers(final INestedWordAutomaton nwa) { + public static Set determineUniversalLoopers(final INestedWordAutomaton nwa) { + return determineUniversalLoopers(nwa, nwa.getStates()); + } + + public static Set determineUniversalLoopers( + final INwaOutgoingLetterAndTransitionProvider nwa, final Set states) { if (!NestedWordAutomataUtils.isFiniteAutomaton(nwa)) { throw new UnsupportedOperationException("call and return not implemented yet"); } - return nwa.getAlphabet().stream().filter(letter -> isUniversalLooper(letter, nwa)).collect(Collectors.toSet()); + return nwa.getAlphabet().stream().filter(letter -> isUniversalLooper(letter, nwa, states)) + .collect(Collectors.toSet()); } private static boolean isUniversalLooper(final LETTER letter, - final INestedWordAutomaton nwa) { - return nwa.getStates().stream().allMatch(state -> hasSelfloop(letter, state, nwa)); + final INwaOutgoingLetterAndTransitionProvider nwa, final Set states) { + return states.stream().filter(s -> !nwa.isFinal(s)).allMatch(state -> hasSelfloop(letter, state, nwa)); } private static boolean hasSelfloop(final LETTER letter, final STATE state, - final INestedWordAutomaton nwa) { + final INwaOutgoingLetterAndTransitionProvider nwa) { final Iterator> it = nwa.internalSuccessors(state, letter).iterator(); if (!it.hasNext()) { return false; diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/LazyBuchiPetriNet2FiniteAutomaton.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/LazyBuchiPetriNet2FiniteAutomaton.java index 35dcb126722..3e2a8e060b4 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/LazyBuchiPetriNet2FiniteAutomaton.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/LazyBuchiPetriNet2FiniteAutomaton.java @@ -52,7 +52,6 @@ import de.uni_freiburg.informatik.ultimate.automata.statefactory.IBlackWhiteStateFactory; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IPetriNet2FiniteAutomatonStateFactory; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IStateFactory; -import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; /** * On-the-fly construction of a finite Automaton from a Petri Net. @@ -112,7 +111,7 @@ public LazyBuchiPetriNet2FiniteAutomaton(final AutomataLibraryServices services, mCache = new NestedWordAutomatonCache<>(services, new VpAlphabet<>(mOperand.getAlphabet()), factory); // construct the initial state - constructState(new Marking<>(ImmutableSet.of(mOperand.getInitialPlaces())), true, false); + constructState(Marking.initial(mOperand), true, false); } @Deprecated @@ -261,8 +260,7 @@ private S constructState(final Marking marking, final boolean isInitial, fina mState2Marking.put(state, marking); - assert isInitial == new Marking<>(ImmutableSet.of(mOperand.getInitialPlaces())).equals(marking) - : "Wrong initial state"; + assert isInitial == Marking.initial(mOperand).equals(marking) : "Wrong initial state"; mCache.addState(isInitial, isAccepting, state); return state; diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/LazyPetriNet2FiniteAutomaton.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/LazyPetriNet2FiniteAutomaton.java index bd50029e27e..8d6e6768eaa 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/LazyPetriNet2FiniteAutomaton.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/LazyPetriNet2FiniteAutomaton.java @@ -49,7 +49,6 @@ import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IPetriNet2FiniteAutomatonStateFactory; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IStateFactory; -import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; /** * On-the-fly construction of a finite Automaton from a Petri Net. @@ -100,7 +99,7 @@ public LazyPetriNet2FiniteAutomaton(final AutomataLibraryServices services, mCache = new NestedWordAutomatonCache<>(services, new VpAlphabet<>(mOperand.getAlphabet()), factory); // construct the initial state - constructState(new Marking<>(ImmutableSet.of(mOperand.getInitialPlaces())), true); + constructState(Marking.initial(mOperand), true); } @Deprecated @@ -233,8 +232,7 @@ private S constructState(final Marking marking, final boolean isInitial) { final S state = mStateFactory.getContentOnPetriNet2FiniteAutomaton(marking); mState2Marking.put(state, marking); - assert isInitial == new Marking<>(ImmutableSet.of(mOperand.getInitialPlaces())).equals(marking) - : "Wrong initial state"; + assert isInitial == Marking.initial(mOperand).equals(marking) : "Wrong initial state"; final boolean isFinal = mOperand.isAccepting(marking); mCache.addState(isInitial, isFinal, state); diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/PetriNet2FiniteAutomaton.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/PetriNet2FiniteAutomaton.java index 12eea4d10e0..af3b1839617 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/PetriNet2FiniteAutomaton.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/operations/PetriNet2FiniteAutomaton.java @@ -49,7 +49,6 @@ import de.uni_freiburg.informatik.ultimate.automata.statefactory.IPetriNet2FiniteAutomatonStateFactory; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IStateFactory; import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.RunningTaskInfo; -import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; /** * Given a Petri net, this class constructs a finite automaton that recognizes the same language. @@ -118,7 +117,7 @@ public PetriNet2FiniteAutomaton(final AutomataLibraryServices services, final VpAlphabet vpAlphabet = new VpAlphabet<>(alphabet, Collections.emptySet(), Collections.emptySet()); mResult = new NestedWordAutomaton<>(mServices, vpAlphabet, factory); - getState(new Marking<>(ImmutableSet.of(operand.getInitialPlaces())), true); + getState(Marking.initial(operand), true); while (!mWorklist.isEmpty()) { final Marking marking = mWorklist.remove(0); constructOutgoingTransitions(marking); @@ -208,6 +207,10 @@ public INestedWordAutomaton getResult() { return mResult; } + public Map, PLACE> getStateMap() { + return mMarking2State; + } + @Override public boolean checkResult(final IStateFactory stateFactory) throws AutomataLibraryException { return true; diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Condition.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Condition.java index 506148c9414..8b251c49cee 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Condition.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Condition.java @@ -47,7 +47,7 @@ public class Condition implements Serializable { private static final long serialVersionUID = -497620137647502376L; // See https://github.com/ultimate-pa/ultimate/pull/595 for discussion - private static final boolean USE_HASH_JENKINS = false; + private static final boolean USE_HASH_JENKINS = true; private final Event mPredecessor; private final Collection> mSuccessors; diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Event.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Event.java index 1ea5587c985..289a9760dfe 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Event.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Event.java @@ -41,7 +41,6 @@ import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetNot1SafeException; import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; import de.uni_freiburg.informatik.ultimate.util.HashUtils; -import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; /** * Event of a {@link BranchingProcess}. Each event corresponds to a {@link Transition} of a {@link IPetriNet}. @@ -155,7 +154,7 @@ public int getDepth() { public Event(final BranchingProcess bp) { mTransition = null; mLocalConfiguration = new Configuration<>(new HashSet>(), 0); - mMark = new Marking<>(ImmutableSet.of(bp.getNet().getInitialPlaces())); + mMark = Marking.initial(bp.getNet()); final Set> conditionMarkSet = new HashSet<>(); mConditionMark = new ConditionMarking<>(conditionMarkSet); diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Events2PetriNetLassoRunBuchi.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Events2PetriNetLassoRunBuchi.java index a3145acaa58..c568f164c8f 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Events2PetriNetLassoRunBuchi.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/Events2PetriNetLassoRunBuchi.java @@ -36,7 +36,6 @@ import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetNot1SafeException; import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetRun; import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; -import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; /** * Given stem and loop events of supposed accepting lasso word, if valid, {@link PetriNetLassoRun} is built. @@ -73,7 +72,7 @@ public PetriNetLassoRun constructLassoRun() throws PetriNetNot1Sa final List> loopTransitions = mConfigLoopPart.stream().map(Event::getTransition).collect(Collectors.toList()); - final Marking startMarking = new Marking<>(ImmutableSet.of(mUnfolding.getNet().getInitialPlaces())); + final Marking startMarking = Marking.initial(mUnfolding.getNet()); final PetriNetRun stemRun = constructRun(startMarking, stemTransitions); final PetriNetRun loopRun = diff --git a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/ICoRelation.java b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/ICoRelation.java index a856e479033..bcc9c0439e5 100644 --- a/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/ICoRelation.java +++ b/trunk/source/Library-Automata/src/de/uni_freiburg/informatik/ultimate/automata/petrinet/unfolding/ICoRelation.java @@ -91,7 +91,7 @@ public interface ICoRelation { long getQueryCounterNo(); /** - * All initial Conditions in a branchin process are in co relation. Hence, all pairs of Conditions from + * All initial Conditions in a branching process are in co relation. Hence, all pairs of Conditions from * initialConditions are added. * * @param initialConditions diff --git a/trunk/source/Library-BoogieAST/src/de/uni_freiburg/informatik/ultimate/boogie/BoogieUtils.java b/trunk/source/Library-BoogieAST/src/de/uni_freiburg/informatik/ultimate/boogie/BoogieUtils.java index c2d42b07314..9ffcc2637b5 100644 --- a/trunk/source/Library-BoogieAST/src/de/uni_freiburg/informatik/ultimate/boogie/BoogieUtils.java +++ b/trunk/source/Library-BoogieAST/src/de/uni_freiburg/informatik/ultimate/boogie/BoogieUtils.java @@ -56,6 +56,9 @@ public class BoogieUtils { public static final String AUXILIARY_LABEL = "auxiliary_label"; + // A prefix that is added to the names of ghost variables during backtranslation. + public static final String GHOST_VARIABLE_PREFIX = "~ghost~"; + private BoogieUtils() { // Prevent instantiation of this utility class } diff --git a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/boogie/Term2Expression.java b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/boogie/Term2Expression.java index d10282e965d..4bd4a96a211 100644 --- a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/boogie/Term2Expression.java +++ b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/boogie/Term2Expression.java @@ -32,12 +32,13 @@ import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; -import java.util.Set; import de.uni_freiburg.informatik.ultimate.boogie.BitvectorFactory; +import de.uni_freiburg.informatik.ultimate.boogie.BoogieUtils; import de.uni_freiburg.informatik.ultimate.boogie.DeclarationInformation; import de.uni_freiburg.informatik.ultimate.boogie.DeclarationInformation.StorageClass; import de.uni_freiburg.informatik.ultimate.boogie.ExpressionFactory; @@ -110,7 +111,7 @@ public final class Term2Expression implements Serializable { private final ITerm2ExpressionSymbolTable mBoogie2SmtSymbolTable; - private final Set mFreeVariables; + private final Map mAuxiliaryVariables = new HashMap<>(); private final NestedMap2 mCache; @@ -121,7 +122,6 @@ public Term2Expression(final TypeSortTranslator tsTranslation, mTypeSortTranslator = tsTranslation; mBoogie2SmtSymbolTable = boogie2SmtSymbolTable; mScript = maScript.getScript(); - mFreeVariables = new HashSet<>(); mTranslateState = new TranslateState(); mCache = new NestedMap2<>(); } @@ -503,6 +503,8 @@ private Expression translate(final TermVariable term) { final String id = varList.getIdentifiers()[0]; result = new IdentifierExpression(null, type, translateIdentifier(id), new DeclarationInformation(StorageClass.QUANTIFIED, null)); + } else if (mAuxiliaryVariables.containsKey(term)) { + result = mAuxiliaryVariables.get(term); } else if (mBoogie2SmtSymbolTable.getProgramVar(term) == null) { // Case where term contains some auxilliary variable that was // introduced during model checking. @@ -512,7 +514,6 @@ private Expression translate(final TermVariable term) { // counterpart in the boogie program (and do not add it to the symbol table) result = new IdentifierExpression(null, type, getFreshIdentifier(), new DeclarationInformation(StorageClass.QUANTIFIED, null)); - mFreeVariables.add((IdentifierExpression) result); } else { final IProgramVar pv = mBoogie2SmtSymbolTable.getProgramVar(term); final ILocation loc = mBoogie2SmtSymbolTable.getLocation(pv); @@ -643,6 +644,22 @@ private static Expression xor(final Expression[] params) { return result; } + public IdentifierExpression declareAndTranslateAuxiliaryVariable(final TermVariable variable) { + if (mAuxiliaryVariables.containsKey(variable)) { + throw new UnsupportedOperationException("Already declared auxiliary variable: " + variable); + } + final IProgramVar pv = mBoogie2SmtSymbolTable.getProgramVar(variable); + if (pv != null) { + throw new UnsupportedOperationException("Cannot redeclare program variable as auxiliary: " + pv); + } + final IBoogieType type = mTypeSortTranslator.getType(variable.getSort()); + final String newIdentifier = BoogieUtils.GHOST_VARIABLE_PREFIX + mAuxiliaryVariables.size(); + final var id = new IdentifierExpression(null, type, newIdentifier, + new DeclarationInformation(StorageClass.QUANTIFIED, null)); + mAuxiliaryVariables.put(variable, id); + return id; + } + /** * Represents the state that the result of a call to a translate*(Term) method in this class may depend on. * Immutable. Necessary for caching. diff --git a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/hoaretriple/MonolithicHoareTripleChecker.java b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/hoaretriple/MonolithicHoareTripleChecker.java index 818df659048..cd8cd289be9 100644 --- a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/hoaretriple/MonolithicHoareTripleChecker.java +++ b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/hoaretriple/MonolithicHoareTripleChecker.java @@ -52,7 +52,6 @@ public class MonolithicHoareTripleChecker implements IHoareTripleChecker { - private final CfgSmtToolkit mCsToolkit; private final ManagedScript mManagedScript; private final ModifiableGlobalsTable mModifiableGlobals; @@ -71,9 +70,12 @@ public class MonolithicHoareTripleChecker implements IHoareTripleChecker { private long mSatCheckTime = 0; public MonolithicHoareTripleChecker(final CfgSmtToolkit csToolkit) { - mCsToolkit = csToolkit; - mManagedScript = csToolkit.getManagedScript(); - mModifiableGlobals = csToolkit.getModifiableGlobalsTable(); + this(csToolkit.getManagedScript(), csToolkit.getModifiableGlobalsTable()); + } + + public MonolithicHoareTripleChecker(final ManagedScript mgdScript, final ModifiableGlobalsTable modifiableGlobals) { + mManagedScript = mgdScript; + mModifiableGlobals = modifiableGlobals; mHoareTripleCheckerStatistics = new HoareTripleCheckerStatisticsGenerator(); } diff --git a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/BasicPredicateFactory.java b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/BasicPredicateFactory.java index 3cf94ba85b8..4ffefbb8bc1 100644 --- a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/BasicPredicateFactory.java +++ b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/BasicPredicateFactory.java @@ -111,11 +111,11 @@ public IPredicate and(final SimplificationTechnique st, final IPredicate... pred return and(st, Arrays.asList(preds)); } - public IPredicate and(final Collection preds) { + public IPredicate and(final Collection preds) { return and(SimplificationTechnique.NONE, preds); } - public IPredicate and(final SimplificationTechnique st, final Collection preds) { + public IPredicate and(final SimplificationTechnique st, final Collection preds) { return newPredicate(andTermFromPreds(preds, st)); } @@ -127,11 +127,11 @@ public IPredicate or(final SimplificationTechnique st, final IPredicate... preds return or(st, Arrays.asList(preds)); } - public IPredicate or(final Collection preds) { + public IPredicate or(final Collection preds) { return or(SimplificationTechnique.NONE, preds); } - public IPredicate or(final SimplificationTechnique st, final Collection preds) { + public IPredicate or(final SimplificationTechnique st, final Collection preds) { return newPredicate(orTermFromPreds(preds, st)); } @@ -171,15 +171,15 @@ public IPredicate orT(final SimplificationTechnique st, final Collection t return newPredicate(orTerm(terms, st)); } - private Term orTermFromPreds(final Collection preds, final SimplificationTechnique st) { + private Term orTermFromPreds(final Collection preds, final SimplificationTechnique st) { return xJunctTermFromPreds(preds, st, SmtUtils::or, this::getFalse); } - private Term andTermFromPreds(final Collection preds, final SimplificationTechnique st) { + private Term andTermFromPreds(final Collection preds, final SimplificationTechnique st) { return xJunctTermFromPreds(preds, st, SmtUtils::and, this::getTrue); } - private Term xJunctTermFromPreds(final Collection preds, final SimplificationTechnique st, + private Term xJunctTermFromPreds(final Collection preds, final SimplificationTechnique st, final BiFunction, Term> funCreateXJunct, final Supplier funGetNeutralElement) { final List terms = preds.stream().map(IPredicate::getFormula).collect(Collectors.toList()); diff --git a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/PredicateUtils.java b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/PredicateUtils.java index 47f77f25186..f292bb28ada 100644 --- a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/PredicateUtils.java +++ b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/PredicateUtils.java @@ -76,9 +76,9 @@ public enum FormulaSize { public static long computeDagSizeOfPredicate(final IPredicate p, final FormulaSize size) { switch (size) { case DAGSIZE: - return (new DAGSize()).size(p.getFormula()); + return new DAGSize().size(p.getFormula()); case TREESIZE: - return (new DAGSize()).treesize(p.getFormula()); + return new DAGSize().treesize(p.getFormula()); default: throw new AssertionError("unknown " + size); } @@ -209,8 +209,7 @@ public static Term formulaWithIndexedVars(final IPredicate ps, final Set assignedVars, final Map indexedConstants, final Script script) { - assert (assignedVars != null && assignedVars.isEmpty()); + assert assignedVars != null && assignedVars.isEmpty(); final Set notYetSubst = new HashSet<>(Arrays.asList(tf.getFormula().getFreeVars())); Term fTrans = tf.getFormula(); final Map reverseMapping = new HashMap<>(); @@ -379,12 +378,10 @@ private static void findNonModifiablesGlobals(final Set vars, final IProgramNonOldVar nonOldVar = ((IProgramOldVar) bv).getNonOldVar(); if (modifiableGlobalsPred.contains(nonOldVar)) { // var modifiable, do nothing + } else if (primedRequired.contains(bv)) { + nonModifiableGlobalsPrimed.add(nonOldVar); } else { - if (primedRequired.contains(bv)) { - nonModifiableGlobalsPrimed.add(nonOldVar); - } else { - nonModifiableGlobalsUnprimed.add(nonOldVar); - } + nonModifiableGlobalsUnprimed.add(nonOldVar); } } } @@ -401,7 +398,7 @@ private static Term rename(final Script script, final IPredicate postcond, final } substitutionMapping.put(bv.getTermVariable(), constant); } - final Term result = (PureSubstitution.apply(script, substitutionMapping, postcond.getFormula())); + final Term result = PureSubstitution.apply(script, substitutionMapping, postcond.getFormula()); assert result.getFreeVars().length == 0 : "there are free vars"; return result; } diff --git a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/PredicateWithConjuncts.java b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/PredicateWithConjuncts.java index bad0d01864c..6c0616735bf 100644 --- a/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/PredicateWithConjuncts.java +++ b/trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/PredicateWithConjuncts.java @@ -26,6 +26,7 @@ */ package de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates; +import java.util.List; import java.util.Set; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramFunction; @@ -133,4 +134,11 @@ public Set getFuns() { public String toString() { return mSerial + "#" + mConjuncts.toString(); } + + public static List flatten(final IPredicate predicate) { + if (predicate instanceof final PredicateWithConjuncts conjunction) { + return conjunction.getConjuncts(); + } + return List.of(predicate); + } } diff --git a/trunk/source/Library-Proofs/META-INF/MANIFEST.MF b/trunk/source/Library-Proofs/META-INF/MANIFEST.MF index 5f5d4f30a7b..01a5dfd02a7 100644 --- a/trunk/source/Library-Proofs/META-INF/MANIFEST.MF +++ b/trunk/source/Library-Proofs/META-INF/MANIFEST.MF @@ -13,5 +13,6 @@ Require-Bundle: de.uni_freiburg.informatik.ultimate.lib.core, de.uni_freiburg.informatik.ultimate.lib.util Export-Package: de.uni_freiburg.informatik.ultimate.lib.proofs, - de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare + de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare, + de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries Automatic-Module-Name: de.uni.freiburg.informatik.ultimate.lib.proofs diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/ThreadModularPrePostSpecification.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/ThreadModularPrePostSpecification.java new file mode 100644 index 00000000000..c686430b62a --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/ThreadModularPrePostSpecification.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2024 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2024 University of Freiburg + * + * This file is part of the ULTIMATE ModelCheckerUtils Library. + * + * The ULTIMATE ModelCheckerUtils Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE ModelCheckerUtils Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE ModelCheckerUtils Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE ModelCheckerUtils Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE ModelCheckerUtils Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs; + +import java.util.Map; +import java.util.function.Predicate; +import java.util.stream.StreamSupport; + +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; + +/** + * A special kind of {@link PrePostConditionSpecification} for concurrent programs, which considers a configuration (or + * "marking", in Petri net terminology) of the concurrent program to be accepting if any thread is in an accepting + * location (or "place", in Petri net terminology). + * + * @param

+ * The type of places resp. locations of individual threads + * @param + * The type of "markings", i.e., control configurations of the entire concurrent program + */ +public class ThreadModularPrePostSpecification> extends PrePostConditionSpecification { + private final Predicate

mIsFinalThreadState; + + public ThreadModularPrePostSpecification(final Map initialStates, + final Predicate

isFinalThreadState, final IPredicate postcondition) { + super(initialStates, isFinalState(isFinalThreadState), postcondition); + mIsFinalThreadState = isFinalThreadState; + } + + public boolean isFinalThreadState(final P place) { + return mIsFinalThreadState.test(place); + } + + private static > Predicate isFinalState(final Predicate

isFinalThreadState) { + return m -> StreamSupport.stream(m.spliterator(), false).anyMatch(isFinalThreadState); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/FloydHoareValidityCheck.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/FloydHoareValidityCheck.java index cdc8b3085c4..4ce2c9192b2 100644 --- a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/FloydHoareValidityCheck.java +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/FloydHoareValidityCheck.java @@ -30,6 +30,7 @@ import java.util.HashSet; import java.util.Set; +import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.ToolchainCanceledException; import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IAction; @@ -59,6 +60,7 @@ * The type of states which are annotated */ public abstract class FloydHoareValidityCheck { + protected final IUltimateServiceProvider mServices; protected final ILogger mLogger; private final MonolithicImplicationChecker mImplChecker; private final IHoareTripleChecker mHoareTripleChecker; @@ -97,6 +99,7 @@ protected FloydHoareValidityCheck(final IUltimateServiceProvider services, final final IHoareTripleChecker hoareTripleChecker, final IFloydHoareAnnotation annotation, final boolean assertValidity, final MissingAnnotationBehaviour missingAnnotations, final boolean checkSafety) { + mServices = services; mLogger = services.getLoggingService().getLogger(FloydHoareValidityCheck.class); mImplChecker = new MonolithicImplicationChecker(services, mgdScript); mHoareTripleChecker = hoareTripleChecker; @@ -171,6 +174,10 @@ private Validity checkInitial() { private Validity checkInductivity() { Validity result = Validity.VALID; while (!mWorklist.isEmpty()) { + if (!mServices.getProgressMonitorService().continueProcessing()) { + throw new ToolchainCanceledException(getClass(), "checking inductivity of Floyd-Hoare proof"); + } + final S state = mWorklist.pop(); final IPredicate pre = getAnnotation(state); checkSafe(state, pre); diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/PetriFloydHoareValidityCheck.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/PetriFloydHoareValidityCheck.java new file mode 100644 index 00000000000..3becf69ecbd --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/PetriFloydHoareValidityCheck.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2023 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2023 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare; + +import java.util.List; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetNot1SafeException; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.ModifiableGlobalsTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.ICallAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IInternalAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IReturnAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.hoaretriple.MonolithicHoareTripleChecker; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Triple; + +/** + * Checks validity of a Floyd/Hoare annotation for the reachability graph of a (1-safe) Petri net. + * + * @param + * The type of letters in the net + * @param

+ * The type of places + */ +public class PetriFloydHoareValidityCheck extends FloydHoareValidityCheck> { + private static final String ONE_SAFE_ERROR = "Only 1-safe Petri nets are supported"; + private final IPetriNet mProgram; + + public PetriFloydHoareValidityCheck(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final ModifiableGlobalsTable modifiableGlobals, final IPetriNet program, + final IFloydHoareAnnotation> floydHoare) throws PetriNetNot1SafeException { + super(services, mgdScript, new MonolithicHoareTripleChecker(mgdScript, modifiableGlobals), floydHoare, false, + MissingAnnotationBehaviour.THROW, true); + mProgram = program; + try { + performCheck(); + } catch (final IllegalArgumentException e) { + if (ONE_SAFE_ERROR.equals(e.getMessage())) { + throw (PetriNetNot1SafeException) e.getCause(); + } + throw e; + } + } + + @Override + protected Iterable>> getInternalSuccessors(final Marking

marking) { + return () -> mProgram.getSuccessorTransitionProviders(marking.getPlaces(), marking.getPlaces()).stream() + .flatMap(provider -> provider.getTransitions().stream()).map(transition -> { + try { + final var successor = marking.fireTransition(transition); + return new Pair<>((IInternalAction) transition.getSymbol(), successor); + } catch (final PetriNetNot1SafeException e) { + throw new IllegalArgumentException(ONE_SAFE_ERROR, e); + } + }).iterator(); + } + + @Override + protected Iterable>> getCallSuccessors(final Marking

state) { + return List.of(); + } + + @Override + protected Iterable, Marking

>> getReturnSuccessors(final Marking

state) { + return List.of(); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/TransformFloydHoareAnnotation.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/TransformFloydHoareAnnotation.java index bdd9e517021..62e5e9d3513 100644 --- a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/TransformFloydHoareAnnotation.java +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/floydhoare/TransformFloydHoareAnnotation.java @@ -66,8 +66,26 @@ public class TransformFloydHoareAnnotation { */ public TransformFloydHoareAnnotation(final IFloydHoareAnnotation annotation, final Set states, final Function transformer) { + this(annotation, states, transformer, null); + } + + /** + * Creates a new instance and transforms a given annotation + * + * @param annotation + * The input annotation to be transformed + * @param states + * The set of all states/locations to be transformed. Annotations for any state not included in this set + * will use the {@code defaultPredicate} (see below). + * @param transformer + * The function to be applied to each state (which must be injective) + * @param defaultPredicate + * A default predicate used in the returned annotation for any state not in {@code states}. + */ + public TransformFloydHoareAnnotation(final IFloydHoareAnnotation annotation, final Set states, + final Function transformer, final IPredicate defaultPredicate) { mTransformer = transformer; - mResult = extractAnnotation(annotation, states); + mResult = extractAnnotation(annotation, states, defaultPredicate); } private static TransformFloydHoareAnnotation @@ -93,7 +111,7 @@ public TransformFloydHoareAnnotation(final IFloydHoareAnnotation annotation, } private IFloydHoareAnnotation extractAnnotation(final IFloydHoareAnnotation annotation, - final Set states) { + final Set states, final IPredicate defaultPredicate) { final var result = new HashMap(); final var spec = annotation.getSpecification(); @@ -124,7 +142,10 @@ private IFloydHoareAnnotation extractAnnotation(final IFloydHoareAnnotation< final var newSpec = new PrePostConditionSpecification<>(initialStates, finalStates::contains, spec.getPostcondition()); - return new FloydHoareMapping<>(newSpec, result); + if (defaultPredicate == null) { + return new FloydHoareMapping<>(newSpec, result); + } + return new FloydHoareMapping<>(newSpec, result, defaultPredicate); } public IFloydHoareAnnotation getResult() { diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/DirectedLegalFocusOwickiGries.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/DirectedLegalFocusOwickiGries.java new file mode 100644 index 00000000000..c3a1dcaf473 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/DirectedLegalFocusOwickiGries.java @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryServices; +import de.uni_freiburg.informatik.ultimate.automata.AutomataOperationCanceledException; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INestedWordAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INwaOutgoingLetterAndTransitionProvider; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.operations.TotalizeNwa; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.reachablestates.NestedWordAutomatonReachableStates; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNetSuccessorProvider; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.automata.statefactory.IUnionStateFactory; +import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.RunningTaskInfo; +import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.ToolchainCanceledException; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.CfgSmtToolkit; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.IIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.ModifiableGlobalsTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicateUnifier; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed.DirectedEmpire; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed.DirectedEmpire.State; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed.DirectedEmpireProduct; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed.DirectedEmpireProduct.ProductState; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed.DirectedEmpireToOwickiGries; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed.DirectedLegalFocus; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.IncrementalPlicationChecker.Validity; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.statistics.IStatisticsDataProvider; +import de.uni_freiburg.informatik.ultimate.util.statistics.TimeTracker; + +public class DirectedLegalFocusOwickiGries implements IPetriNetProofProducer { + private final IUltimateServiceProvider mServices; + private final ILogger mLogger; + private final IPetriNet mProgram; + private final ManagedScript mMgdScript; + private final IIcfgSymbolTable mSymbolTable; + private final Set mProcedures; + private final ModifiableGlobalsTable mModifiableGlobals; + + private final Statistics mStatistics; + + private final List> mProofs = new ArrayList<>(); + private IPossibleInterferences, P> mPossibleInterferences; + + private OwickiGriesAnnotation, P, Marking

> mOwickiGries; + private INwaOutgoingLetterAndTransitionProvider, ProductState> mProduct; + + public DirectedLegalFocusOwickiGries(final IUltimateServiceProvider services, final IPetriNet program, + final CfgSmtToolkit csToolkit) { + this(services, program, csToolkit.getManagedScript(), csToolkit.getSymbolTable(), csToolkit.getProcedures(), + csToolkit.getModifiableGlobalsTable()); + } + + public DirectedLegalFocusOwickiGries(final IUltimateServiceProvider services, final IPetriNet program, + final ManagedScript mgdScript, final IIcfgSymbolTable symbolTable, final Set procedures, + final ModifiableGlobalsTable modifiableGlobals) { + mServices = services; + mLogger = services.getLoggingService().getLogger(getClass()); + mProgram = program; + mMgdScript = mgdScript; + mSymbolTable = symbolTable; + mProcedures = procedures; + mModifiableGlobals = modifiableGlobals; + mStatistics = new Statistics(mLogger); + } + + @Override + public void initialize(final IPossibleInterferences, P> possibleInterferences) { + mPossibleInterferences = possibleInterferences; + } + + @Override + public void refine(final IPredicateUnifier unifier, final INestedWordAutomaton interpolantAutomaton, + final Map, Transition> transitionBacktranslation) { + assert mPossibleInterferences != null : getClass().getSimpleName() + " was not initialized"; + + final var initialTrueState = + DataStructureUtils.getOneAndOnly(interpolantAutomaton.getInitialStates(), "initial state"); + final var totalizedProof = new TotalizeNwa<>(interpolantAutomaton, initialTrueState, false); + mProofs.add(totalizedProof); + } + + @Override + public boolean isReadyToComputeProof() { + return true; + } + + @Override + public OwickiGriesAnnotation, P, Marking

> getOrComputeProof() { + final List, State>> empires; + mStatistics.startEmpireComputation(); + try { + empires = getEmpires(); + mProduct = constructProduct(empires); + } finally { + mStatistics.stopEmpireComputation(); + } + + final DirectedLegalFocus legalFocus; + mStatistics.startFocusComputation(); + try { + mLogger.info("Computing focus for %d empires", empires.size()); + legalFocus = new DirectedLegalFocus<>(new HashSet<>(empires), mProgram); + } finally { + mStatistics.stopFocusComputation(); + } + + mStatistics.startOwickiGriesComputation(); + try { + final var annotationConstruction = getOwickiGriesAnnotation(mPossibleInterferences, legalFocus); + mOwickiGries = annotationConstruction.getAnnotation(); + } finally { + mStatistics.stopOwickiGriesComputation(); + } + + assert checkOwickiGriesValidity(mOwickiGries) : "Owicki Gries annotation is invalid"; + return mOwickiGries; + } + + private INestedWordAutomaton, ProductState> + constructProduct(final List, State>> automata) { + final var productConstruction = new DirectedEmpireProduct<>(automata, mProgram, mServices); + return productConstruction.getProductAutomaton(); + } + + private List, State>> getEmpires() { + final var lazyEmpires = mProofs.stream().map(proof -> new DirectedEmpire(mProgram, proof, mServices)) + .collect(Collectors.toList()); + final var automata = new ArrayList, State>>(); + for (final DirectedEmpire empire : lazyEmpires) { + mLogger.info("Exploring empire..."); + try { + final var automaton = + new NestedWordAutomatonReachableStates<>(new AutomataLibraryServices(mServices), empire); + automata.add(automaton); + mLogger.info("Explored empire has %s", automaton.sizeInformation()); + } catch (final AutomataOperationCanceledException aoce) { + throw new ToolchainCanceledException(aoce, + new RunningTaskInfo(getClass(), "collecting reachable states of empire")); + } + } + return automata; + } + + private boolean checkOwickiGriesValidity(final OwickiGriesAnnotation, P, Marking

> annotation) { + mStatistics.startOwickiGriesValidity(); + try { + final var validity = + new PetriOwickiGriesValidityCheck<>(mServices, mMgdScript, mProgram, mModifiableGlobals, annotation) + .isValid(); + assert validity != Validity.INVALID : "Owicki-Gries annotation is invalid"; + if (validity == Validity.UNKNOWN) { + mLogger.warn("Could not prove validity of Owicki-Gries annotation"); + } + return validity != Validity.INVALID; + } finally { + mStatistics.stopOwickiGriesValidity(); + } + } + + @Override + public void finalize(final IPetriNetSuccessorProvider refinedNet) { + // nothing to do here + } + + @Override + public IPetriNet getProgram() { + return mProgram; + } + + private DirectedEmpireToOwickiGries getOwickiGriesAnnotation( + final IPossibleInterferences, P> possibleInterferences, + final DirectedLegalFocus legalFocus) { + return new DirectedEmpireToOwickiGries<>(mServices, mMgdScript, mProgram, mSymbolTable, mProcedures, mProduct, + legalFocus, possibleInterferences); + } + + @Override + public IStatisticsDataProvider getStatistics() { + return mStatistics; + } + + private static final class Statistics extends OwickiGriesStatistics { + private final TimeTracker mFocusTimer = new TimeTracker(); + + public Statistics(final ILogger logger) { + super(logger, DirectedEmpire.class, DirectedEmpireToOwickiGries.class); + declareTimeTracker("Focus computation time", mFocusTimer); + } + + private void startFocusComputation() { + mFocusTimer.start(); + } + + private void stopFocusComputation() { + mFocusTimer.stop(); + } + } + + private static final class UnionFactory implements IUnionStateFactory>> { + private final List> mEmptyStack; + + public UnionFactory() { + mEmptyStack = List.of(); + } + + @Override + public List> createEmptyStackState() { + return mEmptyStack; + } + + @Override + public List> union(final List> state1, final List> state2) { + return DataStructureUtils.concat(state1, state2); + } + + @Override + public List> createSinkStateContent() { + throw new UnsupportedOperationException(); + } + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/EmpireOwickiGries.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/EmpireOwickiGries.java new file mode 100644 index 00000000000..aa42c24756e --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/EmpireOwickiGries.java @@ -0,0 +1,315 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryException; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INestedWordAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INwaOutgoingLetterAndTransitionProvider; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.operations.TotalizeNwa; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.operations.UnionNwa; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNetSuccessorProvider; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.automata.statefactory.IUnionStateFactory; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.CfgSmtToolkit; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.IIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.ModifiableGlobalsTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicateUnifier; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateWithConjuncts; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.EmpireReachableStates; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.EmpireStatistics; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.EmpireToOwickiGries; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.EmpireValidityCheck; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.IExplicitEmpire; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.ILegalFocusFunction; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.LegalFocus; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.SaturatedEmpire; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.SaturatedEmpire.State; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.IncrementalPlicationChecker.Validity; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.statistics.IStatisticsDataProvider; +import de.uni_freiburg.informatik.ultimate.util.statistics.TimeTracker; + +public class EmpireOwickiGries implements IPetriNetProofProducer { + public enum FocusComputation { + UNFOCUSED, GLOBAL, MODULAR + } + + private final IUltimateServiceProvider mServices; + private final ILogger mLogger; + + private final IPetriNet mProgram; + private final ManagedScript mMgdScript; + private final IIcfgSymbolTable mSymbolTable; + private final Set mProcedures; + private final ModifiableGlobalsTable mModifiableGlobals; + + private final BasicPredicateFactory mFactory; + private final FocusComputation mFocusComputation; + + private final ConjunctiveUnionFactory mProofUnionFactory; + + private IPossibleInterferences, P> mPossibleInterferences; + private INwaOutgoingLetterAndTransitionProvider mProofProduct; + private int mNumProofs = 0; + + private OwickiGriesAnnotation, P, Marking

> mOwickiGries; + private final Statistics mStatistics; + + public EmpireOwickiGries(final IUltimateServiceProvider services, final IPetriNet program, + final CfgSmtToolkit csToolkit, final PredicateFactory factory, final FocusComputation focusComputation) { + this(services, program, csToolkit.getManagedScript(), csToolkit.getSymbolTable(), csToolkit.getProcedures(), + csToolkit.getModifiableGlobalsTable(), factory, focusComputation); + } + + public EmpireOwickiGries(final IUltimateServiceProvider services, final IPetriNet program, + final ManagedScript mgdScript, final IIcfgSymbolTable symbolTable, final Set procedures, + final ModifiableGlobalsTable modifiableGlobals, final PredicateFactory factory, + final FocusComputation focusComputation) { + mServices = services; + mLogger = services.getLoggingService().getLogger(getClass()); + + mProgram = program; + mMgdScript = mgdScript; + mSymbolTable = symbolTable; + mProcedures = procedures; + mModifiableGlobals = modifiableGlobals; + + mFactory = factory; + mFocusComputation = focusComputation; + + mProofUnionFactory = new ConjunctiveUnionFactory(factory); + + mStatistics = new Statistics(mLogger); + } + + @Override + public void initialize(final IPossibleInterferences, P> possibleInterferences) { + assert mPossibleInterferences == null : "already initialized"; + assert possibleInterferences != null : "did not provide possible interferences"; + + mPossibleInterferences = possibleInterferences; + } + + @Override + public void refine(final IPredicateUnifier unifier, final INestedWordAutomaton interpolantAutomaton, + final Map, Transition> transitionBacktranslation) { + assert mPossibleInterferences != null : getClass().getSimpleName() + " was not initialized"; + + mNumProofs++; + final var initialTrueState = + DataStructureUtils.getOneAndOnly(interpolantAutomaton.getInitialStates(), "initial state"); + final var totalizedProof = new TotalizeNwa<>(interpolantAutomaton, initialTrueState, false); + + if (mProofProduct == null) { + mProofProduct = totalizedProof; + } else { + try { + mProofProduct = new UnionNwa<>(mProofProduct, totalizedProof, mProofUnionFactory, false); + } catch (final AutomataLibraryException e) { + throw new RuntimeException("Failed to compute union of proof automata", e); + } + } + } + + @Override + public boolean isReadyToComputeProof() { + return true; + } + + @Override + public OwickiGriesAnnotation, P, Marking

> getOrComputeProof() { + if (mOwickiGries != null) { + // If the proof was already computed, just return it. + return mOwickiGries; + } + + assert isReadyToComputeProof() : "Not ready to compute proof"; + + final IExplicitEmpire> empire = computeEmpire(); + assert checkEmpireValidity(empire) : "Empire is invalid"; + + final ILegalFocusFunction, P> legalFocus = computeFocus(empire); + + mOwickiGries = computeOwickiGriesAnnotation(empire, legalFocus); + assert checkOwickiGriesValidity(mOwickiGries) : "Owicki Gries annotation is invalid"; + + return mOwickiGries; + } + + private IExplicitEmpire> computeEmpire() { + mStatistics.startEmpireComputation(); + try { + final var lazyEmpire = new SaturatedEmpire<>(mProgram, mProofProduct, mServices); + + mLogger.info("Exploring empire..."); + final var empire = new EmpireReachableStates<>(mServices, lazyEmpire); + + mLogger.info("Explored empire has %s", empire.sizeInformation()); + mStatistics.reportEmpire(empire); + + return empire; + } finally { + mStatistics.stopEmpireComputation(); + } + } + + private boolean checkEmpireValidity(final IExplicitEmpire empire) { + mLogger.info("Checking validity of empire..."); + mStatistics.startEmpireValidity(); + try { + final var checker = + new EmpireValidityCheck<>(mServices, mMgdScript, mFactory, mProgram, mModifiableGlobals, empire); + return checker.getValidity() != Validity.INVALID; + } finally { + mStatistics.stopEmpireValidity(); + } + } + + private ILegalFocusFunction, P> computeFocus(final IExplicitEmpire> empire) { + mLogger.info("Computing focus ..."); + mStatistics.startFocusComputation(); + try { + return switch (mFocusComputation) { + case UNFOCUSED -> new ILegalFocusFunction.TrivialFocus<>(empire); + case MODULAR -> + new LegalFocus<>(empire, mProgram, mProofProduct, mNumProofs, mProofUnionFactory::splitConjuncts); + case GLOBAL -> new LegalFocus<>(empire, mProgram, mProofProduct, 1, List::of); + }; + } finally { + mStatistics.stopFocusComputation(); + } + } + + private OwickiGriesAnnotation, P, Marking

> computeOwickiGriesAnnotation( + final IExplicitEmpire> empire, final ILegalFocusFunction, P> legalFocus) { + mLogger.info("Converting empire to Owicki-Gries annotation..."); + mStatistics.startOwickiGriesComputation(); + try { + final var construction = new EmpireToOwickiGries<>(mServices, mMgdScript, mProgram, mSymbolTable, + mProcedures, empire, mPossibleInterferences, legalFocus); + return construction.getAnnotation(); + } finally { + mStatistics.stopOwickiGriesComputation(); + } + } + + private boolean checkOwickiGriesValidity(final OwickiGriesAnnotation, P, Marking

> annotation) { + mLogger.info("Checking validity of Owicki-Gries annotation..."); + mStatistics.startOwickiGriesValidity(); + try { + final var validity = + new PetriOwickiGriesValidityCheck<>(mServices, mMgdScript, mProgram, mModifiableGlobals, annotation) + .isValid(); + assert validity != Validity.INVALID : "Owicki-Gries annotation is invalid"; + if (validity == Validity.UNKNOWN) { + mLogger.warn("Could not prove validity of Owicki-Gries annotation"); + } + return validity != Validity.INVALID; + } finally { + mStatistics.stopOwickiGriesValidity(); + } + } + + @Override + public void finalize(final IPetriNetSuccessorProvider refinedNet) { + // Nothing to do here + } + + @Override + public IPetriNet getProgram() { + return mProgram; + } + + @Override + public IStatisticsDataProvider getStatistics() { + return mStatistics; + } + + private static final class Statistics extends OwickiGriesStatistics { + private final TimeTracker mFocusTimer = new TimeTracker(); + + public Statistics(final ILogger logger) { + super(logger, SaturatedEmpire.class, EmpireToOwickiGries.class); + declareTimeTracker("Focus computation time", mFocusTimer); + } + + public void reportEmpire(final IExplicitEmpire empire) { + reportEmpireStatistics(new EmpireStatistics(empire)); + } + + private void startFocusComputation() { + mFocusTimer.start(); + } + + private void stopFocusComputation() { + mFocusTimer.stop(); + } + } + + private static final class ConjunctiveUnionFactory implements IUnionStateFactory { + private final BasicPredicateFactory mFactory; + + public ConjunctiveUnionFactory(final BasicPredicateFactory factory) { + mFactory = factory; + } + + @Override + public IPredicate createEmptyStackState() { + return null; + } + + @Override + public IPredicate createSinkStateContent() { + throw new UnsupportedOperationException("Cannot create sink state. Expecting total automata."); + } + + @Override + public IPredicate union(final IPredicate state1, final IPredicate state2) { + return mFactory.construct(id -> new PredicateWithConjuncts(id, state1, state2)); + } + + public List splitConjuncts(final IPredicate predicate) { + if (predicate instanceof final PredicateWithConjuncts conjunction) { + return conjunction.getConjuncts(); + } + return List.of(predicate); + } + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/GhostUpdate.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/GhostUpdate.java new file mode 100644 index 00000000000..b687659bfba --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/GhostUpdate.java @@ -0,0 +1,206 @@ +/* + * Copyright (C) 2023 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2023 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.IIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.transitions.TransFormulaBuilder; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.transitions.UnmodifiableTransFormula; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.logic.Term; +import de.uni_freiburg.informatik.ultimate.smtinterpol.util.DAGSize; + +/** + * Encapsulates information about the updates performed on ghost variables during a transition. + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + */ +public final class GhostUpdate { + private final Map mUpdates; + + /** + * Creates a new instance. + * + * @param updates + * A map from ghost variables to the terms which are assigned to them. The terms may again use ghost + * variables, as well as program variables. The assignments are performed concurrently, i.e., an + * occurrence of a ghost variable in one of these terms always refers to the ghost variable's value + * before any update has occurred. + */ + public GhostUpdate(final Map updates) { + mUpdates = updates; + + assert !mUpdates.isEmpty() : "empty ghost updates are redundant"; + + // Intentionally strange null checks, because some Maps/Sets throw errors when checking if they contain null. + assert mUpdates.keySet().stream().noneMatch(Objects::isNull) : "invalid ghost update for null"; + assert mUpdates.values().stream().noneMatch(Objects::isNull) : "cannot update ghost variable to null"; + + assert mUpdates.entrySet().stream().noneMatch(e -> e.getValue().equals(e.getKey().getTermVariable())) + : "trivial ghost updates are redundant"; + } + + /** + * The set of variables which are assigned. + */ + public Set getAssignedVariables() { + return Collections.unmodifiableSet(mUpdates.keySet()); + } + + /** + * Determines if the given ghost variable is updated. + * + * @param variable + * the ghost variable to check + * @return true if this instance may update the value of the ghost variable, false otherwise + */ + public boolean containsUpdateFor(final IProgramVar variable) { + return mUpdates.containsKey(variable); + } + + /** + * Retrieves the term which is assigned to the given ghost variable. + * + * @param variable + * The ghost variable whose assigned expression is determined + * @return the assigned expression + * + * @throws IllegalArgumentException + * if the given variable is not updated + */ + public Term getExpressionFor(final IProgramVar variable) { + final Term expr = mUpdates.get(variable); + if (expr == null) { + throw new IllegalArgumentException("no ghost update stored for " + variable); + } + return expr; + } + + /** + * Constructs a transition formula representing the update of ghost variables as prescribed by this instance. + * + * @param mgdScript + * A script used for the construction + * @param symbolTable + * A symbol table used for the construction. This must contain all ghost and program variables. + * @return the transition formula + */ + public UnmodifiableTransFormula makeTransitionFormula(final ManagedScript mgdScript, + final IIcfgSymbolTable symbolTable) { + final var variables = new ArrayList(mUpdates.size()); + final var values = new ArrayList(mUpdates.size()); + for (final var entry : mUpdates.entrySet()) { + variables.add(entry.getKey()); + values.add(entry.getValue()); + } + return TransFormulaBuilder.constructAssignment(variables, values, symbolTable, mgdScript); + } + + /** + * Creates a new instance with all updates of this instance, in addition to the given updates. + * + * @param updates + * Additional updates to include. This must not overlap withthe current instance. + * @return + */ + public GhostUpdate withAdditionalUpdates(final Map updates) { + if (updates.isEmpty()) { + return this; + } + + final var newUpdates = new HashMap<>(mUpdates); + for (final var entry : updates.entrySet()) { + final var oldTerm = newUpdates.put(entry.getKey(), entry.getValue()); + if (oldTerm != null) { + throw new IllegalArgumentException("Duplicate update for " + entry.getKey()); + } + } + return new GhostUpdate(newUpdates); + } + + public static GhostUpdate combine(final GhostUpdate oldUpdate, final Map newUpdates) { + if (oldUpdate == null && newUpdates.isEmpty()) { + return null; + } + if (oldUpdate == null) { + return new GhostUpdate(newUpdates); + } + return oldUpdate; + } + + /** + * Computes the size of the ghost update + * + * @return the sum of the DAG sizes of all terms assigned to ghost variables + */ + public int size() { + return mUpdates.values().stream().collect(Collectors.summingInt(t -> new DAGSize().size(t))); + } + + @Override + public int hashCode() { + return Objects.hash(mUpdates); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final GhostUpdate other = (GhostUpdate) obj; + return Objects.equals(mUpdates, other.mUpdates); + } + + @Override + public String toString() { + final var sb1 = new StringBuilder("("); + final var sb2 = new StringBuilder("("); + for (final var entry : mUpdates.entrySet()) { + if (sb1.length() > 1) { + sb1.append(", "); + sb2.append(", "); + } + sb1.append(entry.getKey()); + sb2.append(entry.getValue()); + } + return sb1.toString() + ") := " + sb2.toString() + ")"; + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/IPetriNetProofProducer.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/IPetriNetProofProducer.java new file mode 100644 index 00000000000..8d1aae45ce4 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/IPetriNetProofProducer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2024 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.Map; + +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INestedWordAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNetSuccessorProvider; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicateUnifier; +import de.uni_freiburg.informatik.ultimate.lib.proofs.IProofProducer; + +public interface IPetriNetProofProducer + extends IProofProducer, OwickiGriesAnnotation, P, Marking

>> { + void initialize(IPossibleInterferences, P> possibleInterferences); + + void refine(final IPredicateUnifier unifier, INestedWordAutomaton interpolantAutomaton, + Map, Transition> transitionBacktranslation); + + void finalize(IPetriNetSuccessorProvider refinedNet); +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/IPossibleInterferences.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/IPossibleInterferences.java new file mode 100644 index 00000000000..42e05614409 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/IPossibleInterferences.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2024 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2024 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.Set; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.unfolding.BranchingProcess; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.unfolding.Condition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.unfolding.Event; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.unfolding.ICoRelation; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.HashRelation; + +/** + * An interface that specifies the possible interferences in a model of a concurrent program. Specifically, a transition + * of the program can possibly interfere with a program location if, while the program is in the given + * location, some concurrent thread can execute the action. + * + * In general, an instance of this interface will present an overapproximation of the transitions that can actually be + * executed concurrently. In particular, instances typically would track only what is possible up to control flow, + * whereas data flow constraints would be ignored. + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * + * @param + * The type of transitions in the program model + * @param

+ * The type of program locations in the program model + */ +public interface IPossibleInterferences { + /** + * Retrieves the set of all transitions that possibly interfere with the given program location + * + * @param location + * The program location whose possibly interfering transitions shall be retrieved + * @return a set containing all possibly interfering transitions + */ + Set getInterferingActions(P location); + + /** + * Creates a new instance from the given data. + * + * @param + * The type of transitions in the program model + * @param

+ * The type of program locations in the program model + * @param rel + * A binary relation from program locations to the possibly interfering transitions + * @return a new instance of the interface + */ + static IPossibleInterferences fromRelation(final HashRelation rel) { + return rel::getImage; + } + + static HashRelation> fromUnfolding(final BranchingProcess bp) { + final HashRelation> relation = new HashRelation<>(); + final ICoRelation coRelation = bp.getCoRelation(); + for (final Condition condition : bp.getConditions()) { + final P place = condition.getPlace(); + for (final Event event : coRelation.computeCoRelatatedEvents(condition)) { + final Transition transition = event.getTransition(); + if (!transition.getPredecessors().contains(place)) { + relation.addPair(place, transition); + } + } + } + return relation; + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/NaiveOwickiGries.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/NaiveOwickiGries.java new file mode 100644 index 00000000000..8188d5c91ec --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/NaiveOwickiGries.java @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2024 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2024 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INestedWordAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNetSuccessorProvider; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetNot1SafeException; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.CfgSmtToolkit; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicateCoverageChecker; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicateUnifier; +import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.IFloydHoareAnnotation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.PetriFloydHoareValidityCheck; +import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.TransformFloydHoareAnnotation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.naive.NaiveOwickiGriesConstruction; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.naive.PetriFloydHoare; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.IncrementalPlicationChecker.Validity; +import de.uni_freiburg.informatik.ultimate.util.datastructures.BidirectionalMap; +import de.uni_freiburg.informatik.ultimate.util.statistics.IStatisticsDataProvider; +import de.uni_freiburg.informatik.ultimate.util.statistics.TimeTracker; + +public class NaiveOwickiGries { + private final IUltimateServiceProvider mServices; + private final ILogger mLogger; + private final BasicPredicateFactory mPredicateFactory; + private final CfgSmtToolkit mCsToolkit; + private final IPetriNet mProgram; + private final OwickiGriesSettings mSettings; + + private final Statistics mStatistics; + + public NaiveOwickiGries(final IUltimateServiceProvider services, final BasicPredicateFactory predicateFactory, + final CfgSmtToolkit csToolkit, final IPetriNet program, final OwickiGriesSettings settings) { + mServices = services; + mLogger = services.getLoggingService().getLogger(getClass()); + mPredicateFactory = predicateFactory; + mCsToolkit = csToolkit; + mProgram = program; + mSettings = settings; + + mStatistics = new Statistics(mLogger); + } + + public IPetriNetProofProducer createProofProducer(final Function assertionPlaceToAssertion) { + return new Producer(assertionPlaceToAssertion); + } + + /** + * + * @param + * @param marking2State + * Map from reachable markings to corresponding states. + * + * Reachable markings whose Floyd-Hoare annotation is {@code true} may be omitted. This is useful e.g. + * for optimizations that prune reachable markings from which no accepting place can be reached. + * @return + */ + public Function, OwickiGriesAnnotation, P, Marking

>> + createProofConverter(final Map, S> marking2State) { + return floydHoare -> { + final var map = new BidirectionalMap, S>(); + map.putAll(marking2State); + + // Convert IFloydHoareAnnotation of automaton to IFloydHoareAnnotation of Petri reachability graph. + // We use truePredicate as fallback annotation. + final IPredicate truePredicate = mPredicateFactory.and(); + final var markingFloydHoare = + new TransformFloydHoareAnnotation<>(floydHoare, map.values(), map.inverse()::get, truePredicate) + .getResult(); + + assert checkFloydHoareValidity(markingFloydHoare) : "Invalid Floyd-Hoare annotation"; + + // Explicitly compute reachable markings. In contrast to marking2State.keySet(), this may not omit any + // reachable markings no matter what their Floyd-Hoare annotation would be. + final Collection> reachableMarkings; + try { + reachableMarkings = PetriFloydHoare.computeReachableMarkings(mProgram); + } catch (final PetriNetNot1SafeException e) { + throw new AssertionError(e); + } + + return convertToOwickiGries(markingFloydHoare, reachableMarkings); + }; + } + + public OwickiGriesAnnotation, P, Marking

> convertToOwickiGries( + final IFloydHoareAnnotation> floydHoare, final Collection> reachableMarkings) { + mLogger.info("Converting Floyd-Hoare proof to Owicki-Gries proof..."); + mStatistics.startOwickiGriesComputation(); + OwickiGriesAnnotation, P, Marking

> annotation; + try { + final NaiveOwickiGriesConstruction construction = new NaiveOwickiGriesConstruction<>(mServices, + mCsToolkit, mProgram, reachableMarkings, floydHoare, mSettings.useHittingSets()); + annotation = construction.getResult(); + mStatistics.reportOwickiGries(annotation); + } finally { + mStatistics.stopOwickiGriesComputation(); + } + + assert checkOwickiGriesValidity(annotation) : "Invalid Owicki-Gries annotation"; + return annotation; + } + + private boolean checkFloydHoareValidity(final IFloydHoareAnnotation> floydHoare) { + mLogger.info("Checking validity of Floyd-Hoare proof..."); + mStatistics.startFloydHoareValidity(); + final Validity validity; + try { + validity = new PetriFloydHoareValidityCheck<>(mServices, mCsToolkit.getManagedScript(), + mCsToolkit.getModifiableGlobalsTable(), mProgram, floydHoare).isValid(); + if (validity == Validity.UNKNOWN) { + mLogger.warn("Could not prove validity of Floyd-Hoare annotation for Petri reachability graph"); + } + return validity != Validity.INVALID; + } catch (final PetriNetNot1SafeException e) { + throw new AssertionError(e); + } finally { + mStatistics.stopFloydHoareValidity(); + } + } + + private boolean checkOwickiGriesValidity(final OwickiGriesAnnotation, P, Marking

> annotation) { + mLogger.info("Checking validity of Owicki-Gries proof..."); + mStatistics.startOwickiGriesValidity(); + try { + final var validity = + new PetriOwickiGriesValidityCheck<>(mServices, mProgram, mCsToolkit, annotation).isValid(); + assert validity != Validity.INVALID : "Owicki-Gries annotation is invalid"; + if (validity == Validity.UNKNOWN) { + mLogger.warn("Could not prove validity of Owicki-Gries annotation"); + } + return validity != Validity.INVALID; + } finally { + mStatistics.stopOwickiGriesValidity(); + } + } + + public IStatisticsDataProvider getStatistics() { + return mStatistics; + } + + private class Producer implements IPetriNetProofProducer { + private final Function mAssertionPlaceToAssertion; + + private final List mCoverageRelations = new ArrayList<>(); + private IPetriNetSuccessorProvider mFinalAbstraction; + + private Producer(final Function assertionPlaceToAssertion) { + mAssertionPlaceToAssertion = assertionPlaceToAssertion; + } + + @Override + public void initialize(final IPossibleInterferences, P> possibleInterferences) { + // nothing to do here + } + + @Override + public void refine(final IPredicateUnifier unifier, + final INestedWordAutomaton interpolantAutomaton, + final Map, Transition> transitionBacktranslation) { + if (mSettings.useCoveringSimplification()) { + mCoverageRelations.add(unifier.getCoverageRelation()); + } + } + + @Override + public void finalize(final IPetriNetSuccessorProvider refinedNet) { + mFinalAbstraction = refinedNet; + } + + @Override + public IPetriNet getProgram() { + return mProgram; + } + + @Override + public boolean isReadyToComputeProof() { + return mFinalAbstraction != null; + } + + @Override + public OwickiGriesAnnotation, P, Marking

> getOrComputeProof() { + // compute the Floyd-Hoare annotation + mLogger.info("Computing Floyd-Hoare proof..."); + mStatistics.startFloydHoareComputation(); + PetriFloydHoare petriFloydHoare; + try { + petriFloydHoare = new PetriFloydHoare<>(mPredicateFactory, mProgram, mFinalAbstraction, + mAssertionPlaceToAssertion, mCoverageRelations, mSettings.useCoveringSimplification()); + } catch (final PetriNetNot1SafeException e) { + throw new AssertionError(e); + } finally { + mStatistics.stopFloydHoareComputation(); + } + + assert checkFloydHoareValidity(petriFloydHoare.getResult()) : "Invalid Floyd-Hoare annotation"; + + // convert the Floyd-Hoare annotation to Owicki-Gries + return convertToOwickiGries(petriFloydHoare.getResult(), petriFloydHoare.getReachableMarkings()); + } + + @Override + public IStatisticsDataProvider getStatistics() { + return NaiveOwickiGries.this.getStatistics(); + } + } + + private static final class Statistics extends OwickiGriesStatistics { + private final TimeTracker mFloydHoareTime = new TimeTracker(); + private final TimeTracker mFloydHoareValidityTime = new TimeTracker(); + + public Statistics(final ILogger logger) { + super(logger, null, NaiveOwickiGriesConstruction.class); + + declareTimeTracker("Floyd-Hoare computation time", mFloydHoareTime); + declareTimeTracker("Floyd-Hoare validity check time", mFloydHoareValidityTime); + } + + public void startFloydHoareComputation() { + mFloydHoareTime.start(); + } + + public void stopFloydHoareComputation() { + mFloydHoareTime.stop(); + } + + public void startFloydHoareValidity() { + mFloydHoareValidityTime.start(); + } + + public void stopFloydHoareValidity() { + mFloydHoareValidityTime.stop(); + } + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesAnnotation.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesAnnotation.java new file mode 100644 index 00000000000..1b22192c489 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesAnnotation.java @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2020 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.Arrays; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.IIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.IProof; +import de.uni_freiburg.informatik.ultimate.lib.proofs.ThreadModularPrePostSpecification; +import de.uni_freiburg.informatik.ultimate.logic.Term; +import de.uni_freiburg.informatik.ultimate.smtinterpol.util.DAGSize; + +/** + * An Owicki/Gries annotation of a concurrent program. Serves as proof of the program's correctness. + * + * We primarily use Owicki/Gries annotations for Petri programs. However, they can also be used for other models of + * concurrent programs, such as interprocedural CFGs. + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * @author Miriam Lagunes (miriam.lagunes@students.uni-freiburg.de) + * + * @param + * The type of transitions in the program model. In Petri programs, this is the type of Petri net + * transitions; in interprocedural CFGs, it's the type of CFG edges. + * @param

+ * The type of places, or program locations, in the program model + * @param + * The type of "markings", i.e., control configurations of the entire concurrent program + */ +public class OwickiGriesAnnotation> implements IProof { + + /** + * The specification proven by this annotation. + */ + private final ThreadModularPrePostSpecification mSpecification; + + /** + * The possible interferences between transitions and places. + * + * Strictly speaking, this is not part of the proof but merely information about the concurrency and synchronization + * of the program. But, as it is needed most of the time when we are working with the proof, and it needs to be + * backtranslated in a similar manner as the proof, we include it here. + */ + private final IPossibleInterferences mPossibleInterferences; + + /** + * A symbol table containing both the program symbols and the ghost variables in the annotation. + */ + private final IIcfgSymbolTable mSymbolTable; + + /** + * "omega" - maps a place to a predicate that holds whenever the place has a token. + */ + private final Map mFormulaMapping; + + /** + * "gamma" - annotates transitions with assignments of ghost variables. + */ + private final Map mAssignmentMapping; + + /** + * Set of ghost variables used by the annotation. + */ + private final Set mGhostVariables; + + /** + * Initial assignment of ghost variables. + */ + private final Map mGhostInitAssignment; + + /** + * Creates a new Owicki/Gries annotation. + * + * @param net + * The Petri program that is annotated. + * @param symbolTable + * A symbol table for the annotation, which includes the program variables as well as the ghost variables + * @param formulaMapping + * The mapping from places to formulas. + * @param ghostVariables + * The set of ghost variables used by the annotation. + * @param ghostInitAssignment + * The initial assignment of ghost variables. + * @param assignmentMapping + * The annotation of transitions with ghost assignments. + */ + public OwickiGriesAnnotation(final ThreadModularPrePostSpecification specification, + final IPossibleInterferences possibleInterferences, final IIcfgSymbolTable symbolTable, + final Map formulaMapping, final Set ghostVariables, + final Map ghostInitAssignment, final Map assignmentMapping) { + assert ghostInitAssignment.keySet().stream().allMatch(ghostVariables::contains) + : "Initial value only allowed for ghost variables"; + + // TODO should we allow more here? e.g. any term that does not itself contain a ghost variable? + // TODO we cannot allow all terms there are, otherwise we might have contradictions: a==!b and b==a + // TODO (or, depending how we interpret it, the values depend on an order between ghost initializations) + // assert ghostInitAssignment.values().stream().allMatch( + // v -> v.getFreeVars().length == 0) : "Initial values must be literal terms without free variables"; + assert ghostInitAssignment.values().stream().flatMap(t -> Arrays.stream(t.getFreeVars())) + .allMatch(v -> ghostVariables.stream().noneMatch(gv -> gv.getTermVariable().equals(v))) + : "Ghost variables initializations must not refer to other ghost variables"; + + assert assignmentMapping.values().stream().allMatch(u -> ghostVariables.containsAll(u.getAssignedVariables())) + : "Only updates to ghost variables allowed"; + + mSpecification = specification; + mPossibleInterferences = possibleInterferences; + + mSymbolTable = symbolTable; + mFormulaMapping = formulaMapping; + mGhostVariables = ghostVariables; + mGhostInitAssignment = ghostInitAssignment; + mAssignmentMapping = assignmentMapping; + } + + public IIcfgSymbolTable getSymbolTable() { + return mSymbolTable; + } + + public Map getFormulaMapping() { + return mFormulaMapping; + } + + public Map getAssignmentMapping() { + return mAssignmentMapping; + } + + public Set getGhostVariables() { + return mGhostVariables; + } + + public Map getGhostAssignment() { + return mGhostInitAssignment; + } + + public long size() { + final long initSize = mGhostInitAssignment.entrySet().stream() + .collect(Collectors.summingLong(x -> new DAGSize().size(x.getValue()))); + final long formulaSize = mFormulaMapping.entrySet().stream() + .collect(Collectors.summingLong(x -> new DAGSize().size(x.getValue().getFormula()))); + final long assignSize = mAssignmentMapping.values().stream().collect(Collectors.summingLong(GhostUpdate::size)); + return initSize + formulaSize + assignSize; + } + + @Override + public String toString() { + final var sb = new StringBuilder(); + + sb.append("Assertions:\n"); + appendEntries(sb, mFormulaMapping); + + sb.append("\nGhost Variables (and initial values):\n"); + appendEntries(sb, mGhostInitAssignment); + + sb.append("\nGhost Updates:\n"); + appendEntries(sb, mAssignmentMapping); + + return sb.toString(); + } + + private static void appendEntries(final StringBuilder sb, final Map map) { + int len = 0; + for (final var key : map.keySet()) { + len = Integer.max(len, Objects.toString(key).length()); + } + for (final var entry : map.entrySet()) { + final String keyStr = String.format("%-" + len + "s", entry.getKey()); + sb.append('\t').append(keyStr).append(" : ").append(entry.getValue()).append('\n'); + } + } + + @Override + public ThreadModularPrePostSpecification getSpecification() { + return mSpecification; + } + + public IPossibleInterferences getPossibleInterferences() { + return mPossibleInterferences; + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesSettings.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesSettings.java new file mode 100644 index 00000000000..834df10ff20 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesSettings.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2024 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2024 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +public record OwickiGriesSettings(OwickiGriesComputation computationMode, boolean useHittingSets, + boolean useCoveringSimplification) { + + public enum OwickiGriesComputation { + NONE, NAIVE, EMPIRE, LEGAL_FOCUS, DIR_LEGAL_FOCUS + } + + public boolean computeProof() { + return computationMode != OwickiGriesComputation.NONE; + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesStatistics.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesStatistics.java new file mode 100644 index 00000000000..24d1460d599 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesStatistics.java @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2023 Matthias Zumkeller + * Copyright (C) 2023 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.Objects; +import java.util.function.Predicate; + +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.util.statistics.AbstractStatisticsDataProvider; +import de.uni_freiburg.informatik.ultimate.util.statistics.IStatisticsDataProvider; +import de.uni_freiburg.informatik.ultimate.util.statistics.MinMaxMed; +import de.uni_freiburg.informatik.ultimate.util.statistics.TimeTracker; + +abstract class OwickiGriesStatistics extends AbstractStatisticsDataProvider { + public static final String EMPIRE_VALIDITY_TIME = "Empire validity check time"; + public static final String OWICKI_GRIES_VALIDITY_TIME = "Owicki-Gries validity check time"; + + protected final ILogger mLogger; + + private final TimeTracker mEmpireTime = new TimeTracker(); + private IStatisticsDataProvider mEmpireStatistics; + private final TimeTracker mEmpireValidityTime = new TimeTracker(); + + private final TimeTracker mOwickiGriesTime = new TimeTracker(); + private final TimeTracker mOwickiGriesValidityTime = new TimeTracker(); + + public OwickiGriesStatistics(final ILogger logger, final Class empireComputation, final Class ogComputation) { + mLogger = logger; + + if (empireComputation != null) { + declareTimeTracker(empireComputation.getSimpleName() + " time", mEmpireTime); + forward(empireComputation.getSimpleName() + " statistics", () -> mEmpireStatistics); + declareTimeTracker(EMPIRE_VALIDITY_TIME, mEmpireValidityTime); + } + + Objects.requireNonNull(ogComputation); + declareTimeTracker(ogComputation.getSimpleName() + " time", mOwickiGriesTime); + declareTimeTracker(OWICKI_GRIES_VALIDITY_TIME, mOwickiGriesValidityTime); + } + + // EMPIRES + // ---------------------------- + + public void startEmpireComputation() { + mEmpireTime.start(); + } + + public void stopEmpireComputation() { + mEmpireTime.stop(); + } + + public void reportEmpireStatistics(final IStatisticsDataProvider empireStatistics) { + mEmpireStatistics = empireStatistics; + + // TODO measure size etc + // TODO log information + } + + public void startEmpireValidity() { + mEmpireValidityTime.start(); + } + + public void stopEmpireValidity() { + mEmpireValidityTime.stop(); + } + + // OWICKI-GRIES + // ---------------------------- + + public void startOwickiGriesComputation() { + mOwickiGriesTime.start(); + } + + public void stopOwickiGriesComputation() { + mOwickiGriesTime.stop(); + } + + public void reportOwickiGries(final OwickiGriesAnnotation annotation) { + // TODO measure size etc + // TODO log information + mLogger.info("Computed Owicki-Gries annotation with %d ghost variables, %d ghost updates, and overall size %d", + annotation.getGhostVariables().size(), annotation.getAssignmentMapping().size(), annotation.size()); + printModularityData(mLogger, annotation); + } + + public void startOwickiGriesValidity() { + mOwickiGriesValidityTime.start(); + } + + public void stopOwickiGriesValidity() { + mOwickiGriesValidityTime.stop(); + } + + // TODO temporary; integrate this into the regular statistics + public static void printModularityData(final ILogger logger, final OwickiGriesAnnotation annotation) { + final MinMaxMed freeVars = new MinMaxMed(); + freeVars.report(annotation.getFormulaMapping().values(), fm -> fm.getFormula().getFreeVars().length); + logger.info("free variables mentioned in invariants: " + freeVars); + + final MinMaxMed ghostVars = new MinMaxMed(); + ghostVars.report(annotation.getFormulaMapping().values(), + fm -> fm.getVars().stream().filter(annotation.getGhostVariables()::contains).count()); + logger.info("ghost variables mentioned in invariants: " + ghostVars); + + final MinMaxMed programVars = new MinMaxMed(); + programVars.report(annotation.getFormulaMapping().values(), + fm -> fm.getVars().stream().filter(Predicate.not(annotation.getGhostVariables()::contains)).count()); + logger.info("program variables mentioned in invariants: " + programVars); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesUnpetrifier.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesUnpetrifier.java new file mode 100644 index 00000000000..51565016a07 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesUnpetrifier.java @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2024 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2024 University of Freiburg + * + * This file is part of the ULTIMATE TraceAbstraction plug-in. + * + * The ULTIMATE TraceAbstraction plug-in is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE TraceAbstraction plug-in is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE TraceAbstraction plug-in. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE TraceAbstraction plug-in, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE TraceAbstraction plug-in grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.math.BigInteger; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.function.UnaryOperator; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.DefaultIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfg; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfgTransition; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgLocation; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.ILocalProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramNonOldVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.ProgramNonOldVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.ProgramVarUtils; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.ThreadModularPrePostSpecification; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.Substitution; +import de.uni_freiburg.informatik.ultimate.logic.Term; +import de.uni_freiburg.informatik.ultimate.logic.TermVariable; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.HashRelation; + +/** + * Backtranslates an Owicki-Gries annotation of a Petri program derived from an {@link IIcfg} to an Owicki-Gries + * annotation of the original {@link IIcfg}. + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * + * @param + * The type of transitions in the {@link IIcfg}, which are also used as letters of the Petri program + * @param

+ * The type of places in the Petri program + * @param + * The type of locations in the {@link IIcfg} + */ +public class OwickiGriesUnpetrifier, P, LOC extends IcfgLocation> { + private final ManagedScript mMgdScript; + private final BasicPredicateFactory mPredicateFactory; + + private final Function mPlaceToLocation; + private final UnaryOperator mUnpetrifyAction; + private final UnaryOperator mUnpetrifyVariable; + private final Set

mThreadUsageMonitorPlaces; + + private final Map mThreadIdVars = new HashMap<>(); + private final Map mGhostMirrors = new HashMap<>(); + private final DefaultIcfgSymbolTable mSymbolTable; + + private final OwickiGriesAnnotation> mOwickiGries; + + // TODO ConcurrencyInformation of petrified CFG? + public OwickiGriesUnpetrifier(final IUltimateServiceProvider services, final IIcfg originalIcfg, + final IPetriNet petrifiedProgram, + final OwickiGriesAnnotation, P, Marking

> annotation, + final Function placeToLocation, final UnaryOperator unpetrifyAction, + final UnaryOperator unpetrifyVariable, final Set

threadUsageMonitorPlaces) { + mMgdScript = originalIcfg.getCfgSmtToolkit().getManagedScript(); + + mPlaceToLocation = placeToLocation; + mUnpetrifyAction = unpetrifyAction; + mUnpetrifyVariable = unpetrifyVariable; + mThreadUsageMonitorPlaces = threadUsageMonitorPlaces; + + final var possibleInterferences = + translatePossibleInterferences(petrifiedProgram, annotation.getPossibleInterferences()); + + mSymbolTable = new DefaultIcfgSymbolTable(annotation.getSymbolTable(), + originalIcfg.getCfgSmtToolkit().getProcedures()); + mPredicateFactory = new BasicPredicateFactory(services, mMgdScript, mSymbolTable); + + // compute formula mapping, and collect newly needed ghost variables on the fly + final Map formulaMapping = computeFormulaMapping(petrifiedProgram, annotation); + mSymbolTable.finishConstruction(); + + // collect old and new ghost variables + final var ghostVars = new HashSet<>(annotation.getGhostVariables()); + ghostVars.addAll(mGhostMirrors.values()); + ghostVars.addAll(mThreadIdVars.values()); + + // collect initial values of old and new ghost variables + final Map ghostInits = new HashMap<>(annotation.getGhostAssignment()); + for (final var entry : mGhostMirrors.entrySet()) { + // Initialize ghost mirrors to 0. They will be updated when the local variable they mirror is initialized. + final var zero = + SmtUtils.constructIntegerValue(mMgdScript.getScript(), entry.getKey().getSort(), BigInteger.ZERO); + ghostInits.put(entry.getValue(), zero); + } + + final Map ghostUpdates = computeUpdates(petrifiedProgram, annotation); + + // TODO unpetrify specification + final ThreadModularPrePostSpecification> unpetrifiedSpec = null; + mOwickiGries = new OwickiGriesAnnotation<>(unpetrifiedSpec, possibleInterferences, mSymbolTable, formulaMapping, + ghostVars, ghostInits, ghostUpdates); + } + + public OwickiGriesAnnotation> getResult() { + return mOwickiGries; + } + + private IPossibleInterferences translatePossibleInterferences(final IPetriNet petrifiedProgram, + final IPossibleInterferences, P> petrifiedPossibleInterferences) { + final var result = new HashRelation(); + for (final var p : petrifiedProgram.getPlaces()) { + if (isThreadUsageMonitorPlace(p)) { + continue; + } + final var loc = getLocation(p); + result.addAllPairs(loc, petrifiedPossibleInterferences.getInterferingActions(p).stream() + .map(Transition::getSymbol).map(mUnpetrifyAction).collect(Collectors.toSet())); + } + return IPossibleInterferences.fromRelation(result); + } + + private Map computeFormulaMapping(final IPetriNet petrifiedProgram, + final OwickiGriesAnnotation, P, Marking

> annotation) { + final var result = new HashMap(); + for (final var entry : annotation.getFormulaMapping().entrySet()) { + final P place = entry.getKey(); + if (isThreadUsageMonitorPlace(place)) { + continue; + } + + final var loc = getLocation(place); + if (result.containsKey(loc)) { + // TODO support this, by introducing local ghost variables for thread IDs and using conjunctions + throw new UnsupportedOperationException("Multiple instances of thread not yet supported: " + place); + } + + final var predicate = entry.getValue(); + + // create ghost variables that mirror local variables + final var substitution = new HashMap(); + for (final var pv : predicate.getVars()) { + if (pv.isGlobal() || pv.getProcedure() == loc.getProcedure()) { + substitution.put(pv.getTermVariable(), mUnpetrifyVariable.apply(pv.getTermVariable())); + } else { + // create ghost variable for original if needed + final var ghost = mGhostMirrors.computeIfAbsent((ILocalProgramVar) pv, this::createMirror); + substitution.put(pv.getTermVariable(), ghost.getTerm()); + } + } + + // apply substitution if necessary + final IPredicate newPredicate; + if (substitution.isEmpty()) { + newPredicate = predicate; + } else { + newPredicate = mPredicateFactory + .newPredicate(Substitution.apply(mMgdScript, substitution, predicate.getFormula())); + } + result.put(loc, newPredicate); + } + return result; + } + + private ProgramNonOldVar createMirror(final ILocalProgramVar x) { + final String varName = x.getGloballyUniqueId().replaceAll("~|#|\\.", "_") + "__ghost"; + final var pv = ProgramVarUtils.constructGlobalProgramVarPair(varName, x.getSort(), mMgdScript, null); + mSymbolTable.add(pv); + return pv; + } + + private Map computeUpdates(final IPetriNet petrifiedProgram, + final OwickiGriesAnnotation, P, Marking

> annotation) { + final var result = new HashMap(); + for (final var entry : annotation.getAssignmentMapping().entrySet()) { + final var transition = entry.getKey(); + final var edge = transition.getSymbol(); + final var originalEdge = mUnpetrifyAction.apply(edge); + if (result.containsKey(originalEdge)) { + // TODO support this, by case split over local thread ID + // TODO this also fails for joins if there are multiple JoinThreadOther edges + throw new UnsupportedOperationException("Multiple instances of thread not yet supported: " + edge); + } + + final var newUpdates = new HashMap(); + + // update ghost mirrors to reflect the updated value of the mirrored variable + for (final var pv : edge.getTransformula().getAssignedVars()) { + if (pv.isGlobal() || !mGhostMirrors.containsKey(pv)) { + continue; + } + final var ghost = mGhostMirrors.get(pv); + assert ghost != null; + newUpdates.put(ghost, mUnpetrifyVariable.apply(pv.getTermVariable())); + } + + // TODO add updates of new ghost variables for thread IDs when edge is entryEdge of template + assert mThreadIdVars.isEmpty() : "missing update of ghost variables: " + mThreadIdVars; + + final var combinedUpdate = GhostUpdate.combine(entry.getValue(), newUpdates); + if (combinedUpdate != null) { + result.put(originalEdge, combinedUpdate); + } + } + return result; + } + + private LOC getLocation(final P place) { + final var loc = mPlaceToLocation.apply(place); + assert loc != null : "No location for place " + place; + return loc; + } + + private boolean isThreadUsageMonitorPlace(final P place) { + return mThreadUsageMonitorPlaces.contains(place); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesUtils.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesUtils.java new file mode 100644 index 00000000000..0140a35e189 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesUtils.java @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2026 Dominik Klumpp (klumpp@lix.polytechnique.fr) + * Copyright (C) 2026 École Polytechnique + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.WitnessGhostDeclaration; +import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.WitnessGhostUpdate; +import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.WitnessInvariant; +import de.uni_freiburg.informatik.ultimate.core.lib.results.InvariantResult; +import de.uni_freiburg.informatik.ultimate.core.model.models.ILocation; +import de.uni_freiburg.informatik.ultimate.core.model.results.IResult; +import de.uni_freiburg.informatik.ultimate.core.model.services.IBacktranslationService; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfg; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfgTransition; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgLocation; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.proofs.ThreadModularPrePostSpecification; +import de.uni_freiburg.informatik.ultimate.logic.Term; + +/** + * Provides utility functionalities related to Owicki-Gries proofs. + */ +public class OwickiGriesUtils { + /** + * Constructs the default specification for Petri programs: from the initial marking, no accepting place is + * reachable. + * + * @param + * the type of actions in the Petri program + * @param

+ * the type of places in the Petri program + * @param net + * the Petri net + * @param factory + * the predicate factory to use for the specification + * @return the thread-modular specification as described above + */ + public static ThreadModularPrePostSpecification> + getSpecificationForPetriNet(final IPetriNet net, final BasicPredicateFactory factory) { + final var preconditions = Map.of(Marking.initial(net), factory.and()); + return new ThreadModularPrePostSpecification<>(preconditions, net::isAccepting, factory.or()); + } + + public static > void createResultsAndAnnotateIcfg( + final IUltimateServiceProvider services, final String pluginName, final IIcfg icfg, + final OwickiGriesAnnotation> annotation, + final IBacktranslationService backTranslatorService, final Consumer reporter) { + final var logger = services.getLoggingService().getLogger(OwickiGriesUtils.class); + + final Set failedGhosts = new HashSet<>(); + final Map declaredGhosts = new HashMap<>(); + + // Process declarations and initial values of ghost variables. + final var ghostsInits = new HashMap(); + for (final var entry : annotation.getGhostAssignment().entrySet()) { + final var ghost = entry.getKey(); + final var expr = entry.getValue(); + + final var initialValue = backTranslatorService.translateExpression(expr, Term.class); + if (initialValue == null) { + logger.warn("Could not translate initial value of ghost variable %s: %s", ghost, initialValue); + failedGhosts.add(ghost); + continue; + } + + final var declaredGhost = backTranslatorService.declareAndTranslateAuxiliaryVariable(ghost.getTerm()); + final var declaredGhostName = backTranslatorService.targetExpressionToString(declaredGhost); + ghostsInits.put(declaredGhostName, initialValue); + declaredGhosts.put(ghost, declaredGhostName); + } + new WitnessGhostDeclaration<>(ghostsInits).annotate(icfg); + + // Process ghost updates + for (final var entry : annotation.getAssignmentMapping().entrySet()) { + final var edge = (IIcfgTransition) entry.getKey(); + final GhostUpdate update = entry.getValue(); + + final Map ghostUpdate = new HashMap<>(); + for (final var ghost : update.getAssignedVariables()) { + if (failedGhosts.contains(ghost)) { + continue; + } + + final var context = ILocation.getAnnotation(edge); + final var term = update.getExpressionFor(ghost); + final var expression = backTranslatorService.translateExpressionWithContext(term, context, Term.class); + if (expression == null) { + logger.warn("Could not translate assignment to ghost variable %s: %s", ghost, term); + failedGhosts.add(ghost); + } else { + ghostUpdate.put(declaredGhosts.get(ghost), expression); + } + } + new WitnessGhostUpdate<>(ghostUpdate).annotate(edge); + } + + // Process location invariants. + final var failedGhostTvs = failedGhosts.stream().map(IProgramVar::getTermVariable).collect(Collectors.toSet()); + for (final var entry : annotation.getFormulaMapping().entrySet()) { + final IcfgLocation loc = entry.getKey(); + final Term formula = entry.getValue().getFormula(); + final Object invariant = backTranslatorService.translateExpressionWithContext(formula, + ILocation.getAnnotation(loc), Term.class); + final String invariantString = + invariant == null ? null : backTranslatorService.targetExpressionToString(invariant); + + if (invariant == null || invariant.toString().equals("1")) { + continue; + } + + final var invResult = new InvariantResult<>(pluginName, loc, invariant, invariantString, null /* TODO */); + reporter.accept(invResult); + + final var failedGhost = Arrays.stream(formula.getFreeVars()).filter(failedGhostTvs::contains).findAny(); + if (failedGhost.isPresent()) { + logger.warn("Invariant contains ghost variable that was not properly backtranslated. " + + "Invariant: %s. Ghost variable: %s", invariant, failedGhost.get()); + } + new WitnessInvariant<>(invariant).annotate(loc); + } + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesValidityCheck.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesValidityCheck.java new file mode 100644 index 00000000000..a787d292cad --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesValidityCheck.java @@ -0,0 +1,354 @@ +/* + * Copyright (C) 2020 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.ToolchainCanceledException; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.CfgSmtToolkit; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.ModifiableGlobalsTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.BasicInternalAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IInternalAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.transitions.TransFormulaUtils; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.transitions.UnmodifiableTransFormula; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.hoaretriple.IHoareTripleChecker; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.hoaretriple.MonolithicHoareTripleChecker; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.MonolithicImplicationChecker; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.ThreadModularPrePostSpecification; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.IncrementalPlicationChecker.Validity; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils.SimplificationTechnique; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.normalforms.CnfTransformer; +import de.uni_freiburg.informatik.ultimate.logic.Script; +import de.uni_freiburg.informatik.ultimate.util.statistics.MinMaxMed; + +/** + * TODO + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * @author Miriam Lagunes (miriam.lagunes@students.uni-freiburg.de) + * + * @param + * @param

+ */ +public abstract class OwickiGriesValidityCheck { + private final IUltimateServiceProvider mServices; + private final ILogger mLogger; + private final ManagedScript mManagedScript; + private final Script mScript; + private final IHoareTripleChecker mHoareTripleChecker; + private final MonolithicImplicationChecker mImplicationChecker; + private final BasicPredicateFactory mPredicateFactory; + + private final List mInterferingActions = new ArrayList<>(); + + private Validity mIsInductive; + private Validity mIsInterferenceFree; + private Validity mIsProgramSafe; + + private final OwickiGriesAnnotation mAnnotation; + private final IPossibleInterferences mPossibleInterferences; + + public OwickiGriesValidityCheck(final IUltimateServiceProvider services, final CfgSmtToolkit csToolkit, + final OwickiGriesAnnotation annotation) { + this(services, csToolkit.getManagedScript(), new MonolithicHoareTripleChecker(csToolkit), annotation); + } + + public OwickiGriesValidityCheck(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final ModifiableGlobalsTable modifiableGlobals, final OwickiGriesAnnotation annotation) { + this(services, mgdScript, new MonolithicHoareTripleChecker(mgdScript, modifiableGlobals), annotation); + } + + public OwickiGriesValidityCheck(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final IHoareTripleChecker htc, final OwickiGriesAnnotation annotation) { + mServices = services; + mLogger = services.getLoggingService().getLogger(OwickiGriesValidityCheck.class); + mManagedScript = mgdScript; + mHoareTripleChecker = htc; + mImplicationChecker = new MonolithicImplicationChecker(mServices, mManagedScript); + mPredicateFactory = new BasicPredicateFactory(services, mManagedScript, annotation.getSymbolTable()); + mScript = mgdScript.getScript(); + + mAnnotation = annotation; + mPossibleInterferences = annotation.getPossibleInterferences(); + } + + protected abstract Collection

getProgramLocations(); + + protected abstract Collection getProgramTransitions(); + + protected abstract Set

getPredecessors(T transition); + + protected abstract Set

getSuccessors(T transition); + + protected abstract UnmodifiableTransFormula getTransformula(T transition); + + private Validity checkInductivity() { + Validity result = Validity.VALID; + for (final T transition : getProgramTransitions()) { + final var check = isInductive(transition); + result = result.and(check); + + if (result == Validity.INVALID) { + break; + } + } + return result; + } + + private Validity isInductive(final T transition) { + if (!mServices.getProgressMonitorService().continueProcessing()) { + throw new ToolchainCanceledException(getClass(), "checking inductivity of Owicki-Gries proof"); + } + + final var precondition = getPrecondition(transition); + final var postcondition = getPostcondition(transition); + final var composedAction = getTransitionSeqAction(transition); + + final var inductivity = mHoareTripleChecker.checkInternal(precondition, composedAction, postcondition); + if (inductivity == Validity.INVALID) { + final var simplePre = SmtUtils.simplify(mManagedScript, precondition.getFormula(), mServices, + SimplificationTechnique.SIMPLIFY_DDA); + final var cnfPre = new CnfTransformer(mManagedScript, mServices).transform(simplePre); + final var verySimplePre = + SmtUtils.simplify(mManagedScript, cnfPre, mServices, SimplificationTechnique.SIMPLIFY_DDA); + + final var simplePost = SmtUtils.simplify(mManagedScript, postcondition.getFormula(), mServices, + SimplificationTechnique.SIMPLIFY_DDA); + final var cnfPost = new CnfTransformer(mManagedScript, mServices).transform(simplePost); + final var verySimplePost = + SmtUtils.simplify(mManagedScript, cnfPost, mServices, SimplificationTechnique.SIMPLIFY_DDA); + + mLogger.warn( + "Non-inductive transition %s. Invalid Hoare triple:\n" + + "\tprecondition %s\n\ttransition %s\n\tpostcondition %s", + transition, verySimplePre.toStringDirect(), composedAction, verySimplePost.toStringDirect()); + } + + return inductivity; + } + + private Validity checkNonInterference() { + Validity result = Validity.VALID; + + for (final P place : getProgramLocations()) { + final var check = isInterferenceFree(place); + result = result.and(check); + + if (result == Validity.INVALID) { + break; + } + } + + final var minMaxMed = new MinMaxMed(); + minMaxMed.report(mInterferingActions, Integer::longValue); + mLogger.info("Interfering actions: min=%d, max=%d, median=%d", minMaxMed.getMinimum(), minMaxMed.getMaximum(), + minMaxMed.getMedian()); + + return result; + } + + private Validity isInterferenceFree(final P place) { + Validity result = Validity.VALID; + + final var interferingActions = mPossibleInterferences.getInterferingActions(place); + mInterferingActions.add(interferingActions.size()); + for (final T transition : interferingActions) { + final var check = isInterferenceFreeForTransition(place, transition); + result = result.and(check); + + if (result == Validity.INVALID) { + break; + } + } + + return result; + } + + private Validity isInterferenceFreeForTransition(final P place, final T transition) { + if (!mServices.getProgressMonitorService().continueProcessing()) { + throw new ToolchainCanceledException(getClass(), "checking interference-freedom of Owicki-Gries proof"); + } + + final var annotation = getPlacePredicate(place); + final var precondition = getPrecondition(transition); + final var conjunction = Arrays.asList(precondition, annotation); + final var action = getTransitionSeqAction(transition); + + final var result = mHoareTripleChecker.checkInternal(mPredicateFactory.and(conjunction), action, annotation); + if (result == Validity.INVALID) { + mLogger.warn( + "Annotation %s of place %s is not interference-free under transition %s. Invalid Hoare triple:\n" + + "\tprecondition %s\n\ttransition %s\n\tpostcondition %s", + annotation, place, transition, conjunction, action, annotation); + } + + return result; + } + + // TODO possibly cache? + private IPredicate getPrecondition(final T transition) { + return mPredicateFactory + .and(getPredecessors(transition).stream().map(this::getPlacePredicate).collect(Collectors.toSet())); + } + + // TODO possibly cache? + private IPredicate getPostcondition(final T transition) { + return mPredicateFactory + .and(getSuccessors(transition).stream().map(this::getPlacePredicate).collect(Collectors.toSet())); + } + + private IPredicate getPlacePredicate(final P place) { + return mAnnotation.getFormulaMapping().get(place); + } + + // TODO possibly cache? + private IInternalAction getTransitionSeqAction(final T transition) { + final var transitionTf = getTransformula(transition); + UnmodifiableTransFormula combinedTf; + + final var ghostUpdate = mAnnotation.getAssignmentMapping().get(transition); + if (ghostUpdate == null) { + combinedTf = transitionTf; + } else { + final var ghostTransition = ghostUpdate.makeTransitionFormula(mManagedScript, mAnnotation.getSymbolTable()); + combinedTf = TransFormulaUtils.sequentialComposition(mLogger, mServices, mManagedScript, false, false, + false, null, Arrays.asList(transitionTf, ghostTransition)); + } + + return new BasicInternalAction(null, null, combinedTf); + } + + private Validity checkSafety() { + final var preImpliesInitial = checkInitImplication(mAnnotation.getSpecification()); + if (preImpliesInitial == Validity.INVALID) { + return preImpliesInitial; + } + + return preImpliesInitial.and(checkAcceptFormula()); + } + + private > Validity checkInitImplication(final ThreadModularPrePostSpecification spec) { + + final var ghostInitialization = getGhostInitializationFormula(); + + Validity result = Validity.VALID; + for (final var initialMarking : spec.getInitialStates()) { + final var precondition = spec.getPrecondition(initialMarking); + final var check = checkInitImplication(initialMarking, precondition, ghostInitialization); + result = result.and(check); + if (result == Validity.INVALID) { + break; + } + } + return result; + } + + private Validity checkInitImplication(final Iterable

initialLocations, final IPredicate precondition, + final IPredicate ghostInitialization) { + Validity result = Validity.VALID; + for (final P place : initialLocations) { + final var predicate = getPlacePredicate(place); + final var check = mImplicationChecker.checkImplication( + mPredicateFactory.and(precondition, ghostInitialization), false, predicate, false); + result = result.and(check); + + if (result == Validity.INVALID) { + mLogger.warn("Annotation %s of initial place %s not implied by ghost variable initialization %s", + predicate, place, precondition); + break; + } + } + return result; + } + + private IPredicate getGhostInitializationFormula() { + final List terms = new ArrayList<>(); + for (final IProgramVar var : mAnnotation.getGhostAssignment().keySet()) { + terms.add(mPredicateFactory.newPredicate( + SmtUtils.binaryEquality(mScript, var.getTerm(), mAnnotation.getGhostAssignment().get(var)))); + } + return mPredicateFactory.and(terms); + } + + private Validity checkAcceptFormula() { + final IPredicate postcondition = mAnnotation.getSpecification().getPostcondition(); + + Validity result = Validity.VALID; + for (final P place : getProgramLocations()) { + if (!mAnnotation.getSpecification().isFinalThreadState(place)) { + continue; + } + + final var predicate = getPlacePredicate(place); + final var check = mImplicationChecker.checkImplication(predicate, false, postcondition, false); + result = result.and(check); + + if (result == Validity.INVALID) { + mLogger.warn("Annotation %s of error place %s does not imply postcondition %s", predicate, place, + postcondition); + break; + } + } + return result; + } + + public Validity isInductive() { + if (mIsInductive == null) { + mIsInductive = checkInductivity(); + } + return mIsInductive; + } + + public Validity isInterferenceFree() { + if (mIsInterferenceFree == null) { + mIsInterferenceFree = checkNonInterference(); + } + return mIsInterferenceFree; + } + + public Validity isProgramSafe() { + if (mIsProgramSafe == null) { + mIsProgramSafe = checkSafety(); + } + return mIsProgramSafe; + } + + public Validity isValid() { + return isInductive().and(this::isInterferenceFree).and(this::isProgramSafe); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/PetriOwickiGriesValidityCheck.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/PetriOwickiGriesValidityCheck.java new file mode 100644 index 00000000000..06e82008291 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/PetriOwickiGriesValidityCheck.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2023 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2023 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.util.Collection; +import java.util.Set; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.CfgSmtToolkit; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.ModifiableGlobalsTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.transitions.UnmodifiableTransFormula; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.hoaretriple.IHoareTripleChecker; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; + +public class PetriOwickiGriesValidityCheck extends OwickiGriesValidityCheck, P> { + private final IPetriNet mProgram; + + public PetriOwickiGriesValidityCheck(final IUltimateServiceProvider services, final IPetriNet program, + final CfgSmtToolkit csToolkit, final OwickiGriesAnnotation, P, Marking

> annotation) { + super(services, csToolkit, annotation); + mProgram = program; + } + + public PetriOwickiGriesValidityCheck(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final IPetriNet program, final ModifiableGlobalsTable modifiableGlobals, + final OwickiGriesAnnotation, P, Marking

> annotation) { + super(services, mgdScript, modifiableGlobals, annotation); + mProgram = program; + } + + public PetriOwickiGriesValidityCheck(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final IHoareTripleChecker htc, final IPetriNet program, + final OwickiGriesAnnotation, P, Marking

> annotation) { + super(services, mgdScript, htc, annotation); + mProgram = program; + } + + @Override + protected Collection

getProgramLocations() { + return mProgram.getPlaces(); + } + + @Override + protected Collection> getProgramTransitions() { + return mProgram.getTransitions(); + } + + @Override + protected Set

getPredecessors(final Transition transition) { + return transition.getPredecessors(); + } + + @Override + protected Set

getSuccessors(final Transition transition) { + return transition.getSuccessors(); + } + + @Override + protected UnmodifiableTransFormula getTransformula(final Transition transition) { + return transition.getSymbol().getTransformula(); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireReachableStates.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireReachableStates.java new file mode 100644 index 00000000000..382321d9a07 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireReachableStates.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2025 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.Collection; +import java.util.Set; + +import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryServices; +import de.uni_freiburg.informatik.ultimate.automata.AutomataOperationCanceledException; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.VpAlphabet; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.reachablestates.NestedWordAutomatonReachableStates; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.IncomingInternalTransition; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.OutgoingInternalTransition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.RunningTaskInfo; +import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.ToolchainCanceledException; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; + +/** + * Explores the reachable states of an {@link IEmpire}. + * + * @param + * the type of letters in the Petri program + * @param

+ * the type of places in the Petri program + * @param + * the type of states in the empire + */ +public class EmpireReachableStates implements IExplicitEmpire { + private final IEmpire mEmpire; + private final NestedWordAutomatonReachableStates, S> mReachable; + + public EmpireReachableStates(final IUltimateServiceProvider services, final IEmpire empire) { + mEmpire = empire; + try { + mReachable = new NestedWordAutomatonReachableStates<>(new AutomataLibraryServices(services), empire); + } catch (final AutomataOperationCanceledException e) { + throw new ToolchainCanceledException(e, + new RunningTaskInfo(getClass(), "collecting reachable states of empire")); + } + } + + public static IExplicitEmpire makeExplicit(final IUltimateServiceProvider services, + final IEmpire empire) { + if (empire instanceof final IExplicitEmpire explicitEmpire) { + return explicitEmpire; + } + return new EmpireReachableStates<>(services, empire); + } + + @Override + public IPredicate getLaw(final S state) { + return mEmpire.getLaw(state); + } + + @Override + public Territory> getTerritory(final S state) { + return mEmpire.getTerritory(state); + } + + @Override + public Iterable, S>> internalSuccessors(final S state, + final Transition letter) { + return mReachable.internalSuccessors(state, letter); + } + + @Override + public VpAlphabet> getVpAlphabet() { + return mReachable.getVpAlphabet(); + } + + @Override + public boolean isInitial(final S state) { + return mReachable.isInitial(state); + } + + @Override + public int size() { + return mReachable.size(); + } + + @Override + public String sizeInformation() { + return mReachable.sizeInformation(); + } + + @Override + public Set getStates() { + return mReachable.getStates(); + } + + @Override + public Set getInitialStates() { + return mReachable.getInitialStates(); + } + + @Override + @Deprecated + // TODO We should not abuse the final states for empires, they do not represent any meaningful language. + // TODO Instead introduce a suitably-named new method. + public Collection getFinalStates() { + return mReachable.getFinalStates(); + } + + @Override + public Set> lettersInternalIncoming(final S state) { + return mReachable.lettersInternalIncoming(state); + } + + @Override + public Iterable, S>> internalPredecessors(final S succ, + final Transition letter) { + return mReachable.internalPredecessors(succ, letter); + } + + @Override + public Iterable, S>> internalPredecessors(final S succ) { + return mReachable.internalPredecessors(succ); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireStatistics.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireStatistics.java new file mode 100644 index 00000000000..92bf36a76dc --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireStatistics.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateWithConjuncts; +import de.uni_freiburg.informatik.ultimate.smtinterpol.util.DAGSize; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; +import de.uni_freiburg.informatik.ultimate.util.statistics.AbstractStatisticsDataProvider; +import de.uni_freiburg.informatik.ultimate.util.statistics.MinMaxMed; + +public class EmpireStatistics extends AbstractStatisticsDataProvider { + public static final String AUTOMATON_SIZE = "automaton size"; + public static final String UNIQUE_PAIRS = "number of unique pairs"; + public static final String LAW_SIZE = "empire law size"; + public static final String ANNOTATION_SIZE = "empire annotation size"; + public static final String REGION_COUNT = "number of regions"; + public static final String TERRITORY_COUNT = "number of territories"; + public static final String REGION_TERRITORY = "number of regions per territory"; + public static final String PLACES_PER_REGION = "number of places per region"; + + private long mAutomatonSize; + private long mNumberOfRegions; + private long mNumberOfTerritories; + private long mUniquePairs; + private long mAnnotationSize; + private final MinMaxMed mRegionsPerTerritory = new MinMaxMed(); + private final MinMaxMed mPlacesPerRegion = new MinMaxMed(); + + public

EmpireStatistics(final IExplicitEmpire empire) { + declareCounter(ANNOTATION_SIZE, () -> mAnnotationSize); + declareCounter(AUTOMATON_SIZE, () -> mAutomatonSize); + declareCounter(UNIQUE_PAIRS, () -> mUniquePairs); + declareCounter(REGION_COUNT, () -> mNumberOfRegions); + declareCounter(TERRITORY_COUNT, () -> mNumberOfTerritories); + declareMinMaxMed(REGION_TERRITORY, mRegionsPerTerritory); + declareMinMaxMed(PLACES_PER_REGION, mPlacesPerRegion); + + final var regions = empire.getStates().stream() + .> flatMap(s -> empire.getTerritory(s).getRegions().stream()).collect(Collectors.toSet()); + final var territories = empire.getStates().stream().map(empire::getTerritory).collect(Collectors.toSet()); + + mAnnotationSize = empire.getStates().stream().collect(Collectors.summingLong(s -> size(empire.getLaw(s)))); + mAutomatonSize = empire.getStates().size(); + mUniquePairs = empire.getStates().stream().map(s -> new Pair<>(empire.getTerritory(s), empire.getLaw(s))) + .distinct().count(); + + mNumberOfRegions = regions.size(); + mNumberOfTerritories = territories.size(); + + mRegionsPerTerritory.report(territories, Territory::size); + mPlacesPerRegion.report(regions, Region::size); + } + + private long size(final IPredicate predicate) { + if (predicate instanceof final PredicateWithConjuncts conjunction) { + return conjunction.getConjuncts().stream().mapToLong(this::size).sum(); + } + return new DAGSize().size(predicate.getFormula()); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireToOwickiGries.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireToOwickiGries.java new file mode 100644 index 00000000000..f44042f658a --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireToOwickiGries.java @@ -0,0 +1,274 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.DefaultIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.IIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.ProgramVarUtils; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.GhostUpdate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.IPossibleInterferences; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesAnnotation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesUtils; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtSortUtils; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils; +import de.uni_freiburg.informatik.ultimate.logic.SMTLIBConstants; +import de.uni_freiburg.informatik.ultimate.logic.Script; +import de.uni_freiburg.informatik.ultimate.logic.Term; +import de.uni_freiburg.informatik.ultimate.logic.TermVariable; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; + +/** + * Creates an {@link OwickiGriesAnnotation} (for a Petri program) from a given empire (see {@link IEmpire}). + * + * @param + * the types of states in the empire + * @param + * the type of actions in the proven Petri program + * @param

+ * the type of places in the proven Petri program + */ +public class EmpireToOwickiGries { + private static final String GHOST = "ghost"; + + private static final boolean USE_STATE_INDISTINCTION = false; + + private final ManagedScript mManagedScript; + private final Script mScript; + private final IPetriNet mProgram; + + private final IExplicitEmpire mEmpire; + private final ILegalFocusFunction mLegalFocus; + + private final BasicPredicateFactory mFactory; + private final IProgramVar mGhostVariable; + private final Map mStateTerms; + + private final OwickiGriesAnnotation, P, Marking

> mOwickiGriesAnnotation; + + public EmpireToOwickiGries(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final IPetriNet program, final IIcfgSymbolTable symbolTable, final Set procedures, + final IExplicitEmpire empire, + final IPossibleInterferences, P> possibleInterferences) { + this(services, mgdScript, program, symbolTable, procedures, empire, possibleInterferences, + new ILegalFocusFunction.TrivialFocus<>(empire)); + } + + public EmpireToOwickiGries(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final IPetriNet program, final IIcfgSymbolTable symbolTable, final Set procedures, + final IExplicitEmpire empire, + final IPossibleInterferences, P> possibleInterferences, + final ILegalFocusFunction legalFocus) { + mProgram = program; + mManagedScript = mgdScript; + mScript = mManagedScript.getScript(); + + mEmpire = empire; + mLegalFocus = legalFocus; + + mGhostVariable = createGhostVariable(); + final var newSymbolTable = new DefaultIcfgSymbolTable(symbolTable, procedures); + newSymbolTable.add(mGhostVariable); + + mFactory = new BasicPredicateFactory(services, mManagedScript, newSymbolTable); + + final Map stateIndistinction; + if (USE_STATE_INDISTINCTION) { + stateIndistinction = + new StateIndistinction<>(services, mProgram, mEmpire, possibleInterferences).computePartition(); + } else { + final var stateList = List.copyOf(mEmpire.getStates()); + stateIndistinction = IntStream.range(0, stateList.size()).mapToObj(i -> i) + .collect(Collectors.toMap(stateList::get, Function.identity())); + } + mStateTerms = getStateTerms(stateIndistinction); + + final Map placeAnnotations = computePlaceAnnotations(); + final Map, GhostUpdate> ghostUpdates = computeGhostUpdateMapping(); + final Map initialGhostValuation = computeInitialGhostValuation(); + + mOwickiGriesAnnotation = new OwickiGriesAnnotation<>( + OwickiGriesUtils.getSpecificationForPetriNet(mProgram, mFactory), possibleInterferences, newSymbolTable, + placeAnnotations, Set.of(mGhostVariable), initialGhostValuation, ghostUpdates); + } + + private IProgramVar createGhostVariable() { + mManagedScript.lock(this); + try { + final TermVariable tVar = + mManagedScript.constructFreshTermVariable(GHOST, SmtSortUtils.getIntSort(mManagedScript)); + return ProgramVarUtils.constructGlobalProgramVarPair(tVar.getName(), + SmtSortUtils.getIntSort(mManagedScript), mManagedScript, this); + } finally { + mManagedScript.unlock(this); + } + } + + /** + * @return Map of places to the corresponding formula for each place + */ + private Map computePlaceAnnotations() { + final Map formulaMap = new HashMap<>(); + final var empireStates = mEmpire.getStates(); + for (final P place : mProgram.getPlaces()) { + final var states = empireStates.stream().filter(s -> mEmpire.containsPlace(s, place)).toList(); + assert noErrorPlaceInStates(place, states) : "Accepting place in state"; + + // As an optimization of the formula structure, we group the disjuncts by law. + // I.e., instead of generating a formula of the form (phi1 /\ g=q1) \/ (phi1 /\ g=q2) \/ (phi2 /\ g=q3), + // we instead generate the equivalent formula (phi1 /\ (g=q1 \/ g=q2)) \/ (phi2 /\ g=q3). + final Map, List> disjunctsByLaws = new HashMap<>(states.size()); + + for (final S state : states) { + final var placeRegion = mEmpire.getTerritory(state).getPlaceRegion(place); + + final Term ghostEquation = + SmtUtils.binaryEquality(mScript, mGhostVariable.getTerm(), mStateTerms.get(state)); + final var focusedLaws = + mLegalFocus.getFocusedLaws(state, placeRegion).stream().map(IPredicate::getFormula) + // Filter true literals, as they do not change the law. This allows for larger groups. + .filter(Predicate.not(SmtUtils::isTrueLiteral)).collect(Collectors.toList()); + + // Add the state (represented by the ghost equation) to the appropriate group. + disjunctsByLaws.computeIfAbsent(focusedLaws, x -> new ArrayList<>()).add(ghostEquation); + } + + final var disjuncts = disjunctsByLaws.entrySet().stream().map( + // Combine conjunction over the laws (key of the map) and disjunction over the states (values). + e -> SmtUtils.and(mScript, SmtUtils.and(mScript, e.getKey()), SmtUtils.or(mScript, e.getValue()))) + .toList(); + formulaMap.put(place, mFactory.newPredicate(SmtUtils.or(mScript, disjuncts))); + } + return formulaMap; + } + + private boolean noErrorPlaceInStates(final P place, final Collection states) { + return !mProgram.isAccepting(place) || states.isEmpty(); + } + + /** + * @return Map of ghost variable to its init assignment (which is the numeral of the init state) + */ + private Map computeInitialGhostValuation() { + final var initState = DataStructureUtils.getOneAndOnly(mEmpire.getInitialStates(), "initial state"); + return Map.of(mGhostVariable, mStateTerms.get(initState)); + } + + /** + * @return Map of transition to the corresponding formula for each transition in net + */ + private Map, GhostUpdate> computeGhostUpdateMapping() { + final var mapping = new HashMap, GhostUpdate>(); + for (final var transition : mProgram.getTransitions()) { + final var update = computeGhostUpdateForTransition(transition); + if (update != null) { + mapping.put(transition, update); + } + } + return mapping; + } + + private GhostUpdate computeGhostUpdateForTransition(final Transition transition) { + final var updatePairs = new ArrayList>(); + + for (final S state : mEmpire.getStates()) { + final var edge = DataStructureUtils.getOnly(mEmpire.internalSuccessors(state, transition), + "More than one successor in automaton for a transition"); + if (!edge.isPresent()) { + // The state does not have an edge for the given transition. + // This either means that the state's territory does not enable the transition, + // or that the edge would lead to a law "false". + // In either case, no ghost update is needed. + continue; + } + + final S successor = edge.orElseThrow().getSucc(); + if (mStateTerms.get(state).equals(mStateTerms.get(successor))) { + // The edge is a self-loop. Thus, it does not have to be handled explicitly in the ghost update. + // Instead, self-loops are handled in the default case of the ghost update's case distinction. + // + // We compare state terms (not states directly) to also catch the case of updates to a successor that is + // not distinguished from the current state. + continue; + } + + updatePairs.add(new Pair<>(state, successor)); + } + + if (updatePairs.isEmpty()) { + // Avoid returning a trivial ghost update. + return null; + } + + final Term caseDistinction = getGhostUpdateTerm(updatePairs); + return new GhostUpdate(Map.of(mGhostVariable, caseDistinction)); + } + + private Term getGhostUpdateTerm(final List> statePairs) { + Term updateTerm = mGhostVariable.getTerm(); + for (final var pair : statePairs) { + final var pred = pair.getFirst(); + final var succ = pair.getSecond(); + final var equalsTerm = + mScript.term(SMTLIBConstants.EQUALS, mGhostVariable.getTerm(), mStateTerms.get(pred)); + updateTerm = mScript.term(SMTLIBConstants.ITE, equalsTerm, mStateTerms.get(succ), updateTerm); + } + return updateTerm; + } + + private Map getStateTerms(final Map stateIndistinction) { + final var stateTerms = new LinkedHashMap(); + for (final S state : mEmpire.getStates()) { + stateTerms.put(state, mScript.numeral(String.valueOf(stateIndistinction.get(state)))); + } + return stateTerms; + } + + public OwickiGriesAnnotation, P, Marking

> getAnnotation() { + return mOwickiGriesAnnotation; + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireValidityCheck.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireValidityCheck.java new file mode 100644 index 00000000000..ac621d34e39 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/EmpireValidityCheck.java @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.ArrayDeque; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.ModifiableGlobalsTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IInternalAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.hoaretriple.MonolithicHoareTripleChecker; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateWithConjuncts; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.IncrementalPlicationChecker.Validity; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; + +public class EmpireValidityCheck { + private final ILogger mLogger; + + private final MonolithicHoareTripleChecker mHc; + private final BasicPredicateFactory mFactory; + + private final IEmpire mEmpire; + private final IPetriNet mNet; + private final Validity mValidity; + + public EmpireValidityCheck(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final BasicPredicateFactory factory, final IPetriNet net, + final ModifiableGlobalsTable modifiableGlobals, final IEmpire empire) { + mLogger = services.getLoggingService().getLogger(EmpireValidityCheck.class); + mHc = new MonolithicHoareTripleChecker(mgdScript, modifiableGlobals); + mFactory = factory; + + mNet = net; + mEmpire = empire; + + mValidity = checkValidity(); + } + + private Validity checkValidity() { + final var initialStates = mEmpire.getInitialStates(); + final Set initialState = new HashSet<>(); + initialStates.forEach(initialState::add); + + if (checkInitialTerritories(initialState) != Validity.VALID) { + return Validity.INVALID; + } + + final var successorValidity = checkSuccessorValidity(initialState); + if (successorValidity.getFirst() != Validity.VALID) { + return Validity.INVALID; + } + + if (checkAcceptingPlaces(successorValidity.getSecond()) != Validity.VALID) { + return Validity.INVALID; + } + + return Validity.VALID; + } + + private Validity checkInitialTerritories(final Set initialState) { + if (initialState.isEmpty()) { + mLogger.warn("Empire annotation does not contain any initial Territory"); + return Validity.INVALID; + } + for (final S state : initialState) { + final var territory = mEmpire.getTerritory(state); + if (!territory.containsMarking(Marking.initial(mNet))) { + mLogger.warn("Initial State does not contain initial marking: %s", state); + return Validity.INVALID; + } + final var law = mEmpire.getLaw(state); + if (!isTrueLiteral(law)) { + mLogger.warn("Initial State contains Law that does not evaluate to true: %s", state); + return Validity.INVALID; + } + } + return Validity.VALID; + } + + private Pair> checkSuccessorValidity(final Set initialState) { + final Set visitedStates = new HashSet<>(); + final var queue = new ArrayDeque(); + for (final S state : initialState) { + queue.offer(state); + } + while (!queue.isEmpty()) { + final var state = queue.poll(); + if (!visitedStates.add(state)) { + continue; + } + final var territory = mEmpire.getTerritory(state); + final var law = mEmpire.getLaw(state); + for (final var transition : (Iterable>) territory.getEnabledTransitions(mNet)::iterator) { + final var successorStates = mEmpire.internalSuccessors(state, transition); + final Set successorState = new HashSet<>(); + successorStates.forEach(i -> successorState.add(i.getSucc())); + assert successorState.size() < 2 : "More then one successor"; + final Validity contradiction = checkContradiction(law, transition); + if (contradiction != Validity.VALID && successorState.isEmpty()) { + mLogger.warn("The State:\n \t%s \n \thas no valid successor and does not evaluate to false with \n " + + "\ttransition %s", state, transition.getSymbol().getTransformula()); + return new Pair<>(Validity.INVALID, Collections.emptySet()); + } + final var hoareValidity = checkHoareValidity(successorState, law, transition); + if (!hoareValidity) { + return new Pair<>(Validity.INVALID, Collections.emptySet()); + } + final var isValidSuccessor = checkValidSuccessor(successorState, state, transition); + if (!isValidSuccessor) { + return new Pair<>(Validity.INVALID, Collections.emptySet()); + } + for (final var succ : successorState) { + queue.offer(succ); + } + } + } + return new Pair<>(Validity.VALID, visitedStates); + } + + private Validity checkAcceptingPlaces(final Set states) { + final var accepting = mNet.getAcceptingPlaces(); + for (final S state : states) { + final var territory = mEmpire.getTerritory(state); + final var law = mEmpire.getLaw(state); + if (DataStructureUtils.haveNonEmptyIntersection(territory.getPlaces(), accepting) && !isFalseLiteral(law)) { + return Validity.INVALID; + } + } + return Validity.VALID; + } + + private boolean checkHoareTriple(final IPredicate pre, final IPredicate post, final Transition transition) { + final IPredicate flattenedPre = mFactory.and(PredicateWithConjuncts.flatten(pre)); + final IPredicate flattenedPost = mFactory.and(PredicateWithConjuncts.flatten(post)); + final var valid = mHc.checkInternal(flattenedPre, (IInternalAction) transition.getSymbol(), flattenedPost); + return valid == Validity.VALID; + } + + private Validity checkContradiction(final IPredicate lawConjunction, final Transition transition) { + if (!checkHoareTriple(lawConjunction, mFactory.or(), transition)) { + return Validity.INVALID; + } + return Validity.VALID; + } + + private boolean checkHoareValidity(final Set successorState, final IPredicate law, + final Transition transition) { + for (final S state : successorState) { + final var successorLaw = mEmpire.getLaw(state); + final var valid = checkHoareTriple(law, successorLaw, transition); + if (!valid) { + mLogger.warn("Invalid Hoare Triple\n \tprecondition %s \taction %s \tpostcondition %s", law, + transition.getSymbol().getTransformula(), successorLaw); + return false; + } + } + return true; + } + + private boolean checkValidSuccessor(final Set successorState, final S predState, + final Transition transition) { + final var territory = mEmpire.getTerritory(predState); + for (final S state : successorState) { + if (!territory.isSuccessor(mEmpire.getTerritory(state), transition)) { + return false; + } + } + return true; + } + + public Validity getValidity() { + return mValidity; + } + + private boolean isFalseLiteral(final IPredicate predicate) { + if (predicate instanceof final PredicateWithConjuncts conjunction) { + return conjunction.getConjuncts().stream().anyMatch(this::isFalseLiteral); + } + return SmtUtils.isFalseLiteral(predicate.getFormula()); + } + + private boolean isTrueLiteral(final IPredicate predicate) { + if (predicate instanceof final PredicateWithConjuncts conjunction) { + return conjunction.getConjuncts().stream().allMatch(this::isTrueLiteral); + } + return SmtUtils.isTrueLiteral(predicate.getFormula()); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/IEmpire.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/IEmpire.java new file mode 100644 index 00000000000..bcf12caf409 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/IEmpire.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2025 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.List; + +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INwaOutgoingLetterAndTransitionProvider; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.OutgoingCallTransition; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.OutgoingReturnTransition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.automata.statefactory.IStateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; + +public interface IEmpire extends INwaOutgoingLetterAndTransitionProvider, S> { + IPredicate getLaw(S state); + + Territory> getTerritory(S state); + + default boolean containsPlace(final S state, final P place) { + // Convenience method. + return getTerritory(state).containsPlace(place); + } + + @Deprecated + @Override + default IStateFactory getStateFactory() { + // This method is deprecated and should not be used. + return null; + } + + @Deprecated + @Override + default S getEmptyStackState() { + // Empires do not support calls and returns. + return null; + } + + @Deprecated + @Override + default boolean isFinal(final S state) { + // There is no meaningful notion of final states in empires. + return false; + } + + @Deprecated + @Override + default Iterable, S>> callSuccessors(final S state, + final Transition letter) { + // Empires do not support calls and returns. + return List.of(); + } + + @Deprecated + @Override + default Iterable, S>> returnSuccessors(final S state, final S hier, + final Transition letter) { + // Empires do not support calls and returns. + return List.of(); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/IExplicitEmpire.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/IExplicitEmpire.java new file mode 100644 index 00000000000..975609a086e --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/IExplicitEmpire.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2025 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.Collection; +import java.util.Collections; +import java.util.Set; + +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INestedWordAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.IncomingCallTransition; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.IncomingReturnTransition; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.OutgoingReturnTransition; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.SummaryReturnTransition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; + +/** + * An {@link IEmpire} with direct access to reachable states, as well as incoming and outgoing edges of each state. + * + * Use {@link EmpireReachableStates} to turn an arbitrary {@link IEmpire} into an instance of this interface. + * + * @param + * the type of letters in the Petri program + * @param

+ * the type of places in the Petri program + * @param + * the type of states in the empire + */ +public interface IExplicitEmpire extends IEmpire, INestedWordAutomaton, S> { + + /** + * @deprecated We should not abuse the final states for empires, they do not represent any meaningful language. + * Instead introduce a suitably-named new method. + */ + @Override + @Deprecated + Collection getFinalStates(); + + @Deprecated + @Override + default Set> lettersReturn(final S state) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Set> lettersSummary(final S state) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Set> lettersCallIncoming(final S state) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Set> lettersReturnIncoming(final S state) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Iterable, S>> callPredecessors(final S succ, + final Transition letter) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Iterable, S>> callPredecessors(final S succ) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Iterable, S>> returnPredecessors(final S succ, final S hier, + final Transition letter) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Iterable, S>> returnPredecessors(final S succ, + final Transition letter) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Iterable, S>> returnPredecessors(final S succ) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Iterable, S>> returnSuccessors(final S state) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Iterable, S>> summarySuccessors(final S hier, + final Transition letter) { + return Collections.emptySet(); + } + + @Deprecated + @Override + default Iterable, S>> summarySuccessors(final S hier) { + return Collections.emptySet(); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/ILegalFocusFunction.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/ILegalFocusFunction.java new file mode 100644 index 00000000000..5fb845b8bc0 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/ILegalFocusFunction.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2025 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.List; + +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateWithConjuncts; + +/** + * Abstract interface for legal focus. + * + * A legal focus assigns potentially different laws to different regions in the territory belonging to an empire. For + * each region, the assigned law must be weaker than the state's full law, and satisfy additional conditions. + * + * TODO Document additional conditions + * + * @param + * the type of states in the empire + * @param

+ * the type of places in the regions + */ +public interface ILegalFocusFunction { + /** + * Returns the focused law for the given state and region. + * + * For technical reasons, we currently allow returning a list, which is treated as a conjunction. + * + * @param state + * @param region + * @return + */ + List getFocusedLaws(S state, Region

region); + + /** + * Implements the trivial focus function, which assigns the full law of the state to every region. + * + * @param + * the type of states in the empire + * @param

+ * the type of places in the regions + */ + class TrivialFocus implements ILegalFocusFunction { + private final IEmpire mEmpire; + + public TrivialFocus(final IEmpire empire) { + mEmpire = empire; + } + + @Override + public List getFocusedLaws(final S state, final Region

region) { + assert mEmpire.getTerritory(state).getRegions().contains(region) + : "Region " + region + " does not occur in territory of state " + state; + return PredicateWithConjuncts.flatten(mEmpire.getLaw(state)); + } + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/LegalFocus.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/LegalFocus.java new file mode 100644 index 00000000000..fae879aa9c1 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/LegalFocus.java @@ -0,0 +1,283 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INwaOutgoingLetterAndTransitionProvider; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.IncomingInternalTransition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateWithConjuncts; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.HashRelation; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; + +public class LegalFocus implements ILegalFocusFunction { + private final IPetriNet mProgram; + private final INwaOutgoingLetterAndTransitionProvider mInterpolantAutomaton; + private final IExplicitEmpire mEmpire; + + private final int mNumLaws; + private final Function> mSplitConjuncts; + private final IFocusedRegionHeuristic

mHeuristic; + + private final HashRelation, Region

> mLegalFocus; + + public LegalFocus(final IExplicitEmpire empire, final IPetriNet net, + final INwaOutgoingLetterAndTransitionProvider interpolantAutomaton, final int numLaws, + final Function> splitConjuncts) { + this(empire, net, interpolantAutomaton, numLaws, splitConjuncts, IFocusedRegionHeuristic.bySize()); + } + + public LegalFocus(final IExplicitEmpire empire, final IPetriNet program, + final INwaOutgoingLetterAndTransitionProvider interpolantAutomaton, final int numLaws, + final Function> splitConjuncts, final IFocusedRegionHeuristic

heuristic) { + mProgram = program; + mInterpolantAutomaton = interpolantAutomaton; + mEmpire = empire; + + mNumLaws = numLaws; + mSplitConjuncts = Objects.requireNonNull(splitConjuncts); + mHeuristic = heuristic; + + mLegalFocus = computeLegalFocus(); + } + + private HashRelation, Region

> computeLegalFocus() { + // Begin the focus computation with states that enable transitions that would lead to "false". + // (Rule: inductive-false) + final var focus = computeFinalStateFocus(mEmpire.getFinalStates()); + + // Perform a backwards-BFS to propagate focus. + // (Rules: inductive-edge, bystanders) + final var queue = new ArrayDeque<>(focus.getDomain()); + while (!queue.isEmpty()) { + final var entry = queue.poll(); + final var state = entry.getFirst(); + final int index = entry.getSecond(); + + final var predecessors = mEmpire.internalPredecessors(state); + + for (final IncomingInternalTransition, S> edge : predecessors) { + final var laws = mSplitConjuncts.apply(mEmpire.getLaw(edge.getPred())); + + final boolean modified = propagateFocus(state, edge, focus, index, laws); + if (modified) { + queue.offer(new Pair<>(edge.getPred(), index)); + } + } + } + return focus; + } + + // returns true if the focus was modified, false otherwise + private boolean propagateFocus(final S state, final IncomingInternalTransition, S> edge, + final HashRelation, Region

> focus, final int lawIndex, + final List predecessorLaws) { + final var currentFocus = focus.getImage(new Pair<>(state, lawIndex)); + if (currentFocus.isEmpty()) { + // Nothing to propagate + return false; + } + + final var predecessor = edge.getPred(); + final var predecessorPair = new Pair<>(predecessor, lawIndex); + final var focusedRegions = chooseFocusedRegions(predecessor, currentFocus, edge.getLetter(), + predecessorLaws.get(lawIndex), focus.getImage(predecessorPair)); + return focus.addAllPairs(predecessorPair, focusedRegions); + } + + private Set> chooseFocusedRegions(final S predecessor, final Set> successorFocus, + final Transition transition, final IPredicate predecessorLaw, final Set> predecessorFocus) { + final var territory = mEmpire.getTerritory(predecessor); + + // Any bystanders that are in focus after the transition must already be in focus before the transition. + // (Rule: bystanders) + final var bystanders = territory.getBystanders(transition); + final var focusedBystanders = DataStructureUtils.intersection(bystanders, successorFocus); + + if (successorFocus.size() == focusedBystanders.size()) { + // Only bystanders are focused; we can skip the application of the inductive-edge rule (rest of the method). + return focusedBystanders; + } + + // At this point, we know that at least one successor region of the transition is focused. + // Hence, at least one predecessor region of the transition must also be focused. + // (Rule: inductive-edge) + final var predecessorRegions = territory.getPlacesRegions(transition.getPredecessors()); + assert !predecessorRegions.isEmpty() : "territory enables transition but has no predecessor regions"; + + final boolean alreadyFocused = predecessorRegions.stream().anyMatch(predecessorFocus::contains); + if (alreadyFocused) { + // No need to add any predecessor regions to the focus, they are already there. + return focusedBystanders; + } + + final var focused = new HashSet<>(focusedBystanders); + focused.add(chooseBestRegion(predecessorRegions, predecessorLaw)); + return focused; + } + + // When a state's territory enables a transition but the state has no outgoing edge for it, some of the conjuncts + // must go to "false" after the transition. For at least one such conjunct, at least one predecessor region of the + // transition must be focused. + // (Rule: inductive-false) + private HashRelation, Region

> computeFinalStateFocus(final Collection finalStates) { + final var focus = new HashRelation, Region

>(); + for (final S state : finalStates) { + final var territory = mEmpire.getTerritory(state); + final var enabledTransitions = territory.getEnabledTransitions(mProgram); + final var successorlessTransitions = + enabledTransitions.filter(t -> !mEmpire.internalSuccessors(state, t).iterator().hasNext()) + .collect(Collectors.toList()); + for (final Transition transition : successorlessTransitions) { + final var predecessorRegions = territory.getPlacesRegions(transition.getPredecessors()); + assert !predecessorRegions.isEmpty() : "territory enables transition but has no predecessor regions"; + + final var successorLawList = getSuccessorLaw(mEmpire.getLaw(state), transition); + final var falseSuccessors = getFalseSuccessors(successorLawList); + + // Check if for any law index leading to false, a predecessor region is already focused. + // If so, nothing else needs to be done. + final boolean alreadyFocused = falseSuccessors.stream().anyMatch(i -> DataStructureUtils + .haveNonEmptyIntersection(predecessorRegions, focus.getImage(new Pair<>(state, i)))); + if (alreadyFocused) { + continue; + } + + // Otherwise, for at least one law index leading to false, a predecessor region must be focused. + // Choose the best law index and region according to a heuristic. + final var predecessorLaws = mSplitConjuncts.apply(mEmpire.getLaw(state)); + final Comparator> comparator = Comparator.comparing( + // map (index, region) to (region, law) pairs + indexAndRegion -> new Pair<>(indexAndRegion.region(), + predecessorLaws.get(indexAndRegion.lawIndex())), + // compare (region, law) pairs according to our heuristic + mHeuristic.getPreference()); + final IndexAndRegion

bestIndexAndRegion = falseSuccessors.stream() + .flatMap(i -> predecessorRegions.stream().map(r -> new IndexAndRegion<>(i, r))).min(comparator) + .orElseThrow(); + focus.addPair(new Pair<>(state, bestIndexAndRegion.lawIndex()), bestIndexAndRegion.region()); + } + } + return focus; + } + + private record IndexAndRegion

(int lawIndex, Region

region) { + // small helper record + } + + private Region

chooseBestRegion(final Set> possibleRegions, final IPredicate law) { + assert !possibleRegions.isEmpty() : "cannot choose best region from empty set"; + + // Heuristically choose the best predecessor region to focus. + final var minRegion = possibleRegions.stream().min(mHeuristic.getPreference(law)); + assert minRegion.isPresent() : "could not find best region"; + + return minRegion.orElseThrow(); + } + + private List getSuccessorLaw(final IPredicate law, final Transition transition) { + final var succLaw = mInterpolantAutomaton.internalSuccessors(law, transition.getSymbol()); + return mSplitConjuncts.apply(DataStructureUtils.getOneAndOnly(succLaw, "successor state").getSucc()); + } + + private List getFalseSuccessors(final List successorLaws) { + return IntStream.range(0, mNumLaws).filter(i -> isFalseLiteral(successorLaws.get(i))).mapToObj(Integer::valueOf) + .collect(Collectors.toList()); + } + + public Set> getLegalFocus(final S state, final int lawIndex) { + return mLegalFocus.getImage(new Pair<>(state, lawIndex)); + } + + public boolean isFocused(final P place, final S state, final int lawIndex) { + final var legalFocus = getLegalFocus(state, lawIndex); + return legalFocus.stream().anyMatch(r -> r.contains(place)); + } + + @Override + public List getFocusedLaws(final S state, final Region

region) { + final List focusedLaws = new ArrayList<>(); + final var laws = mSplitConjuncts.apply(mEmpire.getLaw(state)); + for (int i = 0; i < mNumLaws; i++) { + final var focus = getLegalFocus(state, i); + if (focus.contains(region)) { + final var law = laws.get(i); + if (law instanceof final PredicateWithConjuncts conjunction) { + focusedLaws.addAll(conjunction.getConjuncts()); + } else { + focusedLaws.add(law); + } + } + } + return focusedLaws; + } + + private boolean isFalseLiteral(final IPredicate predicate) { + if (predicate instanceof final PredicateWithConjuncts conjunction) { + return conjunction.getConjuncts().stream().anyMatch(this::isFalseLiteral); + } + return SmtUtils.isFalseLiteral(predicate.getFormula()); + } + + public interface IFocusedRegionHeuristic

{ + Comparator, IPredicate>> getPreference(); + + default Comparator> getPreference(final IPredicate law) { + final var comparator = getPreference(); + return (r1, r2) -> comparator.compare(new Pair<>(r1, law), new Pair<>(r2, law)); + } + + static

IFocusedRegionHeuristic

bySize() { + return new IFocusedRegionHeuristic<>() { + @Override + public Comparator, IPredicate>> getPreference() { + return Comparator.comparing(Pair::getFirst, Comparator.comparing(Region::size)); + } + + @Override + public Comparator> getPreference(final IPredicate law) { + return Comparator.comparing(Region::size); + } + }; + } + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/Region.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/Region.java new file mode 100644 index 00000000000..923825f1ad6 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/Region.java @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2020 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import de.uni_freiburg.informatik.ultimate.util.LazyInt; +import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; + +/** + * Represents a region, which is a set of places of a Petri net. + * + * A region typically (though it is not strictly necessary) represents a block of places connected by transitions. + * Intuitively, we think of a region as a (connected) segment of the control flow of a single thread. + * + * Therefore, regions should satisfy the invariant that any two places in the region cannot occur together in a + * reachable marking of the Petri net. + * + * This class is immutable. + * + * @author Miriam Lagunes (miriam.lagunes@students.uni-freiburg.de) + * @author Matthias Zumkeller (zumkellm@informatik.uni-freiburg.de) + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * + * @param + * The type of places in the Petri program + */ +public class Region { + private final ImmutableSet mRegion; + private final LazyInt mHash; + + /** + * Creates a new region. + * + * NOTE: The constructor does not check the invariants that should be satisfied by regions (see above). Checking + * these would be prohibitively expensive. Thus, it is the caller's responsibility to only call this constructor + * with places satisfying these invariants. + * + * @param region + * the set of places constituting the region + */ + public Region(final ImmutableSet region) { + assert !region.isEmpty() : "Region is empty"; + mRegion = region; + mHash = new LazyInt(region::hashCode); + } + + /** + * Creates a region containing only a single place. + * + * @param

+ * the type of places + * @param place + * the only place in the region + * @return the singleton region + */ + public static

Region

singleton(final P place) { + return new Region<>(ImmutableSet.singleton(place)); + } + + /** + * Checks if a given place is in this region. + * + * @param place + * the place to check + * @return {@code true} if the given place is in this region, {@code false} otherwise + */ + public boolean contains(final PLACE place) { + return mRegion.contains(place); + } + + /** + * @return the set of all places in region + */ + public ImmutableSet getPlaces() { + return mRegion; + } + + /** + * Determines the size of this region. + * + * @return the number of places + */ + public int size() { + return mRegion.size(); + } + + @Override + public boolean equals(final Object obj) { + return obj == this || obj instanceof final Region other && mRegion.equals(other.getPlaces()); + } + + @Override + public int hashCode() { + // Hash code is cached for performance reasons. Regions are almost always used in sets (typically, HashSets) + // such as territories, and each hash code computation requires an iteration over the set of places. + return mHash.get(); + } + + @Override + public String toString() { + return mRegion.toString(); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/SaturatedEmpire.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/SaturatedEmpire.java new file mode 100644 index 00000000000..610d6588616 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/SaturatedEmpire.java @@ -0,0 +1,323 @@ +/* + * Copyright (C) 2025 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.ArrayDeque; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INwaOutgoingLetterAndTransitionProvider; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.VpAlphabet; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.OutgoingInternalTransition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; + +// TODO document this class +public class SaturatedEmpire implements IEmpire> { + private final ILogger mLogger; + + private final IPetriNet mNet; + private final INwaOutgoingLetterAndTransitionProvider mInterpolantAutomaton; + + private final State mInitialState; + + public SaturatedEmpire(final IPetriNet net, + final INwaOutgoingLetterAndTransitionProvider interpolantAutomaton, + final IUltimateServiceProvider services) { + mLogger = services.getLoggingService().getLogger(getClass()); + mNet = net; + mInterpolantAutomaton = interpolantAutomaton; + + // Construct initial state + final var initialLaw = + DataStructureUtils.getOneAndOnly(mInterpolantAutomaton.getInitialStates(), "initial law place"); + final var regions = mNet.getInitialPlaces().stream().map(Region::singleton).collect(ImmutableSet.collector()); + final State state = new State<>(new Territory<>(regions), initialLaw); + mInitialState = getMarkedSuccessor(state, Collections.emptySet()); + } + + @Override + public IPredicate getLaw(final State state) { + return state.law(); + } + + @Override + public Territory> getTerritory(final State state) { + return state.territory(); + } + + @Override + public VpAlphabet> getVpAlphabet() { + return new VpAlphabet<>(mNet.getTransitions()); + } + + @Override + public Iterable> getInitialStates() { + return List.of(mInitialState); + } + + @Override + public boolean isInitial(final State state) { + return mInitialState.equals(state); + } + + /** + * Determines a state s as final, if it contains an error place and the law is false, OR if there exists at least + * one transition in enabled(territory(s)), for which there is no successor in the automaton. In this case, the + * successor law must be false. + */ + public boolean isFinal2(final State state) { + final var successors = internalSuccessors(state); + final var succStates = new HashSet>(); + for (final OutgoingInternalTransition, State> outgoingInternalTransition : successors) { + final var succState = outgoingInternalTransition.getSucc(); + succStates.add(succState); + if (state != succState) { + return false; + } + } + final var territory = state.territory(); + final var enabledTransitions = territory.getEnabledTransitions(mNet).collect(Collectors.toSet()); + if (succStates.size() < enabledTransitions.size()) { + final var falseSuccessors = enabledTransitions.stream() + .anyMatch(t -> mInterpolantAutomaton.isFinal(getSuccessorLaw(state.law, t))); + if (!falseSuccessors) { + mLogger.debug("Bla"); + } + assert falseSuccessors + : "There exists no successor for an enabled transition, but the successor law is not false"; + } + // Check if there is at least one enabled transition, for which state has no successor + return succStates.size() < enabledTransitions.size(); + } + + /** + * Determines a state s as final, if it contains an error place and the law is false, OR if there exists at least + * one transition in enabled(territory(s)), for which there is no successor in the automaton. In this case, the + * successor law must be false. + */ + @Override + public boolean isFinal(final State state) { + final var territory = state.territory(); + final var enabledTransitions = territory.getEnabledTransitions(mNet).collect(Collectors.toSet()); + for (final Transition transition : enabledTransitions) { + final var succ = internalSuccessors(state, transition); + if (!succ.iterator().hasNext()) { + assert mInterpolantAutomaton.isFinal(getSuccessorLaw(state.law, transition)) + : "There is no successor, but the law is not false"; + return true; + } + } + return false; + } + + @Override + public int size() { + return -1; + } + + @Override + public String sizeInformation() { + return "unknown size"; + } + + @Override + public Set> lettersInternal(final State state) { + final var places = state.territory().getPlaces(); + return mNet.getSuccessorTransitionProviders(places, places).stream().flatMap(p -> p.getTransitions().stream()) + .collect(Collectors.toSet()); + } + + @Override + public Iterable, State>> + internalSuccessors(final State state, final Transition letter) { + // step 1: see if letter should lead to any successor at all or can be optimized away + // (iterate over alphabet and see which other transitions are enabled in the territory) + if (!state.territory().enables(letter)) { + return List.of(); + } + + // compute successor law once and pass it to other methods, to improve performance + final IPredicate successorLaw = getSuccessorLaw(state.law(), letter); + if (isExtendingTransition(state.law(), letter, successorLaw) && isCycle(state, letter, successorLaw)) { + return List.of(new OutgoingInternalTransition<>(letter, state)); + } + + // step 2: compute the "direct" successor state for the given transition + if (mInterpolantAutomaton.isFinal(successorLaw)) { + return List.of(); + } + final var directSucc = getReplacementSuccessor(state, letter, successorLaw); + final var succState = directSucc.getFirst(); + final var replacementBystanders = directSucc.getSecond(); + + // step 3: while the current successor is not marked, pick one (or a set of) transitions and compute the + // successor again + final var maxMarkedSuccessor = getMarkedSuccessor(succState, replacementBystanders); + + // return the edge to the maximal successor + return List.of(new OutgoingInternalTransition<>(letter, maxMarkedSuccessor)); + } + + private IPredicate getSuccessorLaw(final IPredicate law, final Transition transition) { + final var succLaw = mInterpolantAutomaton.internalSuccessors(law, transition.getSymbol()); + if (succLaw.iterator().hasNext()) { + return DataStructureUtils.getOneAndOnly(succLaw, "successor state").getSucc(); + } + + // TODO Shouldn't we rather throw an error here? + mLogger.warn("No successor law for transition: %s and law: %s", transition, law); + return law; + } + + private boolean isExtendingTransition(final IPredicate currentLaw, final Transition transition, + final IPredicate successorLaw) { + return currentLaw == successorLaw && isStraightline(transition); + } + + private boolean isCycle(final State state, final Transition transition, final IPredicate successorLaw) { + final var territory = state.territory(); + final var law = state.law(); + return territory.enables(transition) && isExtendingTransition(law, transition, successorLaw) + && territory.getPlaces().containsAll(transition.getSuccessors()); + } + + private State getMarkedSuccessor(final State state, final Set> replacementBystanders) { + final var newRegions = new LinkedHashSet>(state.territory().size()); + boolean changed = false; + for (final var region : state.territory().getRegions()) { + if (replacementBystanders.contains(region)) { + // Bystanders must remain unchanged. + newRegions.add(region); + } else { + // Extend the region as far as possible. + final var extendedRegion = extendRegion(state, region, replacementBystanders); + newRegions.add(extendedRegion); + + // Record whether any region truly changed. + changed |= extendedRegion != region; + } + } + if (changed) { + final var extendedTerritory = new Territory<>(ImmutableSet.of(newRegions)); + return new State<>(extendedTerritory, state.law()); + } + return state; + } + + private Region

extendRegion(final State state, final Region

region, + final Set> replacementBystanders) { + final ArrayDeque> worklist = new ArrayDeque<>(); + for (final var provider : mNet.getSuccessorTransitionProviders(region.getPlaces(), region.getPlaces())) { + worklist.addAll(provider.getTransitions()); + } + + final Set

addedPlaces = new HashSet<>(); + while (!worklist.isEmpty()) { + final var transition = worklist.pop(); + if (!isStraightline(transition) || getSuccessorLaw(state.law(), transition) != state.law()) { + // A new territory must be created for this transition. + continue; + } + + // As the transition is straightline, it has exactly one predecessor and successor. + final P predecessor = DataStructureUtils.getOneAndOnly(transition.getPredecessors(), "predecessor"); + final P successor = DataStructureUtils.getOneAndOnly(transition.getSuccessors(), "successor"); + + // Invariant: The transition must be enabled; and it cannot touch a bystander region. + assert region.contains(predecessor) || addedPlaces.contains(predecessor); + assert replacementBystanders.stream().noneMatch(r -> r.contains(predecessor)); + assert replacementBystanders.stream().noneMatch(r -> r.contains(successor)); + + if (region.contains(successor) || addedPlaces.contains(successor)) { + // The transition is already cycling, so there is no need to extend by it again. + continue; + } + assert !state.territory().containsPlace(successor) : "violation of 1-safety"; + + // The successor is added to the region. Any outgoing transitions become candidates for extension. + addedPlaces.add(successor); + worklist.addAll(mNet.getSuccessors(successor)); + } + + if (addedPlaces.isEmpty()) { + return region; + } + + final var newPlaceSet = DataStructureUtils.union(region.getPlaces(), addedPlaces); + return new Region<>(ImmutableSet.of(newPlaceSet)); + } + + private boolean isStraightline(final Transition transition) { + return transition.getPredecessors().size() == 1 && transition.getSuccessors().size() == 1; + } + + private Pair, Set>> getReplacementSuccessor(final State state, + final Transition transition, final IPredicate successorLaw) { + final Set> newBystanders = state.territory().getBystanders(transition); + final var regions = replaceRegions(transition, newBystanders); + final var newTerritory = new Territory<>(ImmutableSet.of(regions)); + final var replacementState = new State(newTerritory, successorLaw); + return new Pair<>(replacementState, newBystanders); + } + + private Set> replaceRegions(final Transition transition, + final Set> replacementBystanders) { + final var regions = new HashSet<>(replacementBystanders); + for (final var succ : transition.getSuccessors()) { + regions.add(Region.singleton(succ)); + } + return regions; + } + + public record State(Territory> territory, IPredicate law, int hash) { + // Convenience constructor that computes the correct hash code. Always use this constructor. + public State(final Territory> territory, final IPredicate law) { + this(territory, law, Objects.hash(territory, law)); + } + + @Override + public int hashCode() { + // Hash code is cached for performance. + // TODO This caching is brittle, as accidental constructor misuse can lead to incorrect hash codes. + // TODO Re-evaluate the impact other implementation details have been improved, and improve or remove it. + return hash; + } + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/StateIndistinction.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/StateIndistinction.java new file mode 100644 index 00000000000..e2ec5ac9773 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/StateIndistinction.java @@ -0,0 +1,347 @@ +/* + * Copyright (C) 2026 Dominik Klumpp (klumpp@lix.polytechnique.fr) + * Copyright (C) 2026 Ecole Polytechnique + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.ToolchainCanceledException; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.IPossibleInterferences; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.UnionFind; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.SymmetricHashRelation; + +/** + * This class computes a state indistinction relation, i.e., an equivalence relation between states of an + * empire such that the imperial Owicki-Gries annotation need not distinguish between equivalent states. + * + * The ghost variable of the imperial Owicki-Gries relation tracks the equivalence class of the current empire state. + * + * An indistinction relation must satisfy the following conditions: + * + * TODO Update these descriptions, they are out-of-date. + *

    + *
  1. If two states are equivalent, and there exists a transition with more than one successor enabled in both their + * territories, then the states must have the same law.
  2. + *
  3. If two states are equivalent, and there exists a transition and a co-marked place such that the transition is + * enabled in both states' territories, and the place is also contained in both territories, then the states must have + * the same law. + *
  4. If two states are equivalent, and both enable some transition t, then the respective successor states under t + * must again be equivalent.
  5. + *
+ * + * TODO Check if "same laws" is really enough, and update code/description accordingly. + */ +class StateIndistinction { + private final IUltimateServiceProvider mServices; + private final ILogger mLogger; + + private final IPetriNet mProgram; + private final IExplicitEmpire mEmpire; + private final IPossibleInterferences, P> mPossibleInterferences; + + // A list of all states, used to establish a clear iteration order. + private final List mStates; + + // A symmetric relation of state pairs that cannot possibly be equivalent. + // Its complement is an overapproximation of the state indistinction relation. + // During the computation, additional pairs are added, tightening the overapproximation. + private final SymmetricHashRelation mExplicitDistinctions = new SymmetricHashRelation<>(); + + // A partition (equivalence relation) relating states that will definitely be considered equivalent. + // This is an underapproximation of the state indistinction relation that will be gradually increased until we + // arrive at the desired indistinction relation. + private final UnionFind mPartition = new UnionFind<>(); + + public StateIndistinction(final IUltimateServiceProvider services, final IPetriNet program, + final IExplicitEmpire empire, + final IPossibleInterferences, P> possibleInterferences) { + mServices = services; + mLogger = services.getLoggingService().getLogger(StateIndistinction.class); + + mProgram = program; + mEmpire = empire; + mPossibleInterferences = possibleInterferences; + + mStates = List.copyOf(mEmpire.getStates()); + } + + public Map computePartition() { + mLogger.info("Computing state indistinction between %d states", mStates.size()); + + // initialize according to rules (join-laws) and (nonint-laws) + initializeDistinctions(); + + // propagate necessary distinctions according to rule (pseudo-simulation) + propagateDistinctions(); + + // determine a pair of states with unclear distinction, decide, and then propagate the resulting distinctions + // repeat this until no more decisions need to be made + while (decideDistinction() >= 0) { + propagateDistinctions(); + } + + // represent partition as map from S to integers + final var result = new HashMap(); + int num = 0; + for (final Set eqvClass : mPartition.getAllEquivalenceClasses()) { + for (final S member : eqvClass) { + result.put(member, num); + } + num++; + } + + mLogger.info("Grouped %d states into %d partitions.", mStates.size(), num); + mLogger.debug(mPartition.getAllEquivalenceClasses()); + + assert validate(result); + return result; + } + + // Utility functions to access the data structures correctly. + // ========================================================== + + private void distinguish(final S state1, final S state2) { + mLogger.debug("distinguishing %s and %s", state1, state2); + + final S repr1 = getRepresentative(state1); + final S repr2 = getRepresentative(state2); + assert !repr1.equals(repr2) : "splitting equivalent states"; + + mExplicitDistinctions.addPair(repr1, repr2); + } + + private boolean mustBeDistinguished(final S state1, final S state2) { + return mExplicitDistinctions.containsPair(getRepresentative(state1), getRepresentative(state2)); + } + + private void merge(final S state1, final S state2) { + mLogger.debug("merging %s and %s", state1, state2); + mLogger.debug(" representatives: %s and %s", getRepresentative(state1), getRepresentative(state2)); + + mPartition.union(state1, state2); + final S representative = getRepresentative(state1); + mExplicitDistinctions.addAllPairs(representative, mExplicitDistinctions.getImage(state1)); + mExplicitDistinctions.addAllPairs(representative, mExplicitDistinctions.getImage(state2)); + + mLogger.debug(" distinctions: %s", mExplicitDistinctions); + mLogger.debug(" equivalence classes: %s", mPartition.getAllEquivalenceClasses()); + mLogger.debug(" new representative: %s", getRepresentative(state1)); + } + + private boolean areEquivalent(final S state1, final S state2) { + return getRepresentative(state1).equals(getRepresentative(state2)); + } + + private S getRepresentative(final S state) { + return mPartition.find(state); + } + + // Computation steps + // ================= + + private void initializeDistinctions() { + mLogger.debug("Initializing indistinction..."); + + for (final S state : mStates) { + mPartition.makeEquivalenceClass(state); + } + + for (int i = 0; i < mStates.size(); ++i) { + final S q1 = mStates.get(i); + + final Territory> terr1 = mEmpire.getTerritory(q1); + // final IPredicate law1 = mEmpire.getLaw(q1); + + for (int j = i + 1; j < mStates.size(); j++) { + if (!mServices.getProgressMonitorService().continueProcessing()) { + throw new ToolchainCanceledException(getClass()); + } + + final S q2 = mStates.get(j); + + // states with equal laws need not be distinguished + // TODO currently unclear if this is sound, so disabled for now + // if (mEmpire.getLaw(q2).equals(law1)) { + // continue; + // } + + final Territory> terr2 = mEmpire.getTerritory(q2); + if (haveCommonJoin(terr1, terr2) || haveCommonInterference(terr1, terr2)) { + distinguish(q1, q2); + } + } + } + } + + private boolean haveCommonJoin(final Territory> terr1, final Territory> terr2) { + return mProgram.getTransitions().stream() + .anyMatch(t -> t.getPredecessors().size() > 1 + && DataStructureUtils.haveNonEmptyIntersection(t.getPredecessors(), terr1.getPlaces()) + && DataStructureUtils.haveNonEmptyIntersection(t.getPredecessors(), terr2.getPlaces())) /* ) */; + } + + private boolean haveCommonInterference(final Territory> terr1, final Territory> terr2) { + return mProgram.getPlaces().stream() + .anyMatch(p -> mPossibleInterferences.getInterferingActions(p).stream() + .anyMatch(t -> DataStructureUtils.haveNonEmptyIntersection(terr1.getPlaces(), + DataStructureUtils.union(t.getPredecessors(), Set.of(p))) + && DataStructureUtils.haveNonEmptyIntersection(terr2.getPlaces(), + DataStructureUtils.union(t.getPredecessors(), Set.of(p)))))/* ) */; + } + + private boolean propagateDistinctions() { + mLogger.debug("Propagating distinctions..."); + boolean changed; + do { + if (!mServices.getProgressMonitorService().continueProcessing()) { + throw new ToolchainCanceledException(getClass()); + } + + changed = propagateDistinctionsOneStep(); + if (changed) { + mLogger.debug("propagated one step"); + } else { + mLogger.debug("nothing to propagate"); + } + } while (changed); + return changed; + } + + private boolean propagateDistinctionsOneStep() { + boolean changed = false; + + for (int i = 0; i < mStates.size(); ++i) { + final S q1 = mStates.get(i); + final var transitions = mEmpire.getTerritory(q1).getEnabledTransitions(mProgram).toList(); + for (int j = i + 1; j < mStates.size(); ++j) { + if (!mServices.getProgressMonitorService().continueProcessing()) { + throw new ToolchainCanceledException(getClass()); + } + + final S q2 = mStates.get(j); + + // already non-equivalent + if (mustBeDistinguished(q1, q2)) { + continue; + } + + // rule (pseudo-simulation) + for (final var t : transitions) { + final Optional succ1 = DataStructureUtils + .getOnly(mEmpire.internalSuccessors(q1, t), "successor state").map(e -> e.getSucc()); + if (succ1.isEmpty()) { + continue; + } + final Optional succ2 = DataStructureUtils + .getOnly(mEmpire.internalSuccessors(q2, t), "successor state").map(e -> e.getSucc()); + if (succ2.isEmpty()) { + continue; + } + + // If the successors must be distinguished, then so must s1 and s2. + if (mustBeDistinguished(succ1.get(), succ2.get())) { + distinguish(q1, q2); + changed = true; + } + } + } + } + + return changed; + } + + // TODO the point of returning the position is to speed up future searches (not yet implemented; return pair ) + private int decideDistinction() { + for (int i = 0; i < mStates.size(); ++i) { + final S s1 = mStates.get(i); + for (int j = i + 1; j < mStates.size(); ++j) { + final S s2 = mStates.get(j); + + if (areEquivalent(s1, s2) || mustBeDistinguished(s1, s2)) { + continue; + } + + merge(s1, s2); + return i; + } + } + return -1; + } + + private boolean validate(final Map partition) { + for (final S s1 : mStates) { + for (final S s2 : mStates) { + if (!mServices.getProgressMonitorService().continueProcessing()) { + throw new ToolchainCanceledException(getClass()); + } + + assert partition.get(s1) != null : "missing entry"; + assert partition.get(s2) != null : "missing entry"; + if (!partition.get(s1).equals(partition.get(s2))) { + continue; + } + + final var terr1 = mEmpire.getTerritory(s1); + final var terr2 = mEmpire.getTerritory(s2); + final boolean equalLaws = mEmpire.getLaw(s1).equals(mEmpire.getLaw(s2)); + assert equalLaws || !haveCommonJoin(terr1, terr2) + : "condition join-laws violated for " + s1 + " and " + s2; + assert equalLaws || !haveCommonInterference(terr1, terr2) + : "condition nonint-laws violated for " + s1 + " and " + s2; + + terr1.getEnabledTransitions(mProgram).filter(terr2::enables).allMatch(t -> { + assert terr1.enables(t); + final Optional succ1 = DataStructureUtils + .getOnly(mEmpire.internalSuccessors(s1, t), "successor state").map(e -> e.getSucc()); + final Optional succ2 = DataStructureUtils + .getOnly(mEmpire.internalSuccessors(s2, t), "successor state").map(e -> e.getSucc()); + if (succ1.isEmpty() || succ2.isEmpty()) { + return true; + } + assert partition.get(succ1.get()) != null : "missing entry for successor #1: " + succ1.get() + + " (index: " + mStates.indexOf(succ1.get()) + ")"; + assert partition.get(succ2.get()) != null : "missing entry for successor #2: " + succ2.get() + + " (index: " + mStates.indexOf(succ2.get()) + ")"; + final boolean valid = partition.get(succ1.get()).equals(partition.get(succ2.get())); + assert valid + : "pseudo-simulation violated for %s and %s under transition %s: successors %s and %s are non-equivalent" + .formatted(s1, s2, t, succ1.get(), succ2.get()); + return valid; + }); + } + } + return true; + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/Territory.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/Territory.java new file mode 100644 index 00000000000..01f738774af --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/Territory.java @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2020 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; + +/** + * A territory consists of several {@link Region}s, and represents a collection of reachable markings of a + * Petri net. + * + * Territories should satisfy the invariants that any two places in different regions of the territory are co-related, + * and that any marking in the territory's treaty (see {@link #getTreaty()}) is a reachable marking. + * + * This class is immutable. + * + * @author Miriam Lagunes (miriam.lagunes@students.uni-freiburg.de) + * @author Matthias Zumkeller (zumkellm@informatik.uni-freiburg.de) + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * + * @param + * The type of places in the Petri net + */ +public final class Territory> { + private final ImmutableSet mRegions; + + // Cached map of places in the territory to the respective region in the territory that contains the place. + // This is computed on-demand in #ensurePlaceMap(). + private Map mPlaceMap; + + /** + * Creates a new territory. + * + * NOTE: The constructor does not check the invariants that should be satisfied by territories (see above). Checking + * these would be prohibitively expensive. Thus, it is the caller's responsibility to only call this constructor + * with regions satisfying these invariants. + * + * @param regions + * the set of regions constituting the territory + */ + public Territory(final ImmutableSet regions) { + assert !regions.isEmpty() : "cannot create an empty territory"; + mRegions = regions; + } + + /** + * @return the regions constituting this territory + */ + public ImmutableSet getRegions() { + return mRegions; + } + + /** + * @return the set of all places in this territory, which corresponds to the union of its regions. + */ + public ImmutableSet

getPlaces() { + ensurePlaceMap(); + return ImmutableSet.of(mPlaceMap.keySet()); + } + + /** + * Determines if this territory contains a given place. + * + * @param place + * the place to check + * @return {@code true} if one of the regions in this territory contains the place, {@code false} otherwise + */ + public boolean containsPlace(final P place) { + ensurePlaceMap(); + return mPlaceMap.containsKey(place); + } + + /** + * Retrieves the size of the territory. + * + * @return the number of regions in the territory + */ + public int size() { + return mRegions.size(); + } + + /** + * Determines whether this territory subsumes a given territory. + * + * One territory subsumes another if the subsuming territory's treaty (see {@link #getTreaty()}) is a superset of + * the subsumed territory's treaty. + * + * NOTE: The implementation of this method does not actually compute the treaty, and should be reasonably efficient. + * + * @param subsumee + * the territory for which subsumption should be checked + * @return {@code true} if this territory subsumes the given territory, {@code false} otherwise + */ + public boolean subsumes(final Territory subsumee) { + final var bigRegions = new HashSet<>(getRegions()); + for (final var smallRegion : subsumee.getRegions()) { + final var it = bigRegions.iterator(); + boolean found = false; + while (it.hasNext()) { + final var bigRegion = it.next(); + if (bigRegion.getPlaces().containsAll(smallRegion.getPlaces())) { + it.remove(); + found = true; + break; + } + } + if (!found) { + return false; + } + } + return true; + } + + /** + * Determines whether a given marking is represented by this territory, i.e., whether it is contained in the treaty, + * see {@link #getTreaty()}. + * + * NOTE: The implementation of this method does not actually compute the treaty, and should be reasonably efficient. + * + * @param marking + * the marking for which membership in the treaty should be checked + * @return {@code true} if this territory's treaty contains the given marking, {@code false} otherwise + */ + public boolean containsMarking(final Marking

marking) { + final Set regions = new HashSet<>(getRegions()); + if (marking.size() != regions.size()) { + return false; + } + for (final P place : marking.getPlaces()) { + var found = false; + final var it = regions.iterator(); + while (!found && it.hasNext()) { + final var region = it.next(); + if (region.contains(place)) { + found = true; + it.remove(); + } + } + if (!found) { + return false; + } + } + return regions.isEmpty(); + } + + /** + * Determines if this territory enables a given transition of a Petri net. + * + * A territory enables a transition if the territory's treating contains any marking that enables the transition. + * + * @param transition + * the transition for which enabledness is checked + * @return {@code true} if this territory enables the given transition, {@code false} otherwise + */ + public boolean enables(final Transition transition) { + final var regions = new HashSet<>(getRegions()); + final var predecessors = transition.getPredecessors(); + for (final var place : predecessors) { + final var it = regions.iterator(); + boolean found = false; + while (!found && it.hasNext()) { + final var region = it.next(); + if (region.contains(place)) { + found = true; + it.remove(); + } + } + if (!found) { + return false; + } + } + return true; + } + + /** + * Get all transitions of a Petri net that are enabled by this territory. + * + * @see #enables(Transition) + * + * @param + * The type of labels on the transitions + * @param net + * A Petri net (containing all places of this territory) whose enabled transitions shall be collected + * @return a stream of all transitions enabled in some marking represented by this territory + */ + public Stream> getEnabledTransitions(final IPetriNet net) { + final var places = getPlaces(); + return net.getSuccessorTransitionProviders(places, places).stream() + .flatMap(provider -> provider.getTransitions().stream()).filter(this::enables); + } + + /** + * Checks if some other territory is a successor of this territory for a given transition. + * + * A given territory is the successor of this territory, if this territory enables the transition (see + * {@link #enables(Transition)}), and for every region of this territory containing some predecessor place of the + * transition, there exists a region in the given territory containing a successor place of the transition. These + * successor regions must be pairwise distinct (no two successor places may belong to the same region), but they may + * be the same region that (in this territory) contains the predecessor place. In fact, a territory may be its own + * successor (not only for self-loop transitions). All bystander regions of the transition in this territory (see + * {@link #getBystanders(Transition)}) must also be present in the given territory. + * + * The above conditions imply that (but are stronger than) for every marking in this territory's treaty that enables + * the transition, the marking resulting from firing the transition is in the successor territory's treaty. + * + * @param otherTerritory + * the potential successor territory + * @param transition + * a transition that is enabled by this territory + * @return {@code true} if {@code otherTerritory} is a successor of this territory for {@code transition}, + * {@code false} otherwise + */ + public boolean isSuccessor(final Territory otherTerritory, final Transition transition) { + final var bystanders = getBystanders(transition); + final var successorPlaces = transition.getSuccessors(); + if (!otherTerritory.getRegions().containsAll(bystanders) + || !otherTerritory.getPlaces().containsAll(successorPlaces)) { + return false; + } + final var potentialSuccessors = DataStructureUtils.difference(otherTerritory.getRegions(), bystanders).stream() + .collect(Collectors.toSet()); + if (potentialSuccessors.size() != successorPlaces.size()) { + return false; + } + for (final P succPlace : successorPlaces) { + final var succRegions = + potentialSuccessors.stream().filter(r -> r.contains(succPlace)).collect(Collectors.toSet()); + if (succRegions.size() != 1) { + return false; + } + potentialSuccessors.removeAll(succRegions); + } + return true; + } + + /** + * Get bystander regions in the territory for a given transition (which is enabled by this territory). + * + * A bystander region is a region of the territory that does not contain any of the transition's predecessor places. + * + * @param transition + * A transition enabled by this territory + * @return the set of bystander regions + */ + public Set getBystanders(final Transition transition) { + assert enables(transition) : "Territory does not enable the given transition"; + + ensurePlaceMap(); + final var bystanders = new HashSet<>(mRegions); + for (final var predecessor : transition.getPredecessors()) { + bystanders.remove(mPlaceMap.get(predecessor)); + } + return bystanders; + } + + /** + * Retrieves all regions that contain at least one place in a given set of places. + * + * @param places + * a set of places + * @return the set of corresponding regions + */ + public Set getPlacesRegions(final Set

places) { + ensurePlaceMap(); + return places.stream().map(mPlaceMap::get).collect(Collectors.toSet()); + } + + public R getPlaceRegion(final P place) { + ensurePlaceMap(); + assert containsPlace(place) : "No region contains the place"; + return mPlaceMap.get(place); + } + + private void ensurePlaceMap() { + if (mPlaceMap != null) { + return; + } + + mPlaceMap = new HashMap<>(); + for (final var region : mRegions) { + for (final var place : region.getPlaces()) { + mPlaceMap.put(place, region); + } + } + } + + @Override + public boolean equals(final Object obj) { + return this == obj || (obj instanceof final Territory other && mRegions.equals(other.getRegions())); + } + + @Override + public int hashCode() { + return mRegions.hashCode(); + } + + @Override + public String toString() { + return mRegions.toString(); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/ConnectedRegion.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/ConnectedRegion.java new file mode 100644 index 00000000000..516aa41565d --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/ConnectedRegion.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed; + +import java.util.ArrayDeque; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.Region; +import de.uni_freiburg.informatik.ultimate.util.LazyInt; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; + +public class ConnectedRegion extends Region

{ + + private final ImmutableSet> mTransitions; + private final LazyInt mHash; + + public ConnectedRegion(final ImmutableSet

region, final ImmutableSet> transitions) { + super(region); + mTransitions = transitions; + mHash = new LazyInt(region::hashCode); + } + + /** + * Creates a connected region containing only a single place and an empty set of transitions. + * + * @param + * the type of transitions + * @param

+ * the type of places + * @param place + * the only place in the region + * @return the singleton connected region + */ + public static ConnectedRegion connectedSingleton(final P place) { + return new ConnectedRegion<>(ImmutableSet.singleton(place), ImmutableSet.empty()); + } + + public static Region

intersectConnectedRegions(final Set> connectedRegions, + final P startingPlace) { + final var transitionIntersection = connectedRegions.stream().map(r -> new HashSet<>(r.getTransitions())) + .reduce((t1, t2) -> new HashSet<>(DataStructureUtils.intersection(t1, t2))); + final var transitions = transitionIntersection.orElse(new HashSet<>()); + final var intersection = connectedRegions.stream().map(r -> new HashSet<>(r.getPlaces())) + .reduce((r1, r2) -> new HashSet<>(DataStructureUtils.intersection(r1, r2))); + final var jointPlaces = intersection.orElse(new HashSet<>()); + assert !jointPlaces.isEmpty() : "No common place"; + final var regionPlaces = new HashSet

(); + regionPlaces.add(startingPlace); + final var queue = new ArrayDeque

(); + queue.offer(startingPlace); + final var visited = new HashSet

(); + while (!queue.isEmpty()) { + final var currentPlace = queue.poll(); + if (!visited.add(currentPlace)) { + continue; + } + final var possibleSuccessors = transitions.stream() + .filter(t -> t.getPredecessors().contains(currentPlace) && t.getPredecessors().size() == 1 + && t.getSuccessors().size() == 1) + .flatMap(t -> t.getSuccessors().stream()).collect(Collectors.toSet()); + final var jointSuccessors = DataStructureUtils.intersection(jointPlaces, possibleSuccessors); + regionPlaces.addAll(jointSuccessors); + for (final P p : jointSuccessors) { + if (visited.contains(p)) { + continue; + } + queue.offer(p); + } + } + return new Region<>(ImmutableSet.of(regionPlaces)); + } + + public ImmutableSet> getTransitions() { + return mTransitions; + } + + @Override + public boolean equals(final Object obj) { + return obj == this || obj instanceof final ConnectedRegion other && getPlaces().equals(other.getPlaces()) + && mTransitions.equals(other.getTransitions()); + } + + @Override + public int hashCode() { + // Hash code is cached for performance reasons. Regions are almost always used in sets (typically, HashSets) + // such as territories, and each hash code computation requires an iteration over the set of places. + return mHash.get(); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedEmpire.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedEmpire.java new file mode 100644 index 00000000000..fe4796da668 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedEmpire.java @@ -0,0 +1,299 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed; + +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INwaOutgoingLetterAndTransitionProvider; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.VpAlphabet; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.OutgoingInternalTransition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.IEmpire; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.Region; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.Territory; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; + +public class DirectedEmpire implements IEmpire> { + private final ILogger mLogger; + + private final IPetriNet mNet; + private final INwaOutgoingLetterAndTransitionProvider mProof; + + private final State mInitialState; + + public DirectedEmpire(final IPetriNet net, final INwaOutgoingLetterAndTransitionProvider proof, + final IUltimateServiceProvider services) { + mLogger = services.getLoggingService().getLogger(getClass()); + mNet = net; + mProof = proof; + + // Construct initial state + final var initialLaw = DataStructureUtils.getOneAndOnly(mProof.getInitialStates(), "initial law place"); + final var regions = getInitialRegions(); + final State state = new State<>(new Territory<>(regions), initialLaw, Collections.emptySet()); + mInitialState = getMarkedSuccessor(state); + } + + @Override + public IPredicate getLaw(final State state) { + return state.law(); + } + + @Override + public Territory> getTerritory(final State state) { + return (Territory) state.territory(); + } + + @Override + public VpAlphabet> getVpAlphabet() { + return new VpAlphabet<>(mNet.getTransitions()); + } + + @Override + public Iterable> getInitialStates() { + return List.of(mInitialState); + } + + @Override + public boolean isInitial(final State state) { + return mInitialState.equals(state); + } + + /** + * Determines a state s as final, if it contains an error place and the law is false, OR if there exists at least + * one transition in enabled(territory(s)), for which there is no successor in the automaton. In this case, the + * successor law must be false. + */ + @Override + public boolean isFinal(final State state) { + final var territory = state.territory(); + final var enabledTransitions = territory.getEnabledTransitions(mNet).collect(Collectors.toSet()); + for (final Transition transition : enabledTransitions) { + final var succ = internalSuccessors(state, transition); + if (!succ.iterator().hasNext()) { + assert SmtUtils.isFalseLiteral(getSuccessorLaw(state.law, transition).getFormula()) + : "There is no successor, but the law is not false"; + return true; + } + } + return false; + } + + @Override + public int size() { + return -1; + } + + @Override + public String sizeInformation() { + return "unknown size"; + } + + @Override + public Set> lettersInternal(final State state) { + // TODO Consider whether we can efficiently override this method + return IEmpire.super.lettersInternal(state); + } + + @Override + public Iterable, State>> + internalSuccessors(final State state, final Transition letter) { + // step 1: see if letter should lead to any successor at all or can be optimized away + // (iterate over alphabet and see which other transitions are enabled in the territory) + if (!state.territory().enables(letter)) { + return List.of(); + } + if (isExtendingTransition(state.law(), letter) && isCycle(state, letter)) { + return List.of(new OutgoingInternalTransition<>(letter, state)); + } + + // step 2: compute the "direct" successor state for the given transition + final var directSucc = getReplacementSuccessor(state, letter); + final var succLaw = directSucc.law; + if (SmtUtils.isFalseLiteral(succLaw.getFormula())) { + return List.of(); + } + + // step 3: while the current successor is not marked, pick one (or a set of) transitions and compute the + // successor again + final var maxMarkedSuccessor = getMarkedSuccessor(directSucc); + + // return the edge to the maximal successor + return List.of(new OutgoingInternalTransition<>(letter, maxMarkedSuccessor)); + } + + private State extendAll(final State state, final Set> transitions) { + if (transitions.isEmpty()) { + return state; + } + final var territory = state.territory; + final var territoryRegions = new HashSet<>(territory.getRegions()); + final var extendedRegions = new HashSet>(); + for (final ConnectedRegion region : territory.getRegions()) { + final var matchingTransitions = findMatchingTransitions(region, transitions); + if (!matchingTransitions.isEmpty()) { + transitions.removeAll(matchingTransitions); + final var successorPlaces = matchingTransitions.stream().flatMap(t -> t.getSuccessors().stream()) + .collect(Collectors.toSet()); + final var newPlaces = DataStructureUtils.union(region.getPlaces(), successorPlaces); + final var newTransitions = DataStructureUtils.union(region.getTransitions(), matchingTransitions); + extendedRegions.add(new ConnectedRegion<>(ImmutableSet.of(newPlaces), ImmutableSet.of(newTransitions))); + territoryRegions.remove(region); + } + } + final var newTerritory = + new Territory<>(ImmutableSet.of(DataStructureUtils.union(extendedRegions, territoryRegions))); + return new State<>(newTerritory, state.law, state.bystanders); + } + + private Set> findMatchingTransitions(final ConnectedRegion region, + final Set> transitions) { + final var predTransitions = new HashSet>(); + final var places = region.getPlaces(); + for (final Transition transition : transitions) { + if (places.containsAll(transition.getPredecessors())) { + predTransitions.add(transition); + } + } + return predTransitions; + } + + private Set> getEnabledTransitions(final State state) { + return state.territory().getEnabledTransitions(mNet) + .filter(transition -> !SmtUtils.isFalseLiteral(getSuccessorLaw(state.law(), transition).getFormula())) + .collect(Collectors.toSet()); + } + + private IPredicate getSuccessorLaw(final IPredicate law, final Transition transition) { + final var succLaw = mProof.internalSuccessors(law, transition.getSymbol()); + if (succLaw.iterator().hasNext()) { + return DataStructureUtils.getOneAndOnly(succLaw, "successor state").getSucc(); + } + + // TODO Shouldn't we rather throw an error here? + mLogger.warn("No successor law for transition: %s and law: %s", transition, law); + return law; + } + + private boolean isExtendingTransition(final IPredicate lawPlace, final Transition transition) { + final IPredicate newLawPlace = getSuccessorLaw(lawPlace, transition); + final var predecessors = transition.getPredecessors(); + final var successors = transition.getSuccessors(); + return lawPlace == newLawPlace && predecessors.size() == 1 && successors.size() == 1; + } + + private Set> getExtendingTransitions(final State state, + final Set> transitions) { + return transitions.stream().filter(transition -> isExtendingTransition(state.law, transition)) + .collect(Collectors.toSet()); + } + + private boolean isNecessaryBridge(final State state, final Transition transition) { + return !state.territory.getBystanders(transition).containsAll(state.bystanders); + } + + private Set> getUnnecessaryTransitions(final State state, + final Set> transitions) { + final var extending = getExtendingTransitions(state, transitions); + return extending.stream().filter(t -> !isNecessaryBridge(state, t)).collect(Collectors.toSet()); + } + + private boolean isCycle(final State state, final Transition transition) { + final var territory = state.territory; + final var law = state.law; + if (!territory.enables(transition) || !isExtendingTransition(law, transition)) { + return false; + } + return territory.getPlaces().containsAll(transition.getSuccessors()); + } + + private State getMarkedSuccessor(final State state) { + final var enabledTransitions = getEnabledTransitions(state); + final var unnecessaryTransitions = getUnnecessaryTransitions(state, enabledTransitions); + final var nonCyclicTransitions = + unnecessaryTransitions.stream().filter(t -> !isCycle(state, t)).collect(Collectors.toSet()); + if (nonCyclicTransitions.isEmpty()) { + return state; + } + final var extendedState = extendAll(state, nonCyclicTransitions); + return getMarkedSuccessor(extendedState); + } + + private State getReplacementSuccessor(final State state, final Transition transition) { + final IPredicate newLawPlace = getSuccessorLaw(state.law(), transition); + final Set> newBystanders = state.territory().getBystanders(transition); + final var regions = replaceRegions(transition, newBystanders); + final var newTerritory = new Territory<>(ImmutableSet.of(regions)); + return new State<>(newTerritory, newLawPlace, newBystanders); + } + + private Set> replaceRegions(final Transition transition, + final Set> bystanders) { + final var regions = new HashSet<>(bystanders); + for (final var succ : transition.getSuccessors()) { + regions.add(ConnectedRegion.connectedSingleton(succ)); + } + return regions; + } + + private ImmutableSet> getInitialRegions() { + final Set> regions = new HashSet<>(); + for (final P place : mNet.getInitialPlaces()) { + regions.add(ConnectedRegion.connectedSingleton(place)); + } + return ImmutableSet.of(regions); + } + + // TODO use ImmutableSet for bystanders + public record State(Territory> territory, IPredicate law, + Set> bystanders, int hash) { + // Convenience constructor that computes the correct hash code. Always use this constructor. + public State(final Territory> territory, final IPredicate law, + final Set> bystanders) { + this(territory, law, bystanders, Objects.hash(territory, law, bystanders)); + } + + @Override + public int hashCode() { + // Hash code is cached for performance. + // TODO This caching is brittle, as accidental constructor misuse can lead to incorrect hash codes. + // TODO Re-evaluate the impact other implementation details have been improved, and improve or remove it. + return hash; + } + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedEmpireProduct.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedEmpireProduct.java new file mode 100644 index 00000000000..efbdc367271 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedEmpireProduct.java @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryServices; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INestedWordAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.NestedWordAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.VpAlphabet; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.reachablestates.NestedWordAutomatonReachableStates; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.Region; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.Territory; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed.DirectedEmpire.State; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; + +public class DirectedEmpireProduct { + + private final List, State>> mEmpires; + private final INestedWordAutomaton, ProductState> mProduct; + private final IPetriNet mNet; + + private final IUltimateServiceProvider mServices; + + public DirectedEmpireProduct(final List, State>> empires, + final IPetriNet net, final IUltimateServiceProvider services) { + mEmpires = empires; + mNet = net; + mServices = services; + + mProduct = constructProductAutomaton(); + } + + private ProductState constructInitialState() { + final var initialPlaces = mNet.getInitialPlaces(); + final var initStates = + mEmpires.stream().flatMap(e -> e.getInitialStates().stream()).collect(Collectors.toList()); + final var initTerrs = initStates.stream().map(State::territory).collect(Collectors.toSet()); + final var interRegions = getIntersectionRegions(initialPlaces, initTerrs); + final var initTerritory = new Territory<>(ImmutableSet.of(interRegions)); + return new ProductState<>(initStates, initTerritory); + } + + private Set> getIntersectionRegions(final Set

places, + final Set>> territories) { + final var interRegions = new HashSet>(); + for (final P place : places) { + final var regions = territories.stream().map(t -> t.getPlaceRegion(place)).collect(Collectors.toSet()); + final var inter = ConnectedRegion.intersectConnectedRegions(regions, place); + interRegions.add(inter); + } + return interRegions; + } + + private INestedWordAutomaton, ProductState> constructProductAutomaton() { + final var alphabet = new VpAlphabet<>(mNet.getTransitions()); + final var product = new NestedWordAutomaton<>(new AutomataLibraryServices(mServices), alphabet, + () -> new ProductState(null, null)); + final var init = constructInitialState(); + product.addState(true, false, init); + final var queue = new ArrayDeque>(); + queue.add(init); + while (!queue.isEmpty()) { + final var currentState = queue.poll(); + final var enabledTransitions = + currentState.intersectionTerritory().getEnabledTransitions(mNet).collect(Collectors.toSet()); + for (final Transition transition : enabledTransitions) { + final var succState = getSuccessorProductState(currentState.productStates, transition, + currentState.intersectionTerritory.getBystanders(transition)); + if (succState == null) { + continue; + } + if (!product.getStates().contains(succState)) { + product.addState(false, false, succState); + queue.offer(succState); + } + product.addInternalTransition(currentState, transition, succState); + } + } + return product; + } + + private ProductState getSuccessorProductState(final List> states, + final Transition transition, final Set> bystanders) { + final var succStates = new ArrayList>(); + for (int i = 0; i < states.size(); i++) { + final var state = states.get(i); + final var succIter = mEmpires.get(i).internalSuccessors(state, transition); + if (!succIter.iterator().hasNext()) { + return null; + } + final var succ = DataStructureUtils.getOneAndOnly(succIter, "Successor state"); + succStates.add(succ.getSucc()); + } + + assert succStates.size() == mEmpires.size() : "Not enough states in product state!"; + + final var succTerritories = succStates.stream().map(State::territory).collect(Collectors.toSet()); + final var interRegions = getIntersectionRegions(transition.getSuccessors(), succTerritories); + interRegions.addAll(bystanders); + final var succTerr = new Territory<>(ImmutableSet.of(interRegions)); + return new ProductState<>(succStates, succTerr); + } + + public INestedWordAutomaton, ProductState> getProductAutomaton() { + return mProduct; + } + + public record ProductState(List> productStates, Territory> intersectionTerritory, + int hash) { + // Convenience constructor that computes the correct hash code. Always use this constructor. + public ProductState(final List> productStates, + final Territory> intersectionTerritory) { + this(productStates, intersectionTerritory, Objects.hash(productStates, intersectionTerritory)); + } + + @Override + public int hashCode() { + return hash; + } + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedEmpireToOwickiGries.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedEmpireToOwickiGries.java new file mode 100644 index 00000000000..fbc731d03c8 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedEmpireToOwickiGries.java @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryServices; +import de.uni_freiburg.informatik.ultimate.automata.AutomataOperationCanceledException; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INwaOutgoingLetterAndTransitionProvider; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.reachablestates.NestedWordAutomatonReachableStates; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.RunningTaskInfo; +import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.ToolchainCanceledException; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.DefaultIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.IIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.ProgramVarUtils; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.GhostUpdate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.IPossibleInterferences; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesAnnotation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesUtils; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed.DirectedEmpireProduct.ProductState; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtSortUtils; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils; +import de.uni_freiburg.informatik.ultimate.logic.SMTLIBConstants; +import de.uni_freiburg.informatik.ultimate.logic.Script; +import de.uni_freiburg.informatik.ultimate.logic.Term; +import de.uni_freiburg.informatik.ultimate.logic.TermVariable; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; + +public class DirectedEmpireToOwickiGries { + private static final String GHOST = "g"; + + private final IPetriNet mNet; + private final ManagedScript mManagedScript; + private final Script mScript; + + private final BasicPredicateFactory mFactory; + private final NestedWordAutomatonReachableStates, ProductState> mProductAutomaton; + private final IProgramVar mGhostVariable; + private final Map, Term> mStateTerms; + private final DirectedLegalFocus mLegalFocus; + private final OwickiGriesAnnotation, P, Marking

> mOwickiGriesAnnotation; + + public DirectedEmpireToOwickiGries(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final IPetriNet net, final IIcfgSymbolTable symbolTable, final Set procedures, + final INwaOutgoingLetterAndTransitionProvider, ProductState> empireProduct, + final DirectedLegalFocus legalFocus, + final IPossibleInterferences, P> possibleInterferences) { + mNet = net; + mManagedScript = mgdScript; + mScript = mManagedScript.getScript(); + mLegalFocus = legalFocus; + + mGhostVariable = createGhostVariable(); + final var newSymbolTable = new DefaultIcfgSymbolTable(symbolTable, procedures); + newSymbolTable.add(mGhostVariable); + mFactory = new BasicPredicateFactory(services, mManagedScript, newSymbolTable); + + final var logger = services.getLoggingService().getLogger(getClass()); + try { + logger.info("Exploring product empire..."); + mProductAutomaton = + new NestedWordAutomatonReachableStates<>(new AutomataLibraryServices(services), empireProduct); + logger.info("Product empire has %s", mProductAutomaton.sizeInformation()); + } catch (final AutomataOperationCanceledException aoce) { + throw new ToolchainCanceledException(aoce, + new RunningTaskInfo(getClass(), "collecting reachable states of empire automaton")); + } + mStateTerms = getStateTerms(); + final Map formulaMapping = getFormulaMap(); + final Map, GhostUpdate> assignmentMapping = getAssignmentMapping(); + final Map ghostInitAssignment = getGhostInitAssignment(); + + mOwickiGriesAnnotation = new OwickiGriesAnnotation<>( + OwickiGriesUtils.getSpecificationForPetriNet(mNet, mFactory), possibleInterferences, newSymbolTable, + formulaMapping, Set.of(mGhostVariable), ghostInitAssignment, assignmentMapping); + } + + private IProgramVar createGhostVariable() { + mManagedScript.lock(this); + try { + final TermVariable tVar = + mManagedScript.constructFreshTermVariable(GHOST, SmtSortUtils.getIntSort(mManagedScript)); + return ProgramVarUtils.constructGlobalProgramVarPair(tVar.getName(), + SmtSortUtils.getIntSort(mManagedScript), mManagedScript, this); + } finally { + mManagedScript.unlock(this); + } + } + + /** + * @return Map of P to the corresponding formula for each P depending on the legal focus + */ + private Map getFormulaMap() { + final Map formulaMap = new HashMap<>(); + for (final P place : mNet.getPlaces()) { + final var states = mProductAutomaton.getStates().stream() + .filter(s -> s.intersectionTerritory().containsPlace(place)).collect(Collectors.toSet()); + final var noError = noErrorPlaceInStates(place, states); + assert noErrorPlaceInStates(place, states) : "Accepting place in intersection of the states"; + final var disjuncts = new ArrayList(); + for (final ProductState state : states) { + final var stateList = state.productStates(); + final var conjuncts = new ArrayList(); + conjuncts.add(SmtUtils.binaryEquality(mScript, mGhostVariable.getTerm(), mStateTerms.get(state))); + final var focusedLaws = stateList.stream().filter(s -> mLegalFocus.isFocused(place, s)) + .map(s -> s.law().getFormula()).toList(); + conjuncts.addAll(focusedLaws); + final var conjunction = SmtUtils.and(mScript, conjuncts); + disjuncts.add(conjunction); + } + formulaMap.put(place, mFactory.newPredicate(SmtUtils.or(mScript, disjuncts))); + } + return formulaMap; + } + + private boolean noErrorPlaceInStates(final P place, final Set> states) { + return mNet.isAccepting(place) && !states.isEmpty() ? false : true; + } + + /** + * @return Map of transition to the corresponding formula for each transition in net + */ + private Map, GhostUpdate> getAssignmentMapping() { + final Map, GhostUpdate> assignmentMapping = new HashMap<>(); + for (final Transition transition : mNet.getTransitions()) { + final var assignment = getTransitionAssignment(transition); + if (assignment != null) { + assignmentMapping.put(transition, assignment); + } + } + return assignmentMapping; + } + + private GhostUpdate getTransitionAssignment(final Transition transition) { + final var states = mProductAutomaton.getStates(); + final var enablingStates = + states.stream().filter(s -> mProductAutomaton.internalSuccessors(s, transition).iterator().hasNext()) + .collect(Collectors.toSet()); + if (enablingStates.isEmpty()) { + return null; + } + + final var pairs = new HashSet, ProductState>>(); + for (final ProductState state : enablingStates) { + final var successors = mProductAutomaton.internalSuccessors(state, transition).iterator(); + if (successors.hasNext()) { + final var succ = successors.next(); + pairs.add(new Pair<>(state, succ.getSucc())); + } + assert !successors.hasNext() : "More than one successors in automaton for a transition"; + } + + final var noUpdates = pairs.stream().allMatch(s -> s.getFirst().equals(s.getSecond())); + if (noUpdates) { + return null; + } + + final Term term = getGhostUpdateTerm(new ArrayList<>(pairs)); + return new GhostUpdate(Map.of(mGhostVariable, term)); + } + + private Term getGhostUpdateTerm(final List, ProductState>> statePairs) { + Term updateTerm; + final var pair = statePairs.get(0); + final var pred = pair.getFirst(); + final var succ = pair.getSecond(); + final var equalsTerm = mScript.term(SMTLIBConstants.EQUALS, mGhostVariable.getTerm(), mStateTerms.get(pred)); + if (statePairs.size() == 1) { + updateTerm = mScript.term(SMTLIBConstants.ITE, equalsTerm, mStateTerms.get(succ), mGhostVariable.getTerm()); + } else { + updateTerm = mScript.term(SMTLIBConstants.ITE, equalsTerm, mStateTerms.get(succ), + getGhostUpdateTerm(statePairs.subList(1, statePairs.size()))); + } + return updateTerm; + } + + private Map, Term> getStateTerms() { + final var stateTerms = new LinkedHashMap, Term>(); + + var num = 1; + for (final ProductState state : mProductAutomaton.getStates()) { + stateTerms.put(state, mScript.numeral(String.valueOf(num))); + num++; + } + + return stateTerms; + } + + /** + * @return Map of ghost variable to its init assignment (which is the numeral of the init state) + */ + private Map getGhostInitAssignment() { + final HashMap initAssignments = new HashMap<>(); + final var initState = DataStructureUtils.getOneAndOnly(mProductAutomaton.getInitialStates(), "initial state"); + initAssignments.put(mGhostVariable, mStateTerms.get(initState)); + return initAssignments; + } + + public OwickiGriesAnnotation, P, Marking

> getAnnotation() { + return mOwickiGriesAnnotation; + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedLegalFocus.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedLegalFocus.java new file mode 100644 index 00000000000..67ed5f4299b --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/empire/directed/DirectedLegalFocus.java @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2025 Matthias Zumkeller + * Copyright (C) 2025 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed; + +import java.util.ArrayDeque; +import java.util.Comparator; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.nestedword.reachablestates.NestedWordAutomatonReachableStates; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.transitions.IncomingInternalTransition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.Region; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.empire.directed.DirectedEmpire.State; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.HashRelation; + +public class DirectedLegalFocus { + private final HashRelation, ConnectedRegion> mLegalFocus; + private final IPetriNet mNet; + + public DirectedLegalFocus(final NestedWordAutomatonReachableStates, State> empire, + final IPetriNet net) { + mNet = net; + mLegalFocus = computeLegalFocus(empire); + } + + public DirectedLegalFocus(final Set, State>> empires, + final IPetriNet net) { + mNet = net; + mLegalFocus = computeLegalFocus(empires); + } + + private HashRelation, ConnectedRegion> + computeLegalFocus(final Set, State>> empires) { + final var focus = new HashRelation, ConnectedRegion>(); + for (final NestedWordAutomatonReachableStates, State> empire : empires) { + final var empireFocus = computeLegalFocus(empire); + focus.addAll(empireFocus); + } + return focus; + } + + private HashRelation, ConnectedRegion> + computeLegalFocus(final NestedWordAutomatonReachableStates, State> empire) { + final var finalStates = empire.getFinalStates().stream().collect(Collectors.toSet()); + final var queue = new ArrayDeque>(); + final var focus = computeFinalStateFocus(empire, finalStates); + for (final State state : finalStates) { + queue.offer(state); + } + while (!queue.isEmpty()) { + final var state = queue.poll(); + final var currentFocus = focus.getImage(state); + if (currentFocus.isEmpty()) { + continue; + } + final var predecessors = empire.internalPredecessors(state); + for (final IncomingInternalTransition, State> incomingInternalTransition : predecessors) { + final var predecessor = incomingInternalTransition.getPred(); + final var transition = incomingInternalTransition.getLetter(); + final var focusedRegions = getFocusedRegions(predecessor, currentFocus, transition); + final var added = focus.addAllPairs(predecessor, focusedRegions); + if (added) { + queue.offer(predecessor); + } + } + } + return focus; + } + + private Set> getFocusedRegions(final State predecessor, + final Set> successorFocus, final Transition transition) { + final var territory = predecessor.territory(); + final var bystanders = territory.getBystanders(transition); + final var focusedBystanders = DataStructureUtils.intersection(bystanders, successorFocus); + if (successorFocus.size() == focusedBystanders.size()) { + return focusedBystanders; + } + + final var mayRegions = territory.getPlacesRegions(transition.getPredecessors()); + assert !mayRegions.isEmpty() : "territory enables transition but has no predecessor regions"; + + // TODO Check if any regions in mayRegions are already focused; if so, choose one of those. + final var minRegion = mayRegions.stream().min(Comparator.comparingInt(Region::size)); + assert minRegion.isPresent() : "could not find best predecessor region"; + + final var focused = new HashSet<>(focusedBystanders); + focused.add(minRegion.orElseThrow()); + return focused; + } + + private HashRelation, ConnectedRegion> computeFinalStateFocus( + final NestedWordAutomatonReachableStates, State> empire, + final Set> finalStates) { + final var focus = new HashRelation, ConnectedRegion>(); + for (final State state : finalStates) { + final var territory = state.territory(); + final var enabledTransitions = territory.getEnabledTransitions(mNet); + final var successorlessTransitions = enabledTransitions + .filter(t -> !empire.internalSuccessors(state, t).iterator().hasNext()).collect(Collectors.toSet()); + for (final Transition transition : successorlessTransitions) { + final var mayRegions = territory.getPlacesRegions(transition.getPredecessors()); + assert !mayRegions.isEmpty() : "territory enables transition but has no predecessor regions"; + + // TODO Check if any regions in mayRegions are already focused; if so, choose one of those. + final var minRegion = mayRegions.stream().min(Comparator.comparingInt(Region::size)); + assert minRegion.isPresent() : "could not find best predecessor region"; + + focus.addPair(state, minRegion.orElseThrow()); + } + } + return focus; + } + + public Set> getLegalFocus(final State state) { + return mLegalFocus.getImage(state); + } + + public boolean isFocused(final P place, final State state) { + final var legalFocus = getLegalFocus(state); + return legalFocus.stream().anyMatch(r -> r.contains(place)); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/naive/NaiveOwickiGriesConstruction.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/naive/NaiveOwickiGriesConstruction.java new file mode 100644 index 00000000000..cfc97dfd1b3 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/naive/NaiveOwickiGriesConstruction.java @@ -0,0 +1,345 @@ +/* + * Copyright (C) 2020 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.naive; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.CfgSmtToolkit; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.DefaultIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.IIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.ProgramVarUtils; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.IFloydHoareAnnotation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.GhostUpdate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.IPossibleInterferences; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesAnnotation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesUtils; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtSortUtils; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils; +import de.uni_freiburg.informatik.ultimate.logic.SMTLIBConstants; +import de.uni_freiburg.informatik.ultimate.logic.Script; +import de.uni_freiburg.informatik.ultimate.logic.Term; +import de.uni_freiburg.informatik.ultimate.logic.TermVariable; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.HittingSet; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.HashRelation; + +/** + * Constructs an Owicki-Gries annotation for a Petri program from a Floyd/Hoare annotation of the reachability graph of + * the Petri net, by introducing a boolean ghost variable for each place in the Petri net. + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * @author Miriam Lagunes (miriam.lagunes@students.uni-freiburg.de) + * + * @param

+ * The type of places in the Petri program + * @param + * The type of statements in the Petri program + */ +public class NaiveOwickiGriesConstruction { + private final ManagedScript mManagedScript; + private final Script mScript; + private final BasicPredicateFactory mFactory; + + private final IPetriNet mNet; + private final Collection> mReachableMarkings; + private final IFloydHoareAnnotation> mFloydHoareAnnotation; + private final DefaultIcfgSymbolTable mSymbolTable; + + private final Set

mHittingSet; + private final Map mGhostVariables; + private final OwickiGriesAnnotation, P, Marking

> mAnnotation; + + public NaiveOwickiGriesConstruction(final IUltimateServiceProvider services, final CfgSmtToolkit csToolkit, + final IPetriNet net, final Collection> reachableMarkings, + final IFloydHoareAnnotation> floydHoare, final boolean useHittingSets) { + this(services, csToolkit.getManagedScript(), csToolkit.getSymbolTable(), csToolkit.getProcedures(), net, + reachableMarkings, floydHoare, useHittingSets); + } + + public NaiveOwickiGriesConstruction(final IUltimateServiceProvider services, final ManagedScript mgdScript, + final IIcfgSymbolTable symbolTable, final Set procedures, final IPetriNet net, + final Collection> reachableMarkings, final IFloydHoareAnnotation> floydHoare, + final boolean useHittingSets) { + mManagedScript = mgdScript; + mScript = mManagedScript.getScript(); + + mNet = net; + mReachableMarkings = reachableMarkings; + mFloydHoareAnnotation = floydHoare; + mSymbolTable = new DefaultIcfgSymbolTable(symbolTable, procedures); + + // TODO let callers pass predicate factory + mFactory = new BasicPredicateFactory(services, mManagedScript, mSymbolTable); + + mGhostVariables = getGhostVariables(); + mHittingSet = useHittingSets ? getHittingSet() : null; + final Map formulaMapping = getFormulaMapping(); + final Map, GhostUpdate> assignmentMapping = getAssignmentMapping(); + final Map ghostInitAssignment = getGhostInitAssignment(); + + mAnnotation = new OwickiGriesAnnotation<>(OwickiGriesUtils.getSpecificationForPetriNet(net, mFactory), + getPossibleInterferences(), mSymbolTable, formulaMapping, new HashSet<>(mGhostVariables.values()), + ghostInitAssignment, assignmentMapping); + } + + /** + * Constructs the mapping from places to formulas. A place is mapped to a disjunction of marking predicates, where + * each marking predicate is a conjunction of ghost variables and a Floyd/Hoare predicate. + * + * @return a map with a predicate for each place in the Petri net + */ + private Map getFormulaMapping() { + final Map mapping = new HashMap<>(); + for (final P place : mNet.getPlaces()) { + final Map> disjunctsByLaw = + mReachableMarkings.stream().filter(m -> m.contains(place)) + // As an optimization of the formula structure, we group markings with the same law. + .collect(Collectors.groupingBy(mFloydHoareAnnotation::getAnnotation, + Collectors.mapping(this::getGhostFormulaForMarking, Collectors.toList()))); + + final var disjuncts = disjunctsByLaw.entrySet().stream() + .map(e -> SmtUtils.and(mScript, e.getKey().getFormula(), SmtUtils.or(mScript, e.getValue()))) + .toList(); + + mapping.put(place, mFactory.newPredicate(SmtUtils.or(mScript, disjuncts))); + } + + return mapping; + } + + private Term getGhostFormulaForMarking(final Marking

marking) { + final Set terms = new HashSet<>(); + Set

posPlaces = marking.stream().collect(Collectors.toSet()); + if (mHittingSet != null) { + posPlaces = DataStructureUtils.intersection(mHittingSet, posPlaces); + } + for (final P otherPlace : posPlaces) { + final Term ghost = mGhostVariables.get(otherPlace).getTerm(); + terms.add(ghost); + } + if (mHittingSet == null) { + terms.addAll(getAllNotMarking(marking)); + } else { + terms.addAll(getHitNotMarking(marking)); + } + return SmtUtils.and(mScript, terms); + } + + /** + * + * @param marking + * @return Formula MethodA:Predicate with GhostVariables of all other places not in marking + */ + private Set getAllNotMarking(final Marking

marking) { + final Set

markPlaces = marking.stream().collect(Collectors.toSet()); + final Set

notMarking = DataStructureUtils.difference(new HashSet<>(mNet.getPlaces()), markPlaces); + final Set predicates = new HashSet<>(); + for (final P place : notMarking) { + final Term ghost = mGhostVariables.get(place).getTerm(); + predicates.add(SmtUtils.not(mScript, ghost)); + } + return predicates; + } + + /** + * + * @param marking + * @return Formula MethodB:Predicate with GhostVariables of hitting set of other places not in marking + */ + private Set getHitNotMarking(final Marking

marking) { + // TODO: remove places from hittingSet than are in current marking. + final Set

notMarking = + DataStructureUtils.difference(mHittingSet, marking.stream().collect(Collectors.toSet())); + final Set predicates = new HashSet<>(); + for (final P place : notMarking) { + final Term ghost = mGhostVariables.get(place).getTerm(); + predicates.add(SmtUtils.not(mScript, ghost)); + } + return predicates; + } + + private Set

getHittingSet() { + final Set> reachableMarkings = new HashSet<>(); + for (final Marking

mark : mReachableMarkings) { + reachableMarkings.add(mark.stream().collect(Collectors.toSet())); + } + final HittingSet

hitSet = new HittingSet<>(reachableMarkings); + return hitSet.getSymmHittingSet(); + } + + /** + * + * @param marking + * @return Formula MethodA: GhostVariables if marking is subset of other marking + */ + private Set getSubsetMarking(final Marking

marking) { + final Set

markPlaces = marking.stream().collect(Collectors.toSet()); + final Set

notInMarking = new HashSet<>(); + for (final Marking

otherMarking : mReachableMarkings) { + notInMarking.addAll(getSupPlaces(otherMarking, markPlaces)); + } + final Set predicates = new HashSet<>(); + for (final P place : notInMarking) { + final Term ghost = mGhostVariables.get(place).getTerm(); + predicates.add(SmtUtils.not(mScript, ghost)); + } + return predicates; + } + + private Set

getSupPlaces(final Marking

otherMarking, final Set

markPlaces) { + Set

subPlaces = new HashSet<>(); + final Set

otherPlaces = otherMarking.stream().collect(Collectors.toSet()); + if (otherPlaces.containsAll(markPlaces)) { + subPlaces = DataStructureUtils.difference(otherPlaces, markPlaces); + } + return subPlaces; + } + + /** + * @return map of places to ghost variables + */ + private Map getGhostVariables() { + final Map ghostVars = new HashMap<>(); + int i = 0; + final Collection

places = mNet.getPlaces(); + mManagedScript.lock(this); + try { + for (final P place : places) { + // TODO (Dominik 2021-01-27) Name ghost variables by place for easier debugging + final TermVariable tVar = + mManagedScript.constructFreshTermVariable("np" + i, SmtSortUtils.getBoolSort(mManagedScript)); + final IProgramVar pVar = ProgramVarUtils.constructGlobalProgramVarPair(tVar.getName(), + SmtSortUtils.getBoolSort(mManagedScript), mManagedScript, this); + mSymbolTable.add(pVar); + ghostVars.put(place, pVar); + i++; + } + return ghostVars; + } finally { + mManagedScript.unlock(this); + } + } + + /** + * @return initial value assignment of all ghost variables. + */ + private Map getGhostInitAssignment() { + final HashMap initAssignments = new HashMap<>(); + for (final P place : mNet.getInitialPlaces()) { + initAssignments.put(mGhostVariables.get(place), mScript.term("true")); + } + final Set notInitGhostVariables = + DataStructureUtils.difference(new HashSet<>(mGhostVariables.values()), initAssignments.keySet()); + for (final IProgramVar variable : notInitGhostVariables) { + initAssignments.put(variable, mScript.term("false")); + } + return initAssignments; + } + + /** + * + * @return Map of Places' Ghost Variables assignments to Transitions + * + */ + private Map, GhostUpdate> getAssignmentMapping() { + final Map, GhostUpdate> assignmentMapping = new HashMap<>(); + for (final Transition transition : mNet.getTransitions()) { + final var assignment = getTransitionAssignment(transition); + if (assignment != null) { + assignmentMapping.put(transition, assignment); + } + } + return assignmentMapping; + } + + /** + * + * @param transition + * @return TransFormula of sequential compositions of GhostVariables assignments. GhostVariables of Predecessors + * Places are assign to false, GhostVariables of Successors Places are assign to true. + */ + private GhostUpdate getTransitionAssignment(final Transition transition) { + final Map assignments = new HashMap<>(); + + final Set

predecessors = transition.getPredecessors(); + final Set

successors = transition.getSuccessors(); + + final var falseTerm = mScript.term(SMTLIBConstants.FALSE); + for (final P place : predecessors) { + if ((mHittingSet == null || mHittingSet.contains(place)) && !successors.contains(place)) { + assignments.put(mGhostVariables.get(place), falseTerm); + } + } + + final var trueTerm = mScript.term(SMTLIBConstants.TRUE); + for (final P place : successors) { + if ((mHittingSet == null || mHittingSet.contains(place)) && !predecessors.contains(place)) { + assignments.put(mGhostVariables.get(place), trueTerm); + } + } + + if (assignments.isEmpty()) { + return null; + } + return new GhostUpdate(assignments); + } + + public OwickiGriesAnnotation, P, Marking

> getResult() { + return mAnnotation; + } + + private IPossibleInterferences, P> getPossibleInterferences() { + final HashRelation> relation = new HashRelation<>(); + for (final Transition transition : mNet.getTransitions()) { + final Set

predecessors = transition.getPredecessors(); + final Set> enabledMarkings = mReachableMarkings.stream() + .filter(marking -> marking.containsAll(predecessors)).collect(Collectors.toSet()); + for (final Marking

marking : enabledMarkings) { + for (final P place : marking) { + // places that are not predecessors of transition + if (!predecessors.contains(place)) { + relation.addPair(place, transition); + } + } + } + } + return IPossibleInterferences.fromRelation(relation); + } +} diff --git a/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/naive/PetriFloydHoare.java b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/naive/PetriFloydHoare.java new file mode 100644 index 00000000000..bc02e59dc73 --- /dev/null +++ b/trunk/source/Library-Proofs/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/naive/PetriFloydHoare.java @@ -0,0 +1,228 @@ +/* + * Copyright (C) 2020 University of Freiburg + * + * This file is part of the ULTIMATE Proofs Library. + * + * The ULTIMATE Proofs Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Proofs Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Proofs Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Proofs Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Proofs Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.naive; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNetSuccessorProvider; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetNot1SafeException; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicateCoverageChecker; +import de.uni_freiburg.informatik.ultimate.lib.proofs.PrePostConditionSpecification; +import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.FloydHoareMapping; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; + +/** + * Constructs a Floyd-Hoare annotation of a Petri program from the final refined Petri net. + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * @author Miriam Lagunes (miriam.lagunes@students.uni-freiburg.de) + * + * @param + * The type of statements in the Petri program + * @param

+ * The type of places in the Petri program + */ +public class PetriFloydHoare { + private final BasicPredicateFactory mFactory; + private final Function mAssertionPlaceAnnotation; + + // TODO should only be a single relation + private final List mCoverageRelations; + + private final boolean mCoveringSimplification; + + private final IPetriNet mOriginalProgram; + private final IPetriNetSuccessorProvider mRefinedNet; + + private final Set

mOriginalPlaces; + + private final Map, IPredicate> mMarkingMap; + private final FloydHoareMapping> mFloydHoareAnnotation; + + public PetriFloydHoare(final BasicPredicateFactory predicateFactory, final IPetriNet program, + final IPetriNetSuccessorProvider refinedNet, final Function assertionPlaceAnnotation, + final List coverageRelations, final boolean coveringSimplification) + throws PetriNetNot1SafeException { + mFactory = predicateFactory; + mOriginalProgram = program; + mRefinedNet = refinedNet; + mAssertionPlaceAnnotation = assertionPlaceAnnotation; + mCoverageRelations = coverageRelations; + mCoveringSimplification = coveringSimplification; + + mOriginalPlaces = Collections.unmodifiableSet(mOriginalProgram.getPlaces()); + + // compute the map that represents the Floyd-Hoare annotation + final var refinedReach = computeReachableMarkings(mRefinedNet); + final var originalToRefined = projectReachableMarkings(refinedReach); + mMarkingMap = getMaximalAnnotation(originalToRefined); + + // wrap the map in a FloydHoareMapping, together with the proven specification + final var falsePred = mFactory.or(); + final var initialMarking = Marking.initial(program); + final var spec = new PrePostConditionSpecification<>(Map.of(initialMarking, mFactory.and()), + program::isAccepting, falsePred); + mFloydHoareAnnotation = new FloydHoareMapping<>(spec, mMarkingMap, falsePred); + } + + public FloydHoareMapping> getResult() { + return mFloydHoareAnnotation; + } + + public Collection> getReachableMarkings() { + return Collections.unmodifiableCollection(mMarkingMap.keySet()); + } + + private Map, List>> projectReachableMarkings(final Collection> refinedReach) { + final var result = new HashMap, List>>(); + for (final var refinedMark : refinedReach) { + final var original = projectToOriginal(refinedMark); + result.computeIfAbsent(original, x -> new ArrayList<>()).add(refinedMark); + } + return result; + } + + // a depth-first search of the reachability graph + // TODO move this utility method to a more suitable place + public static Collection> computeReachableMarkings(final IPetriNetSuccessorProvider net) + throws PetriNetNot1SafeException { + final var result = new LinkedHashSet>(); + final var worklist = new ArrayDeque>(); + + final var initialMarking = Marking.initial(net); + worklist.push(initialMarking); + + while (!worklist.isEmpty()) { + final var marking = worklist.pop(); + if (!result.add(marking)) { + continue; + } + + final var places = marking.getPlaces(); + for (final var transitionProvider : net.getSuccessorTransitionProviders(places, places)) { + for (final var transition : transitionProvider.getTransitions()) { + assert marking.isTransitionEnabled(transition); + final Marking

successor = marking.fireTransition(transition); + worklist.add(successor); + } + } + } + + return result; + } + + private Map, IPredicate> + getMaximalAnnotation(final Map, List>> originalToRefined) { + return originalToRefined.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, e -> getMarkingAssertion(e.getValue()))); + } + + private IPredicate getMarkingAssertion(final List> refinedMarkings) { + final Set disjuncts = new HashSet<>(); + for (final Marking

refinedMarking : refinedMarkings) { + disjuncts.add(mFactory.and(getAssertions(refinedMarking))); + } + return mFactory.or(disjuncts); + } + + private Marking

projectToOriginal(final Marking

refinedMarking) { + return new Marking<>( + refinedMarking.stream().filter(mOriginalPlaces::contains).collect(ImmutableSet.collector())); + } + + private Set getAssertions(final Marking

refinedMarking) { + final var assertPlaces = DataStructureUtils.difference(refinedMarking.getPlaces(), mOriginalPlaces); + final var assertions = assertPlaces.stream().map(mAssertionPlaceAnnotation).collect(Collectors.toSet()); + if (mCoveringSimplification) { + return simplifyAssertions(assertions); + } + return assertions; + } + + // ------------------------ + // assertion simplification + // ------------------------ + + private Set simplifyAssertions(final Set assertions) { + Set simpleAssertions = assertions; + // Check if equiv to false, set all to false; + for (final IPredicate cond : assertions) { + if (!thereIsStronger(cond, simpleAssertions)) { + final Set weakerConditions = getWeakerConditions(cond, assertions); + simpleAssertions = cleanWeakConditions(simpleAssertions, weakerConditions); + } else { + simpleAssertions = DataStructureUtils.difference(simpleAssertions, Collections.singleton(cond)); + } + } + return simpleAssertions; + } + + private Set getWeakerConditions(final IPredicate condition, Set assertConditions) { + final Set condImplications = new HashSet<>(); + assertConditions = DataStructureUtils.difference(assertConditions, Collections.singleton(condition)); + for (final var coverage : mCoverageRelations) { + condImplications.addAll( + DataStructureUtils.intersection(assertConditions, coverage.getCoveringPredicates(condition))); + } + return condImplications; + } + + private static Set cleanWeakConditions(Set assertConditions, + final Set condImplications) { + if (!condImplications.isEmpty()) { + assertConditions = DataStructureUtils.difference(assertConditions, condImplications); + } + return assertConditions; + } + + private boolean thereIsStronger(final IPredicate condition, final Set assertConditions) { + final Set assertPredicates = + DataStructureUtils.difference(assertConditions, Collections.singleton(condition)); + for (final var coverage : mCoverageRelations) { + final Set coveredPlaces = coverage.getCoveredPredicates(condition); + if (DataStructureUtils.haveNonEmptyIntersection(coveredPlaces, assertPredicates)) { + return true; + } + } + return false; + } +} diff --git a/trunk/source/Library-ProofsTest/.classpath b/trunk/source/Library-ProofsTest/.classpath new file mode 100644 index 00000000000..375961e4d61 --- /dev/null +++ b/trunk/source/Library-ProofsTest/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/trunk/source/Library-ProofsTest/.project b/trunk/source/Library-ProofsTest/.project new file mode 100644 index 00000000000..f7823d17ee9 --- /dev/null +++ b/trunk/source/Library-ProofsTest/.project @@ -0,0 +1,28 @@ + + + Library-ProofsTest + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/trunk/source/Library-ProofsTest/LicenseTemplate.md b/trunk/source/Library-ProofsTest/LicenseTemplate.md new file mode 100644 index 00000000000..4ab47fd659d --- /dev/null +++ b/trunk/source/Library-ProofsTest/LicenseTemplate.md @@ -0,0 +1,23 @@ +Copyright (C) @{daterange} @{author:r} + +This file is part of the ULTIMATE ProofsTests Library. + +The ULTIMATE ProofsTests Library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +The ULTIMATE ProofsTests Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with the ULTIMATE ProofsTests Library. If not, see . + +Additional permission under GNU GPL version 3 section 7: +If you modify the ULTIMATE ProofsTests Library, or any covered work, by linking +or combining it with Eclipse RCP (or a modified version of Eclipse RCP), +containing parts covered by the terms of the Eclipse Public License, the +licensors of the ULTIMATE ProofsTests Library grant you additional permission +to convey the resulting work. diff --git a/trunk/source/Library-ProofsTest/META-INF/MANIFEST.MF b/trunk/source/Library-ProofsTest/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..17cd4e83619 --- /dev/null +++ b/trunk/source/Library-ProofsTest/META-INF/MANIFEST.MF @@ -0,0 +1,21 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Library-ProofsTest +Bundle-SymbolicName: de.uni_freiburg.informatik.ultimate.lib.proofs.test +Bundle-Vendor: Ultimate Program Analysis Team +Bundle-Version: 0.3.1 +Fragment-Host: de.uni_freiburg.informatik.ultimate.lib.proofs +Bundle-RequiredExecutionEnvironment: JavaSE-21 +Require-Bundle: de.uni_freiburg.informatik.ultimate.lib.core, + de.uni_freiburg.informatik.ultimate.lib.test, + org.junit, + de.uni_freiburg.informatik.ultimate.smtsolver.external, + de.uni_freiburg.informatik.ultimate.lib.smtlib, + de.uni_freiburg.informatik.ultimate.plugins.source.automatascriptparser, + de.uni_freiburg.informatik.ultimate.plugins.generator.automatascriptinterpreter +Import-Package: junit.framework, + org.junit, + org.junit.runner, + org.junit.runner.notification, + org.junit.runners +Automatic-Module-Name: de.uni.freiburg.informatik.ultimate.lib.proofs.test diff --git a/trunk/source/Library-ProofsTest/build.properties b/trunk/source/Library-ProofsTest/build.properties new file mode 100644 index 00000000000..41eb6ade2b4 --- /dev/null +++ b/trunk/source/Library-ProofsTest/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/trunk/source/Library-ProofsTest/pom.xml b/trunk/source/Library-ProofsTest/pom.xml new file mode 100644 index 00000000000..7db357a0fce --- /dev/null +++ b/trunk/source/Library-ProofsTest/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + de.uni_freiburg.informatik.ultimate.lib.proofs.test + 0.3.1 + eclipse-test-plugin + + + mavenparent + de.uni_freiburg.informatik.ultimate + 0.3.1 + ../BA_MavenParentUltimate/pom.xml + + diff --git a/trunk/source/Library-ProofsTest/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OGProofProducerTest.java b/trunk/source/Library-ProofsTest/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OGProofProducerTest.java new file mode 100644 index 00000000000..2262bfc3282 --- /dev/null +++ b/trunk/source/Library-ProofsTest/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OGProofProducerTest.java @@ -0,0 +1,223 @@ +/* + * Copyright (C) 2024 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2024 University of Freiburg + * + * This file is part of the ULTIMATE ProofsTest Library. + * + * The ULTIMATE ProofsTest Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE ProofsTest Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE ProofsTest Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE ProofsTest Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE ProofsTest Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; + +import org.junit.runner.RunWith; + +import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryException; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNetSuccessorProvider; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.BoundedPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.CfgSmtToolkit; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.EmpireOwickiGries.FocusComputation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesSettings.OwickiGriesComputation; +import de.uni_freiburg.informatik.ultimate.plugins.source.automatascriptparser.AST.AutomataTestFileAST; +import de.uni_freiburg.informatik.ultimate.test.junitextension.testfactory.FactoryTestRunner; +import de.uni_freiburg.informatik.ultimate.util.VMUtils; +import de.uni_freiburg.informatik.ultimate.util.statistics.TimeTracker; + +@RunWith(FactoryTestRunner.class) +public abstract class OGProofProducerTest extends OwickiGriesTestSuite { + // Proof printing is disabled for benchmarking purposes, as in particular the naive construction often yields proofs + // that exceed the maximum supported string length, and printing them leads to OOMs. + // Also, it leads to gigantic log files. + private static final boolean PRINT_FULL_PROOF = false; + + // Set this Java system property to 'true' in order to validate Owicki-Gries annotations after computation + // (adding -DOwickiGries.Validate=true to the command line, or using the JAVA_TOOL_OPTIONS environment variable). + // Annotations are always validated if asserts are enabled (-ea), so this only has an effect if asserts are off. + private static final String PROPERTY_VALIDATE_OG = "OwickiGries.Validate"; + + @Override + protected void runTest(final Path path, final AutomataTestFileAST ast, + final BoundedPetriNet program, + final IPetriNetSuccessorProvider refinedPetriNet, + final IPossibleInterferences, IPredicate> possibleInterferences) + throws AutomataLibraryException, IOException { + mLogger.info("Constructing Owicki-Gries proof for Petri program that %s.", program.sizeInformation()); + + final var overallTimeTracker = new TimeTracker(); + overallTimeTracker.start(); + + final var producer = createProofProducer(program); + + // feed the required information to the producer (simulate the CEGAR loop) + producer.initialize(possibleInterferences); + for (int i = 0; i < mProofs.size(); ++i) { + producer.refine(mUnifiers.get(i), mProofs.get(i), mBacktranslations.get(i)); + } + producer.finalize(refinedPetriNet); + + // let producer compute the proof + assert producer.isReadyToComputeProof(); + final var annotation = producer.getOrComputeProof(); + + overallTimeTracker.stop(); + mLogger.info("Complete Proof Computation Time: %dms", overallTimeTracker.elapsedTime(TimeUnit.MILLISECONDS)); + + validateAnnotation(program, annotation); + + mLogger.info("Computed Owicki-Gries annotation with %d ghost variables, %d ghost updates, and overall size %d", + annotation.getGhostVariables().size(), annotation.getAssignmentMapping().size(), annotation.size()); + if (PRINT_FULL_PROOF) { + mLogger.info(annotation); + } + + // print proof producer statistics + mLogger.info(producer.getStatistics()); + + // TODO temporary; integrate this into the regular statistics + OwickiGriesStatistics.printModularityData(mLogger, annotation); + } + + protected CfgSmtToolkit createCsToolkit() { + return new CfgSmtToolkit(computeModifiableGlobals(), mMgdScript, mSymbolTable, Set.of(SimpleAction.PROCEDURE), + Map.of(), Map.of(), null, null, null); + } + + protected abstract IPetriNetProofProducer + createProofProducer(final IPetriNet program); + + protected abstract OwickiGriesSettings getSettings(); + + private void validateAnnotation(final BoundedPetriNet program, + final OwickiGriesAnnotation, IPredicate, Marking> annotation) { + assert annotation != null; + if (!validationEnabled()) { + return; + } + + mLogger.info("Checking validity of Owicki-Gries annotation..."); + final var validationTimeTracker = new TimeTracker(); + validationTimeTracker.start(); + + try { + final var check = new PetriOwickiGriesValidityCheck<>(mServices, mMgdScript, program, + computeModifiableGlobals(), annotation); + switch (check.isValid()) { + case INVALID -> throw new AssertionError("Owicki-Gries annotation is invalid."); + case UNKNOWN -> mLogger.warn("Validity check said UNKNOWN"); + case VALID -> mLogger.info("Validity check succeeded."); + case NOT_CHECKED -> throw new IllegalStateException("Validity check said NOT_CHECKED"); + } + } finally { + validationTimeTracker.stop(); + mLogger.info("Owicki-Gries Validation Time: %dms", + validationTimeTracker.elapsedTime(TimeUnit.MILLISECONDS)); + } + } + + private static boolean validationEnabled() { + if (VMUtils.areAssertionsEnabled()) { + // if assertions are enabled, the producers already carry out a validity check + return false; + } + + final String validation = System.getProperty(PROPERTY_VALIDATE_OG, "false"); + assert validation != null; + return Boolean.parseBoolean(validation); + } + + public static final class NaiveOG extends OGProofProducerTest { + @Override + protected IPetriNetProofProducer + createProofProducer(final IPetriNet program) { + return new NaiveOwickiGries<>(mServices, mPredicateFactory, createCsToolkit(), program, getSettings()) + .createProofProducer(Function.identity()); + } + + @Override + protected OwickiGriesSettings getSettings() { + return new OwickiGriesSettings(OwickiGriesComputation.NAIVE, false, false); + } + } + + public static final class EmpireAutomatonOG extends OGProofProducerTest { + @Override + protected IPetriNetProofProducer + createProofProducer(final IPetriNet program) { + return new EmpireOwickiGries<>(mServices, program, createCsToolkit(), mPredicateFactory, + FocusComputation.UNFOCUSED); + } + + @Override + protected OwickiGriesSettings getSettings() { + return new OwickiGriesSettings(OwickiGriesComputation.EMPIRE, false, false); + } + } + + public static final class GlobalLegalFocusOG extends OGProofProducerTest { + @Override + protected IPetriNetProofProducer + createProofProducer(final IPetriNet program) { + return new EmpireOwickiGries<>(mServices, program, createCsToolkit(), mPredicateFactory, + FocusComputation.GLOBAL); + } + + @Override + protected OwickiGriesSettings getSettings() { + return new OwickiGriesSettings(OwickiGriesComputation.LEGAL_FOCUS, false, false); + } + } + + public static final class ModularLegalFocusOG extends OGProofProducerTest { + @Override + protected IPetriNetProofProducer + createProofProducer(final IPetriNet program) { + return new EmpireOwickiGries<>(mServices, program, createCsToolkit(), mPredicateFactory, + FocusComputation.MODULAR); + } + + @Override + protected OwickiGriesSettings getSettings() { + return new OwickiGriesSettings(OwickiGriesComputation.LEGAL_FOCUS, false, false); + } + } + + public static final class DirectedLegalFocusOG extends OGProofProducerTest { + @Override + protected IPetriNetProofProducer + createProofProducer(final IPetriNet program) { + return new DirectedLegalFocusOwickiGries<>(mServices, program, createCsToolkit()); + } + + @Override + protected OwickiGriesSettings getSettings() { + return new OwickiGriesSettings(OwickiGriesComputation.DIR_LEGAL_FOCUS, false, false); + } + } +} diff --git a/trunk/source/Library-ProofsTest/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesTestSuite.java b/trunk/source/Library-ProofsTest/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesTestSuite.java new file mode 100644 index 00000000000..5d5f193148a --- /dev/null +++ b/trunk/source/Library-ProofsTest/src/de/uni_freiburg/informatik/ultimate/lib/proofs/owickigries/OwickiGriesTestSuite.java @@ -0,0 +1,659 @@ +/* + * Copyright (C) 2023 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2023 University of Freiburg + * + * This file is part of the ULTIMATE ProofsTest Library. + * + * The ULTIMATE ProofsTest Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE ProofsTest Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE ProofsTest Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE ProofsTest Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE ProofsTest Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.Before; + +import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryException; +import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryServices; +import de.uni_freiburg.informatik.ultimate.automata.AutomataOperationCanceledException; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INestedWordAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.NestedWordAutomataUtils; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.NestedWordAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.VpAlphabet; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.operations.IsDeterministic; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.operations.TotalizeNwa; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNetSuccessorProvider; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetNot1SafeException; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.BoundedPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.operations.DifferencePairwiseOnDemand; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.operations.DifferencePetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.unfolding.FinitePrefix; +import de.uni_freiburg.informatik.ultimate.core.model.results.IResultWithSeverity.Severity; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; +import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger.LogLevel; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.DefaultIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.IIcfgSymbolTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.ModifiableGlobalsTable; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IInternalAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.transitions.TransFormulaBuilder; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.transitions.UnmodifiableTransFormula; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.transitions.UnmodifiableTransFormula.Infeasibility; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramNonOldVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.ProgramVarUtils; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.hoaretriple.IHoareTripleChecker; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.hoaretriple.MonolithicHoareTripleChecker; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.SmtParserUtils; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicateUnifier; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateUnifier; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.scripttransfer.HistoryRecordingScript; +import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.NwaFloydHoareValidityCheck; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils.SimplificationTechnique; +import de.uni_freiburg.informatik.ultimate.logic.Logics; +import de.uni_freiburg.informatik.ultimate.logic.QuantifiedFormula; +import de.uni_freiburg.informatik.ultimate.logic.Term; +import de.uni_freiburg.informatik.ultimate.logic.TermVariable; +import de.uni_freiburg.informatik.ultimate.plugins.generator.automatascriptinterpreter.AutomataDefinitionInterpreter; +import de.uni_freiburg.informatik.ultimate.plugins.generator.automatascriptinterpreter.IMessagePrinter; +import de.uni_freiburg.informatik.ultimate.plugins.generator.automatascriptinterpreter.TestFileInterpreter.LoggerSeverity; +import de.uni_freiburg.informatik.ultimate.plugins.source.automatascriptparser.AtsASTNode; +import de.uni_freiburg.informatik.ultimate.plugins.source.automatascriptparser.AutomataScriptParserRun; +import de.uni_freiburg.informatik.ultimate.plugins.source.automatascriptparser.AST.AutomataTestFileAST; +import de.uni_freiburg.informatik.ultimate.plugins.source.automatascriptparser.AST.NestedwordAutomatonAST; +import de.uni_freiburg.informatik.ultimate.plugins.source.automatascriptparser.AST.PetriNetAutomatonAST; +import de.uni_freiburg.informatik.ultimate.smtsolver.external.TermParseUtils; +import de.uni_freiburg.informatik.ultimate.test.junitextension.testfactory.FactoryTestMethod; +import de.uni_freiburg.informatik.ultimate.test.junitextension.testfactory.TestFactory; +import de.uni_freiburg.informatik.ultimate.test.mocks.UltimateMocks; +import de.uni_freiburg.informatik.ultimate.test.util.TestUtil; +import de.uni_freiburg.informatik.ultimate.util.CoreUtil; +import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; +import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.HashRelation; +import de.uni_freiburg.informatik.ultimate.util.statistics.MinMaxMed; + +/** + * Test suite for computation of Owicki-Gries annotations for Petri programs. + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * + */ +public abstract class OwickiGriesTestSuite implements IMessagePrinter { + private static final String SOLVER_COMMAND = "z3 SMTLIB2_COMPLIANT=true -t:1000 -memory:2024 -smt2 -in"; + private static final LogLevel LOG_LEVEL = LogLevel.INFO; + private static final long TIMEOUT_MS = 30_000L; + + // Set this Java system property to override the timeout hardcoded above, or even disable it (by setting it to -1) + // (e.g. adding -DOwickiGries.Timeout=-1 to the command line, or using the JAVA_TOOL_OPTIONS environment variable). + private static final String PROPERTY_TIMEOUT = "OwickiGries.Timeout"; + + protected IUltimateServiceProvider mServices; + protected AutomataLibraryServices mAutomataServices; + protected ILogger mLogger; + protected AutomataDefinitionInterpreter mInterpreter; + protected ManagedScript mMgdScript; + + protected IIcfgSymbolTable mSymbolTable; + protected PredicateFactory mPredicateFactory; + protected IHoareTripleChecker mHtc; + protected final Map mProgramPlaceMap = new HashMap<>(); + + protected final List> mProofs = new ArrayList<>(); + protected final List mUnifiers = new ArrayList<>(); + protected final List, Transition>> mBacktranslations = + new ArrayList<>(); + + private long mStartTime = -1L; + + @TestFactory + public Iterable createTests() throws IOException { + final Path dir = Path.of(TestUtil.getPathFromTrunk("examples/concurrent/OwickiGries/PetriPrograms")); + try (final var files = Files.list(dir)) { + return files.filter(file -> file.toString().endsWith(".ats")).filter(this::includeTest) + .map(OwickiGriesTestCase::new).sorted().toList(); + } + } + + @Before + public void setUp() { + mStartTime = System.nanoTime(); + + mServices = UltimateMocks.createUltimateServiceProviderMock(LOG_LEVEL); + mAutomataServices = new AutomataLibraryServices(mServices); + mLogger = mServices.getLoggingService().getLogger(getClass()); + setTimeout(); + + mInterpreter = new AutomataDefinitionInterpreter(this, mLogger, mServices); + + final var script = new HistoryRecordingScript(UltimateMocks.createSolver(SOLVER_COMMAND, LOG_LEVEL)); + script.setLogic(Logics.ALL); + mMgdScript = new ManagedScript(mServices, script); + + mProgramPlaceMap.clear(); + mProofs.clear(); + mUnifiers.clear(); + } + + private void setTimeout() { + final long timeout; + final String envTimeout = System.getProperty(PROPERTY_TIMEOUT); + if (envTimeout != null && !envTimeout.isBlank()) { + timeout = Long.parseLong(envTimeout); + mLogger.warn("Using specified timeout: " + timeout + " ms"); + } else { + timeout = TIMEOUT_MS; + } + if (timeout >= 0) { + mServices.getProgressMonitorService().setDeadline(System.currentTimeMillis() + timeout); + } + } + + protected boolean includeTest(final Path path) { + return true; + } + + protected abstract void runTest(final Path path, final AutomataTestFileAST ast, + final BoundedPetriNet program, + final IPetriNetSuccessorProvider refinedPetriNet, + final IPossibleInterferences, IPredicate> possibleInterferences) + throws AutomataLibraryException, IOException; + + private void runTestInternal(final Path path) throws IOException, AutomataLibraryException { + mSymbolTable = setupSymbolTable(path); + final var id2Action = parseActions(path); + mPredicateFactory = new PredicateFactory(mServices, mMgdScript, mSymbolTable); + + final var modifiesRelation = new HashRelation(); + for (final var pv : mSymbolTable.getGlobals()) { + modifiesRelation.addPair(SimpleAction.PROCEDURE, pv); + } + final var modifiableGlobals = new ModifiableGlobalsTable(modifiesRelation); + mHtc = new MonolithicHoareTripleChecker(mMgdScript, modifiableGlobals); + + final AutomataTestFileAST parsed = parse(path); + + // find relevant ASTs + PetriNetAutomatonAST programAST = null; + final List proofASTs = new ArrayList<>(); + for (final var def : parsed.getAutomataDefinitions().getListOfAutomataDefinitions()) { + if ("program".equals(def.getName())) { + assert programAST == null : "multiple programs specified"; + programAST = (PetriNetAutomatonAST) def; + } else if (def.getName().startsWith("proof")) { + proofASTs.add((NestedwordAutomatonAST) def); + } + } + assert programAST != null && !proofASTs.isEmpty() : "either program or proof is missing"; + + // interpret AST + mInterpreter.interpret(programAST); + for (final var proofAST : proofASTs) { + mInterpreter.interpret(proofAST); + } + + // extract automata from AST + final var petri = (BoundedPetriNet) mInterpreter.getAutomata().get("program"); + final var automata = proofASTs.stream() + .map(ast -> (NestedWordAutomaton) mInterpreter.getAutomata().get(ast.getName())) + .collect(Collectors.toList()); + assert petri != null && !automata.isEmpty() : "either program or proof is missing"; + + // replace strings with parsed transitions and predicates + final var program = replaceActions(id2Action, petri); + mProofs.addAll( + automata.stream().map(aut -> replaceActionsAndStates(id2Action, aut)).collect(Collectors.toList())); + + // check proofs + for (int i = 0; i < mProofs.size(); ++i) { + checkProof(mProofs.get(i), mUnifiers.get(i)); + } + mLogger.info("Number of proof automata: %d", mProofs.size()); + + // compute difference of program and proofs + DifferencePetriNet difference = null; + Function, Transition> diff2OriginalTransition = + Function.identity(); + final var looperCounts = new ArrayList(); + int i = 0; + for (final var proof : mProofs) { + final var initialTrueState = DataStructureUtils.getOneAndOnly(proof.getInitialStates(), "initial state"); + final var totalizedProof = new TotalizeNwa<>(proof, initialTrueState, false); + + final var loopers = DifferencePairwiseOnDemand.determineUniversalLoopers(totalizedProof, proof.getStates()); + mLogger.info("%d / %d letters are loopers in proof %d", loopers.size(), proof.getAlphabet().size(), i); + looperCounts.add(loopers.size()); + + final var oldNet = difference == null ? program : difference; + final var currentDifference = new DifferencePetriNet<>(mAutomataServices, oldNet, totalizedProof, loopers); + final var backtransMap = currentDifference.getTransitionBacktranslation(); + mBacktranslations.add(backtransMap); + diff2OriginalTransition = diff2OriginalTransition.compose(backtransMap::get); + difference = currentDifference; + i++; + } + assert difference != null : "Difference can only be null if there no proofs, this is checked above"; + + final var looperStats = new MinMaxMed(); + looperStats.report(looperCounts, Integer::longValue); + mLogger.info("Loopers in proof automata: min=%d, max=%d, median=%d", looperStats.getMinimum(), + looperStats.getMaximum(), looperStats.getMedian()); + + assert checkCounterexample(difference); + + var interferenceRelation = parsePossibleInterferences(path, id2Action, program); + if (interferenceRelation.isEmpty()) { + mLogger.warn("No possible interferences specified. Computing from unfolding..."); + final var bp = new FinitePrefix<>(mAutomataServices, program).getResult(); + interferenceRelation = IPossibleInterferences.fromUnfolding(bp); + } else { + assert checkInterference(program, interferenceRelation) + : "Specified possible interferences deviate from actual"; + } + + final long setupTime = System.nanoTime() - mStartTime; + mLogger.info("OwickiGriesTestSuite setup time: %s", + CoreUtil.toTimeString(setupTime, TimeUnit.NANOSECONDS, TimeUnit.MILLISECONDS, 0)); + + runTest(path, parsed, program, difference, IPossibleInterferences.fromRelation(interferenceRelation)); + } + + private boolean checkInterference(final IPetriNet program, + final HashRelation> interferenceRelation) + throws AutomataOperationCanceledException, PetriNetNot1SafeException { + final var finPrefix = new FinitePrefix<>(mAutomataServices, program); + final var bp = finPrefix.getResult(); + final var actualInterference = IPossibleInterferences.fromUnfolding(bp); + return interferenceRelation.equals(actualInterference); + } + + private boolean checkCounterexample(final DifferencePetriNet difference) + throws AutomataOperationCanceledException, PetriNetNot1SafeException { + final var ctex = new FinitePrefix<>(mAutomataServices, difference).getAcceptingRun(); + if (ctex != null) { + mLogger.warn("Unproven counterexample: %s", ctex); + } + return ctex == null; + } + + private HashRelation> parsePossibleInterferences(final Path path, + final Map id2Action, final IPetriNet program) + throws IOException { + final var relation = new HashRelation>(); + + final String prefix = "//@ interference("; + final List interferenceLines; + try (final var lines = Files.lines(path)) { + interferenceLines = lines.filter(l -> l.startsWith(prefix)).toList(); + } + + final Pattern interferencePattern = + Pattern.compile("^//@ interference\\((.*)\\) : (\\[\\d+\\](, \\[\\d+\\])*)$"); + for (final var line : interferenceLines) { + final var matcher = interferencePattern.matcher(line); + final boolean lineMatches = matcher.matches(); + assert lineMatches : "failed to parse interference information: " + line; + + final var placeName = matcher.group(1); + final var actionNames = matcher.group(2).split(", "); + + final var place = mProgramPlaceMap.get(placeName); + assert place != null : "unknown place name: " + placeName; + assert !relation.getDomain().contains(place) : "repeated interference line for " + place; + + final var actions = Arrays.stream(actionNames) + .map(name -> findTransition(program, parseAction(id2Action, name))).toList(); + relation.addAllPairs(place, actions); + } + + return relation; + } + + private static Transition findTransition(final IPetriNet net, final L letter) { + return net.getTransitions().stream().filter(t -> t.getSymbol().equals(letter)).findAny().orElseThrow(); + } + + protected ModifiableGlobalsTable computeModifiableGlobals() { + final var modifiesRelation = new HashRelation(); + for (final var pv : mSymbolTable.getGlobals()) { + modifiesRelation.addPair(SimpleAction.PROCEDURE, pv); + } + return new ModifiableGlobalsTable(modifiesRelation); + } + + private void checkProof(final INestedWordAutomaton proof, final IPredicateUnifier unifier) + throws AutomataLibraryException { + assert NestedWordAutomataUtils.isFiniteAutomaton(proof) : "Proof must not have call or return transitions"; + assert new IsDeterministic<>(mAutomataServices, proof).getResult() : "Proof must be deterministic"; + + for (final var initial : proof.getInitialStates()) { + assert "true".equals(initial.getFormula().toString()) + : "Initial state of proof automaton must be labeled 'true'"; + } + + for (final var accepting : proof.getFinalStates()) { + assert "false".equals(accepting.getFormula().toString()) + : "Accepting state of proof automaton must be labeled 'false'"; + assert NestedWordAutomataUtils.isSinkState(proof, accepting) : "State 'false' should be a sink"; + } + + assert NwaFloydHoareValidityCheck.forInterpolantAutomaton(mServices, mMgdScript, mHtc, unifier, proof, true) + .getResult(); + } + + private IIcfgSymbolTable setupSymbolTable(final Path path) throws IOException { + final var symbolTable = new DefaultIcfgSymbolTable(); + + final String prefix = "//@ variables "; + final Optional varLine; + try (final var lines = Files.lines(path)) { + varLine = lines.filter(l -> l.startsWith(prefix)).findFirst(); + } + if (!varLine.isPresent()) { + mLogger.warn("no specification of program variables found"); + return symbolTable; + } + + final String varDescr = varLine.get().substring(prefix.length()); + for (final var quantVar : parseVarDef(varDescr)) { + final var pv = ProgramVarUtils.constructGlobalProgramVarPair(quantVar.getName(), quantVar.getSort(), + mMgdScript, null); + symbolTable.add(pv); + } + + return symbolTable; + } + + private TermVariable[] parseVarDef(final String varDef) { + final var syntax = "(forall (" + varDef + ") true)"; + final var formula = (QuantifiedFormula) TermParseUtils.parseTerm(mMgdScript.getScript(), syntax); + return formula.getVariables(); + } + + private Map parseActions(final Path path) throws IOException { + final String prefix = "//@ semantics "; + + final List actionLines; + try (final var lines = Files.lines(path)) { + actionLines = lines.filter(l -> l.startsWith(prefix)).collect(Collectors.toList()); + } + + if (actionLines.isEmpty()) { + mLogger.warn("no actions found"); + return Collections.emptyMap(); + } + + final var result = new HashMap(); + final Pattern actionPattern = + Pattern.compile("\\s*\\[(\\d+)\\]\\s+\\{([^\\}]*)\\}(\\s+\\[[^\\]]*\\]|)\\s+([^\\s].*)$"); + for (final var actionLine : actionLines) { + final String actionDescr = actionLine.substring(prefix.length()); + final var matcher = actionPattern.matcher(actionDescr); + + final boolean found = matcher.find(); + assert found : "failed to parse action semantics: " + actionLine; + + final int id = Integer.parseUnsignedInt(matcher.group(1)); + final var assignedVarNames = Arrays.stream(matcher.group(2).split(",")).map(String::trim) + .filter(s -> !s.isEmpty()).collect(Collectors.toSet()); + final var assignedVars = mSymbolTable.getGlobals().stream() + .filter(pv -> assignedVarNames.contains(pv.getIdentifier())).collect(Collectors.toSet()); + + final var auxVarString = matcher.group(3).trim(); + Set auxVars; + if (auxVarString.isEmpty()) { + auxVars = Set.of(); + } else { + auxVars = Set.of(parseVarDef(auxVarString.substring(0, auxVarString.length() - 1).substring(1))); + } + + final String transformulaString = matcher.group(4); + + if (result.containsKey(id)) { + throw new IllegalArgumentException("duplicate definition for action [" + id + "]"); + } + + final var action = new SimpleAction(id, parseTransformula(transformulaString, assignedVars, auxVars)); + result.put(id, action); + } + + return result; + } + + private UnmodifiableTransFormula parseTransformula(final String syntax, final Set assignedVars, + final Set auxVars) { + final var termVars = Stream.concat(auxVars.stream(), + Stream.concat(mSymbolTable.getGlobals().stream(), + mSymbolTable.getGlobals().stream().map(IProgramNonOldVar::getOldVar)) + .map(IProgramVar::getTermVariable)) + .collect(Collectors.toSet()); + final var term = SmtParserUtils.parseWithVariables(syntax, mServices, mMgdScript, termVars); + + final var inVars = mSymbolTable.getGlobals().stream() + .collect(Collectors.toMap(IProgramVar.class::cast, pv -> getOldTermVariable(pv, assignedVars))); + final var outVars = mSymbolTable.getGlobals().stream() + .collect(Collectors.toMap(IProgramVar.class::cast, IProgramVar::getTermVariable)); + final var builder = new TransFormulaBuilder(inVars, outVars, true, null, true, null, auxVars.isEmpty()); + for (final var av : auxVars) { + builder.addAuxVar(av); + } + builder.setFormula(term); + builder.setInfeasibility(Infeasibility.NOT_DETERMINED); + + return builder.finishConstruction(mMgdScript); + } + + private static TermVariable getOldTermVariable(final IProgramNonOldVar pv, + final Set assignedVars) { + if (assignedVars.contains(pv)) { + return pv.getOldVar().getTermVariable(); + } + return pv.getTermVariable(); + } + + private AutomataTestFileAST parse(final Path path) throws FileNotFoundException { + final String filename = path.getFileName().toString(); + final Reader reader = new BufferedReader(new FileReader(path.toFile())); + return new AutomataScriptParserRun(mServices, mLogger, reader, filename, path.toString()).getResult(); + } + + private BoundedPetriNet replaceActions(final Map id2Action, + final BoundedPetriNet net) { + final var parsedAlphabet = + net.getAlphabet().stream().map(label -> parseAction(id2Action, label)).collect(Collectors.toSet()); + final var parsedNet = new BoundedPetriNet(mAutomataServices, parsedAlphabet, false); + + // copy places + final var initialPlaces = net.getInitialPlaces(); + for (final var place : net.getPlaces()) { + final var predPlace = mPredicateFactory.newDebugPredicate(place); + mProgramPlaceMap.put(place, predPlace); + parsedNet.addPlace(predPlace, initialPlaces.contains(place), net.isAccepting(place)); + } + + // copy transitions + for (final var transition : net.getTransitions()) { + final var predPreds = + transition.getPredecessors().stream().map(mProgramPlaceMap::get).collect(ImmutableSet.collector()); + final var predSuccs = + transition.getSuccessors().stream().map(mProgramPlaceMap::get).collect(ImmutableSet.collector()); + parsedNet.addTransition(parseAction(id2Action, transition.getSymbol()), predPreds, predSuccs); + } + + return parsedNet; + } + + private NestedWordAutomaton replaceActionsAndStates( + final Map id2Action, final NestedWordAutomaton aut) { + final var parsedAlphabet = new VpAlphabet<>( + aut.getAlphabet().stream().map(label -> parseAction(id2Action, label)).collect(Collectors.toSet())); + final var parsedAut = + new NestedWordAutomaton(mAutomataServices, parsedAlphabet, () -> null); + + // create predicate unifier for this iteration + final var unifier = new PredicateUnifier(mLogger, mServices, mMgdScript, mPredicateFactory, mSymbolTable, + SimplificationTechnique.SIMPLIFY_DDA); + mUnifiers.add(unifier); + + // parse states + final var stateMap = new HashMap(); + for (final var state : aut.getStates()) { + final var parsedState = parsePredicate(state, unifier); + stateMap.put(state, parsedState); + parsedAut.addState(aut.isInitial(state), aut.isFinal(state), parsedState); + } + + // parse transitions + for (final var state : aut.getStates()) { + for (final var transition : aut.internalSuccessors(state)) { + parsedAut.addInternalTransition(stateMap.get(state), parseAction(id2Action, transition.getLetter()), + stateMap.get(transition.getSucc())); + } + } + + return parsedAut; + } + + protected IPredicate parsePredicate(final String state, final IPredicateUnifier unifier) { + final Term term = SmtParserUtils.parseWithVariables(state, mServices, mMgdScript, mSymbolTable); + return unifier.getOrConstructPredicate(term); + } + + private static SimpleAction parseAction(final Map id2Action, final String label) { + final var pattern = Pattern.compile("^\\[(\\d+)\\]$"); + final var matcher = pattern.matcher(label); + + final boolean found = matcher.find(); + assert found : "Failed to parse action: " + label; + + final int id = Integer.parseUnsignedInt(matcher.group(1)); + if (!id2Action.containsKey(id)) { + throw new IllegalArgumentException("Undefined action [" + id + "]"); + } + return id2Action.get(id); + } + + @Override + public void printMessage(final Severity severityForResult, final LoggerSeverity severityForLogger, + final String longDescr, final String shortDescr, final AtsASTNode node) { + // TODO + mLogger.warn(longDescr); + } + + private final class OwickiGriesTestCase implements Comparable { + private final Path mPath; + + public OwickiGriesTestCase(final Path path) { + mPath = path; + } + + @FactoryTestMethod + public void run() throws AutomataLibraryException, IOException { + runTestInternal(mPath); + } + + @Override + public String toString() { + return mPath.getFileName().toString().replace(".", "_"); + } + + @Override + public int compareTo(final OwickiGriesTestCase other) { + return mPath.compareTo(other.mPath); + } + } + + protected static final class SimpleAction implements IInternalAction { + public static final String PROCEDURE = "Main"; + + private final int mId; + private final UnmodifiableTransFormula mTransFormula; + + public SimpleAction(final int id, final UnmodifiableTransFormula transFormula) { + mId = id; + mTransFormula = transFormula; + } + + @Override + public String getPrecedingProcedure() { + return PROCEDURE; + } + + @Override + public String getSucceedingProcedure() { + return getPrecedingProcedure(); + } + + @Override + public UnmodifiableTransFormula getTransformula() { + return mTransFormula; + } + + @Override + public int hashCode() { + return Objects.hash(mId, mTransFormula); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final SimpleAction other = (SimpleAction) obj; + return mId == other.mId && Objects.equals(mTransFormula, other.mTransFormula); + } + + @Override + public String toString() { + return "[" + mId + "]"; + } + } +} diff --git a/trunk/source/Library-SmtLibUtils/src/de/uni_freiburg/informatik/ultimate/lib/smtlibutils/IncrementalPlicationChecker.java b/trunk/source/Library-SmtLibUtils/src/de/uni_freiburg/informatik/ultimate/lib/smtlibutils/IncrementalPlicationChecker.java index 024c5ab6a01..6b456bcbf90 100644 --- a/trunk/source/Library-SmtLibUtils/src/de/uni_freiburg/informatik/ultimate/lib/smtlibutils/IncrementalPlicationChecker.java +++ b/trunk/source/Library-SmtLibUtils/src/de/uni_freiburg/informatik/ultimate/lib/smtlibutils/IncrementalPlicationChecker.java @@ -30,6 +30,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.function.Supplier; import de.uni_freiburg.informatik.ultimate.logic.Script.LBool; import de.uni_freiburg.informatik.ultimate.logic.Term; @@ -49,11 +50,21 @@ public enum Validity { VALID, INVALID, UNKNOWN, NOT_CHECKED; public Validity and(final Validity other) { + return and(() -> other); + } + + public Validity and(final Supplier otherSupplier) { return switch (this) { case INVALID -> INVALID; - case NOT_CHECKED -> other == INVALID ? other : this; - case UNKNOWN -> (other == NOT_CHECKED || other == INVALID) ? other : this; - case VALID -> other; + case NOT_CHECKED -> { + final var other = otherSupplier.get(); + yield other == INVALID ? other : this; + } + case UNKNOWN -> { + final var other = otherSupplier.get(); + yield other == NOT_CHECKED || other == INVALID ? other : this; + } + case VALID -> otherSupplier.get(); }; } } @@ -111,9 +122,7 @@ private void assertLhs(final Term lhs) { */ private Map constructVar2ConstSubstitution(final Term term) { final Set allTvs = new HashSet<>(Arrays.asList(term.getFreeVars())); - final Map substitutionMapping = - SmtUtils.termVariables2Constants(mMgdScript.getScript(), allTvs, true); - return substitutionMapping; + return SmtUtils.termVariables2Constants(mMgdScript.getScript(), allTvs, true); } public Validity checkPlication(final Term rhs) { diff --git a/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/cfg2automaton/Cfg2Automaton.java b/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/cfg2automaton/Cfg2Automaton.java index 4432d7f6de5..0cdde85c02e 100644 --- a/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/cfg2automaton/Cfg2Automaton.java +++ b/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/cfg2automaton/Cfg2Automaton.java @@ -59,6 +59,7 @@ import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgEdge; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgLocation; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgLocationIterator; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.DebugPredicate; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateFactory; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.SmtFreePredicateFactory; @@ -133,9 +134,7 @@ public static BoundedPetriNet constructPetriNetWith Function predicateProvider; final Term trueTerm = mgdScript.getScript().term("true"); if (DEBUG_STORE_HISTORY) { - predicateProvider = x -> { - return predicateFactory.newPredicateWithHistory(x, trueTerm, new HashMap<>()); - }; + predicateProvider = x -> predicateFactory.newPredicateWithHistory(x, trueTerm, new HashMap<>()); } else { predicateProvider = x -> predicateFactory.newSPredicate(x, trueTerm); } @@ -395,7 +394,8 @@ private static IPredicate createThreadNotInUsePredicate(final String th final Term predicateTerm) { // TODO (2020-09-03 Dominik) Label predicate with the string below; but use trueTerm (not dontCare). final String threadNotInUseString = threadInstanceId + "NotInUse"; - final IPredicate threadNotInUsePredicate = predicateFactory.newPredicate(predicateTerm); + final IPredicate threadNotInUsePredicate = + predicateFactory.construct(id -> new DebugPredicate(threadNotInUseString, id, predicateTerm)); net.addPlace(threadNotInUsePredicate, true, false); return threadNotInUsePredicate; } @@ -405,7 +405,8 @@ private static IPredicate createThreadInUsePredicate(final String threa final Term predicateTerm) { // TODO (2020-09-03 Dominik) Label predicate with the string below; but use trueTerm (not dontCare). final String threadInUseString = threadInstanceId + "InUse"; - final IPredicate threadInUsePredicate = predicateFactory.newPredicate(predicateTerm); + final IPredicate threadInUsePredicate = + predicateFactory.construct(id -> new DebugPredicate(threadInUseString, id, predicateTerm)); net.addPlace(threadInUsePredicate, false, false); return threadInUsePredicate; } diff --git a/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/initialabstraction/Petri2FiniteAutomatonAbstractionProvider.java b/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/initialabstraction/Petri2FiniteAutomatonAbstractionProvider.java index 2d5aeed8e62..34278fb5b9d 100644 --- a/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/initialabstraction/Petri2FiniteAutomatonAbstractionProvider.java +++ b/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/initialabstraction/Petri2FiniteAutomatonAbstractionProvider.java @@ -38,6 +38,7 @@ import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetNot1SafeException; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; import de.uni_freiburg.informatik.ultimate.automata.petrinet.operations.LazyPetriNet2FiniteAutomaton; import de.uni_freiburg.informatik.ultimate.automata.petrinet.operations.PetriNet2FiniteAutomaton; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IPetriNet2FiniteAutomatonStateFactory; @@ -47,11 +48,16 @@ import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfg; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfgTransition; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgLocation; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.BasicPredicateFactory; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.ISLPredicate; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateFactory; import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.HoareProofSettings; +import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.IFloydHoareAnnotation; import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.NwaHoareProofProducer; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.NaiveOwickiGries; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesAnnotation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesSettings; import de.uni_freiburg.informatik.ultimate.logic.Script.LBool; import de.uni_freiburg.informatik.ultimate.util.statistics.IStatisticsDataProvider; @@ -138,7 +144,9 @@ public IStatisticsDataProvider getStatistics() { public static class Eager> extends Petri2FiniteAutomatonAbstractionProvider> { private INestedWordAutomaton mAbstraction; + private IPetriNet mPetriNet; private CfgSmtToolkit mCsToolkit; + private Map, IPredicate> mMarking2State; /** * Create a new instance of the provider. @@ -161,11 +169,13 @@ public Eager(final IUltimateServiceProvider services, getInitialAbstraction(final IIcfg icfg, final Set errorLocs) throws AutomataLibraryException { mCsToolkit = icfg.getCfgSmtToolkit(); - final IPetriNet net = mUnderlying.getInitialAbstraction(icfg, errorLocs); + mPetriNet = mUnderlying.getInitialAbstraction(icfg, errorLocs); try { final Map hopelessCache = new HashMap<>(); - mAbstraction = new PetriNet2FiniteAutomaton<>(mAutomataServices, mStateFactory, net, - s -> areAllLocationsHopeless(hopelessCache, errorLocs, s)).getResult(); + final var petri2FA = new PetriNet2FiniteAutomaton<>(mAutomataServices, mStateFactory, mPetriNet, + s -> areAllLocationsHopeless(hopelessCache, errorLocs, s)); + mAbstraction = petri2FA.getResult(); + mMarking2State = petri2FA.getStateMap(); return mAbstraction; } catch (final PetriNetNot1SafeException e) { final Collection unsafePlaces = e.getUnsafePlaces(); @@ -183,6 +193,13 @@ public NwaHoareProofProducer getProofProducer(final PredicateFactory predicat return new NwaHoareProofProducer<>(mServices, mAbstraction, mCsToolkit, predicateFactory, hoarePrefs, mAbstraction.getStates()); } + + public OwickiGriesAnnotation, IPredicate, Marking> backtranslateProof( + final IFloydHoareAnnotation inputProof, final BasicPredicateFactory predicateFactory, + final OwickiGriesSettings settings) { + return new NaiveOwickiGries<>(mServices, predicateFactory, mCsToolkit, mPetriNet, settings) + . createProofConverter(mMarking2State).apply(inputProof); + } } /** diff --git a/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/initialabstraction/PetriInitialAbstractionProvider.java b/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/initialabstraction/PetriInitialAbstractionProvider.java index 3e6fef1cc81..71c61417b5e 100644 --- a/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/initialabstraction/PetriInitialAbstractionProvider.java +++ b/trunk/source/Library-TraceCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/tracecheckerutils/initialabstraction/PetriInitialAbstractionProvider.java @@ -26,20 +26,35 @@ */ package de.uni_freiburg.informatik.ultimate.lib.tracecheckerutils.initialabstraction; +import java.util.List; import java.util.Set; +import java.util.function.Function; +import java.util.function.UnaryOperator; +import java.util.stream.Collectors; import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryServices; import de.uni_freiburg.informatik.ultimate.automata.AutomataOperationCanceledException; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetNot1SafeException; import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.BoundedPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; import de.uni_freiburg.informatik.ultimate.automata.petrinet.operations.RemoveDead; import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.RunningTaskInfo; import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfg; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfgTransition; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgLocation; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.DebugPredicate; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateUtils; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.EmpireOwickiGries; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.EmpireOwickiGries.FocusComputation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.IPetriNetProofProducer; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.NaiveOwickiGries; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesAnnotation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesSettings; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesUnpetrifier; import de.uni_freiburg.informatik.ultimate.lib.tracecheckerutils.cfg2automaton.Cfg2Automaton; /** @@ -59,6 +74,10 @@ public class PetriInitialAbstractionProvider> private final PredicateFactory mPredicateFactory; private final boolean mRemoveDeadEnds; + private IIcfg mIcfg; + private BoundedPetriNet mAbstraction; + private Set mThreadMonitorPlaces; + /** * Create a new instance. * @@ -79,21 +98,54 @@ public PetriInitialAbstractionProvider(final IUltimateServiceProvider services, @Override public BoundedPetriNet getInitialAbstraction(final IIcfg icfg, final Set errorLocs) throws AutomataOperationCanceledException { - final BoundedPetriNet net = - Cfg2Automaton.constructPetriNetWithSPredicates(mServices, icfg, errorLocs, mPredicateFactory); + mIcfg = icfg; + mAbstraction = Cfg2Automaton.constructPetriNetWithSPredicates(mServices, icfg, errorLocs, mPredicateFactory); + mThreadMonitorPlaces = + mAbstraction.getPlaces().stream().filter(DebugPredicate.class::isInstance).collect(Collectors.toSet()); + if (!mRemoveDeadEnds) { - return net; + return mAbstraction; } try { - return new RemoveDead<>(new AutomataLibraryServices(mServices), net, null, KEEP_USELESS_SUCCESSOR_PLACES) - .getResult(); + mAbstraction = new RemoveDead<>(new AutomataLibraryServices(mServices), mAbstraction, null, + KEEP_USELESS_SUCCESSOR_PLACES).getResult(); + return mAbstraction; } catch (final AutomataOperationCanceledException aoce) { - final String taskDescription = "removing dead transitions from Petri net that has " + net.sizeInformation(); + final String taskDescription = + "removing dead transitions from Petri net that has " + mAbstraction.sizeInformation(); aoce.addRunningTaskInfo(new RunningTaskInfo(getClass(), taskDescription)); throw aoce; } catch (final PetriNetNot1SafeException e) { throw new AssertionError(e); } } + + public IPetriNetProofProducer getProofProducer(final OwickiGriesSettings settings) { + return switch (settings.computationMode()) { + // Naive computation (primarily as baseline for comparison) + case NAIVE -> + new NaiveOwickiGries<>(mServices, mPredicateFactory, mIcfg.getCfgSmtToolkit(), mAbstraction, settings) + .createProofProducer(Function.identity()); + + // Current state-of-the-art (as of POPL'26 paper) + case EMPIRE -> new EmpireOwickiGries<>(mServices, mAbstraction, mIcfg.getCfgSmtToolkit(), mPredicateFactory, + FocusComputation.UNFOCUSED); + case LEGAL_FOCUS -> new EmpireOwickiGries<>(mServices, mAbstraction, mIcfg.getCfgSmtToolkit(), + mPredicateFactory, FocusComputation.MODULAR); + + // Unfinished future work + case DIR_LEGAL_FOCUS -> + throw new UnsupportedOperationException("Unimplemented case: " + settings.computationMode()); + + case NONE -> null; + }; + } + + public OwickiGriesAnnotation> backtranslateProof( + final OwickiGriesAnnotation, IPredicate, Marking> ogForPn) { + return new OwickiGriesUnpetrifier(mServices, mIcfg, mAbstraction, ogForPn, + p -> PredicateUtils.getSingleLocation((IPredicate) p), UnaryOperator.identity(), + UnaryOperator.identity(), mThreadMonitorPlaces).getResult(); + } } diff --git a/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/models/annotation/WitnessGhostDeclaration.java b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/models/annotation/WitnessGhostDeclaration.java new file mode 100644 index 00000000000..f8a5b1a05ed --- /dev/null +++ b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/models/annotation/WitnessGhostDeclaration.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2024 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2024 University of Freiburg + * + * This file is part of the ULTIMATE Core. + * + * The ULTIMATE Core is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Core is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Core. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Core, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Core grant you additional permission + * to convey the resulting work. + */ + +package de.uni_freiburg.informatik.ultimate.core.lib.models.annotation; + +import java.util.Map; + +import de.uni_freiburg.informatik.ultimate.core.model.models.IElement; +import de.uni_freiburg.informatik.ultimate.core.model.models.ModelUtils; +import de.uni_freiburg.informatik.ultimate.core.model.models.annotation.Visualizable; + +/** + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * + */ +public class WitnessGhostDeclaration extends ModernAnnotations { + + private static final long serialVersionUID = 1L; + private static final String KEY = WitnessGhostDeclaration.class.getName(); + + @Visualizable + private final Map mGhostsAndInitialValues; + + public WitnessGhostDeclaration(final Map ghostsAndInitialValues) { + mGhostsAndInitialValues = ghostsAndInitialValues; + } + + public Map getGhostAndInitialValues() { + return mGhostsAndInitialValues; + } + + public void annotate(final IElement node) { + // Only add an annotation, if the variable was successfully backtranslated + if (mGhostsAndInitialValues != null && !mGhostsAndInitialValues.isEmpty()) { + node.getPayload().getAnnotations().put(KEY, this); + } + } + + public static WitnessGhostDeclaration getAnnotation(final IElement node) { + return ModelUtils.getAnnotation(node, KEY, a -> (WitnessGhostDeclaration) a); + } +} diff --git a/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/models/annotation/WitnessGhostUpdate.java b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/models/annotation/WitnessGhostUpdate.java new file mode 100644 index 00000000000..6395e2180bd --- /dev/null +++ b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/models/annotation/WitnessGhostUpdate.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2024 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2024 University of Freiburg + * + * This file is part of the ULTIMATE Core. + * + * The ULTIMATE Core is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Core is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Core. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Core, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Core grant you additional permission + * to convey the resulting work. + */ + +package de.uni_freiburg.informatik.ultimate.core.lib.models.annotation; + +import java.util.Map; + +import de.uni_freiburg.informatik.ultimate.core.model.models.IElement; +import de.uni_freiburg.informatik.ultimate.core.model.models.ModelUtils; +import de.uni_freiburg.informatik.ultimate.core.model.models.annotation.Visualizable; + +/** + * + * @author Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * + */ +public class WitnessGhostUpdate extends ModernAnnotations { + + private static final long serialVersionUID = 1L; + private static final String KEY = WitnessGhostUpdate.class.getName(); + + @Visualizable + private final Map mUpdate; + + public WitnessGhostUpdate(final Map update) { + mUpdate = update; + } + + public Map getUpdate() { + return mUpdate; + } + + public void annotate(final IElement node) { + // Only add an annotation, if the update was successfully backtranslated (i.e. is not null and not empty) + if (mUpdate != null && !mUpdate.isEmpty()) { + node.getPayload().getAnnotations().put(KEY, this); + } + } + + public static WitnessGhostUpdate getAnnotation(final IElement node) { + return ModelUtils.getAnnotation(node, KEY, a -> (WitnessGhostUpdate) a); + } +} diff --git a/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/translation/DefaultTranslator.java b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/translation/DefaultTranslator.java index 8310e8e9409..ff8612a4500 100644 --- a/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/translation/DefaultTranslator.java +++ b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/translation/DefaultTranslator.java @@ -612,4 +612,15 @@ public ProgramState translateProgramState(final ProgramState oldProgramS public interface IFunction { R create(P1 p1, P2 p2, P3 p3); } + + @Override + public TE declareAndTranslateAuxiliaryVariable(final SE variable) { + if (!mTargetExpressionType.isAssignableFrom(mSourceExpressionType)) { + final String message = + "Type of SourceExpression and type of" + " TargetExpression are different. DefaultTranslator can" + + " only be applied to expression of same type."; + throw new AssertionError(message); + } + return (TE) variable; + } } diff --git a/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/translation/TranslatorConcatenation.java b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/translation/TranslatorConcatenation.java index 896367e0474..9f7626febe7 100644 --- a/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/translation/TranslatorConcatenation.java +++ b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/translation/TranslatorConcatenation.java @@ -153,4 +153,9 @@ public ProgramState translateProgramState(final ProgramState oldProgramS return mIntermediate2TargetTranslator .translateProgramState(mSource2IntermediateTranslator.translateProgramState(oldProgramState)); } + + @Override + public TE declareAndTranslateAuxiliaryVariable(final SE variable) { + throw new UnsupportedOperationException("not implemented"); + } } diff --git a/trunk/source/Library-UltimateModel/src/de/uni_freiburg/informatik/ultimate/core/model/services/IBacktranslationService.java b/trunk/source/Library-UltimateModel/src/de/uni_freiburg/informatik/ultimate/core/model/services/IBacktranslationService.java index f3745a89c3d..61e6f4332a0 100644 --- a/trunk/source/Library-UltimateModel/src/de/uni_freiburg/informatik/ultimate/core/model/services/IBacktranslationService.java +++ b/trunk/source/Library-UltimateModel/src/de/uni_freiburg/informatik/ultimate/core/model/services/IBacktranslationService.java @@ -117,6 +117,8 @@ default String targetExpressionToString(final TE expression) { */ IBacktranslationService getTranslationServiceCopy(); + TE declareAndTranslateAuxiliaryVariable(SE variable); + record Lasso>(X stem, X loop) { // simple record } diff --git a/trunk/source/Library-UltimateModel/src/de/uni_freiburg/informatik/ultimate/core/model/translation/ITranslator.java b/trunk/source/Library-UltimateModel/src/de/uni_freiburg/informatik/ultimate/core/model/translation/ITranslator.java index 8daabadae03..90857169c8c 100644 --- a/trunk/source/Library-UltimateModel/src/de/uni_freiburg/informatik/ultimate/core/model/translation/ITranslator.java +++ b/trunk/source/Library-UltimateModel/src/de/uni_freiburg/informatik/ultimate/core/model/translation/ITranslator.java @@ -104,4 +104,5 @@ public interface ITranslator { Class getTargetExpressionClass(); + TE declareAndTranslateAuxiliaryVariable(SE variable); } diff --git a/trunk/source/Library-UltimateTest/src/de/uni_freiburg/informatik/ultimate/test/mocks/BacktranslationServiceMock.java b/trunk/source/Library-UltimateTest/src/de/uni_freiburg/informatik/ultimate/test/mocks/BacktranslationServiceMock.java index e870a1a2e6e..d81e4fc71f5 100644 --- a/trunk/source/Library-UltimateTest/src/de/uni_freiburg/informatik/ultimate/test/mocks/BacktranslationServiceMock.java +++ b/trunk/source/Library-UltimateTest/src/de/uni_freiburg/informatik/ultimate/test/mocks/BacktranslationServiceMock.java @@ -109,4 +109,9 @@ public String translateProgramStateToString(final ProgramState programS public IBacktranslationService getTranslationServiceCopy() { return this; } + + @Override + public TE declareAndTranslateAuxiliaryVariable(final SE variable) { + return null; + } } diff --git a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/Lazy.java b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/Lazy.java index c18a1fbb9d8..acef232c807 100644 --- a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/Lazy.java +++ b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/Lazy.java @@ -49,6 +49,10 @@ public Lazy(final V value) { mValue = value; } + public static Lazy empty() { + return new Lazy<>((V) null); + } + /** * Get or construct the cached value. */ diff --git a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/DataStructureUtils.java b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/DataStructureUtils.java index 39163ee2d11..18f0e06dd51 100644 --- a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/DataStructureUtils.java +++ b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/DataStructureUtils.java @@ -112,12 +112,19 @@ public static Optional getSomeCommonElement(final Set set1, final Set< /** * Construct a {@link Set} that contains all elements of set1 that are not in set2. + * + * The returned set is not guaranteed to be mutable. + * + * Future changes to the sets a and b will not be reflected in the returned set. */ public static Set difference(final Set a, final Set b) { if (a.isEmpty()) { return Collections.emptySet(); } if (b.isEmpty()) { + if (a instanceof ImmutableSet) { + return a; + } return new HashSet<>(a); } return a.stream().filter(elem -> !b.contains(elem)).collect(Collectors.toSet()); diff --git a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/HittingSet.java b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/HittingSet.java new file mode 100644 index 00000000000..a1cec7ca698 --- /dev/null +++ b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/HittingSet.java @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2020 University of Freiburg + * + * This file is part of the ULTIMATE Util Library. + * + * The ULTIMATE Util Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Util Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Util Library. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Util Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Util Library grant you additional permission + * to convey the resulting work. + * */ +package de.uni_freiburg.informatik.ultimate.util.datastructures; + +import java.util.HashSet; +import java.util.Set; + +/** + * Constructs a Hitting set of from the collections of sets. @TODO: finish description, redundant? + * + * @author Miriam Lagunes (miriam.lagunes@students.uni-freiburg.de) + * + * @param + * + */ + +public class HittingSet { + private final Set> mCollection; + + public HittingSet(final Set> collection) { + mCollection = collection; + + } + + /** + * + * @param hittingSet + * @param setUniverse + * @return true if hittinSet intersects with all sets in setUniverse + */ + private boolean checkHittingSet(final Set hittingSet, final Set> setUniverse) { + final Set> universe = new HashSet<>(setUniverse); + for (final Set set : universe) { + if (DataStructureUtils.intersection(set, hittingSet).isEmpty()) { + return false; + } + } + return true; + } + + /** + * @param s1 + * @param s2 + * @return Symmetric difference of set TODO:Already implemented in Ultimate? Guava library? + */ + private Set getSymmDiff(final Set s1, final Set s2) { + final Set symmetricDiff = new HashSet<>(s1); + symmetricDiff.addAll(s2); + final Set tmp = new HashSet<>(s1); + tmp.retainAll(s2); + symmetricDiff.removeAll(tmp); // use DataStructre.difference?? + return symmetricDiff; + } + + /** + * @param collection + * of set + * @return set of symmetric differences of all set pairs in collection + */ + private Set> getSymmDifferences(final Set> collection) { + final Set> differences = new HashSet<>(); + final Set> toCombine = new HashSet<>(collection); + for (final Set e : collection) { + if (!toCombine.isEmpty()) { + toCombine.remove(e); + for (final Set s : toCombine) { + differences.add(getSymmDiff(e, s)); + } + } + } + return differences; + } + + /** + * + * @param element + * @param collection + * @return List of sets that contains the element + */ + private Set> getIntersections(final T element, final Set> collection) { + final Set> intersections = new HashSet<>(); + for (final Set set : collection) { + if (set.contains(element)) { + intersections.add(set); + } + } + return intersections; + } + + /** + * + * @param set + * @param collection + * of not covered sets + * @return return set in uncovered + */ + private T getGreedyElement(final Set set, final Set> collection) { + + Set> intersections = new HashSet<>(); + T greedy = set.iterator().next(); + for (final T element : set) { + final Set> setInter = getIntersections(element, collection); + if (setInter.size() > intersections.size()) { + greedy = element; + intersections = setInter; + } + } + return greedy; + } + + /** + * + * @param symmDifference + * @return hitting set of symmetricDifference + */ + private Set getHittingSet(final Set> collection) { + final Set hittingSet = new HashSet<>(); + Set> uncovered = new HashSet<>(collection); + for (final Set set : collection) { + if (!checkHittingSet(hittingSet, collection)) { + final T greedy = getGreedyElement(set, uncovered); + hittingSet.add(greedy); + final Set> inter = getIntersections(greedy, uncovered); + uncovered = DataStructureUtils.difference(uncovered, inter); + } else { + break; + } + } + + assert checkHittingSet(hittingSet, collection) : "Error in Hitting set"; + return hittingSet; + } + + public Set getSymmHittingSet() { + final Set> collection = getSymmDifferences(mCollection); + return getHittingSet(collection); + } + + public Set getHittingSet() { + return getHittingSet(mCollection); + } + +} diff --git a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/relation/SymmetricHashRelation.java b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/relation/SymmetricHashRelation.java index 3de71c17c0c..262160d2163 100644 --- a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/relation/SymmetricHashRelation.java +++ b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/datastructures/relation/SymmetricHashRelation.java @@ -26,6 +26,7 @@ */ package de.uni_freiburg.informatik.ultimate.util.datastructures.relation; +import java.util.Collection; import java.util.HashSet; import java.util.Map.Entry; import java.util.Set; @@ -36,7 +37,7 @@ * Implementation of an HashRelation where the add method and the remove method make sure that that relation contains a * pair (a,b) iff the relation contains the pair (b,a). *

- * WARNING: If you use other ways to modify this relation (e.g., removal during iteration, the result might not be + * WARNING: If you use other ways to modify this relation (e.g., removal during iteration), the result might not be * symmetric any more. *

* @@ -59,6 +60,24 @@ public boolean addPair(final E domainElem, final E rangeElem) { return wasModified; } + @Override + public boolean addAllPairs(final E domainElem, final Collection rangeElems) { + final boolean changed = super.addAllPairs(domainElem, rangeElems); + + if (changed) { + for (final E rangeElem : rangeElems) { + var oldRangeElems = mMap.get(rangeElem); + if (oldRangeElems == null) { + oldRangeElems = newSet(); + mMap.put(rangeElem, oldRangeElems); + } + oldRangeElems.add(domainElem); + } + } + + return changed; + } + /* * (non-Javadoc) * diff --git a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/AbstractStatisticsDataProvider.java b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/AbstractStatisticsDataProvider.java index 6df19d80019..c347bde2cf8 100644 --- a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/AbstractStatisticsDataProvider.java +++ b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/AbstractStatisticsDataProvider.java @@ -36,6 +36,7 @@ import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.function.IntSupplier; +import java.util.function.LongSupplier; import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -75,6 +76,10 @@ protected final void declareCounter(final String key, final IntSupplier getter) declare(key, getter::getAsInt, KeyType.COUNTER); } + protected final void declareCounter(final String key, final LongSupplier getter) { + declare(key, getter::getAsLong, KeyType.COUNTER); + } + protected final void declare(final String key, final Supplier getter, final BinaryOperator aggregator, final BiFunction printer) { assert !mSuppliers.containsKey(key); @@ -86,6 +91,12 @@ protected final void declare(final String key, final Supplier getter, mPrinters.put(key, printer); } + protected void declareMinMaxMed(final String keySuffix, final MinMaxMed value) { + declare("Min " + keySuffix, value::getMinimum, KeyType.COUNTER); + declare("Max " + keySuffix, value::getMaximum, KeyType.COUNTER); + declare("Median " + keySuffix, value::getMedian, KeyType.COUNTER); + } + protected final void forward(final String key, final Supplier statistics) { declare(key, () -> toStatisticsData(statistics.get()), Aggregate::statisticsDataAggregate, PrettyPrint::keyColonData); @@ -111,7 +122,9 @@ protected final void includeAll(final String key, final Supplier. + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Util Library, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Util Library grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.util.statistics; + +import java.util.Arrays; +import java.util.Collection; +import java.util.function.ToLongFunction; + +public final class MinMaxMed { + private long mMinimum; + private long mMaximum; + private long mMedian; + private double mAverage; + + public void report(final Collection items, final ToLongFunction measure) { + if (items.isEmpty()) { + mMinimum = 0; + mMaximum = 0; + mMedian = 0; + return; + } + + final var numbers = items.stream().mapToLong(measure).sorted().toArray(); + mMinimum = numbers[0]; + mMaximum = numbers[numbers.length - 1]; + mMedian = numbers[numbers.length / 2]; + mAverage = Arrays.stream(numbers).sum() / (double) numbers.length; + } + + public long getMinimum() { + return mMinimum; + } + + public long getMaximum() { + return mMaximum; + } + + public long getMedian() { + return mMedian; + } + + @Override + public String toString() { + return "(min: %d, max: %d, median: %d, avg: %.2f)".formatted(mMinimum, mMaximum, mMedian, mAverage); + } +} diff --git a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/PrettyPrint.java b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/PrettyPrint.java index bb58e589383..332f9c0437b 100644 --- a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/PrettyPrint.java +++ b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/PrettyPrint.java @@ -74,5 +74,4 @@ public static BiFunction list(final BiFunction pprinter.apply(key, ((List) data).stream().map(elemPrinter).collect(Collectors.joining(", ", "[ ", " ]"))); } - } diff --git a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/TimeTracker.java b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/TimeTracker.java index d8d805789e0..299b1de647c 100644 --- a/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/TimeTracker.java +++ b/trunk/source/Library-UltimateUtil/src/de/uni_freiburg/informatik/ultimate/util/statistics/TimeTracker.java @@ -47,9 +47,18 @@ public TimeTracker() { public T measure(final Supplier fun) { start(); - final T rtr = fun.get(); - stop(); - return rtr; + try { + return fun.get(); + } finally { + stop(); + } + } + + public void measure(final Runnable fun) { + measure(() -> { + fun.run(); + return null; + }); } public void start() { diff --git a/trunk/source/RCFGBuilder/src/de/uni_freiburg/informatik/ultimate/plugins/generator/rcfgbuilder/RCFGBacktranslator.java b/trunk/source/RCFGBuilder/src/de/uni_freiburg/informatik/ultimate/plugins/generator/rcfgbuilder/RCFGBacktranslator.java index 4724ebffd4b..2f824352e4c 100644 --- a/trunk/source/RCFGBuilder/src/de/uni_freiburg/informatik/ultimate/plugins/generator/rcfgbuilder/RCFGBacktranslator.java +++ b/trunk/source/RCFGBuilder/src/de/uni_freiburg/informatik/ultimate/plugins/generator/rcfgbuilder/RCFGBacktranslator.java @@ -392,6 +392,11 @@ public Expression translateExpression(final Term term) { return mTerm2Expression.translate(term); } + @Override + public Expression declareAndTranslateAuxiliaryVariable(final Term variable) { + return mTerm2Expression.declareAndTranslateAuxiliaryVariable((TermVariable) variable); + } + @Override public String targetExpressionToString(final Expression expression) { return BoogiePrettyPrinter.print(expression); diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/BasicCegarLoop.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/BasicCegarLoop.java index 6adcce33974..db1f64f5a9d 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/BasicCegarLoop.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/BasicCegarLoop.java @@ -679,6 +679,5 @@ public TimeoutRefinementEngineResult(final Lazy htc, final Lazy predicateUnifier) { super(LBool.UNKNOWN, null, null, false, Collections.emptyList(), htc, predicateUnifier); } - } } diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/CegarLoopFactory.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/CegarLoopFactory.java index b46afb2a6b5..f5d5769c7a9 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/CegarLoopFactory.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/CegarLoopFactory.java @@ -30,6 +30,7 @@ import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.function.Function; import java.util.function.Supplier; @@ -39,7 +40,9 @@ import de.uni_freiburg.informatik.ultimate.automata.IAutomaton; import de.uni_freiburg.informatik.ultimate.automata.nestedword.INestedWordAutomaton; import de.uni_freiburg.informatik.ultimate.automata.nestedword.INwaOutgoingLetterAndTransitionProvider; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.Marking; import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.BoundedPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; import de.uni_freiburg.informatik.ultimate.automata.statefactory.IPetriNet2FiniteAutomatonStateFactory; import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.RunningTaskInfo; import de.uni_freiburg.informatik.ultimate.core.lib.exceptions.ToolchainCanceledException; @@ -54,9 +57,12 @@ import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.debugidentifiers.DebugIdentifier; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateFactory; +import de.uni_freiburg.informatik.ultimate.lib.proofs.IProof; import de.uni_freiburg.informatik.ultimate.lib.proofs.IProofProducer; import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.IFloydHoareAnnotation; import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.NwaHoareProofProducer; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.IPetriNetProofProducer; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesAnnotation; import de.uni_freiburg.informatik.ultimate.lib.tracecheckerutils.initialabstraction.BacktranslatingProofProducer; import de.uni_freiburg.informatik.ultimate.lib.tracecheckerutils.initialabstraction.IInitialAbstractionProvider; import de.uni_freiburg.informatik.ultimate.lib.tracecheckerutils.initialabstraction.NwaInitialAbstractionProvider; @@ -75,8 +81,8 @@ import de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction.preferences.TraceAbstractionPreferenceInitializer.FloydHoareAutomataReuse; import de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction.preferences.TraceAbstractionPreferenceInitializer.InterpolantAutomaton; import de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction.preferences.TraceAbstractionPreferenceInitializer.LanguageOperation; +import de.uni_freiburg.informatik.ultimate.util.Lazy; import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; -import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Triple; /** * A utility class that allows creating CEGAR loops for different programs (based on some common settings). @@ -178,27 +184,31 @@ public CegarLoopFactory(final IUltimateServiceProvider services, final Class case PETRI_NET: requireNoReuse("Petri net-based analysis"); requireNoWitnesses(witnessTransformer, "Petri net-based analysis"); - final var pnCegar = new CegarLoopForPetriNet<>(name, - createPetriAbstraction(services, predicateFactory, true, root, errorLocs), root, csToolkit, - predicateFactory, mPrefs, errorLocs, services, mTransitionClazz, stateFactoryForRefinement); - return new Pair<>(pnCegar, null); + + final var absAndProof = createPetriAbstractionProvider(services, predicateFactory, true /* TODO */); + final var abstraction = + constructInitialAbstraction(absAndProof.initialAbstractionProvider(), root, errorLocs); + final IPetriNetProofProducer proofProducer = absAndProof.proofProducer().get(); + + final var pnCegar = new CegarLoopForPetriNet<>(name, abstraction, root, csToolkit, predicateFactory, + mPrefs, errorLocs, proofProducer, services, mTransitionClazz, stateFactoryForRefinement); + return new Pair<>(pnCegar, absAndProof.proofProducerWithBacktranslation(root)); default: // do nothing, and fall through to the code below } } // handle finite automata-based CEGAR loops - final var triple = createAutomataAbstractionProvider(services, isConcurrent, predicateFactory, + final var abstractionAndProof = createAutomataAbstractionProvider(services, isConcurrent, predicateFactory, stateFactoryForRefinement, witnessTransformer); - final var abstraction = constructInitialAbstraction(triple.getFirst(), root, errorLocs); + final var abstraction = + constructInitialAbstraction(abstractionAndProof.initialAbstractionProvider(), root, errorLocs); - final var producer = triple.getSecond().get(); - final var backtranslator = triple.getThird(); + final var producer = abstractionAndProof.proofProducer().get(); final var cegar = createFiniteAutomataCegarLoop(services, name, root, predicateFactory, errorLocs, rawFloydHoareAutomataFromFile, stateFactoryForRefinement, witnessTransformer, abstraction, producer); - final var proofProducer = producer == null || backtranslator == null ? null - : new BacktranslatingProofProducer<>(root, producer, backtranslator); - return new Pair<>(cegar, proofProducer); + + return new Pair<>(cegar, abstractionAndProof.proofProducerWithBacktranslation(root)); } private NwaCegarLoop createFiniteAutomataCegarLoop(final IUltimateServiceProvider services, @@ -251,7 +261,7 @@ private static void requireNoWitnesses(final IWitnessTransformer witnessTrans } } - private Triple>, Supplier>, Function, IFloydHoareAnnotation>> + private AbstractionAndProof, IFloydHoareAnnotation, IProof, NwaHoareProofProducer> createAutomataAbstractionProvider(final IUltimateServiceProvider services, final boolean isConcurrent, final PredicateFactory predicateFactory, final PredicateFactoryRefinement stateFactory, final IWitnessTransformer witnessTransformer) { @@ -259,54 +269,70 @@ private static void requireNoWitnesses(final IWitnessTransformer witnessTrans final var provider = new NwaInitialAbstractionProvider(services, stateFactory, mPrefs.interprocedural(), predicateFactory, mPrefs.getHoareSettings()); if (witnessTransformer == null) { - return new Triple<>(provider, provider::getProofProducer, provider::backtranslateProof); + return new AbstractionAndProof<>(provider, provider::getProofProducer, provider::backtranslateProof); } - return new Triple<>( - new WitnessAutomatonAbstractionProvider<>(predicateFactory, provider, witnessTransformer), - () -> null, null); + + // If a witness is given, proof production is not supported. + return new AbstractionAndProof<>( + new WitnessAutomatonAbstractionProvider<>(predicateFactory, provider, witnessTransformer)); } - final var netProvider = createPetriAbstractionProvider(services, predicateFactory, false); - if (!mPrefs.applyOneShotPOR()) { - final var provider = - new Petri2FiniteAutomatonAbstractionProvider.Eager<>(services, netProvider, stateFactory); - if (witnessTransformer == null) { - return new Triple<>(provider, - () -> provider.getProofProducer(predicateFactory, mPrefs.getHoareSettings()), null); - } - return new Triple<>( - new WitnessAutomatonAbstractionProvider<>(predicateFactory, provider, witnessTransformer), - () -> null, null); + final var netProviderAndProof = createPetriAbstractionProvider(services, predicateFactory, false); + final var netProvider = netProviderAndProof.initialAbstractionProvider(); + if (mPrefs.applyOneShotPOR()) { + // Witness automata in combination with POR require special handling, and are not yet supported. + requireNoWitnesses(witnessTransformer, "one-shot partial order reduction"); + + // Partial Order reductions aim to avoid the explicit construction of the full finite automaton. + // Hence we use the lazy abstraction provider. + final var autProvider = + new Petri2FiniteAutomatonAbstractionProvider.Lazy<>(services, netProvider, stateFactory); + + // Apply one-shot POR. + final var redProvider = new PartialOrderAbstractionProvider<>(autProvider, services, stateFactory, + predicateFactory, mPrefs.getPartialOrderMode(), mPrefs.getDfsOrderType(), mPrefs.getDfsOrderSeed()); + + // Return the abstraction only; proof production is not yet supported. + return new AbstractionAndProof<>(redProvider); } - if (witnessTransformer != null) { - throw new UnsupportedOperationException( - "Witness validation with partial order reduction is not supported yet."); + // If no POR is applied, we construct the concurrent product automaton eagerly. + // TODO Do this lazily if a witness automaton is given, as the witness might prune large parts of the program. + final var autProvider = + new Petri2FiniteAutomatonAbstractionProvider.Eager<>(services, netProvider, stateFactory); + + if (witnessTransformer == null) { + final var oldBacktranslator = netProviderAndProof.proofBacktranslator(); + return new AbstractionAndProof<>(autProvider, + // Proof producer for NwaCegarLoop + () -> autProvider.getProofProducer(predicateFactory, mPrefs.getHoareSettings()), + // backtranslate proof + fh -> oldBacktranslator.apply( + autProvider.backtranslateProof(fh, predicateFactory, mPrefs.getOwickiGriesSettings()))); } - return new Triple<>(new PartialOrderAbstractionProvider<>( - // Partial Order reductions aim to avoid the explicit construction of the full finite automaton. - // Hence we use the lazy abstraction provider. - new Petri2FiniteAutomatonAbstractionProvider.Lazy<>(services, netProvider, stateFactory), services, - stateFactory, predicateFactory, mPrefs.getPartialOrderMode(), mPrefs.getDfsOrderType(), - mPrefs.getDfsOrderSeed()), () -> null, null); - } - private BoundedPetriNet createPetriAbstraction(final IUltimateServiceProvider services, - final PredicateFactory predicateFactory, final boolean removeDead, final IIcfg icfg, - final Set errorLocs) { - return constructInitialAbstraction(createPetriAbstractionProvider(services, predicateFactory, removeDead), icfg, - errorLocs); + // If a witness is given, proof production is not supported. + return new AbstractionAndProof<>( + new WitnessAutomatonAbstractionProvider<>(predicateFactory, autProvider, witnessTransformer)); } - private IInitialAbstractionProvider> createPetriAbstractionProvider( - final IUltimateServiceProvider services, final PredicateFactory predicateFactory, - final boolean removeDead) { - final var netProvider = new PetriInitialAbstractionProvider(services, predicateFactory, removeDead); + private AbstractionAndProof, OwickiGriesAnnotation, IPredicate, Marking>, OwickiGriesAnnotation>, IPetriNetProofProducer> + createPetriAbstractionProvider(final IUltimateServiceProvider services, + final PredicateFactory predicateFactory, final boolean computeProof) { + final var netProvider = new PetriInitialAbstractionProvider(services, predicateFactory, !computeProof); if (!mPrefs.applyOneShotLbe()) { - return netProvider; + return new AbstractionAndProof<>(netProvider, + // support proof production (if used with CegarLoopForPetriNets) + () -> netProvider.getProofProducer(mPrefs.getOwickiGriesSettings()), + // support proof backtranslation (also applicable when used with NwaCegarLoop) + netProvider::backtranslateProof); } - return new PetriLbeInitialAbstractionProvider<>(services, netProvider, mTransitionClazz, + + final var lbeProvider = new PetriLbeInitialAbstractionProvider<>(services, netProvider, mTransitionClazz, mPrefs.lbeIndependenceSettings(), mCreateCompositionFactory.get()); + + // Proof production is not supported if one-shot LBE is used. + return new AbstractionAndProof<>(lbeProvider); } private INwaOutgoingLetterAndTransitionProvider createPartialOrderAbstraction( @@ -317,12 +343,14 @@ private INwaOutgoingLetterAndTransitionProvider createPartialOrde createPartialOrderAbstractionProvider(services, predicateFactory, stateFactory), icfg, errorLocs); } + // PartialOrderCegarLoop does not yet support proof production, so we ignore the proof producer here. private IInitialAbstractionProvider> createPartialOrderAbstractionProvider(final IUltimateServiceProvider services, final PredicateFactory predicateFactory, final IPetriNet2FiniteAutomatonStateFactory stateFactory) { - final var netProvider = createPetriAbstractionProvider(services, predicateFactory, false); - return new Petri2FiniteAutomatonAbstractionProvider.Lazy<>(services, netProvider, stateFactory); + final var netProviderAndProof = createPetriAbstractionProvider(services, predicateFactory, false); + return new Petri2FiniteAutomatonAbstractionProvider.Lazy<>(services, + netProviderAndProof.initialAbstractionProvider(), stateFactory); } private > A constructInitialAbstraction(final IInitialAbstractionProvider provider, @@ -359,4 +387,31 @@ public void shutdown() { mIndependenceProviderFactory.shutdown(); } } + + private static final record AbstractionAndProof, A extends IAutomaton, P1 extends IProof, P2 extends IProof, H extends IProofProducer>( + IInitialAbstractionProvider initialAbstractionProvider, Lazy proofProducer, + Function proofBacktranslator) { + public AbstractionAndProof { + Objects.requireNonNull(initialAbstractionProvider); + Objects.requireNonNull(proofProducer); + } + + public AbstractionAndProof(final IInitialAbstractionProvider initialAbstractionProvider, + final Supplier proofProducer, final Function proofBacktranslator) { + this(initialAbstractionProvider, new Lazy<>(proofProducer), proofBacktranslator); + } + + public AbstractionAndProof(final IInitialAbstractionProvider initialAbstractionProvider) { + this(initialAbstractionProvider, Lazy.empty(), null); + } + + public IProofProducer, IProof> + proofProducerWithBacktranslation(final IIcfg originalProgram) { + if (proofBacktranslator == null || proofProducer.get() == null) { + return null; + } + + return new BacktranslatingProofProducer<>(originalProgram, proofProducer.get(), proofBacktranslator); + } + } } diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/EagerReuseCegarLoop.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/EagerReuseCegarLoop.java index 1f05bd89208..d640f04f15e 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/EagerReuseCegarLoop.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/EagerReuseCegarLoop.java @@ -129,11 +129,11 @@ private void computeDifferenceForReuseAutomaton(final int iteration, final PowersetDeterminizer psd = new PowersetDeterminizer<>(reuseAut, true, mPredicateFactoryInterpolantAutomata); - final boolean explointSigmaStarConcatOfIA = true; + final boolean exploitSigmaStarConcatOfIA = true; final IOpWithDelayedDeadEndRemoval diff = new Difference<>(new AutomataLibraryServices(getServices()), mStateFactoryForRefinement, (INwaOutgoingLetterAndTransitionProvider) mAbstraction, reuseAut, psd, - explointSigmaStarConcatOfIA); + exploitSigmaStarConcatOfIA); if (reuseAut instanceof AbstractInterpolantAutomaton) { final AbstractInterpolantAutomaton aiReuseAut = (AbstractInterpolantAutomaton) reuseAut; diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/LazyReuseCegarLoop.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/LazyReuseCegarLoop.java index 46c356d787b..04bc522e0ee 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/LazyReuseCegarLoop.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/LazyReuseCegarLoop.java @@ -165,11 +165,11 @@ protected boolean refineAbstraction() throws AutomataLibraryException { } final PowersetDeterminizer psd = new PowersetDeterminizer<>(reuseAut, true, mPredicateFactoryInterpolantAutomata); - final boolean explointSigmaStarConcatOfIA = true; + final boolean exploitSigmaStarConcatOfIA = true; IOpWithDelayedDeadEndRemoval diff; diff = new Difference<>(new AutomataLibraryServices(getServices()), mStateFactoryForRefinement, (INwaOutgoingLetterAndTransitionProvider) mAbstraction, reuseAut, psd, - explointSigmaStarConcatOfIA); + exploitSigmaStarConcatOfIA); if (reuseAut instanceof AbstractInterpolantAutomaton) { final AbstractInterpolantAutomaton aiReuseAut = (AbstractInterpolantAutomaton) reuseAut; diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/NwaCegarLoop.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/NwaCegarLoop.java index d0c4e23585d..a40f25c7637 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/NwaCegarLoop.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/NwaCegarLoop.java @@ -348,7 +348,7 @@ protected boolean refineAbstraction() throws AutomataLibraryException { private void computeAutomataDifference(final INestedWordAutomaton minuend, final INwaOutgoingLetterAndTransitionProvider subtrahend, final INwaOutgoingLetterAndTransitionProvider subtrahendBeforeEnhancement, - final IPredicateUnifier predicateUnifier, final boolean explointSigmaStarConcatOfIA, + final IPredicateUnifier predicateUnifier, final boolean exploitSigmaStarConcatOfIA, final IHoareTripleChecker htc, final InterpolantAutomatonEnhancement enhanceMode, final boolean useErrorAutomaton, final AutomatonType automatonType) throws AutomataLibraryException, AssertionError { @@ -363,7 +363,7 @@ private void computeAutomataDifference(final INestedWordAutomaton minuend, subtrahend, psd, false); } else { diff = new Difference<>(new AutomataLibraryServices(getServices()), mStateFactoryForRefinement, - minuend, subtrahend, psd, explointSigmaStarConcatOfIA); + minuend, subtrahend, psd, exploitSigmaStarConcatOfIA); } mCegarLoopBenchmark.reportInterpolantAutomatonStates(subtrahend.size()); } catch (final AutomataOperationCanceledException | ToolchainCanceledException tce) { diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/TraceAbstractionStarter.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/TraceAbstractionStarter.java index 1ebc64d8721..5f56b0e437a 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/TraceAbstractionStarter.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/TraceAbstractionStarter.java @@ -36,6 +36,7 @@ import java.util.Set; import java.util.function.Predicate; import java.util.function.Supplier; +import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -71,8 +72,11 @@ import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.FloydHoareValidityCheck.MissingAnnotationBehaviour; import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.IFloydHoareAnnotation; import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.IcfgFloydHoareValidityCheck; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesAnnotation; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesUtils; import de.uni_freiburg.informatik.ultimate.lib.tracecheckerutils.partialorder.independence.abstraction.ICopyActionFactory; import de.uni_freiburg.informatik.ultimate.lib.tracecheckerutils.partialorder.petrinetlbe.PetriNetLargeBlockEncoding.IPLBECompositionFactory; +import de.uni_freiburg.informatik.ultimate.logic.TermVariable; import de.uni_freiburg.informatik.ultimate.plugins.generator.rcfgbuilder.cfg.BoogieIcfgLocation; import de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction.AbstractCegarLoop.Result; import de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction.interpolantautomata.transitionappender.AbstractInterpolantAutomaton; @@ -119,6 +123,10 @@ public enum CegarRestartBehaviour { private final CegarLoopResultReporter mResultReporter; private final IWitnessTransformer mWitnessTransformer; + // TODO #proofRefactor This is only supposed to be a temporary workaround. + private Map mTransitionMap; + private UnaryOperator mUnpetrifyVariable; + public TraceAbstractionStarter(final IUltimateServiceProvider services, final IIcfg icfg, final IWitnessTransformer witnessTransformer, final List> rawFloydHoareAutomataFromFile, @@ -188,8 +196,7 @@ private void runCegarLoops(final IIcfg icfg) { ProofAnnotation.addProof(icfg, proof); } - // Currently, we can only work with Floyd-Hoare annotations. - // In the future, e.g. Owicki-Gries annotations may be supported as well. + // Currently, we support Floyd-Hoare annotations and Owicki-Gries annotations. if (proof instanceof IFloydHoareAnnotation) { final var annotation = (IFloydHoareAnnotation) proof; assert new IcfgFloydHoareValidityCheck<>(mServices, icfg, annotation, true, @@ -201,6 +208,12 @@ private void runCegarLoops(final IIcfg icfg) { FloydHoareUtils.createProcedureContractResults(mServices, Activator.PLUGIN_NAME, icfg, annotation, backTranslatorService, mResultReporter::reportResult); } + } else if (proof instanceof OwickiGriesAnnotation) { + final var annotation = (OwickiGriesAnnotation>) proof; + // TODO assert validity of annotation + + OwickiGriesUtils.createResultsAndAnnotateIcfg(mServices, Activator.PLUGIN_NAME, icfg, annotation, + backTranslatorService, mResultReporter::reportResult); } else if (result.getProof() != null) { mLogger.warn("Unknown type of proof: " + result.getProof().getClass()); } @@ -237,11 +250,14 @@ private List> analyseConcurrentProgram(final IIcfg> analyseConcurrentProgram(final IIcfg> unpetrifyProofs(final List> results) { + return results.stream().map(r -> new ProvenCegarLoopResult(r, unpetrifyProof(r.getProof()))).toList(); + } + + private IProof unpetrifyProof(final IProof proof) { + if (proof == null) { + return null; + } + if (!(proof instanceof OwickiGriesAnnotation)) { + mLogger.warn("Unknown proof type for concurrent program: %s. Unpetrification not supported.", + proof.getClass().getSimpleName()); + return proof; + } + + final var petrifiedProof = (OwickiGriesAnnotation>) proof; + + // TODO unpetrify IPredicates themselves + final var unpetrifiedFormulas = petrifiedProof.getFormulaMapping().entrySet().stream().map(e -> { + final var originalLoc = mLocationMap.get(e.getKey()); + if (originalLoc == null) { + mLogger.warn("Unknown original location for %s", e.getKey()); + return null; + } + return new Pair<>(originalLoc, e.getValue()); + }).filter(x -> x != null).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + // TODO unpetrify RHS of updates + final var unpetrifiedUpdates = petrifiedProof.getAssignmentMapping().entrySet().stream() + .map(e -> new Pair<>(mTransitionMap.get(e.getKey()), e.getValue())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + return new OwickiGriesAnnotation<>(null /* TODO */, null /* TODO */, null /* TODO */, unpetrifiedFormulas, + petrifiedProof.getGhostVariables(), petrifiedProof.getGhostAssignment(), unpetrifiedUpdates); + } + private static > boolean resultsHaveSufficientInstances(final List> results) { boolean res = true; @@ -490,8 +541,15 @@ private IIcfg petrify(final IIcfg icfg, final int nu mLogger.info("Constructing petrified ICFG for " + numberOfThreadInstances + " thread instances."); final IcfgPetrifier icfgPetrifier = new IcfgPetrifier(mServices, icfg, numberOfThreadInstances, false); final IIcfg petrifiedIcfg = icfgPetrifier.getPetrifiedIcfg(); - mLocationMap = ((BlockEncodingBacktranslator) icfgPetrifier.getBacktranslator()).getLocationMapping(); - mServices.getBacktranslationService().addTranslator(icfgPetrifier.getBacktranslator()); + + final var backtranslator = (BlockEncodingBacktranslator) icfgPetrifier.getBacktranslator(); + + mLocationMap = backtranslator.getLocationMapping(); + mServices.getBacktranslationService().addTranslator(backtranslator); + + mTransitionMap = (Map) backtranslator.getEdgeMapping(); + mUnpetrifyVariable = x -> (TermVariable) backtranslator.translateExpression(x); + return petrifiedIcfg; } diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/concurrency/CegarLoopForPetriNet.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/concurrency/CegarLoopForPetriNet.java index 7a3fb2f55aa..6248410a91c 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/concurrency/CegarLoopForPetriNet.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/concurrency/CegarLoopForPetriNet.java @@ -27,6 +27,7 @@ */ package de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction.concurrency; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -57,6 +58,7 @@ import de.uni_freiburg.informatik.ultimate.automata.petrinet.PetriNetRun; import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.BoundedPetriNet; import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.PetriNetUtils; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; import de.uni_freiburg.informatik.ultimate.automata.petrinet.operations.Difference; import de.uni_freiburg.informatik.ultimate.automata.petrinet.operations.Difference.LoopSyncMethod; import de.uni_freiburg.informatik.ultimate.automata.petrinet.operations.DifferencePairwiseOnDemand; @@ -81,6 +83,8 @@ import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicateCoverageChecker; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.PredicateFactory; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.taskidentifier.SubtaskIterationIdentifier; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.IPetriNetProofProducer; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.IPossibleInterferences; import de.uni_freiburg.informatik.ultimate.lib.tracecheckerutils.ILooperCheck; import de.uni_freiburg.informatik.ultimate.logic.Script.LBool; import de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction.BasicCegarLoop; @@ -95,6 +99,7 @@ import de.uni_freiburg.informatik.ultimate.util.HistogramOfIterable; import de.uni_freiburg.informatik.ultimate.util.datastructures.ImmutableSet; import de.uni_freiburg.informatik.ultimate.util.datastructures.UnionFind; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.HashRelation; import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Pair; import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.Triple; import de.uni_freiburg.informatik.ultimate.util.statistics.IStatisticsDataProvider; @@ -106,7 +111,12 @@ public enum SizeReduction { REMOVE_DEAD, REMOVE_REDUNDANT_FLOW } - private static final boolean USE_ON_DEMAND_RESULT = false; + private static final boolean DUMP_OWICKI_GRIES_TEST = false; + private final List> mProofAutomata = new ArrayList<>(); + private final IPetriNet mInitialNet; + private HashRelation> mPossibleInterferences; + + private static final boolean USE_ON_DEMAND_RESULT = true; private static final boolean DEBUG_WRITE_NET_HASH_CODES = false; @@ -125,9 +135,10 @@ public enum SizeReduction { public int mCoRelationQueries = 0; /** * Alternative measure to {@link CegarLoopStatisticsDefinitions#BiggestAbstraction} which currently counts the - * number of places. TODO 20220821 Matthias: Find out whether counting transitions instead of places is helpful. An - * alternative might be to count flow. In the long run the most suitable measure should be utilized in the - * statistics. + * number of places. + * + * TODO 20220821 Matthias: Find out whether counting transitions instead of places is helpful. An alternative might + * be to count flow. In the long run the most suitable measure should be utilized in the statistics. */ public int mBiggestAbstractionTransitions; /** @@ -147,21 +158,25 @@ public enum SizeReduction { private final CounterexampleCache mCounterexampleCache = new CounterexampleCache<>(); - // TODO change this once Owicki-Gries proof production is supported - private final boolean mProduceProof = false; + private final IPetriNetProofProducer mProofProducer; public CegarLoopForPetriNet(final DebugIdentifier name, final BoundedPetriNet initialAbstraction, final IIcfg rootNode, final CfgSmtToolkit csToolkit, final PredicateFactory predicateFactory, - final TAPreferences taPrefs, final Set errorLocs, final IUltimateServiceProvider services, + final TAPreferences taPrefs, final Set errorLocs, + final IPetriNetProofProducer proofProducer, final IUltimateServiceProvider services, final Class transitionClazz, final PredicateFactoryRefinement stateFactoryForRefinement) { - super(name, initialAbstraction, rootNode, csToolkit, predicateFactory, taPrefs, errorLocs, false, services, - transitionClazz, stateFactoryForRefinement); + super(name, initialAbstraction, rootNode, csToolkit, predicateFactory, taPrefs, errorLocs, + proofProducer != null, services, transitionClazz, stateFactoryForRefinement); mPetriClStatisticsGenerator = new PetriCegarLoopStatisticsGenerator(mCegarLoopBenchmark); + mProofProducer = proofProducer; + mInitialNet = initialAbstraction; if (DEBUG_WRITE_NET_HASH_CODES) { mLogger.debug(PetriNetUtils.printHashCodesOfInternalDataStructures(mAbstraction)); } + mProgramPointPlaces = mAbstraction.getPlaces(); + } @Override @@ -172,11 +187,14 @@ protected boolean isAbstractionEmpty() throws AutomataOperationCanceledException final boolean cutOffSameTrans = mPref.cutOffRequiresSameTransition(); final EventOrderEnum eventOrder = mPref.eventOrder(); + final boolean collectPossibleInterferences = + getIteration() == 0 && (DUMP_OWICKI_GRIES_TEST || mProofProducer != null); + mPetriClStatisticsGenerator.start(PetriCegarLoopStatisticsDefinitions.EmptinessCheckTime.toString()); - PetriNetUnfolder unf; + final PetriNetUnfolder unf; try { unf = new PetriNetUnfolder<>(new AutomataLibraryServices(getServices()), mAbstraction, eventOrder, - cutOffSameTrans, true); + cutOffSameTrans, !collectPossibleInterferences); } catch (final PetriNetNot1SafeException e) { throw new UnsupportedOperationException(e.getMessage()); } finally { @@ -186,8 +204,20 @@ protected boolean isAbstractionEmpty() throws AutomataOperationCanceledException mCoRelationQueries += finPrefix.getCoRelation().getQueryCounterYes() + finPrefix.getCoRelation().getQueryCounterNo(); mCounterexample = unf.getAcceptingRun(); + + if (collectPossibleInterferences) { + mPossibleInterferences = IPossibleInterferences.fromUnfolding(finPrefix); + if (mProofProducer != null) { + mProofProducer.initialize(IPossibleInterferences.fromRelation(mPossibleInterferences)); + } + } } if (mCounterexample == null) { + if (DUMP_OWICKI_GRIES_TEST) { + assert mPossibleInterferences != null : "possible interferences should have been initialized"; + new OwickiGriesTestDumper<>(mServices, mTaskIdentifier, mIcfg, mInitialNet, mPossibleInterferences, + mProofAutomata); + } return true; } if (mPref.dumpAutomata()) { @@ -255,6 +285,10 @@ protected boolean refineAbstraction() throws AutomataLibraryException { } if (USE_ON_DEMAND_RESULT) { mAbstraction = enhancementResult.getSecond().getResult(); + final var finPrefix = enhancementResult.getSecond().getFinitePrefixOfDifference(); + if (mProofProducer != null && finPrefix.getAcceptingRun() == null) { + mProofProducer.finalize(mAbstraction); + } } else { final Difference diff = new Difference<>(new AutomataLibraryServices(getServices()), mPredicateFactoryInterpolantAutomata, mAbstraction, dia, LoopSyncMethod.HEURISTIC, @@ -434,9 +468,7 @@ protected boolean refineAbstraction() throws AutomataLibraryException { flowRemovedByMinimization); mPetriClStatisticsGenerator.stop(PetriCegarLoopStatisticsDefinitions.RemoveRedundantFlowTime.toString()); } - final Triple, AutomataMinimizationStatisticsGenerator, Long> minimizationResult = - new Triple<>(reducedNet, amsg, automataMinimizationTime); - return minimizationResult; + return new Triple<>(reducedNet, amsg, automataMinimizationTime); } protected Pair, DifferencePairwiseOnDemand> @@ -517,13 +549,17 @@ protected boolean refineAbstraction() throws AutomataLibraryException { throw new UnsupportedOperationException(); } - if (mProduceProof) { + if (mProofProducer != null) { assert checkInterpolantAutomatonInductivity(dia) : "Not inductive"; + mProofProducer.refine(mRefinementResult.getPredicateUnifier(), dia, dpod.getTransitionBacktranslation()); } if (mPref.dumpAutomata()) { final String filename = "InterpolantAutomatonDeterminized_Iteration" + getIteration(); writeAutomatonToFile(dia, filename); } + if (DUMP_OWICKI_GRIES_TEST) { + mProofAutomata.add(dia); + } // assert accepts(mServices, dia, mCounterexample.getWord(), // true) : "Counterexample not accepted by determinized interpolant automaton: " // + mCounterexample.getWord(); diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/concurrency/OwickiGriesTestDumper.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/concurrency/OwickiGriesTestDumper.java new file mode 100644 index 00000000000..b259486bcc7 --- /dev/null +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/concurrency/OwickiGriesTestDumper.java @@ -0,0 +1,240 @@ +/* + * Copyright (C) 2023 Dominik Klumpp (klumpp@informatik.uni-freiburg.de) + * Copyright (C) 2023 University of Freiburg + * + * This file is part of the ULTIMATE TraceAbstraction plug-in. + * + * The ULTIMATE TraceAbstraction plug-in is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE TraceAbstraction plug-in is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE TraceAbstraction plug-in. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE TraceAbstraction plug-in, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE TraceAbstraction plug-in grant you additional permission + * to convey the resulting work. + */ +package de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction.concurrency; + +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import de.uni_freiburg.informatik.ultimate.automata.AtsFormat; +import de.uni_freiburg.informatik.ultimate.automata.AutomataLibraryServices; +import de.uni_freiburg.informatik.ultimate.automata.AutomatonDefinitionPrinter; +import de.uni_freiburg.informatik.ultimate.automata.AutomatonDefinitionPrinter.NamedAutomaton; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.INwaOutgoingLetterAndTransitionProvider; +import de.uni_freiburg.informatik.ultimate.automata.nestedword.visualization.INwaAtsFormatter; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.IPetriNet; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.netdatastructures.Transition; +import de.uni_freiburg.informatik.ultimate.automata.petrinet.visualization.IPetriAtsFormatter; +import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IAction; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfg; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.transitions.UnmodifiableTransFormula; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramNonOldVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.variables.IProgramVar; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.predicates.IPredicate; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.taskidentifier.TaskIdentifier; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.ManagedScript; +import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.PureSubstitution; +import de.uni_freiburg.informatik.ultimate.logic.PrintTerm; +import de.uni_freiburg.informatik.ultimate.logic.Term; +import de.uni_freiburg.informatik.ultimate.logic.TermVariable; +import de.uni_freiburg.informatik.ultimate.util.datastructures.relation.HashRelation; + +public final class OwickiGriesTestDumper { + private final Map mAlphabetNames = new HashMap<>(); + private final ManagedScript mMgdScript; + + public OwickiGriesTestDumper(final IUltimateServiceProvider services, final TaskIdentifier ident, + final IIcfg icfg, final IPetriNet initialNet, + final HashRelation> possibleInterferences, + final List> proofAutomata) { + mMgdScript = icfg.getCfgSmtToolkit().getManagedScript(); + + final String variablesComment = getVariablesComment(icfg); + final String alphabetComments = getAlphabetDefinition(initialNet, proofAutomata); + final String interferencesComments = getInterferencesComment(initialNet, possibleInterferences); + + final var automata = new ArrayList>(); + automata.add(new NamedAutomaton<>("program", initialNet)); + + int i = 1; + for (final var proofAut : proofAutomata) { + automata.add(new NamedAutomaton<>("proof" + i, proofAut)); + i++; + } + + writeAutomataToFile(services, ident.toString(), variablesComment + System.lineSeparator() + alphabetComments + + System.lineSeparator() + interferencesComments, automata.toArray(NamedAutomaton[]::new)); + } + + private String getVariablesComment(final IIcfg icfg) { + final var symbolTable = icfg.getCfgSmtToolkit().getSymbolTable(); + + final var actualVars = Stream.concat(symbolTable.getGlobals().stream(), + icfg.getCfgSmtToolkit().getProcedures().stream().flatMap(p -> symbolTable.getLocals(p).stream())) + .map(IProgramVar::getTermVariable); + final var constVars = symbolTable.getConstants().stream() + .map(c -> mMgdScript.variable(c.getDefaultConstant().getFunction().getName(), c.getSort())); + + return "//@ variables " + Stream.concat(actualVars, constVars).map(OwickiGriesTestDumper::printVarWithSort) + .collect(Collectors.joining(" ")); + } + + private String getAlphabetDefinition(final IPetriNet program, + final List> proofAutomata) { + final var alphabet = Stream + .concat(program.getAlphabet().stream(), + proofAutomata.stream().flatMap(nwa -> nwa.getAlphabet().stream())) + .distinct().collect(Collectors.toList()); + + final var alphabetDefinition = new StringBuilder(); + int counter = 1; + for (final L letter : alphabet) { + final String name = "[" + counter + "]"; + counter++; + mAlphabetNames.put(letter, name); + + alphabetDefinition.append("//@ semantics "); + alphabetDefinition.append(name); + alphabetDefinition.append(" "); + alphabetDefinition.append(getTransFormulaDescription(letter.getTransformula())); + alphabetDefinition.append(System.lineSeparator()); + } + return alphabetDefinition.toString(); + } + + private String getInterferencesComment(final IPetriNet initialNet, + final HashRelation> possibleInterferences) { + final var placeNames = new PetriProgramFormatter().getPlacesMapping(initialNet.getPlaces()); + final var comments = new ArrayList(); + + for (final var entry : possibleInterferences.entrySet()) { + final IPredicate place = entry.getKey(); + final String placeName = placeNames.get(place); + final String interferingActions = entry.getValue().stream().map(t -> mAlphabetNames.get(t.getSymbol())) + .collect(Collectors.joining(", ")); + comments.add("//@ interference(" + placeName + ") : " + interferingActions); + } + + return comments.stream().collect(Collectors.joining(System.lineSeparator())); + } + + private String getTransFormulaDescription(final UnmodifiableTransFormula transformula) { + final var assignedVars = transformula.getAssignedVars().stream().map(pv -> pv.getTermVariable().getName()) + .collect(Collectors.joining(",", "{", "}")); + + final String auxVars; + if (transformula.getAuxVars().isEmpty()) { + auxVars = ""; + } else { + auxVars = transformula.getAuxVars().stream().map(OwickiGriesTestDumper::printVarWithSort) + .collect(Collectors.joining(" ", " [", "]")); + } + + final Map substitution = new HashMap<>(); + for (final var entry : transformula.getOutVars().entrySet()) { + substitution.put(entry.getValue(), entry.getKey().getTermVariable()); + } + for (final var entry : transformula.getInVars().entrySet()) { + TermVariable subst; + if (!transformula.getAssignedVars().contains(entry.getKey())) { + subst = entry.getKey().getTermVariable(); + } else if (entry.getKey() instanceof IProgramNonOldVar) { + subst = ((IProgramNonOldVar) entry.getKey()).getOldVar().getTermVariable(); + } else { + final String name = "old(" + entry.getKey().getTermVariable().getName() + ")"; + subst = mMgdScript.variable(name, entry.getKey().getSort()); + } + substitution.put(entry.getValue(), subst); + } + final Term newFormula = PureSubstitution.apply(mMgdScript, substitution, transformula.getFormula()); + return assignedVars + auxVars + " " + newFormula.toString(); + } + + private static String printVarWithSort(final TermVariable tv) { + return "(" + PrintTerm.quoteIdentifier(tv.getName()) + " " + tv.getSort() + ")"; + } + + private void writeAutomataToFile(final IUltimateServiceProvider services, final String filename, + final String atsCommands, final NamedAutomaton... automata) { + services.getLoggingService().getLogger(getClass()) + .info("Dumping Owicki-Gries test to " + Paths.get(filename).toAbsolutePath().toString()); + AutomatonDefinitionPrinter.writeAutomatonToFile(new AutomataLibraryServices(services), filename, + new CustomFormat(), "", atsCommands, automata); + } + + private Map getAlphabetMap(final Collection alphabet) { + return alphabet.stream().collect(Collectors.toMap(Function.identity(), x -> quote(mAlphabetNames.get(x)))); + } + + private static String quote(final String str) { + return "\"" + str + "\""; + } + + private class CustomFormat extends AtsFormat { + @Override + protected INwaAtsFormatter getNwaFormatter() { + return new ProofAutomatonFormatter<>(); + } + + @Override + protected IPetriAtsFormatter getPetriFormatter() { + return new PetriProgramFormatter<>(); + } + } + + private class ProofAutomatonFormatter implements INwaAtsFormatter { + @Override + public Map getAlphabetMapping(final Collection alphabet, final char symbol) { + return getAlphabetMap(alphabet); + } + + @Override + public Map getStateMapping(final Collection states) { + final var result = new HashMap(); + for (final STATE state : states) { + result.put(state, quote(((IPredicate) state).getFormula().toString())); + } + return result; + } + + } + + private class PetriProgramFormatter implements IPetriAtsFormatter { + @Override + public Map getAlphabetMapping(final Collection alphabet) { + return getAlphabetMap(alphabet); + } + + @Override + public Map getPlacesMapping(final Collection places) { + final var result = new HashMap(); + int counter = 0; + for (final PLACE place : places) { + result.put(place, "l" + counter); + counter++; + } + return result; + } + } +} diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/interpolantconsolidation/InterpolantConsolidation.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/interpolantconsolidation/InterpolantConsolidation.java index d0ca305a1cf..6d53b0e05f5 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/interpolantconsolidation/InterpolantConsolidation.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/interpolantconsolidation/InterpolantConsolidation.java @@ -162,7 +162,7 @@ private final boolean computeInterpolants() throws AutomataOperationCanceledExce // finite automaton (from step 3) final Difference diff = new Difference<>(new AutomataLibraryServices(mServices), pfconsol /* PredicateFactory for Refinement */, pathprogramautomaton, - interpolantAutomatonDeterminized, psd2, false /* explointSigmaStarConcatOfIA */ ); + interpolantAutomatonDeterminized, psd2, false /* exploitSigmaStarConcatOfIA */ ); if (PRINT_DIFFERENCE_AUTOMATA) { // Needed for debug final AutomataLibraryServices services = new AutomataLibraryServices(mServices); diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/preferences/TAPreferences.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/preferences/TAPreferences.java index e881a823dca..ffc98010939 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/preferences/TAPreferences.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/preferences/TAPreferences.java @@ -37,6 +37,8 @@ import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.tracecheck.TraceCheckReasonUnknown.RefinementStrategyExceptionBlacklist; import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.HoareAnnotationPositions; import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.HoareProofSettings; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesSettings; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesSettings.OwickiGriesComputation; import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils.SimplificationTechnique; import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.solverbuilder.SMTFeatureExtractionTermClassifier.ScoringMethod; import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.solverbuilder.SolverBuilder.ExternalSolver; @@ -590,6 +592,14 @@ public HoareProofSettings getHoareSettings() { return new HoareProofSettings(getHoareAnnotationPositions(), getSimplificationTechnique()); } + public OwickiGriesSettings getOwickiGriesSettings() { + return new OwickiGriesSettings( + mPrefs.getEnum(TraceAbstractionPreferenceInitializer.LABEL_OWICKI_GRIES_COMPUTATION, + OwickiGriesComputation.class), + mPrefs.getBoolean(TraceAbstractionPreferenceInitializer.LABEL_OG_HITTING_SET_OPTIMIZATION), + mPrefs.getBoolean(TraceAbstractionPreferenceInitializer.LABEL_OG_COVERING_SIMPLIFICATION)); + } + public int getThreadLimit() { return mThreadLimit; } diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/preferences/TraceAbstractionPreferenceInitializer.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/preferences/TraceAbstractionPreferenceInitializer.java index f17dc28559c..c380697c8d7 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/preferences/TraceAbstractionPreferenceInitializer.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/preferences/TraceAbstractionPreferenceInitializer.java @@ -48,6 +48,7 @@ import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.tracecheck.ITraceCheckPreferences.UnsatCores; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.smt.tracecheck.TraceCheckReasonUnknown.RefinementStrategyExceptionBlacklist; import de.uni_freiburg.informatik.ultimate.lib.proofs.floydhoare.HoareAnnotationPositions; +import de.uni_freiburg.informatik.ultimate.lib.proofs.owickigries.OwickiGriesSettings.OwickiGriesComputation; import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.SmtUtils.SimplificationTechnique; import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.solverbuilder.SMTFeatureExtractionTermClassifier.ScoringMethod; import de.uni_freiburg.informatik.ultimate.lib.smtlibutils.solverbuilder.SolverBuilder.ExternalSolver; @@ -131,6 +132,20 @@ public class TraceAbstractionPreferenceInitializer extends UltimatePreferenceIni "Method to provide additional interpolants for the MCR automaton"; private static final McrInterpolantMethod DEF_MCR_INTERPOLANT_METHOD = McrInterpolantMethod.WP; + // Owicki-Gries Proofs + // ======================================================================== + + public static final String LABEL_OWICKI_GRIES_COMPUTATION = "Owicki-Gries proof computation algorithm"; + private static final OwickiGriesComputation DEF_OWICKI_GRIES_COMPUTATION = OwickiGriesComputation.NONE; + + public static final String LABEL_OG_COVERING_SIMPLIFICATION = + "Simplify away covered predicates in OwickiGries annotation"; + private static final boolean DEF_OG_COVERING_SIMPLIFICATION = false; + + public static final String LABEL_OG_HITTING_SET_OPTIMIZATION = + "Use hitting sets in computation of OwickiGries annotation"; + private static final boolean DEF_OG_HITTING_SET_OPTIMIZATION = false; + // Settings for Petri net Large Block Encoding (Lipton Reduction) // ======================================================================== @@ -731,7 +746,6 @@ protected BaseUltimatePreferenceItem[] initDefaultPreferences() { new UltimatePreferenceItem<>(LABEL_SMT_FEATURE_EXTRACTION_DUMP_PATH, DEF_SMT_FEATURE_EXTRACTION_DUMP_PATH, DESC_SMT_FEATURE_EXTRACTION_DUMP_PATH, PreferenceType.Directory), - new UltimatePreferenceItem<>(LABEL_DUMP_PATH_PROGRAM_IF_NOT_PERFECT, false, PreferenceType.Boolean), new UltimatePreferenceItem<>(LABEL_DUMP_PATH_PROGRAM_IF_ANALYZED_TOO_OFTEN, 0, PreferenceType.Integer), new UltimatePreferenceItem<>(LABEL_DUMP_PATH_PROGRAM_STOP_MODE, PathProgramDumpStop.AFTER_FIRST_DUMP, @@ -760,6 +774,14 @@ private static UltimatePreferenceItemContainer getConcurrencySettings() { new UltimatePreferenceItem<>(LABEL_LOOPER_CHECK_PETRI, DEF_LOOPER_CHECK_PETRI, PreferenceType.Combo, LooperCheck.values())), + new UltimatePreferenceItemGroup("Owicki-Gries Proofs", + new UltimatePreferenceItem<>(LABEL_OWICKI_GRIES_COMPUTATION, DEF_OWICKI_GRIES_COMPUTATION, + PreferenceType.Combo, OwickiGriesComputation.values()), + new UltimatePreferenceItem<>(LABEL_OG_COVERING_SIMPLIFICATION, DEF_OG_COVERING_SIMPLIFICATION, + PreferenceType.Boolean), + new UltimatePreferenceItem<>(LABEL_OG_HITTING_SET_OPTIMIZATION, DEF_OG_HITTING_SET_OPTIMIZATION, + PreferenceType.Boolean)), + getPORSettings(), getPetriLbeSettings()); } diff --git a/trunk/source/TraceAbstractionWithAFAs/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstractionwithafas/TAwAFAsCegarLoop.java b/trunk/source/TraceAbstractionWithAFAs/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstractionwithafas/TAwAFAsCegarLoop.java index 453ea0ba30d..d6334fc1b5d 100644 --- a/trunk/source/TraceAbstractionWithAFAs/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstractionwithafas/TAwAFAsCegarLoop.java +++ b/trunk/source/TraceAbstractionWithAFAs/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstractionwithafas/TAwAFAsCegarLoop.java @@ -282,9 +282,7 @@ private List> computeRdDAGsFromCEx() throws Assertio sb.append("[").append(letter).append("] "); } mLogger.debug("Calculating RD DAGs for " + sb); - final List> dags = - ReachingDefinitions.computeRDForTrace((List) word, mLogger, mIcfg); - return dags; + return ReachingDefinitions.computeRDForTrace((List) word, mLogger, mIcfg); } catch (final Throwable e) { mLogger.fatal("DataflowDAG generation threw an exception.", e); throw new AssertionError(); @@ -378,9 +376,8 @@ private Term computeSsaTerm(final TraceCodeBlock nodeLabel, final IProgramVar wr } } - final Term substitutedTerm = Substitution.apply(mCsToolkit.getManagedScript(), substitutionMapping, + return Substitution.apply(mCsToolkit.getManagedScript(), substitutionMapping, nodeLabel.getBlock().getTransformula().getFormula()); - return substitutedTerm; } /** @@ -388,9 +385,8 @@ private Term computeSsaTerm(final TraceCodeBlock nodeLabel, final IProgramVar wr */ private Term buildVersion(final IProgramVar bv) { final int index = mSsaIndex++; - final Term constant = PredicateUtils.getIndexedConstant(bv, index, mIndexedConstants, + return PredicateUtils.getIndexedConstant(bv, index, mIndexedConstants, mCsToolkit.getManagedScript().getScript()); - return constant; } /** @@ -530,7 +526,7 @@ protected boolean refineAbstraction() throws AutomataLibraryException { // copie mStateFactoryForRefinement.setIteration(getIteration()); mCegarLoopBenchmark.start(CegarLoopStatisticsDefinitions.AutomataDifference.toString()); - final boolean explointSigmaStarConcatOfIA = mProofUpdater == null || mProofUpdater.exploitSigmaStarConcatOfIa(); + final boolean exploitSigmaStarConcatOfIA = mProofUpdater == null || mProofUpdater.exploitSigmaStarConcatOfIa(); final INestedWordAutomaton oldAbstraction = mAbstraction; final IHoareTripleChecker htc = getEfficientHoareTripleChecker(); // change to CegarLoopConcurrentAutomata @@ -552,7 +548,7 @@ protected boolean refineAbstraction() throws AutomataLibraryException { // copie oldAbstraction, determinized, psd2, false); } else { diff = new Difference<>(new AutomataLibraryServices(getServices()), mStateFactoryForRefinement, - oldAbstraction, determinized, psd2, explointSigmaStarConcatOfIA); + oldAbstraction, determinized, psd2, exploitSigmaStarConcatOfIA); } assert !mCsToolkit.getManagedScript().isLocked(); assert checkInterpolantAutomatonInductivity(mInterpolAutomaton); diff --git a/trunk/source/WitnessPrinter/src/de/uni_freiburg/informatik/ultimate/witnessprinter/yaml/YamlCorrectnessWitnessGenerator.java b/trunk/source/WitnessPrinter/src/de/uni_freiburg/informatik/ultimate/witnessprinter/yaml/YamlCorrectnessWitnessGenerator.java index 3b8fda296cc..8432338f5a6 100644 --- a/trunk/source/WitnessPrinter/src/de/uni_freiburg/informatik/ultimate/witnessprinter/yaml/YamlCorrectnessWitnessGenerator.java +++ b/trunk/source/WitnessPrinter/src/de/uni_freiburg/informatik/ultimate/witnessprinter/yaml/YamlCorrectnessWitnessGenerator.java @@ -5,22 +5,28 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.stream.Collectors; import de.uni_freiburg.informatik.ultimate.core.coreplugin.UltimateCore; import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.LoopEntryAnnotation; import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.LoopEntryAnnotation.LoopEntryType; +import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.WitnessGhostDeclaration; +import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.WitnessGhostUpdate; import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.WitnessInvariant; import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.WitnessProcedureContract; import de.uni_freiburg.informatik.ultimate.core.model.models.ILocation; import de.uni_freiburg.informatik.ultimate.core.model.preferences.IPreferenceProvider; import de.uni_freiburg.informatik.ultimate.core.model.services.ILogger; import de.uni_freiburg.informatik.ultimate.core.model.services.IUltimateServiceProvider; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.IcfgUtils; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IIcfg; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgEdge; +import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgEdgeIterator; import de.uni_freiburg.informatik.ultimate.lib.modelcheckerutils.cfg.structure.IcfgLocation; import de.uni_freiburg.informatik.ultimate.util.datastructures.DataStructureUtils; import de.uni_freiburg.informatik.ultimate.witnessparser.yaml.FormatVersion; import de.uni_freiburg.informatik.ultimate.witnessparser.yaml.FunctionContract; +import de.uni_freiburg.informatik.ultimate.witnessparser.yaml.GhostUpdate; +import de.uni_freiburg.informatik.ultimate.witnessparser.yaml.GhostVariable; import de.uni_freiburg.informatik.ultimate.witnessparser.yaml.Location; import de.uni_freiburg.informatik.ultimate.witnessparser.yaml.LocationInvariant; import de.uni_freiburg.informatik.ultimate.witnessparser.yaml.LoopInvariant; @@ -57,16 +63,59 @@ public YamlCorrectnessWitnessGenerator(final IIcfg icfg, } private Witness getWitness() { - final List allProgramPoints = mIcfg.getProgramPoints().values().stream() - .flatMap(x -> x.values().stream()).collect(Collectors.toList()); + final var allProgramPoints = IcfgUtils.getAllLocations(mIcfg).toList(); + final var allTransitions = new IcfgEdgeIterator(mIcfg).asStream().toList(); + // TODO: Should we sort these entries somehow (for consistent result in validation and to improve readability) // e.g. by line number and/or entry type? final var invariants = extractInvariants(allProgramPoints); final var functionContracts = extractFunctionContracts(allProgramPoints); - return new Witness(DataStructureUtils.concat(invariants, functionContracts)); + final var ghostDeclarations = extractGhostDeclarations(); + final var ghostUpdates = extractGhostUpdates(allTransitions); + return new Witness(DataStructureUtils.concat( + DataStructureUtils.concat(DataStructureUtils.concat(invariants, functionContracts), ghostDeclarations), + ghostUpdates)); + } + + private List extractGhostDeclarations() { + final var declaration = WitnessGhostDeclaration.getAnnotation(mIcfg); + if (declaration == null) { + return List.of(); + } + + final List result = new ArrayList<>(); + + for (final var entry : declaration.getGhostAndInitialValues().entrySet()) { + // TODO avoid assuming these defaults + result.add(new GhostVariable(entry.getKey(), entry.getValue().toString(), "C", "global", "int")); + } + + return result; + } + + private List extractGhostUpdates(final List transitions) { + final List result = new ArrayList<>(); + for (final IcfgEdge edge : transitions) { + final var update = WitnessGhostUpdate.getAnnotation(edge); + if (update == null) { + continue; + } + + final ILocation loc = ILocation.getAnnotation(edge); + if (loc == null) { + mLogger.warn("Omitting ghost update because no location found for edge %s", edge); + continue; + } + + for (final var assignment : update.getUpdate().entrySet()) { + result.add(new GhostUpdate(assignment.getKey(), assignment.getValue().toString(), "C", + getWitnessLocation(loc))); + } + } + return result; } - private List extractInvariants(final List programPoints) { + private List extractInvariants(final List programPoints) { final List result = new ArrayList<>(); for (final IcfgLocation pp : programPoints) { final ILocation loc = ILocation.getAnnotation(pp); @@ -87,7 +136,7 @@ private List extractInvariants(final List programPoi return result; } - private List extractFunctionContracts(final List programPoints) { + private List extractFunctionContracts(final List programPoints) { final List result = new ArrayList<>(); for (final IcfgLocation pp : programPoints) { final ILocation loc = ILocation.getAnnotation(pp); diff --git a/trunk/source/WitnessPrinter/src/de/uni_freiburg/informatik/ultimate/witnessprinter/yaml/YamlWitnessWriterV2.java b/trunk/source/WitnessPrinter/src/de/uni_freiburg/informatik/ultimate/witnessprinter/yaml/YamlWitnessWriterV2.java index c97c8b77066..5823f8299c4 100644 --- a/trunk/source/WitnessPrinter/src/de/uni_freiburg/informatik/ultimate/witnessprinter/yaml/YamlWitnessWriterV2.java +++ b/trunk/source/WitnessPrinter/src/de/uni_freiburg/informatik/ultimate/witnessprinter/yaml/YamlWitnessWriterV2.java @@ -121,7 +121,7 @@ private static List> extractGhostUpdates(final Witness witne final List> result = new ArrayList<>(); for (final var entry : locs2Updates.entrySet()) { final Map map = new LinkedHashMap<>(); - map.put("location", entry.getKey()); + map.put("location", entry.getKey().toMap()); final List> updateMap = entry.getValue().stream() .map(YamlWitnessWriterV2::extractGhostUpdateMap).collect(Collectors.toList()); map.put("updates", updateMap); @@ -132,7 +132,7 @@ private static List> extractGhostUpdates(final Witness witne private static Map extractGhostUpdateMap(final GhostUpdate update) { final Map result = new LinkedHashMap<>(); - result.put("variable", update.getName()); + result.put("variable", update.getVariable()); result.put("value", update.getValue()); result.put("format", update.getValueFormat()); return result;