Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Lustrec - public version
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
LustreC
Lustrec - public version
Commits
51106b7e
Commit
51106b7e
authored
6 years ago
by
Pierre Loic Garoche
Browse files
Options
Downloads
Patches
Plain Diff
Fixing issues with changes in machine code
parent
59803095
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/tools/zustre/zustre_cex.ml
+2
-1
2 additions, 1 deletion
src/tools/zustre/zustre_cex.ml
src/tools/zustre/zustre_common.ml
+31
-29
31 additions, 29 deletions
src/tools/zustre/zustre_common.ml
with
33 additions
and
30 deletions
src/tools/zustre/zustre_cex.ml
+
2
−
1
View file @
51106b7e
...
@@ -57,7 +57,8 @@ let build_cex machine machines decl_err =
...
@@ -57,7 +57,8 @@ let build_cex machine machines decl_err =
(* Recall that MAIN args are in@mems@out *)
(* Recall that MAIN args are in@mems@out *)
let
args
=
Z3
.
Expr
.
get_args
conj
in
let
args
=
Z3
.
Expr
.
get_args
conj
in
if
List
.
length
args
=
1
+
nb_inputs
+
nb_mems
+
nb_outputs
then
if
List
.
length
args
=
1
+
nb_inputs
+
nb_mems
+
nb_outputs
then
let
id
=
Z3
.
Arithmetic
.
Integer
.
get_int
(
List
.
hd
args
)
in
(* Should be done with get_int but that function vanished from the opam Z3 API *)
let
id
=
Big_int
.
int_of_big_int
(
Z3
.
Arithmetic
.
Integer
.
get_big_int
(
List
.
hd
args
))
in
let
input_values
=
Utils
.
List
.
extract
args
1
(
1
+
nb_inputs
)
in
let
input_values
=
Utils
.
List
.
extract
args
1
(
1
+
nb_inputs
)
in
let
output_values
=
Utils
.
List
.
extract
args
(
1
+
nb_inputs
+
nb_mems
)
(
1
+
nb_inputs
+
nb_mems
+
nb_outputs
)
in
let
output_values
=
Utils
.
List
.
extract
args
(
1
+
nb_inputs
+
nb_mems
)
(
1
+
nb_inputs
+
nb_mems
+
nb_outputs
)
in
(
id
,
(
input_values
,
output_values
))
::
main
,
funs
(
id
,
(
input_values
,
output_values
))
::
main
,
funs
...
...
This diff is collapsed.
Click to expand it.
src/tools/zustre/zustre_common.ml
+
31
−
29
View file @
51106b7e
...
@@ -366,7 +366,7 @@ let horn_basic_app i val_to_expr vl =
...
@@ -366,7 +366,7 @@ let horn_basic_app i val_to_expr vl =
is a printer for variables (typically [pp_c_var_read]), but an offset suffix
is a printer for variables (typically [pp_c_var_read]), but an offset suffix
may be added for array variables
may be added for array variables
*)
*)
let
rec
horn_val_to_expr
?
(
is_lhs
=
false
)
self
v
=
let
rec
horn_val_to_expr
?
(
is_lhs
=
false
)
m
self
v
=
match
v
.
value_desc
with
match
v
.
value_desc
with
|
Cst
c
->
horn_const_to_expr
c
|
Cst
c
->
horn_const_to_expr
c
...
@@ -393,28 +393,30 @@ let rec horn_val_to_expr ?(is_lhs=false) self v =
...
@@ -393,28 +393,30 @@ let rec horn_val_to_expr ?(is_lhs=false) self v =
!
ctx
!
ctx
(
build_array
(
t
,
(
x
+
1
)))
(
build_array
(
t
,
(
x
+
1
)))
(
Z3
.
Arithmetic
.
Integer
.
mk_numeral_i
!
ctx
x
)
(
Z3
.
Arithmetic
.
Integer
.
mk_numeral_i
!
ctx
x
)
(
horn_val_to_expr
~
is_lhs
:
is_lhs
self
h
)
(
horn_val_to_expr
~
is_lhs
:
is_lhs
m
self
h
)
in
in
build_array
(
il
,
0
)
build_array
(
il
,
0
)
|
Access
(
tab
,
index
)
->
|
Access
(
tab
,
index
)
->
Z3
.
Z3Array
.
mk_select
!
ctx
Z3
.
Z3Array
.
mk_select
!
ctx
(
horn_val_to_expr
~
is_lhs
:
is_lhs
self
tab
)
(
horn_val_to_expr
~
is_lhs
:
is_lhs
m
self
tab
)
(
horn_val_to_expr
~
is_lhs
:
is_lhs
self
index
)
(
horn_val_to_expr
~
is_lhs
:
is_lhs
m
self
index
)
(* Code specific for arrays *)
(* Code specific for arrays *)
|
Power
(
v
,
n
)
->
assert
false
|
Power
(
v
,
n
)
->
assert
false
|
LocalVar
v
->
|
Var
v
->
horn_var_to_expr
if
is_memory
m
v
then
(
rename_machine
if
Types
.
is_array_type
v
.
var_type
self
then
assert
false
v
)
else
horn_var_to_expr
(
rename_machine
self
((
if
is_lhs
then
rename_next
else
rename_current
)
(* self *)
v
))
|
StateVar
v
->
if
Types
.
is_array_type
v
.
var_type
else
then
assert
false
horn_var_to_expr
else
horn_var_to_expr
(
rename_machine
self
((
if
is_lhs
then
rename_next
else
rename_current
)
(* self *)
v
))
(
rename_machine
|
Fun
(
n
,
vl
)
->
horn_basic_app
n
(
horn_val_to_expr
self
)
vl
self
v
)
|
Fun
(
n
,
vl
)
->
horn_basic_app
n
(
horn_val_to_expr
m
self
)
vl
let
no_reset_to_exprs
machines
m
i
=
let
no_reset_to_exprs
machines
m
i
=
let
(
n
,_
)
=
List
.
assoc
i
m
.
minstances
in
let
(
n
,_
)
=
List
.
assoc
i
m
.
minstances
in
...
@@ -478,8 +480,8 @@ let instance_call_to_exprs machines reset_instances m i inputs outputs =
...
@@ -478,8 +480,8 @@ let instance_call_to_exprs machines reset_instances m i inputs outputs =
let
idx
=
horn_var_to_expr
idx
in
let
idx
=
horn_var_to_expr
idx
in
let
uid
=
uid_conc
(
get_instance_uid
i
)
(
horn_var_to_expr
uid
)
in
let
uid
=
uid_conc
(
get_instance_uid
i
)
(
horn_var_to_expr
uid
)
in
let
inout
=
let
inout
=
List
.
map
(
horn_val_to_expr
self
)
List
.
map
(
horn_val_to_expr
m
self
)
(
inputs
@
(
List
.
map
(
fun
v
->
mk_val
(
Local
Var
v
)
v
.
var_type
)
outputs
))
(
inputs
@
(
List
.
map
(
fun
v
->
mk_val
(
Var
v
)
v
.
var_type
)
outputs
))
in
in
idx
::
uid
::
inout
idx
::
uid
::
inout
in
in
...
@@ -509,16 +511,16 @@ let instance_call_to_exprs machines reset_instances m i inputs outputs =
...
@@ -509,16 +511,16 @@ let instance_call_to_exprs machines reset_instances m i inputs outputs =
let
stmt1
=
(* out = ite mem_m then i1 else i2 *)
let
stmt1
=
(* out = ite mem_m then i1 else i2 *)
Z3
.
Boolean
.
mk_eq
!
ctx
Z3
.
Boolean
.
mk_eq
!
ctx
(
(* output var *)
(
(* output var *)
horn_val_to_expr
horn_val_to_expr
~
is_lhs
:
true
~
is_lhs
:
true
self
m
self
(
mk_val
(
Local
Var
o
)
o
.
var_type
)
(
mk_val
(
Var
o
)
o
.
var_type
)
)
)
(
(
Z3
.
Boolean
.
mk_ite
!
ctx
Z3
.
Boolean
.
mk_ite
!
ctx
(
horn_var_to_expr
mem_m
)
(
horn_var_to_expr
mem_m
)
(
horn_val_to_expr
self
i1
)
(
horn_val_to_expr
m
self
i1
)
(
horn_val_to_expr
self
i2
)
(
horn_val_to_expr
m
self
i2
)
)
)
in
in
let
stmt2
=
(* mem_X = false *)
let
stmt2
=
(* mem_X = false *)
...
@@ -578,8 +580,8 @@ let assign_to_exprs m var_name value =
...
@@ -578,8 +580,8 @@ let assign_to_exprs m var_name value =
let
e
=
let
e
=
Z3
.
Boolean
.
mk_eq
Z3
.
Boolean
.
mk_eq
!
ctx
!
ctx
(
horn_val_to_expr
~
is_lhs
:
true
self
var_name
)
(
horn_val_to_expr
~
is_lhs
:
true
m
self
var_name
)
(
horn_val_to_expr
self
value
)
(
horn_val_to_expr
m
self
value
)
(* was: TODO deal with array accesses (value_suffix_to_expr self value) *)
(* was: TODO deal with array accesses (value_suffix_to_expr self value) *)
in
in
[
e
]
[
e
]
...
@@ -598,12 +600,12 @@ let rec instr_to_exprs machines reset_instances (m: machine_t) instr : Z3.Expr.e
...
@@ -598,12 +600,12 @@ let rec instr_to_exprs machines reset_instances (m: machine_t) instr : Z3.Expr.e
|
MLocalAssign
(
i
,
v
)
->
|
MLocalAssign
(
i
,
v
)
->
assign_to_exprs
assign_to_exprs
m
m
(
mk_val
(
Local
Var
i
)
i
.
var_type
)
v
,
(
mk_val
(
Var
i
)
i
.
var_type
)
v
,
reset_instances
reset_instances
|
MStateAssign
(
i
,
v
)
->
|
MStateAssign
(
i
,
v
)
->
assign_to_exprs
assign_to_exprs
m
m
(
mk_val
(
State
Var
i
)
i
.
var_type
)
v
,
(
mk_val
(
Var
i
)
i
.
var_type
)
v
,
reset_instances
reset_instances
|
MStep
([
i0
]
,
i
,
vl
)
when
Basic_library
.
is_internal_fun
i
(
List
.
map
(
fun
v
->
v
.
value_type
)
vl
)
->
|
MStep
([
i0
]
,
i
,
vl
)
when
Basic_library
.
is_internal_fun
i
(
List
.
map
(
fun
v
->
v
.
value_type
)
vl
)
->
assert
false
(* This should not happen anymore *)
assert
false
(* This should not happen anymore *)
...
@@ -629,7 +631,7 @@ let rec instr_to_exprs machines reset_instances (m: machine_t) instr : Z3.Expr.e
...
@@ -629,7 +631,7 @@ let rec instr_to_exprs machines reset_instances (m: machine_t) instr : Z3.Expr.e
let
e
=
let
e
=
Z3
.
Boolean
.
mk_implies
!
ctx
Z3
.
Boolean
.
mk_implies
!
ctx
(
Z3
.
Boolean
.
mk_eq
!
ctx
(
Z3
.
Boolean
.
mk_eq
!
ctx
(
horn_val_to_expr
self
g
)
(
horn_val_to_expr
m
self
g
)
(
horn_tag_to_expr
tag
))
(
horn_tag_to_expr
tag
))
branch_def
in
branch_def
in
...
@@ -857,7 +859,7 @@ let decl_machine machines m =
...
@@ -857,7 +859,7 @@ let decl_machine machines m =
begin
begin
(*Rule for step "; Stateless step rule with Assertions @.";*)
(*Rule for step "; Stateless step rule with Assertions @.";*)
let
body_with_asserts
=
let
body_with_asserts
=
Z3
.
Boolean
.
mk_and
!
ctx
(
horn_body
::
List
.
map
(
horn_val_to_expr
m
.
mname
.
node_id
)
assertsl
)
Z3
.
Boolean
.
mk_and
!
ctx
(
horn_body
::
List
.
map
(
horn_val_to_expr
m
m
.
mname
.
node_id
)
assertsl
)
in
in
let
vars
=
rename_machine_list
m
.
mname
.
node_id
m
.
mstep
.
step_locals
in
let
vars
=
rename_machine_list
m
.
mname
.
node_id
m
.
mstep
.
step_locals
in
add_rule
vars
(
Z3
.
Boolean
.
mk_implies
!
ctx
body_with_asserts
horn_head
)
add_rule
vars
(
Z3
.
Boolean
.
mk_implies
!
ctx
body_with_asserts
horn_head
)
...
@@ -915,7 +917,7 @@ let decl_machine machines m =
...
@@ -915,7 +917,7 @@ let decl_machine machines m =
(* Rule for step Assertions @.; *)
(* Rule for step Assertions @.; *)
let
body_with_asserts
=
let
body_with_asserts
=
Z3
.
Boolean
.
mk_and
!
ctx
Z3
.
Boolean
.
mk_and
!
ctx
(
horn_step_body
::
List
.
map
(
horn_val_to_expr
m
.
mname
.
node_id
)
assertsl
)
(
horn_step_body
::
List
.
map
(
horn_val_to_expr
m
m
.
mname
.
node_id
)
assertsl
)
in
in
let
vars
=
(
step_vars_c_m_x
machines
m
)
@
(
rename_machine_list
m
.
mname
.
node_id
m
.
mstep
.
step_locals
)
in
let
vars
=
(
step_vars_c_m_x
machines
m
)
@
(
rename_machine_list
m
.
mname
.
node_id
m
.
mstep
.
step_locals
)
in
add_rule
(
idx
::
uid
::
vars
)
(
Z3
.
Boolean
.
mk_implies
!
ctx
body_with_asserts
horn_step_head
)
add_rule
(
idx
::
uid
::
vars
)
(
Z3
.
Boolean
.
mk_implies
!
ctx
body_with_asserts
horn_step_head
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment