Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
DOML Model Checker
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
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
PIACERE
public
The Platform
DOML Model Checker
Commits
dc45be06
Commit
dc45be06
authored
2 years ago
by
Andrea Franchini
Browse files
Options
Downloads
Patches
Plain Diff
Add rel_attr_elem_expr, parses vm1.x == vm2.y
parent
1b2a7bdd
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
mc_openapi/doml_mc/domlr_parser/parser.py
+56
-9
56 additions, 9 deletions
mc_openapi/doml_mc/domlr_parser/parser.py
tests/domlr/example_single_req_qty_comparison.domlr
+19
-8
19 additions, 8 deletions
tests/domlr/example_single_req_qty_comparison.domlr
with
75 additions
and
17 deletions
mc_openapi/doml_mc/domlr_parser/parser.py
+
56
−
9
View file @
dc45be06
...
...
@@ -178,7 +178,7 @@ class DOMLRTransformer(Transformer):
return
_gen_rel_elem_expr
def
rel_attr_value_expr
(
self
,
args
):
"""
An ATTRIBUTE relationship
"""
"""
An ATTRIBUTE relationship
with a rhs that is a value
"""
rel_name
=
args
[
1
].
value
def
_gen_rel_attr_value_expr
(
enc
:
SMTEncoding
,
sorts
:
SMTSorts
):
...
...
@@ -219,15 +219,62 @@ class DOMLRTransformer(Transformer):
return
_gen_rel_attr_value_expr
def
rel_attr_elem_expr
(
self
,
args
):
"""
Parse rhs of expression containing:
<, <=, >, >=, ==, != can be followed by a NUMBER
==, != can be followed by a BOOL or STRING
should generate attr(e1, rel, attr_data_sort(VALUE)) for ==, !=
or attr(e1, rel, val) and get_int(val) >= NUMBER
"""
An ATTRIBUTE relationship with a rhs that is another element
"""
"""
print
(
"
rel_attr_elem_expr
"
,
args
)
return
args
rel1_name
=
args
[
1
].
value
rel2_name
=
args
[
4
].
value
op
=
args
[
2
].
value
def
_gen_rel_attr_elem_expr
(
enc
:
SMTEncoding
,
sorts
:
SMTSorts
):
elem1
=
RefHandler
.
get_const
(
args
[
0
].
value
,
sorts
)
elem2
=
RefHandler
.
get_const
(
args
[
3
].
value
,
sorts
)
rel1
,
rel1_type
=
RefHandler
.
get_relationship
(
enc
,
rel1_name
)
rel2
,
rel2_type
=
RefHandler
.
get_relationship
(
enc
,
rel2_name
)
assert
rel1_type
==
RefHandler
.
ATTRIBUTE
assert
rel2_type
==
RefHandler
.
ATTRIBUTE
rhs_value
=
RefHandler
.
get_value
(
"
x
"
,
sorts
)
expr
=
And
(
RefHandler
.
get_attribute_rel
(
enc
,
elem1
,
rel1
,
rhs_value
),
RefHandler
.
get_attribute_rel
(
enc
,
elem2
,
rel2
,
rhs_value
)
)
if
op
==
"
==
"
:
return
expr
elif
op
==
"
!=
"
:
return
Not
(
expr
)
else
:
rhs1_value
=
RefHandler
.
get_value
(
"
rhs1
"
,
sorts
)
rhs2_value
=
RefHandler
.
get_value
(
"
rhs2
"
,
sorts
)
expr
=
And
(
RefHandler
.
get_attribute_rel
(
enc
,
elem1
,
rel1
,
rhs1_value
),
RefHandler
.
get_attribute_rel
(
enc
,
elem2
,
rel2
,
rhs2_value
),
self
.
compare_int
(
sorts
,
op
,
rhs1_value
,
rhs2_value
)
)
print
(
"
Warning: Comparing attributes of two elements with {op} is experimental!
\n
"
,
"
Assumption: the attribute is an Integer.
"
)
return
expr
return
_gen_rel_attr_elem_expr
def
_get_equality_sides
(
self
,
arg1
,
arg2
):
# We track use of const in const_or_class
...
...
This diff is collapsed.
Click to expand it.
tests/domlr/example_single_req_qty_comparison.domlr
+
19
−
8
View file @
dc45be06
...
...
@@ -9,16 +9,27 @@
# )
# )
# OLD SYNTAX
# + "All VMs have at least 512 MB of memory"
# forall vm (
# vm is class infrastructure.VirtualMachine
# implies
# (
# vm has abstract.ComputingNode.memory_mb Mem
# and
# Mem < 512
# )
# )
# ---
# "All VMs have at least 256 MB of memory"
+ "All VMs have at least 512 MB of memory"
forall vm (
vm is class infrastructure.VirtualMachine
implies
(
vm has abstract.ComputingNode.memory_mb Mem
and
Mem < 512
)
vm has abstract.ComputingNode.memory_mb >= 512
)
---
"All VMs have at least 256 MB of memory"
error: "All VMs have at least 256 MB of memory"
\ No newline at end of file
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