Skip to content

Commit 2931e58

Browse files
iTituspkoerner
andauthored
Event-B and general improvements (#21)
* Add support for :sequence in eventb dsl * make sure that implicit sequential substitutions are not ignored in eventb translation * fix specter transform not recursing deeper into expression after finding match * add support for sequences in eventb translation * undo lambda change in i2eventb2 * update specter paths for IR to support Tuple * do not return tags when visiting IR this fixes transforming tags with specter when tag is named the same as a variable/definition * add support for let-preds/exprs * fix let-sub translation * in progress: if in expressions/predicates * implement tail * allow multiple args for functions in eventb * fix bug with previous commit * reformat i2eventb * improve specter Tuple nav * do not quote sets in lisb ir * implement if in expressions for eventb still WIP * revert previous commit regarding sets and add comment explaining why * cleanup * use to-vec for all ::ids fields in lisb2ir * update rest of b2eventb code * simplify if-expr translation and fix let replacement being run to late * add brackets around lambda expressions * add new identifier for if-expr generated code * implement eventb prj1/prj2 * add eventb-prj docs * fix eventb printing by adding parentheses around all exprs * add more spaces and brackets around exprs in eventb print * use a different translation for seq(S) * Wrap injector craetion in delay to not install/start probcli when not required * update deps * update deps * update deps * update deps * set main component of eventb model if not already done --------- Co-authored-by: Philipp Körner <p.koerner@hhu.de>
1 parent 62fd6d5 commit 2931e58

23 files changed

Lines changed: 783 additions & 349 deletions

.clj-kondo/lisb/translation/eventb/dsl.clj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
'event-extends 'lisb.translation.eventb.dsl/event-extends
2424
'status 'lisb.translation.eventb.dsl/event-status
2525
'with 'lisb.translation.eventb.dsl/event-with
26-
'finite 'lisb.translation.eventb.dsl/eventb-finite}
26+
'finite 'lisb.translation.eventb.dsl/eventb-finite
27+
'prj1 'lisb.translation.lisb2ir/beventb-prj1
28+
'prj2 'lisb.translation.lisb2ir/beventb-prj2}
2729
(first form)
2830
(first form))
2931
(rest form))

.clj-kondo/lisb/translation/lisb2ir.clj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@
155155
'parallel-product 'lisb.translation.lisb2ir/bparallel-product
156156
'prj1 'lisb.translation.lisb2ir/bprj1
157157
'prj2 'lisb.translation.lisb2ir/bprj2
158+
'eventb-prj1 'lisb.translation.lisb2ir/beventb-prj1
159+
'eventb-prj2 'lisb.translation.lisb2ir/beventb-prj2
158160
'closure1 'lisb.translation.lisb2ir/bclosure1
159161
'closure 'lisb.translation.lisb2ir/bclosure
160162
'iterate 'lisb.translation.lisb2ir/biterate

doc/Lisb.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@
132132
| <code>((rel1&#124;&#124;rel2)&#124;&#124;...)</code> | `(parallel-product & rels)` | `{:tag :parallel-product, :rels rels}` | parallel product <code>{((x,v),(y,w)) &#124; x,y:r1 & v,w:r2} </code> |
133133
| `prj1(set1, set2)` | `(prj1 set1 set2)` | `{:tag :prj1, :set1 set1, :set2 set2}` | projection function (usage prj1(Dom,Ran)(Pair)) |
134134
| `prj2(set1, set2)` | `(prj2 set1 set2)` | `{:tag :prj2, :set1 set1, :set2 set2}` | projection function (usage prj2(Dom,Ran)(Pair)) |
135+
| `prj1(expr)` and `@prj1(expr)` | `(eventb-prj1 expr)` | `{:tag :eventb-prj1, :expr expr}` | eventb projection function (usage prj1(Pair)) |
136+
| `prj2(expr)` and `@prj2(expr)` | `(eventb-prj2 expr)` | `{:tag :eventb-prj2, :expr expr}` | eventb projection function (usage prj2(Pair)) |
135137
| `closure1(rel)` | `(closure1 rel)` | `{:tag :closure1, :rel rel}` | transitive closure |
136138
| `closure(rel)` | `(closure rel)` | `{:tag :closure, :rel rel}` | reflexive & transitive closure |
137139
| `iterate(rel,num)` | `(iterate rel num)` | `{:tag :iterate, :rel rel, :num num}` | iteration of r with n>=0 |

project.clj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
:deploy-repositories [["releases" {:sign-releases false :url "https://repo.clojars.org/"}]
99
["snapshots" {:sign-releases false :url "https://repo.clojars.org/"}]]
1010
:jvm-opts ["-Xss1g"]
11-
:dependencies [[org.clojure/clojure "1.11.3"]
11+
:dependencies [[org.clojure/clojure "1.12.1"]
1212
[org.clojure/math.combinatorics "0.3.0"]
1313
[org.clojure/test.check "1.1.1"]
14-
[potemkin "0.4.7"]
14+
[potemkin "0.4.8"]
1515
[com.rpl/specter "1.1.4"]
1616
[de.hhu.stups/prob-java "4.15.0"]
1717
[de.hhu.stups/value-translator "0.2.1"]
18-
])
18+
])

