svmranker:usage
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
svmranker:usage [2020/11/17 22:20] – [Usage] merlin | svmranker:usage [2020/11/20 14:10] – merlin | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | **[[svmranker: | + | {{: |
====== Usage ====== | ====== Usage ====== | ||
In the following, we assume that current directory is SVMRanker. | In the following, we assume that current directory is SVMRanker. | ||
Line 9: | Line 9: | ||
Usage: CLIMain.py [OPTIONS] COMMAND [ARGS]... | Usage: CLIMain.py [OPTIONS] COMMAND [ARGS]... | ||
" | " | ||
- | | + | |
Options: | Options: | ||
--help | --help | ||
- | | + | |
Commands: | Commands: | ||
lmulti | lmulti | ||
lnested | lnested | ||
- | | + | parseboogie |
- | parsectoboogie | + | |
- | parsectopy | + | |
- | As we can see, SVMRanker provides five commands. The first two commands allow for proving termination of a given program while the remaining three can be used for parsing the input file and translate it to a different format. In the remaining part of the section we focus on the details for the use of the lmulti and lnested commands. | + | As we can see, SVMRanker provides five commands. The first two commands allow for proving termination of a given program while the remaining three can be used for parsing the input file and translate it to a different format. In the remaining part of the section we focus on the details for the use of the **lmulti** and **lnested** commands. |
- | lmulti, short for learning multiphase ranking function, instructs SVMRanker to learn a multiphase ranking function for the given program. To get the detailed usage information for this command, one can use the following command. | + | **lmulti**, short for learning multiphase ranking function, instructs SVMRanker to learn a multiphase ranking function for the given program. To get the detailed usage information for this command, one can use the following command. |
python3 ./ | python3 ./ | ||
- | | + | |
The output is the following. | The output is the following. | ||
+ | |||
- | | + | < |
+ | SVMRanker --- Version 1.0 | ||
Usage: CLIMain.py lmulti [OPTIONS] SOURCE | Usage: CLIMain.py lmulti [OPTIONS] SOURCE | ||
Options: | Options: | ||
- | + | | |
- | < | + | |
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | num not enough default set to ENLARGE | ||
+ | |||
+ | | ||
+ | use f(x) < b to cut | ||
+ | | ||
+ | | ||
+ | | ||
+ | default set to MINI | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | or combination of all variables | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | </ | ||
+ | |||
+ | As the help shows, there are several options available to tune the execution of lmulti; we present their usage by means of a couple of examples. \\ | ||
+ | |||
+ | <code c Example1.c> | ||
+ | int main() { | ||
+ | | ||
+ | | ||
+ | x = x + y - 1; | ||
+ | y = y - 1; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | The is the first C program we consider here; see the file src/ | ||
+ | python3 ./ | ||
+ | SVMRanker completes the analysis by returning a 2-multiphase ranking function for the **Example1.c** program, as shown below. | ||
+ | <file> | ||
SVMRanker --- Version 1.0 | SVMRanker --- Version 1.0 | ||
- | Usage: CLIMain.py lmulti [OPTIONS] SOURCE | + | example/ |
+ | --------------------LEARNING MULTIPHASE SUMMARY------------------- | ||
+ | MULTIPHASE DEPTH: 2 | ||
+ | LEARNING RESULT: | ||
+ | -----------RANKING FUNCTIONS---------- | ||
+ | 5.0 * 1 + 1.0 * y^1 + 5.0 * 1 | ||
+ | 0.0796 * x^1 + 0.482 * 1 + 0.482 * 1 | ||
+ | </ | ||
+ | Notice that we used the option **--filetype** to specify the type of the input program, given that SVMRanker supports both Boogie programs and C programs as input file, with the former being the default format. Furthermore, | ||
- | Options: | + | <code c Example2.c> |
- | --depth_bound | + | int main() { |
- | --filetype | + | int x, y; |
- | --file BOOGIE: | + | |
- | + | x = x + y; | |
- | --sample_strategy [ENLARGE|CONSTRAINT] | + | y = y + z; |
- | --sample_strategy ENLARGE: enlarge the sample zone when sample num not enough. | + | z = z - 1; |
- | --sample_strategy CONSTRAINT: find feasible points by constraint if sample | + | } |
- | num not enough default set to ENLARGE | + | } |
+ | </ | ||
+ | If we run SVMRanker on **Example2.c** with the default value of 2 for **--depth_bound**, we obtain **Unknown** as result. In order to get an appropriate multiphase ranking function for **Example2.c**, | ||
+ | python3 ./ | ||
+ | With the help of **--depth_bound**, | ||
+ | < | ||
+ | SVMRanker | ||
+ | example/ | ||
+ | --------------------LEARNING MULTIPHASE SUMMARY------------------- | ||
+ | MULTIPHASE DEPTH: 3 | ||
+ | LEARNING RESULT: | ||
+ | -----------RANKING FUNCTIONS---------- | ||
+ | 2.0 * 1 + 2.0 * 1 + 1.0 * z^1 + 2.0 * 1 | ||
+ | 1.0 * 1 + 0.2154 * y^1 + 1.0 * 1 + 1.0 * 1 | ||
+ | 0.0911 * x^1 + 0.3226 * 1 + 0.3226 * 1 + 0.3226 * 1 | ||
+ | </ | ||
+ | We now present the other options that let SVMRanker use different strategies in the process of learning a multiphase ranking function; different strategies regarding how program data points are sampled, how the state space is cut, and what templates are used, influence the running time of SVMRanker and possibly the final result. | ||
- | | + | |
- | use f(x) < b to cut | + | |
- | --cutting_strategy POS: b is a postive number | + | |
- | --cutting_strategy NEG: b is a negative number | + | |
- | --cutting_strategy MINI: b is the minimum value of sampled points | + | |
- | | + | |
- | | + | |
- | templates | + | |
- | --template_strategy SINGLEFULL: templates | + | |
- | or combination of all variables | + | |
- | --template_strategy FULL: template is combination | + | |
- | default set to SINGLEFULL | + | |
- | | + | |
- | --print_level DEBUG: print all the information of the learning and debugging | + | |
- | --print_level INFO: print the information | + | |
- | NONE: only print the result information of the learning | + | |
- | default set to NONE | + | |
- | | + | |
- | </ | + | |
- | As the help shows, there are several options available to tune the execution of lmulti; we present their usage by means of a couple of examples. | + | The SVMRanker command **lnested**, short for learning nested ranking function, is used for learning a nested ranking function for a given program. The usage information |
+ | python3 ./ | ||
+ | The output is the following. | ||
+ | < | ||
+ | SVMRanker --- Version 1.0 | ||
+ | Usage: CLIMain.py **lnested** [OPTIONS] SOURCE | ||
- | <file java> | + | Options: |
- | + | --depth_bound INTEGER | |
- | int main() { | + | --filetype** [C|BOOGIE] |
- | int x, y; | + | --file BOOGIE: input is boogie file. default set to BOOGIE |
- | while(x > 0 || y > 0) { | + | |
- | x = x + y - 1; | + | |
- | y = y - 1; | + | |
- | } | + | |
- | } | + | |
- | | + | |
+ | | ||
+ | | ||
+ | if sample num not enough default set to ENLARGE | ||
+ | |||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | </ | ||
+ | As we can see, the options of ****lnested**** are also the ones of lmulti; also the use of **lnested** is similar to the one of **lmulti**, just the outcome can be different. | ||
+ | |||
+ | For instance, we can prove termination of ****Example2.c**** by means of a learned nested ranking function by running SVMRanker as follows. | ||
+ | python3 ./ | ||
+ | The output is shown below. | ||
+ | < | ||
+ | SVMRanker --- Version 1.0 | ||
+ | example/ | ||
+ | --------------------LEARNING NESTED SUMMARY------------------- | ||
+ | NESTED DEPTH: | ||
+ | LEARNING RESULT: | ||
+ | -----------RANKING FUNCTIONS---------- | ||
+ | 1.0 * z^1.0 + 0.9 * 1; 1.0 * y^1.0 + 0.9 * 1; 1.0 * x^1.0 + 0.7 * 1 | ||
+ | </ |