Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Why3
why3
Commits
9999d201
Commit
9999d201
authored
May 28, 2015
by
Clément Fumex
Browse files
Work on hackers-deligh & queens examples.
Add int.NumOf realization.
parent
72521ec5
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Makefile.in
View file @
9999d201
...
...
@@ -840,7 +840,7 @@ ifeq (@enable_coq_support@,yes)
ifeq
(@enable_coq_libs@,yes)
COQLIBS_INT_FILES
=
Abs ComputerDivision Div2 EuclideanDivision Int MinMax Power
COQLIBS_INT_FILES
=
Abs ComputerDivision Div2 EuclideanDivision Int MinMax Power
NumOf
COQLIBS_INT_ALL_FILES
=
Exponentiation
$(COQLIBS_INT_FILES)
COQLIBS_INT
=
$(
addprefix
lib/coq/int/,
$(COQLIBS_INT_ALL_FILES)
)
...
...
examples/bitvector_examples/why3session.xml
View file @
9999d201
This diff is collapsed.
Click to expand it.
examples/bitvector_examples/why3shapes.gz
View file @
9999d201
No preview for this file type
examples/hackers-delight.mlw
View file @
9999d201
...
...
@@ -2,9 +2,12 @@
*second edition *)
module Hackers_delight
use import int.Int
use import bool.Bool
(** {2 Utilitaries}
We introduce in this theory two functions that will help us
write properties on bit-manipulating procedures *)
theory Utils
use import bv.BV32
constant one : t = of_int 1
...
...
@@ -14,19 +17,8 @@ module Hackers_delight
function max (x y : t) : t = (if ult x y then y else x)
function min (x y : t) : t = (if ult x y then x else y)
(** {2 ASCII cheksum }
In the beginning the encoding of an ascii character was done on 8
bits: the first 7 bits were used for the carracter itself while
the 8th bit was used as a cheksum: a mean to detect errors. The
cheksum value was the binary sum of the 7 other bits, allowing the
detections of any change of an odd number of bits in the initial
value. Let's prove it! *)
(** {6 Hamming distance } *)
(** In order to express these properties we start by introducing a
function that returns the number of 1-bit in a bitvector (p.82)
*)
(** We start by introducing a function that returns the number of
1-bit in a bitvector (p.82) *)
function count (bv : t) : t =
let x = sub bv (bw_and (lsr_bv bv one) (of_int 0x55555555)) in
...
...
@@ -38,12 +30,34 @@ module Hackers_delight
let x = add x (lsr_bv x (of_int 16)) in
bw_and x (of_int 0x0000003F)
(** We can verify our definition by, first, checking that there are no
1-bits in the bitvector "zero": *)
(** We then define the associated notion of distance, namely
"Hamming distance", that counts the number of bits that differ
between two bitvectors. *)
function hammingD (a b : t) : t = count (bw_xor a b)
end
(** {2 Correctness of Utils}
Before using our two functions let's first check that they are correct !
*)
module Utils_Spec
use import int.Int
use import int.NumOf
use import bv.BV32
use import Utils
(** {6 count correctness } *)
(** Let's start by checking that there are no 1-bits in the
bitvector "zero": *)
lemma countZero: count zero = zero
(** And then, for b a bitvector with n 1-bits, checking that if its
lemma numOfZero: NumOf.numof (\i. nth zero i) 0 32 = 0
(** Now, for b a bitvector with n 1-bits, we check that if its
first bit is 0 then shifting b by one on the right doesn't
change the number of 1-bit. And if its first bit is one, then
there are n-1 1-bits in the shifting of b by one on the right. *)
...
...
@@ -52,18 +66,6 @@ module Hackers_delight
(not (nth_bv b zero) <-> count (lsr_bv b one) = count b) /\
(nth_bv b zero <-> count (lsr_bv b one) = sub (count b) one)
use import int.NumOf
lemma tointzero: to_uint zero = 0
lemma tointone: to_uint one = 1
lemma numOfZero: NumOf.numof (\i. nth zero i) 0 32 = 0
lemma numof_change_equiv:
forall p1 p2: int -> bool, a b: int.
(forall j: int. a <= j < b -> p1 j <-> p2 j) ->
numof p2 a b = numof p1 a b
let rec lemma numof_shift (p q : int -> bool) (a b k: int) : unit
requires {forall i. q i = p (i + k)}
variant {b - a}
...
...
@@ -72,15 +74,14 @@ module Hackers_delight
if a < b then
numof_shift p q a (b-1) k
let rec lemma countAux (bv : t) : unit
let rec lemma countSpec_Aux (bv : t) : unit
variant {bv with ult}
ensures {to_uint (count bv) = NumOf.numof (nth bv) 0 32}
=
if bv = zero then ()
else
begin
countAux (lsr_bv bv one);
count
Spec_
Aux (lsr_bv bv one);
assert {
let x = (if nth_bv bv zero then 1 else 0) in
let f = nth bv in
...
...
@@ -93,32 +94,33 @@ module Hackers_delight
}
end
(** With these lemmas, we can now prove the correctness property of
count: *)
lemma countSpec: forall b. to_uint (count b) = NumOf.numof
(nth b) 0 32
(** We then define the associated notion of distance, namely
"Hamming distance", that counts the number of bits that differ
between two bitvectors. *)
function hammingD (a b : t) : t = count (bw_xor a b)
predicate nth_diff (a b : t) (i : int) = nth a i <> nth b i
(** {6 hammingD correctness } *)
use HighOrd as HO
function fun_or (f g : HO.pred 'a) : HO.pred 'a = \x. f x \/ g x
predicate nth_diff (a b : t) (i : int) = nth a i <> nth b i
(** The correctness property can be express as the following: *)
let lemma hamming_spec (a b : t) : unit
ensures {to_uint (hammingD a b) = NumOf.numof (nth_diff a b) 0 32}
=
assert { forall i. 0 <= i < 32 -> nth (bw_xor a b) i <-> (nth_diff a b i) }
(** It is indeed a distance in the algebraic sense: *)
(** In addition we can prove that it is indeed a distance in the
algebraic sens: *)
lemma symmetric: forall a b. hammingD a b = hammingD b a
lemma separation: forall a b. hammingD a b = zero <-> a = b
function fun_or (f g : HO.pred 'a) : HO.pred 'a = \x. f x \/ g x
let rec lemma numof_or (p q : int -> bool) (a b: int) : unit
variant {b - a}
ensures {numof (fun_or p q) a b <= numof p a b + numof q a b}
...
...
@@ -133,16 +135,32 @@ module Hackers_delight
numof (fun_or (nth_diff a b) (nth_diff b c)) 0 32 >=
numof (nth_diff a c) 0 32}
lemma triangleInequality: forall a b c.
(* not proved ! :-( *)
lemma triangleInequality: forall a b c.
uge (add (hammingD a b) (hammingD b c)) (hammingD a c)
end
module Hackers_delight
use import int.Int
use import int.NumOf
use import bool.Bool
use import bv.BV32
use import Utils
(** {2 ASCII cheksum }
In the beginning the encoding of an ascii character was done on 8
bits: the first 7 bits were used for the carracter itself while
the 8th bit was used as a cheksum: a mean to detect errors. The
cheksum value was the binary sum of the 7 other bits, allowing the
detections of any change of an odd number of bits in the initial
value. Let's prove it! *)
(** {6 Checksum computation and correctness } *)
(** A ascii character is valid if its number of bits is even.
(Remember that a binary number is odd if and only if its first
bit is 1) *)
predicate validAscii (b : t) =
not
(nth_bv (count b) zero)
predicate validAscii (b : t) = (nth_bv (count b) zero)
= False
(** The ascii checksum aim is to make any character valid in the
sens that we just defined. One way to implement it is to count
...
...
examples/hackers-delight/why3session.xml
View file @
9999d201
...
...
@@ -7,210 +7,251 @@
<prover
id=
"2"
name=
"Z3"
version=
"4.3.2"
timelimit=
"5"
memlimit=
"1000"
/>
<prover
id=
"3"
name=
"CVC3"
version=
"2.4.1"
timelimit=
"5"
memlimit=
"1000"
/>
<file
name=
"../hackers-delight.mlw"
expanded=
"true"
>
<theory
name=
"Hackers_delight"
sum=
"9c3b657273e4ea082027d6ac7909b8f1"
expanded=
"true"
>
<theory
name=
"Utils"
sum=
"d41d8cd98f00b204e9800998ecf8427e"
expanded=
"true"
>
</theory>
<theory
name=
"Utils_Spec"
sum=
"3967722ffb6389d883275ccf0879b34f"
expanded=
"true"
>
<goal
name=
"countZero"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.05"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.09"
/></proof>
</goal>
<goal
name=
"countStep"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"4.98"
/></proof>
</goal>
<goal
name=
"tointzero"
expanded=
"true"
>
<proof
prover=
"1"
timelimit=
"15"
><result
status=
"valid"
time=
"0.01"
/></proof>
</goal>
<goal
name=
"tointone"
expanded=
"true"
>
<proof
prover=
"1"
timelimit=
"15"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.03"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.01"
/></proof>
</goal>
<goal
name=
"numOfZero"
expanded=
"true"
>
<proof
prover=
"1"
timelimit=
"15"
><result
status=
"timeout"
time=
"16.00"
/></proof>
<proof
prover=
"0"
><result
status=
"valid"
time=
"0.87"
steps=
"228"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.78"
/></proof>
</goal>
<goal
name=
"numof_change_equiv"
expanded=
"true"
>
<proof
prover=
"0"
timelimit=
"15"
><result
status=
"valid"
time=
"1.37"
steps=
"587"
/></proof>
<proof
prover=
"1"
timelimit=
"15"
><result
status=
"valid"
time=
"0.10"
/></proof>
<goal
name=
"countStep"
expanded=
"true"
>
<proof
prover=
"1"
timelimit=
"30"
><result
status=
"valid"
time=
"5.82"
/></proof>
</goal>
<goal
name=
"numof_shift"
expanded=
"true"
>
<proof
prover=
"0"
timelimit=
"15"
obsolete=
"true"
><result
status=
"timeout"
time=
"14.85"
/></proof>
<proof
prover=
"1"
timelimit=
"15"
obsolete=
"true"
><result
status=
"timeout"
time=
"16.02"
/></proof>
<proof
prover=
"2"
timelimit=
"15"
obsolete=
"true"
><result
status=
"timeout"
time=
"14.99"
/></proof>
<proof
prover=
"3"
timelimit=
"15"
obsolete=
"true"
><result
status=
"timeout"
time=
"14.94"
/></proof>
<goal
name=
"WP_parameter numof_shift"
expl=
"VC for numof_shift"
expanded=
"true"
>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.24"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.34"
/></proof>
</goal>
<goal
name=
"WP_parameter countAux"
expl=
"VC for countAux"
expanded=
"true"
>
<goal
name=
"WP_parameter count
Spec_
Aux"
expl=
"VC for count
Spec_
Aux"
expanded=
"true"
>
<transf
name=
"split_goal_wp"
expanded=
"true"
>
<goal
name=
"WP_parameter countAux.1"
expl=
"1. postcondition"
>
<proof
prover=
"0"
timelimit=
"15"
><result
status=
"valid"
time=
"0.24"
steps=
"137"
/></proof>
<proof
prover=
"1"
timelimit=
"15"
><result
status=
"valid"
time=
"0.08"
/></proof>
<goal
name=
"WP_parameter countSpec_Aux.1"
expl=
"1. postcondition"
expanded=
"true"
>
<proof
prover=
"0"
><result
status=
"valid"
time=
"0.89"
steps=
"265"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.61"
/></proof>
</goal>
<goal
name=
"WP_parameter countAux.2"
expl=
"2. variant decrease"
>
<proof
prover=
"1"
timelimit=
"15"
><result
status=
"valid"
time=
"0.03"
/></proof>
<goal
name=
"WP_parameter countSpec_Aux.2"
expl=
"2. variant decrease"
expanded=
"true"
>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.99"
/></proof>
</goal>
<goal
name=
"WP_parameter countAux.3"
expl=
"3. assertion"
expanded=
"true"
>
<goal
name=
"WP_parameter count
Spec_
Aux.3"
expl=
"3. assertion"
expanded=
"true"
>
<transf
name=
"split_goal_wp"
expanded=
"true"
>
<goal
name=
"WP_parameter countAux.3.1"
expl=
"1. assertion"
>
<proof
prover=
"
0
"
><
undone
/></proof>
<goal
name=
"WP_parameter count
Spec_
Aux.3.1"
expl=
"1. assertion"
expanded=
"true"
>
<proof
prover=
"
3
"
><
result
status=
"valid"
time=
"1.86"
/></proof>
</goal>
<goal
name=
"WP_parameter countAux.3.2"
expl=
"2. assertion"
>
<proof
prover=
"0"
><undone/></proof>
<proof
prover=
"3"
><undone/></proof>
<goal
name=
"WP_parameter countSpec_Aux.3.2"
expl=
"2. assertion"
expanded=
"true"
>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.60"
/></proof>
</goal>
<goal
name=
"WP_parameter countAux.3.3"
expl=
"3. assertion"
>
<goal
name=
"WP_parameter countSpec_Aux.3.3"
expl=
"3. assertion"
expanded=
"true"
>
<proof
prover=
"0"
><result
status=
"valid"
time=
"0.90"
steps=
"158"
/></proof>
</goal>
<goal
name=
"WP_parameter countAux.3.4"
expl=
"4. assertion"
>
<proof
prover=
"3"
><undone
/></proof>
<goal
name=
"WP_parameter count
Spec_
Aux.3.4"
expl=
"4. assertion"
expanded=
"true"
>
<proof
prover=
"3"
timelimit=
"15"
><result
status=
"valid"
time=
"7.26"
/></proof>
</goal>
</transf>
</goal>
<goal
name=
"WP_parameter countAux.4"
expl=
"4. postcondition"
expanded=
"true"
>
<proof
prover=
"1"
timelimit=
"15"
obsolete=
"true"
><undone
/></proof>
<goal
name=
"WP_parameter count
Spec_
Aux.4"
expl=
"4. postcondition"
expanded=
"true"
>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.57"
/></proof>
</goal>
</transf>
</goal>
<goal
name=
"countSpec"
expanded=
"true"
>
<proof
prover=
"0"
><result
status=
"valid"
time=
"0.04"
steps=
"76"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.08"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.06"
/></proof>
<proof
prover=
"0"
><result
status=
"valid"
time=
"0.05"
steps=
"72"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.10"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.00"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.04"
/></proof>
</goal>
<goal
name=
"WP_parameter hamming_spec"
expl=
"VC for hamming_spec"
expanded=
"true"
>
<transf
name=
"split_goal_wp"
expanded=
"true"
>
<goal
name=
"WP_parameter hamming_spec.1"
expl=
"1. assertion"
expanded=
"true"
>
<proof
prover=
"0"
><result
status=
"valid"
time=
"0.25"
steps=
"216"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.06"
/></proof>
</goal>
<goal
name=
"WP_parameter hamming_spec.2"
expl=
"2. postcondition"
expanded=
"true"
>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.14"
/></proof>
</goal>
</transf>
</goal>
<goal
name=
"symmetric"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.
02
"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.0
1
"
/></proof>
<goal
name=
"symmetric"
expanded=
"true"
>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.
11
"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.0
2
"
/></proof>
</goal>
<goal
name=
"separation"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.06"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.39"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.12"
/></proof>
</goal>
<goal
name=
"WP_parameter numof_or"
expl=
"VC for numof_or"
expanded=
"true"
>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.53"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.06"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.30"
/></proof>
</goal>
<goal
name=
"WP_parameter triangleInequalityInt"
expl=
"VC for triangleInequalityInt"
expanded=
"true"
>
<transf
name=
"split_goal_wp"
expanded=
"true"
>
<goal
name=
"WP_parameter triangleInequalityInt.1"
expl=
"1. assertion"
expanded=
"true"
>
<transf
name=
"split_goal_wp"
expanded=
"true"
>
<goal
name=
"WP_parameter triangleInequalityInt.1.1"
expl=
"1. VC for triangleInequalityInt"
expanded=
"true"
>
<proof
prover=
"0"
><result
status=
"valid"
time=
"0.04"
steps=
"72"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.06"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.04"
/></proof>
</goal>
<goal
name=
"WP_parameter triangleInequalityInt.1.2"
expl=
"2. VC for triangleInequalityInt"
expanded=
"true"
>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.17"
/></proof>
</goal>
</transf>
</goal>
<goal
name=
"WP_parameter triangleInequalityInt.2"
expl=
"2. postcondition"
expanded=
"true"
>
<proof
prover=
"0"
><result
status=
"valid"
time=
"0.05"
steps=
"79"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.09"
/></proof>
</goal>
</transf>
</goal>
<goal
name=
"triangleInequality"
expanded=
"true"
>
<proof
prover=
"0"
obsolete=
"true"
><result
status=
"timeout"
time=
"4.88"
/></proof>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"timeout"
time=
"4.87"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"timeout"
time=
"5.00"
/></proof>
<proof
prover=
"1"
timelimit=
"15"
><result
status=
"valid"
time=
"2.35"
/></proof>
</goal>
</theory>
<theory
name=
"Hackers_delight"
sum=
"c8ec539e41c47d4d821a25e51a788371"
expanded=
"true"
>
<goal
name=
"WP_parameter ascii"
expl=
"VC for ascii"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.09"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.04"
/></proof>
</goal>
<goal
name=
"asciiProp"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"1.41"
/></proof>
<proof
prover=
"1"
timelimit=
"20"
><result
status=
"valid"
time=
"0.85"
/></proof>
<proof
prover=
"2"
timelimit=
"20"
><result
status=
"valid"
time=
"2.11"
/></proof>
</goal>
<goal
name=
"iso"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.4
0
"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.4
3
"
/></proof>
</goal>
<goal
name=
"grayIsGray"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.0
5
"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.0
9
"
/></proof>
</goal>
<goal
name=
"nthGray"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.05"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.05"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"2.73"
/></proof>
</goal>
<goal
name=
"lastNthGray"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"2.22"
/></proof>
</goal>
<goal
name=
"nthBinary"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true
"
><result
status=
"valid"
time=
"0.
4
8"
/></proof>
<proof
prover=
"1"
timelimit=
"30
"
><result
status=
"valid"
time=
"0.
3
8"
/></proof>
</goal>
<goal
name=
"evenOdd"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.14"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.14"
/></proof>
</goal>
<goal
name=
"DM1"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.01"
/></proof>
</goal>
<goal
name=
"DM2"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.05"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.05"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.01"
/></proof>
</goal>
<goal
name=
"DM3"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.07"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.07"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.04"
/></proof>
</goal>
<goal
name=
"DM4"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.11"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.11"
/></proof>
</goal>
<goal
name=
"DM5"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.10"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.10"
/></proof>
</goal>
<goal
name=
"DM6"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.07"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.07"
/></proof>
</goal>
<goal
name=
"DM7"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.08"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.08"
/></proof>
</goal>
<goal
name=
"DM8"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.09"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.09"
/></proof>
</goal>
<goal
name=
"DMtest"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.07"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.07"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.18"
/></proof>
</goal>
<goal
name=
"Aa"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.06"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.06"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.02"
/></proof>
</goal>
<goal
name=
"Ac"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.07"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.07"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.02"
/></proof>
</goal>
<goal
name=
"Ad"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.06"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.06"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.02"
/></proof>
</goal>
<goal
name=
"Ae"
expanded=
"true"
>
<proof
prover=
"0"
obsolete=
"true"
><result
status=
"valid"
time=
"0.05"
steps=
"72"
/></proof>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.00"
/></proof>
<proof
prover=
"0"
><result
status=
"valid"
time=
"0.05"
steps=
"74"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.00"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.08"
/></proof>
</goal>
<goal
name=
"Af"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.03"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.09"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.03"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.09"
/></proof>
</goal>
<goal
name=
"Aj"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.00"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.00"
/></proof>
</goal>
<goal
name=
"An"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.12"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.12"
/></proof>
</goal>
<goal
name=
"Ao"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.
02
"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.
13
"
/></proof>
</goal>
<goal
name=
"Aq"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.08"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.08"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.02"
/></proof>
</goal>
<goal
name=
"At"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.12"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.12"
/></proof>
</goal>
<goal
name=
"Au"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.13"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.13"
/></proof>
</goal>
<goal
name=
"Av"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.12"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.03"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.12"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.03"
/></proof>
</goal>
<goal
name=
"IE1"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.02"
/></proof>
</goal>
<goal
name=
"IE2"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.04"
/></proof>
</goal>
<goal
name=
"IEa"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.04"
/></proof>
</goal>
<goal
name=
"IEb"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.04"
/></proof>
</goal>
<goal
name=
"IE3"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.03"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.03"
/></proof>
</goal>
<goal
name=
"IE4"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.04"
/></proof>
</goal>
<goal
name=
"SR1"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.04"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.04"
/></proof>
</goal>
<goal
name=
"RS_left"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.11"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.11"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.01"
/></proof>
</goal>
<goal
name=
"RS_right"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.09"
/></proof>
<proof
prover=
"2"
obsolete=
"true"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.09"
/></proof>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.01"
/></proof>
</goal>
<goal
name=
"BP"
expanded=
"true"
>
<proof
prover=
"1"
obsolete=
"true"
><result
status=
"valid"
time=
"0.10"
/></proof>
<proof
prover=
"1"
><result
status=
"valid"
time=
"0.10"
/></proof>
</goal>
</theory>
</file>
...
...
examples/hackers-delight/why3shapes.gz
View file @
9999d201
No preview for this file type
examples/logic/bitvectors/why3session.xml
View file @
9999d201
...
...
@@ -7,148 +7,159 @@
<prover
id=
"2"
name=
"CVC4"
version=
"1.4"
timelimit=
"5"
memlimit=
"1000"
/>
<prover
id=
"3"
name=
"Z3"
version=
"4.3.2"
timelimit=
"5"
memlimit=
"1000"
/>
<file
name=
"../bitvectors.why"
expanded=
"true"
>
<theory
name=
"TestBV"
sum=
"
c1af0d73b67219351e5904090236ec3e
"
expanded=
"true"
>
<goal
name=
"g1"
expanded=
"true"
>
<theory
name=
"TestBV"
sum=
"
d35077f1ef4ed4360e683835f5410ec4
"
expanded=
"true"
>
<goal
name=
"g1"
>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.01"
/></proof>
</goal>
<goal
name=
"f1"
expanded=
"true"
>
<proof
prover=
"0"
><result
status=
"timeout"
time=
"
4.96
"
/></proof>
<goal
name=
"f1"
>
<proof
prover=
"0"
><result
status=
"timeout"
time=
"
3.02
"
/></proof>
<proof
prover=
"1"
><result
status=
"timeout"
time=
"4.98"
/></proof>
<proof
prover=
"2"
><result
status=
"unknown"
time=
"0.01"
/></proof>
<proof
prover=
"3"
><result
status=
"timeout"
time=
"4.97"
/></proof>
</goal>
<goal
name=
"g2"
expanded=
"true"
>
<goal
name=
"g2"
>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.01"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.01"
/></proof>
</goal>
<goal
name=
"f2"
expanded=
"true"
>
<proof
prover=
"0"
><result
status=
"timeout"
time=
"
4
.8
4
"
/></proof>
<goal
name=
"f2"
>
<proof
prover=
"0"
><result
status=
"timeout"
time=
"
2
.8
8
"
/></proof>
<proof
prover=
"1"
><result
status=
"timeout"
time=
"4.97"
/></proof>
<proof
prover=
"2"
><result
status=
"unknown"
time=
"0.01"
/></proof>
<proof
prover=
"3"
><result
status=
"timeout"
time=
"5.01"
/></proof>
</goal>
<goal
name=
"g3"
expanded=
"true"
>
<goal
name=
"g3"
>
<proof
prover=
"2"
><result
status=
"valid"
time=
"0.02"
/></proof>
<proof
prover=
"3"
><result
status=
"valid"
time=
"0.01"
/></proof>