<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://prob.hhu.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Philipp+Koerner</id>
	<title>ProB Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://prob.hhu.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Philipp+Koerner"/>
	<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Special:Contributions/Philipp_Koerner"/>
	<updated>2026-05-27T09:02:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Distributed_Model_Checking&amp;diff=3948</id>
		<title>Distributed Model Checking</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Distributed_Model_Checking&amp;diff=3948"/>
		<updated>2018-01-26T13:19:46Z</updated>

		<summary type="html">&lt;p&gt;Philipp Koerner: add new preference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Distributed Model Checking allows to check invariants and deadlock-freedom (and assertions) with additional computational power. The distributed version of ProB is named &#039;&#039;distb&#039;&#039;. In the following, we will document how to run it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;distb&#039;&#039; consists of three components.&lt;br /&gt;
&lt;br /&gt;
* A master which coordinates the model checking process. Per distributed model checking, it must run exactly once.&lt;br /&gt;
* A proxy which coordinates workers on its machine. It should run (at least, but usually) once per participating machine.&lt;br /&gt;
* A worker which does the actual work. A good number of workers usually is close to the amount of available (physical) CPU cores of a participating machine.&lt;br /&gt;
&lt;br /&gt;
== Setting up shared memory ==&lt;br /&gt;
&lt;br /&gt;
It might be necessary to increase the limits of how much shared memory may be allocated, both per segment and overall. This is, to our knowledge, required for Mac OS X and older versions of Ubuntu. You can view the limits by running:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sysctl -a | grep shm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per default, recent versions of Ubuntu set the following values:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;kernel.shmall = 18446744073692774399&lt;br /&gt;
kernel.shmmax = 18446744073692774399&lt;br /&gt;
kernel.shmmni = 4096&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Mac OS X, the keys might be different and you can set them by executing:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo sysctl -w kern.sysv.shmmax=18446744073692774399&lt;br /&gt;
sudo sysctl -w kern.sysv.shmseg=4096&lt;br /&gt;
sudo sysctl -w kern.sysv.shmall=18446744073692774399&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running &#039;&#039;distb&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Run once per machine:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/path/to/prob/lib/proxy $MASTER_IP 5000 $IP 30 $LOGFILE_PROXY $PROXY_NUMBER&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that on Linux systems you might need to set the LD_LIBRARY_PATH variable to find the ZeroMQ libraries beforehand (for all components):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;export LD_LIBRARY_PATH=/path/to/prob/lib&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run once per model checking:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/path/to/prob/probcli -bf -zmq_master &amp;lt;unique identifier&amp;gt; $MODEL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run as many workers as you want:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/path/to/prob/probcli -zmq_worker &amp;lt;unique identifier&amp;gt; &amp;amp;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can fine-tune the following parameters by adding -p NAME VALUE to the corresponding call (e.g., ./probcli -zmq_worker worker1 -p port 5010 -p max_states_in_memory 100) :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Default !! Description !! Applicable for...&lt;br /&gt;
|-&lt;br /&gt;
|port || 5000 || TCP ports should be used starting at... || master, worker&lt;br /&gt;
|-&lt;br /&gt;
| ip || localhost  || IP of the master component || master&lt;br /&gt;
|-&lt;br /&gt;
| max_states || 0 || how many states should be checked at most (0 means all) || master&lt;br /&gt;
|-&lt;br /&gt;
| tmpdir || /tmp/ || directory for temporary files || master, worker&lt;br /&gt;
|-&lt;br /&gt;
| logdir || ./distb-logs || directory for log output (must exist) || master, worker&lt;br /&gt;
|-&lt;br /&gt;
| proxynumber || 0 || which proxy should the component connect to (if multiple run on the same machine)  || worker&lt;br /&gt;
|-&lt;br /&gt;
| max_states_in_memory || 1000 || how many states may be kept in memory before written into a database || worker&lt;br /&gt;
|-&lt;br /&gt;
| hash_cycle || 25 || minimum amount of milliseconds that has to pass between hash code updates from the master || master&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Philipp Koerner</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Distributed_Model_Checking&amp;diff=3947</id>
		<title>Distributed Model Checking</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Distributed_Model_Checking&amp;diff=3947"/>
		<updated>2018-01-26T10:35:39Z</updated>

		<summary type="html">&lt;p&gt;Philipp Koerner: fix table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Distributed Model Checking allows to check invariants and deadlock-freedom (and assertions) with additional computational power. The distributed version of ProB is named &#039;&#039;distb&#039;&#039;. In the following, we will document how to run it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;distb&#039;&#039; consists of three components.&lt;br /&gt;