src/lisb/examples/crowded_chessboard.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585

8686
(defn crowded-empty-state-space []
8787
(let [machine (create-machine)]
88-
(.b_load api machine {"KODKOD" "true"
88+
(.b_load @api machine {"KODKOD" "true"
8989
"TIME_OUT" "50000"})))
9090

9191
(defn crowded-chessboard

src/lisb/prob/animator.clj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414

1515
; XXX load an instance of MainModule.class to ensure Prob 2.0 is properly loaded.
1616
; Among other things this sets prob.home to load files from the ProB stdlib.
17-
(def injector (Guice/createInjector Stage/PRODUCTION [(MainModule.)]))
17+
(def injector (delay (Guice/createInjector Stage/PRODUCTION [(MainModule.)])))
1818

1919

20-
(def api (.getInstance injector Api))
20+
(def api (delay (.getInstance @injector Api)))
2121

2222

2323
(defn state-space! [ast]
24-
(.b_load api ast))
24+
(.b_load @api ast))
2525

2626

2727
(defmulti get-result type)

src/lisb/translation/ast2lisb.clj

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,10 @@
197197
ADescriptionExpression ADescriptionPredicate ALabelPredicate
198198
AExtendedExprExpression
199199
AExtendedPredPredicate
200+
AEventBFirstProjectionExpression
201+
AEventBSecondProjectionExpression
202+
AEventBFirstProjectionV2Expression
203+
AEventBSecondProjectionV2Expression
200204
;; for some reason unused
201205
; TIntegerLiteral
202206
; AConcreteVariablesMachineClause
@@ -638,9 +642,10 @@
638642
(cond
639643
(= (class f) ASuccessorExpression) (concat-last 'inc params)
640644
(= (class f) APredecessorExpression) (concat-last 'dec params)
645+
(= (class f) AEventBFirstProjectionV2Expression) (concat-last 'eventb-prj1 params)
646+
(= (class f) AEventBSecondProjectionV2Expression) (concat-last 'eventb-prj2 params)
641647
:else (concat-last 'fn-call f params))))
642648

643-
644649
;;; relations
645650

646651
(defmethod ast->lisb ARelationsExpression [node]
@@ -683,6 +688,10 @@
683688
(list 'prj1 (ast->lisb (.getExp1 node)) (ast->lisb (.getExp2 node))))
684689
(defmethod ast->lisb ASecondProjectionExpression [node]
685690
(list 'prj2 (ast->lisb (.getExp1 node)) (ast->lisb (.getExp2 node))))
691+
(defmethod ast->lisb AEventBFirstProjectionExpression [node]
692+
(list 'eventb-prj1 (ast->lisb (.getExpression node))))
693+
(defmethod ast->lisb AEventBSecondProjectionExpression [node]
694+
(list 'eventb-prj2 (ast->lisb (.getExpression node))))
686695
(defmethod ast->lisb AClosureExpression [node]
687696
(expression 'closure1 node))
688697
(defmethod ast->lisb AReflexiveClosureExpression [node]

0 commit comments

Comments
 (0)