&lt;br /&gt;
* A master which coordinates the model checking process. Per distributed model checking, it must run exactly once.&lt;br /&gt;
* A proxy which coordinates workers on its machine. It should run (at least, but usually) once per participating machine.&lt;br /&gt;
* A worker which does the actual work. A good number of workers usually is close to the amount of available (physical) CPU cores of a participating machine.&lt;br /&gt;
&lt;br /&gt;
== Setting up shared memory ==&lt;br /&gt;
&lt;br /&gt;
It might be necessary to increase the limits of how much shared memory may be allocated, both per segment and overall. This is, to our knowledge, required for Mac OS X and older versions of Ubuntu. You can view the limits by running:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sysctl -a | grep shm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per default, recent versions of Ubuntu set the following values:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;kernel.shmall = 18446744073692774399&lt;br /&gt;
kernel.shmmax = 18446744073692774399&lt;br /&gt;
kernel.shmmni = 4096&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Mac OS X, the keys might be different and you can set them by executing:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo sysctl -w kern.sysv.shmmax=18446744073692774399&lt;br /&gt;
sudo sysctl -w kern.sysv.shmseg=4096&lt;br /&gt;
sudo sysctl -w kern.sysv.shmall=18446744073692774399&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running &#039;&#039;distb&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Run once per machine:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/path/to/prob/lib/proxy $MASTER_IP 5000 $IP 30 $LOGFILE_PROXY $PROXY_NUMBER&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that on Linux systems you might need to set the LD_LIBRARY_PATH variable to find the ZeroMQ libraries beforehand (for all components):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;export LD_LIBRARY_PATH=/path/to/prob/lib&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run once per model checking:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/path/to/prob/probcli -bf -zmq_master &amp;lt;unique identifier&amp;gt; $MODEL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run as many workers as you want:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/path/to/prob/probcli -zmq_worker &amp;lt;unique identifier&amp;gt; &amp;amp;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can fine-tune the following parameters by adding -p NAME VALUE to the corresponding call (e.g., ./probcli -zmq_worker worker1 -p port 5010 -p max_states_in_memory 100) :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Default !! Description !! Applicable for...&lt;br /&gt;
|-&lt;br /&gt;
|port || 5000 || TCP ports should be used starting at... || master, worker&lt;br /&gt;
|-&lt;br /&gt;
| ip || localhost  || IP of the master component || master&lt;br /&gt;
|-&lt;br /&gt;
| max_states || 0 || how many states should be checked at most (0 means all) || master&lt;br /&gt;
|-&lt;br /&gt;
| tmpdir || /tmp/ || directory for temporary files || master, worker&lt;br /&gt;
|-&lt;br /&gt;
| logdir || ./distb-logs || directory for log output (must exist) || master, worker&lt;br /&gt;
|-&lt;br /&gt;
| proxynumber || 0 || which proxy should the component connect to (if multiple run on the same machine)  || worker&lt;br /&gt;
|-&lt;br /&gt;
| max_states_in_memory || 1000 || how many states may be kept in memory before written into a database || worker&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Philipp Koerner</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Distributed_Model_Checking&amp;diff=3946</id>
		<title>Distributed Model Checking</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Distributed_Model_Checking&amp;diff=3946"/>
		<updated>2018-01-26T10:35:14Z</updated>

		<summary type="html">&lt;p&gt;Philipp Koerner: startup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Distributed Model Checking allows to check invariants and deadlock-freedom (and assertions) with additional computational power. The distributed version of ProB is named &#039;&#039;distb&#039;&#039;. In the following, we will document how to run it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;distb&#039;&#039; consists of three components.&lt;br /&gt;
&lt;br /&gt;
* A master which coordinates the model checking process. Per distributed model checking, it must run exactly once.&lt;br /&gt;
* A proxy which coordinates workers on its machine. It should run (at least, but usually) once per participating machine.&lt;br /&gt;
* A worker which does the actual work. A good number of workers usually is close to the amount of available (physical) CPU cores of a participating machine.&lt;br /&gt;
&lt;br /&gt;
== Setting up shared memory ==&lt;br /&gt;
&lt;br /&gt;
It might be necessary to increase the limits of how much shared memory may be allocated, both per segment and overall. This is, to our knowledge, required for Mac OS X and older versions of Ubuntu. You can view the limits by running:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sysctl -a | grep shm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per default, recent versions of Ubuntu set the following values:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;kernel.shmall = 18446744073692774399&lt;br /&gt;
kernel.shmmax = 18446744073692774399&lt;br /&gt;
kernel.shmmni = 4096&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Mac OS X, the keys might be different and you can set them by executing:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo sysctl -w kern.sysv.shmmax=18446744073692774399&lt;br /&gt;
sudo sysctl -w kern.sysv.shmseg=4096&lt;br /&gt;
sudo sysctl -w kern.sysv.shmall=18446744073692774399&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running &#039;&#039;distb&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Run once per machine:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/path/to/prob/lib/proxy $MASTER_IP 5000 $IP 30 $LOGFILE_PROXY $PROXY_NUMBER&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that on Linux systems you might need to set the LD_LIBRARY_PATH variable to find the ZeroMQ libraries beforehand (for all components):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;export LD_LIBRARY_PATH=/path/to/prob/lib&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run once per model checking:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/path/to/prob/probcli -bf -zmq_master &amp;lt;unique identifier&amp;gt; $MODEL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run as many workers as you want:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/path/to/prob/probcli -zmq_worker &amp;lt;unique identifier&amp;gt; &amp;amp;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can fine-tune the following parameters by adding -p NAME VALUE to the corresponding call (e.g., ./probcli -zmq_worker worker1 -p port 5010 -p max_states_in_memory 100) :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Default !! Description !! Applicable for...&lt;br /&gt;
|-&lt;br /&gt;
|port || 5000 || TCP ports should be used starting at... || master, worker&lt;br /&gt;
|-&lt;br /&gt;
| ip || localhost  || IP of the master component || master&lt;br /&gt;
|-&lt;br /&gt;
| max_states || 0 || how many states should be checked at most (0 means all) || master&lt;br /&gt;
|-&lt;br /&gt;
| tmpdir || /tmp/ || directory for temporary files || master, worker&lt;br /&gt;
|-&lt;br /&gt;
logdir || ./distb-logs || directory for log output (must exist) || master, worker&lt;br /&gt;
|-&lt;br /&gt;
proxynumber || 0 || which proxy should the component connect to (if multiple run on the same machine)  || worker&lt;br /&gt;
|-&lt;br /&gt;
max_states_in_memory || 1000 || how many states may be kept in memory before written into a database || worker&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Philipp Koerner</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Distributed_Model_Checking&amp;diff=3945</id>
		<title>Distributed Model Checking</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Distributed_Model_Checking&amp;diff=3945"/>
		<updated>2018-01-26T10:23:20Z</updated>

		<summary type="html">&lt;p&gt;Philipp Koerner: add distributed model checking page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Distributed Model Checking allows to check invariants and deadlock-freedom (and assertions) with additional computational power. The distributed version of ProB is named &#039;&#039;distb&#039;&#039;. In the following, we will document how to run it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;distb&#039;&#039; consists of three components.&lt;br /&gt;
&lt;br /&gt;
* A master which coordinates the model checking process. Per distributed model checking, it must run exactly once.&lt;br /&gt;
* A proxy which coordinates workers on its machine. It should run (at least, but usually) once per participating machine.&lt;br /&gt;
* A worker which does the actual work. A good number of workers usually is close to the amount of available (physical) CPU cores of a participating machine.&lt;br /&gt;
&lt;br /&gt;
== Setting up shared memory ==&lt;br /&gt;
&lt;br /&gt;
It might be necessary to increase the limits of how much shared memory may be allocated, both per segment and overall. This is, to our knowledge, required for Mac OS X and older versions of Ubuntu. You can view the limits by running:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sysctl -a | grep shm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per default, recent versions of Ubuntu set the following values:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;kernel.shmall = 18446744073692774399&lt;br /&gt;
kernel.shmmax = 18446744073692774399&lt;br /&gt;
kernel.shmmni = 4096&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Mac OS X, the keys might be different and you can set them by executing:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo sysctl -w kern.sysv.shmmax=18446744073692774399&lt;br /&gt;
sudo sysctl -w kern.sysv.shmseg=4096&lt;br /&gt;
sudo sysctl -w kern.sysv.shmall=18446744073692774399&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Philipp Koerner</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=User:Philipp_Koerner&amp;diff=3944</id>
		<title>User:Philipp Koerner</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=User:Philipp_Koerner&amp;diff=3944"/>
		<updated>2018-01-26T10:16:16Z</updated>

		<summary type="html">&lt;p&gt;Philipp Koerner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Distributed Model Checking]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
jasper ProB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
test 64 bit architecture (64 bit build .so files)&lt;br /&gt;
//test required libraries&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Minimalistic Jasper Implementation&lt;br /&gt;
&lt;br /&gt;
required files (cant run ProB, see below for more information)&lt;br /&gt;
--------------&lt;br /&gt;
tree ./lib/&lt;br /&gt;
&lt;br /&gt;
lib&lt;br /&gt;
&lt;br /&gt;
├── libspnative.so&lt;br /&gt;
&lt;br /&gt;
├── libsprt4-2-0.so&lt;br /&gt;
&lt;br /&gt;
├── sicstus-4.2.0&lt;br /&gt;
&lt;br /&gt;
│   └── bin&lt;br /&gt;
&lt;br /&gt;
│       ├── jasper.jar&lt;br /&gt;
&lt;br /&gt;
│       └── sprt.sav&lt;br /&gt;
&lt;br /&gt;
└── sp-4.2.0 -&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classpath: .../lib/sicstus-4.2.0/bin/jasper.jar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The SICStus tries to load the library libspnative.so if not loaded yet. These files have to be located two subdirectories underneath the .jar file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
see: SICStus.java ll. 540 - 544&lt;br /&gt;
&lt;br /&gt;
*// jasper.jar is&lt;br /&gt;
&lt;br /&gt;
*// &amp;lt;installpath&amp;gt;/lib/sicstus-&amp;lt;version&amp;gt;/bin/jasper.jar&lt;br /&gt;
&lt;br /&gt;
*// lib path is &amp;lt;installpath&amp;gt;/lib&lt;br /&gt;
&lt;br /&gt;
*// This does the trick:&lt;br /&gt;
&lt;br /&gt;
*File libPath = jarFile.getParentFile().getParentFile().getParentFile();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The library file spnative requires the file libsprt4-2-0.so. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
ldd -v libspnative.so &lt;br /&gt;
&lt;br /&gt;
*	linux-gate.so.1 =&amp;gt;  (0x0018d000)&lt;br /&gt;
&lt;br /&gt;
*	libsprt4-2-0.so =&amp;gt; /path/to/libspnative.so/./sp-4.2.0/libsprt4-2-0.so (0x00e4e000)&lt;br /&gt;
&lt;br /&gt;
*	libc.so.6 =&amp;gt; /lib/libc.so.6 (0x00389000)&lt;br /&gt;
&lt;br /&gt;
*	libdl.so.2 =&amp;gt; /lib/libdl.so.2 (0x0055a000)&lt;br /&gt;
&lt;br /&gt;
*	libm.so.6 =&amp;gt; /lib/libm.so.6 (0x00110000)&lt;br /&gt;
&lt;br /&gt;
*	libpthread.so.0 =&amp;gt; /lib/libpthread.so.0 (0x0095e000)&lt;br /&gt;
&lt;br /&gt;
*	librt.so.1 =&amp;gt; /lib/librt.so.1 (0x00310000)&lt;br /&gt;
&lt;br /&gt;
*	/lib/ld-linux.so.2 (0x4cf5b000)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hence the link to the directory itself, so spnative may find sprt4-2-0. The libraries may also depend on the architecture since a 64 bit ubuntu doesn&#039;t run a 32 bit package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creating a SICStus object requires the sprt.sav file, the SICStus Runtime Library or bootfile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Running ProB.sav via Jasper&lt;br /&gt;
// WARNING! Unstable yet. Requires testing.&lt;br /&gt;
// Warning was caused by extra libraries. May be solved now? (META INF of probcli.sav)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Trying to run the ProB file by calling SICStus.restore() fails because some libraries aren&#039;t in the minimalistic Jasper configuration.&lt;br /&gt;
&lt;br /&gt;
[philipp@netbook prolog]$ java ProBTest&lt;br /&gt;
error(existence_error(source_sink,library(system(codesio))),existence_error(restore(probcli.sav),1,file,library(system(codesio)),0))&lt;br /&gt;
	at se.sics.jasper.SICStus.handleQueryResult(SICStus.java:1292)&lt;br /&gt;
	at se.sics.jasper.SICStus.restore(SICStus.java:1040)&lt;br /&gt;
	at ProBTest.main(ProBTest.java:25)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It requires some glibc2.7 libraries located in /path/to/spnative/sicstus&amp;lt;version&amp;gt;/library/x86-linux-glibc2.7/ (probably other libraries for a 64 bit system (other path, too?))&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
*# META_INFO 1&lt;br /&gt;
&lt;br /&gt;
*# FILE: &amp;quot;probcli.sav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;fastrw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;random&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;clpfd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;timeout&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;codesio&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# META_INFO END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
tree ./newlib/&lt;br /&gt;
&lt;br /&gt;
├── libspnative.so&lt;br /&gt;
&lt;br /&gt;
├── libsprt4-2-0.so&lt;br /&gt;
&lt;br /&gt;
├── sicstus-4.2.0&lt;br /&gt;
&lt;br /&gt;
│   ├── bin&lt;br /&gt;
&lt;br /&gt;
│   │   ├── jasper.jar&lt;br /&gt;
&lt;br /&gt;
│   │   └── sprt.sav&lt;br /&gt;
&lt;br /&gt;
│   └── library&lt;br /&gt;
&lt;br /&gt;
│       └── x86-linux-glibc2.7&lt;br /&gt;
&lt;br /&gt;
│           ├── clpfd.so&lt;br /&gt;
&lt;br /&gt;
│           ├── codesio.so&lt;br /&gt;
&lt;br /&gt;
│           ├── fastrw.so&lt;br /&gt;
&lt;br /&gt;
│           ├── random.so&lt;br /&gt;
&lt;br /&gt;
│           └── timeout.so&lt;br /&gt;
&lt;br /&gt;
└── sp-4.2.0 -&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
To ensure everything is working smoothly, one should copy every single library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Running ProB via Jasper requires the environmental variable $PROB_HOME. This should be set to the path where the probcli.sav file is located (may require to run &#039;make&#039; first to generate it).&lt;br /&gt;
&lt;br /&gt;
Next thing to do is to write a basic Java code. Imports should look like this:&lt;br /&gt;
&lt;br /&gt;
import se.sics.jasper.SICStus;&lt;br /&gt;
import se.sics.jasper.Query;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We need an instance of a SICStus, a Query and a Map object. A useful code fragment:&lt;br /&gt;
&lt;br /&gt;
try&lt;br /&gt;
sp = new SICStus(String[] args, null);&lt;br /&gt;
sp.restore(&amp;quot;file.sav&amp;quot;);&lt;br /&gt;
query = sp.openPrologQuery(&amp;quot;predicate(...).&amp;quot;, map);&lt;br /&gt;
query.nextSolution() &amp;lt;=&amp;gt; solution in map&lt;br /&gt;
	catch Exception e.&lt;br /&gt;
&lt;br /&gt;
The second argument of creating a new SICStus object is a String and it is (was?) used to set up the bootpath to sprt.sav. Since our sprt.sav is in the correct place anyway, we don&#039;t need one.&lt;br /&gt;
&lt;br /&gt;
A query that should be made like this:&lt;br /&gt;
set_search_pathes(A,B).&lt;br /&gt;
This may be done via sp.query(&amp;quot;set_search_pathes(A,B)&amp;quot;); or query = sp.openPrologQuery(&amp;quot;set_search_pathes(A,B)&amp;quot;); query.nextSolution();&lt;br /&gt;
&lt;br /&gt;
Note that openPrologQuery does NOT execute the query until a solution is called.&lt;/div&gt;</summary>
		<author><name>Philipp Koerner</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=User:Philipp_Koerner&amp;diff=1202</id>
		<title>User:Philipp Koerner</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=User:Philipp_Koerner&amp;diff=1202"/>
		<updated>2011-11-28T14:46:41Z</updated>

		<summary type="html">&lt;p&gt;Philipp Koerner: added query-handling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;jasper ProB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
test 64 bit architecture (64 bit build .so files)&lt;br /&gt;
//test required libraries&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Minimalistic Jasper Implementation&lt;br /&gt;
&lt;br /&gt;
required files (cant run ProB, see below for more information)&lt;br /&gt;
--------------&lt;br /&gt;
tree ./lib/&lt;br /&gt;
&lt;br /&gt;
lib&lt;br /&gt;
&lt;br /&gt;
├── libspnative.so&lt;br /&gt;
&lt;br /&gt;
├── libsprt4-2-0.so&lt;br /&gt;
&lt;br /&gt;
├── sicstus-4.2.0&lt;br /&gt;
&lt;br /&gt;
│   └── bin&lt;br /&gt;
&lt;br /&gt;
│       ├── jasper.jar&lt;br /&gt;
&lt;br /&gt;
│       └── sprt.sav&lt;br /&gt;
&lt;br /&gt;
└── sp-4.2.0 -&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classpath: .../lib/sicstus-4.2.0/bin/jasper.jar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The SICStus tries to load the library libspnative.so if not loaded yet. These files have to be located two subdirectories underneath the .jar file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
see: SICStus.java ll. 540 - 544&lt;br /&gt;
&lt;br /&gt;
*// jasper.jar is&lt;br /&gt;
&lt;br /&gt;
*// &amp;lt;installpath&amp;gt;/lib/sicstus-&amp;lt;version&amp;gt;/bin/jasper.jar&lt;br /&gt;
&lt;br /&gt;
*// lib path is &amp;lt;installpath&amp;gt;/lib&lt;br /&gt;
&lt;br /&gt;
*// This does the trick:&lt;br /&gt;
&lt;br /&gt;
*File libPath = jarFile.getParentFile().getParentFile().getParentFile();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The library file spnative requires the file libsprt4-2-0.so. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
ldd -v libspnative.so &lt;br /&gt;
&lt;br /&gt;
*	linux-gate.so.1 =&amp;gt;  (0x0018d000)&lt;br /&gt;
&lt;br /&gt;
*	libsprt4-2-0.so =&amp;gt; /path/to/libspnative.so/./sp-4.2.0/libsprt4-2-0.so (0x00e4e000)&lt;br /&gt;
&lt;br /&gt;
*	libc.so.6 =&amp;gt; /lib/libc.so.6 (0x00389000)&lt;br /&gt;
&lt;br /&gt;
*	libdl.so.2 =&amp;gt; /lib/libdl.so.2 (0x0055a000)&lt;br /&gt;
&lt;br /&gt;
*	libm.so.6 =&amp;gt; /lib/libm.so.6 (0x00110000)&lt;br /&gt;
&lt;br /&gt;
*	libpthread.so.0 =&amp;gt; /lib/libpthread.so.0 (0x0095e000)&lt;br /&gt;
&lt;br /&gt;
*	librt.so.1 =&amp;gt; /lib/librt.so.1 (0x00310000)&lt;br /&gt;
&lt;br /&gt;
*	/lib/ld-linux.so.2 (0x4cf5b000)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hence the link to the directory itself, so spnative may find sprt4-2-0. The libraries may also depend on the architecture since a 64 bit ubuntu doesn&#039;t run a 32 bit package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creating a SICStus object requires the sprt.sav file, the SICStus Runtime Library or bootfile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Running ProB.sav via Jasper&lt;br /&gt;
// WARNING! Unstable yet. Requires testing.&lt;br /&gt;
// Warning was caused by extra libraries. May be solved now? (META INF of probcli.sav)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Trying to run the ProB file by calling SICStus.restore() fails because some libraries aren&#039;t in the minimalistic Jasper configuration.&lt;br /&gt;
&lt;br /&gt;
[philipp@netbook prolog]$ java ProBTest&lt;br /&gt;
error(existence_error(source_sink,library(system(codesio))),existence_error(restore(probcli.sav),1,file,library(system(codesio)),0))&lt;br /&gt;
	at se.sics.jasper.SICStus.handleQueryResult(SICStus.java:1292)&lt;br /&gt;
	at se.sics.jasper.SICStus.restore(SICStus.java:1040)&lt;br /&gt;
	at ProBTest.main(ProBTest.java:25)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It requires some glibc2.7 libraries located in /path/to/spnative/sicstus&amp;lt;version&amp;gt;/library/x86-linux-glibc2.7/ (probably other libraries for a 64 bit system (other path, too?))&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
*# META_INFO 1&lt;br /&gt;
&lt;br /&gt;
*# FILE: &amp;quot;probcli.sav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;fastrw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;random&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;clpfd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;timeout&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;codesio&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# META_INFO END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
tree ./newlib/&lt;br /&gt;
&lt;br /&gt;
├── libspnative.so&lt;br /&gt;
&lt;br /&gt;
├── libsprt4-2-0.so&lt;br /&gt;
&lt;br /&gt;
├── sicstus-4.2.0&lt;br /&gt;
&lt;br /&gt;
│   ├── bin&lt;br /&gt;
&lt;br /&gt;
│   │   ├── jasper.jar&lt;br /&gt;
&lt;br /&gt;
│   │   └── sprt.sav&lt;br /&gt;
&lt;br /&gt;
│   └── library&lt;br /&gt;
&lt;br /&gt;
│       └── x86-linux-glibc2.7&lt;br /&gt;
&lt;br /&gt;
│           ├── clpfd.so&lt;br /&gt;
&lt;br /&gt;
│           ├── codesio.so&lt;br /&gt;
&lt;br /&gt;
│           ├── fastrw.so&lt;br /&gt;
&lt;br /&gt;
│           ├── random.so&lt;br /&gt;
&lt;br /&gt;
│           └── timeout.so&lt;br /&gt;
&lt;br /&gt;
└── sp-4.2.0 -&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
To ensure everything is working smoothly, one should copy every single library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Running ProB via Jasper requires the environmental variable $PROB_HOME. This should be set to the path where the probcli.sav file is located (may require to run &#039;make&#039; first to generate it).&lt;br /&gt;
&lt;br /&gt;
Next thing to do is to write a basic Java code. Imports should look like this:&lt;br /&gt;
&lt;br /&gt;
import se.sics.jasper.SICStus;&lt;br /&gt;
import se.sics.jasper.Query;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We need an instance of a SICStus, a Query and a Map object. A useful code fragment:&lt;br /&gt;
&lt;br /&gt;
try&lt;br /&gt;
sp = new SICStus(String[] args, null);&lt;br /&gt;
sp.restore(&amp;quot;file.sav&amp;quot;);&lt;br /&gt;
query = sp.openPrologQuery(&amp;quot;predicate(...).&amp;quot;, map);&lt;br /&gt;
query.nextSolution() &amp;lt;=&amp;gt; solution in map&lt;br /&gt;
	catch Exception e.&lt;br /&gt;
&lt;br /&gt;
The second argument of creating a new SICStus object is a String and it is (was?) used to set up the bootpath to sprt.sav. Since our sprt.sav is in the correct place anyway, we don&#039;t need one.&lt;br /&gt;
&lt;br /&gt;
A query that should be made like this:&lt;br /&gt;
set_search_pathes(A,B).&lt;br /&gt;
This may be done via sp.query(&amp;quot;set_search_pathes(A,B)&amp;quot;); or query = sp.openPrologQuery(&amp;quot;set_search_pathes(A,B)&amp;quot;); query.nextSolution();&lt;br /&gt;
&lt;br /&gt;
Note that openPrologQuery does NOT execute the query until a solution is called.&lt;/div&gt;</summary>
		<author><name>Philipp Koerner</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=User:Philipp_Koerner&amp;diff=1201</id>
		<title>User:Philipp Koerner</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=User:Philipp_Koerner&amp;diff=1201"/>
		<updated>2011-11-28T13:03:31Z</updated>

		<summary type="html">&lt;p&gt;Philipp Koerner: adding information of probcli.sav&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;jasper ProB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
test 64 bit architecture (64 bit build .so files)&lt;br /&gt;
test required libraries&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Minimalistic Jasper Implementation&lt;br /&gt;
&lt;br /&gt;
required files&lt;br /&gt;
--------------&lt;br /&gt;
tree ./lib/&lt;br /&gt;
&lt;br /&gt;
lib&lt;br /&gt;
&lt;br /&gt;
├── libspnative.so&lt;br /&gt;
&lt;br /&gt;
├── libsprt4-2-0.so&lt;br /&gt;
&lt;br /&gt;
├── sicstus-4.2.0&lt;br /&gt;
&lt;br /&gt;
│   └── bin&lt;br /&gt;
&lt;br /&gt;
│       ├── jasper.jar&lt;br /&gt;
&lt;br /&gt;
│       └── sprt.sav&lt;br /&gt;
&lt;br /&gt;
└── sp-4.2.0 -&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classpath: .../lib/sicstus-4.2.0/bin/jasper.jar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The SICStus tries to load the library libspnative.so if not loaded yet. These files have to be located two subdirectories underneath the .jar file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
see: SICStus.java ll. 540 - 544&lt;br /&gt;
&lt;br /&gt;
*// jasper.jar is&lt;br /&gt;
&lt;br /&gt;
*// &amp;lt;installpath&amp;gt;/lib/sicstus-&amp;lt;version&amp;gt;/bin/jasper.jar&lt;br /&gt;
&lt;br /&gt;
*// lib path is &amp;lt;installpath&amp;gt;/lib&lt;br /&gt;
&lt;br /&gt;
*// This does the trick:&lt;br /&gt;
&lt;br /&gt;
*File libPath = jarFile.getParentFile().getParentFile().getParentFile();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The library file spnative requires the file libsprt4-2-0.so. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
ldd -v libspnative.so &lt;br /&gt;
&lt;br /&gt;
*	linux-gate.so.1 =&amp;gt;  (0x0018d000)&lt;br /&gt;
&lt;br /&gt;
*	libsprt4-2-0.so =&amp;gt; /path/to/libspnative.so/./sp-4.2.0/libsprt4-2-0.so (0x00e4e000)&lt;br /&gt;
&lt;br /&gt;
*	libc.so.6 =&amp;gt; /lib/libc.so.6 (0x00389000)&lt;br /&gt;
&lt;br /&gt;
*	libdl.so.2 =&amp;gt; /lib/libdl.so.2 (0x0055a000)&lt;br /&gt;
&lt;br /&gt;
*	libm.so.6 =&amp;gt; /lib/libm.so.6 (0x00110000)&lt;br /&gt;
&lt;br /&gt;
*	libpthread.so.0 =&amp;gt; /lib/libpthread.so.0 (0x0095e000)&lt;br /&gt;
&lt;br /&gt;
*	librt.so.1 =&amp;gt; /lib/librt.so.1 (0x00310000)&lt;br /&gt;
&lt;br /&gt;
*	/lib/ld-linux.so.2 (0x4cf5b000)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hence the link to the directory itself, so spnative may find sprt4-2-0. The libraries may also depend on the architecture since a 64 bit ubuntu doesn&#039;t run a 32 bit package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creating a SICStus object requires the sprt.sav file, the SICStus Runtime Library or bootfile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Running ProB.sav via Jasper&lt;br /&gt;
WARNING! Unstable yet. Requires testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Trying to run the ProB file by calling SICStus.restore() fails due to a library that isn&#039;t in the minimalistic configuration.&lt;br /&gt;
&lt;br /&gt;
[philipp@netbook prolog]$ java ProBTest&lt;br /&gt;
error(existence_error(source_sink,library(system(codesio))),existence_error(restore(probcli.sav),1,file,library(system(codesio)),0))&lt;br /&gt;
	at se.sics.jasper.SICStus.handleQueryResult(SICStus.java:1292)&lt;br /&gt;
	at se.sics.jasper.SICStus.restore(SICStus.java:1040)&lt;br /&gt;
	at ProBTest.main(ProBTest.java:25)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It requires some glibc2.7 libraries located in /path/to/spnative/sicstus&amp;lt;version&amp;gt;/library/x86-linux-glibc2.7/&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
*# META_INFO 1&lt;br /&gt;
&lt;br /&gt;
*# FILE: &amp;quot;/home/philipp/Documents/prolog/probcli.sav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;fastrw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;random&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;clpfd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;timeout&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# FR: &amp;quot;codesio&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*# META_INFO END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
tree ./newlib/&lt;br /&gt;
&lt;br /&gt;
├── libspnative.so&lt;br /&gt;
&lt;br /&gt;
├── libsprt4-2-0.so&lt;br /&gt;
&lt;br /&gt;
├── sicstus-4.2.0&lt;br /&gt;
&lt;br /&gt;
│   ├── bin&lt;br /&gt;
&lt;br /&gt;
│   │   ├── jasper.jar&lt;br /&gt;
&lt;br /&gt;
│   │   └── sprt.sav&lt;br /&gt;
&lt;br /&gt;
│   └── library&lt;br /&gt;
&lt;br /&gt;
│       └── x86-linux-glibc2.7&lt;br /&gt;
&lt;br /&gt;
│           ├── clpfd.so&lt;br /&gt;
&lt;br /&gt;
│           ├── codesio.so&lt;br /&gt;
&lt;br /&gt;
│           ├── fastrw.so&lt;br /&gt;
&lt;br /&gt;
│           ├── random.so&lt;br /&gt;
&lt;br /&gt;
│           └── timeout.so&lt;br /&gt;
&lt;br /&gt;
└── sp-4.2.0 -&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
To ensure everythings working smoothly, one should copy every single library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Running ProB via Jasper requires the environmental variable $PROB_HOME. This should be set to the path where the probcli.sav file is located (may require to run make first to generate it).&lt;br /&gt;
&lt;br /&gt;
Next thing to do is to write a basic Java code. Imports should look like this:&lt;br /&gt;
&lt;br /&gt;
import se.sics.jasper.SICStus;&lt;br /&gt;
import se.sics.jasper.Query;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We need an instance of a SICStus, a Query and a Map object. A useful code fragment:&lt;br /&gt;
&lt;br /&gt;
try&lt;br /&gt;
sp = new SICStus(String[] args, null);&lt;br /&gt;
sp.restore(&amp;quot;file.sav&amp;quot;);&lt;br /&gt;
query = sp.openPrologQuery(&amp;quot;predicate(...).&amp;quot;, map);&lt;br /&gt;
-&amp;gt; query.nextSolution() &amp;lt;=&amp;gt; solution in map&lt;br /&gt;
	catch Exception e.&lt;br /&gt;
&lt;br /&gt;
The second argument of creating a new SICStus object is a String and it is (was?) used to set up the bootpath to sprt.sav. Since our sprt.sav is in the correct place anyway, we don&#039;t need one.&lt;br /&gt;
&lt;br /&gt;
A query that should be made is:&lt;br /&gt;
set_search_pathes(A,B).&lt;/div&gt;</summary>
		<author><name>Philipp Koerner</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=User:Philipp_Koerner&amp;diff=1200</id>
		<title>User:Philipp Koerner</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=User:Philipp_Koerner&amp;diff=1200"/>
		<updated>2011-11-28T12:53:22Z</updated>

		<summary type="html">&lt;p&gt;Philipp Koerner: Jasper ProB Documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;jasper ProB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
test 64 bit architecture (64 bit build .so files)&lt;br /&gt;
test required libraries&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Minimalistic Jasper Implementation&lt;br /&gt;
&lt;br /&gt;
required files&lt;br /&gt;
--------------&lt;br /&gt;
tree ./lib/&lt;br /&gt;
&lt;br /&gt;
lib&lt;br /&gt;
&lt;br /&gt;
├── libspnative.so&lt;br /&gt;
&lt;br /&gt;
├── libsprt4-2-0.so&lt;br /&gt;
&lt;br /&gt;
├── sicstus-4.2.0&lt;br /&gt;
&lt;br /&gt;
│   └── bin&lt;br /&gt;
&lt;br /&gt;
│       ├── jasper.jar&lt;br /&gt;
&lt;br /&gt;
│       └── sprt.sav&lt;br /&gt;
&lt;br /&gt;
└── sp-4.2.0 -&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classpath: .../lib/sicstus-4.2.0/bin/jasper.jar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The SICStus tries to load the library libspnative.so if not loaded yet. These files have to be located two subdirectories underneath the .jar file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
see: SICStus.java ll. 540 - 544&lt;br /&gt;
&lt;br /&gt;
*// jasper.jar is&lt;br /&gt;
&lt;br /&gt;
*// &amp;lt;installpath&amp;gt;/lib/sicstus-&amp;lt;version&amp;gt;/bin/jasper.jar&lt;br /&gt;
&lt;br /&gt;
*// lib path is &amp;lt;installpath&amp;gt;/lib&lt;br /&gt;
&lt;br /&gt;
*// This does the trick:&lt;br /&gt;
&lt;br /&gt;
*File libPath = jarFile.getParentFile().getParentFile().getParentFile();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The library file spnative requires the file libsprt4-2-0.so. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
ldd -v libspnative.so &lt;br /&gt;
&lt;br /&gt;
*	linux-gate.so.1 =&amp;gt;  (0x0018d000)&lt;br /&gt;
&lt;br /&gt;
*	libsprt4-2-0.so =&amp;gt; /path/to/libspnative.so/./sp-4.2.0/libsprt4-2-0.so (0x00e4e000)&lt;br /&gt;
&lt;br /&gt;
*	libc.so.6 =&amp;gt; /lib/libc.so.6 (0x00389000)&lt;br /&gt;
&lt;br /&gt;
*	libdl.so.2 =&amp;gt; /lib/libdl.so.2 (0x0055a000)&lt;br /&gt;
&lt;br /&gt;
*	libm.so.6 =&amp;gt; /lib/libm.so.6 (0x00110000)&lt;br /&gt;
&lt;br /&gt;
*	libpthread.so.0 =&amp;gt; /lib/libpthread.so.0 (0x0095e000)&lt;br /&gt;
&lt;br /&gt;
*	librt.so.1 =&amp;gt; /lib/librt.so.1 (0x00310000)&lt;br /&gt;
&lt;br /&gt;
*	/lib/ld-linux.so.2 (0x4cf5b000)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hence the link to the directory itself, so spnative may find sprt4-2-0. The libraries may also depend on the architecture since a 64 bit ubuntu doesn&#039;t run a 32 bit package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creating a SICStus object requires the sprt.sav file, the SICStus Runtime Library or bootfile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Running ProB.sav via Jasper&lt;br /&gt;
WARNING! Unstable yet. Requires testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Trying to run the ProB file by calling SICStus.restore() fails due to a library that isn&#039;t in the minimalistic configuration.&lt;br /&gt;
&lt;br /&gt;
[philipp@netbook prolog]$ java ProBTest&lt;br /&gt;
error(existence_error(source_sink,library(system(codesio))),existence_error(restore(probcli.sav),1,file,library(system(codesio)),0))&lt;br /&gt;
	at se.sics.jasper.SICStus.handleQueryResult(SICStus.java:1292)&lt;br /&gt;
	at se.sics.jasper.SICStus.restore(SICStus.java:1040)&lt;br /&gt;
	at ProBTest.main(ProBTest.java:25)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It requires some glibc2.7 libraries located in /path/to/spnative/sicstus&amp;lt;version&amp;gt;/library/x86-linux-glibc2.7/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
tree ./newlib/&lt;br /&gt;
&lt;br /&gt;
├── libspnative.so&lt;br /&gt;
&lt;br /&gt;
├── libsprt4-2-0.so&lt;br /&gt;
&lt;br /&gt;
├── sicstus-4.2.0&lt;br /&gt;
&lt;br /&gt;
│   ├── bin&lt;br /&gt;
&lt;br /&gt;
│   │   ├── jasper.jar&lt;br /&gt;
&lt;br /&gt;
│   │   └── sprt.sav&lt;br /&gt;
&lt;br /&gt;
│   └── library&lt;br /&gt;
&lt;br /&gt;
│       └── x86-linux-glibc2.7&lt;br /&gt;
&lt;br /&gt;
│           ├── clpfd.so&lt;br /&gt;
&lt;br /&gt;
│           ├── codesio.so&lt;br /&gt;
&lt;br /&gt;
│           ├── fastrw.so&lt;br /&gt;
&lt;br /&gt;
│           ├── random.so&lt;br /&gt;
&lt;br /&gt;
│           └── timeout.so&lt;br /&gt;
&lt;br /&gt;
└── sp-4.2.0 -&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
To ensure everythings working smoothly, one should copy every single library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Running ProB via Jasper requires the environmental variable $PROB_HOME. This should be set to the path where the probcli.sav file is located (may require to run make first to generate it).&lt;br /&gt;
&lt;br /&gt;
Next thing to do is to write a basic Java code. Imports should look like this:&lt;br /&gt;
&lt;br /&gt;
import se.sics.jasper.SICStus;&lt;br /&gt;
import se.sics.jasper.Query;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We need an instance of a SICStus, a Query and a Map object. A useful code fragment:&lt;br /&gt;
&lt;br /&gt;
try&lt;br /&gt;
sp = new SICStus(String[] args, null);&lt;br /&gt;
sp.restore(&amp;quot;file.sav&amp;quot;);&lt;br /&gt;
query = sp.openPrologQuery(&amp;quot;predicate(...).&amp;quot;, map);&lt;br /&gt;
-&amp;gt; query.nextSolution() &amp;lt;=&amp;gt; solution in map&lt;br /&gt;
	catch Exception e.&lt;br /&gt;
&lt;br /&gt;
The second argument of creating a new SICStus object is a String and it is (was?) used to set up the bootpath to sprt.sav. Since our sprt.sav is in the correct place anyway, we don&#039;t need one.&lt;br /&gt;
&lt;br /&gt;
A query that should be made is:&lt;br /&gt;
set_search_pathes(A,B).&lt;/div&gt;</summary>
		<author><name>Philipp Koerner</name></author>
	</entry>
</feed>