Skip to content

Commit 035c600

Browse files
committed
Merge remote-tracking branch 'origin/develop'
2 parents 84a419e + 7ab1dec commit 035c600

File tree

5 files changed

+3308
-7
lines changed

5 files changed

+3308
-7
lines changed

matching/src/main/scala/org/kframework/backend/llvm/matching/Matrix.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -766,12 +766,9 @@ class Matrix private (
766766
Leaf(row.clause.action.ordinal, newVars)
767767
}
768768
// check that all occurrences of the same variable are equal
769-
val nonlinearLeaf = nonlinearPairs.foldRight[DecisionTree](atomicLeaf)((e, dt) =>
770-
e._2.foldRight(dt)((os, dt2) => makeEquality(os._1._1, (os._1._2, os._2._2), dt2))
771-
)
772-
val sc = row.clause.action.scVars match {
769+
val sc: DecisionTree = row.clause.action.scVars match {
773770
// if there is no side condition, continue
774-
case None => nonlinearLeaf
771+
case None => atomicLeaf
775772
case Some(cond) =>
776773
val condVars = cond.map(v => (grouped(v).head._2, grouped(v).head._1.hookAtt))
777774
val newO = SC(row.clause.action.ordinal)
@@ -785,13 +782,16 @@ class Matrix private (
785782
newO,
786783
"BOOL.Bool",
787784
1,
788-
immutable.Seq(("1", immutable.Seq(), nonlinearLeaf), ("0", immutable.Seq(), child)),
785+
immutable.Seq(("1", immutable.Seq(), atomicLeaf), ("0", immutable.Seq(), child)),
789786
None
790787
)
791788
)
792789
}
790+
val nonlinearLeaf = nonlinearPairs.foldRight[DecisionTree](sc)((e, dt) =>
791+
e._2.foldRight(dt)((os, dt2) => makeEquality(os._1._1, (os._1._2, os._2._2), dt2))
792+
)
793793
// fill out the bindings for list range variables
794-
val withRanges = row.clause.listRanges.foldRight(sc) {
794+
val withRanges = row.clause.listRanges.foldRight(nonlinearLeaf) {
795795
case ((o @ Num(_, o2), hd, tl), dt) =>
796796
Function(
797797
"hook_LIST_range_long",
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
LblinitGeneratedTopCell{}(Lbl'Unds'Map'Unds'{}(Lbl'Stop'Map{}(),Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$PGM")),inj{SortOps{}, SortKItem{}}(Lblseq{}(Lbl'Hash'init'UndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int{}(\dv{SortInt{}}("0"),\dv{SortInt{}}("5")),inj{SortOp{}, SortOps{}}(Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1"))))))))
2+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
version: 13
2+
hook: MAP.concat Lbl'Unds'Map'Unds'{} ()
3+
arg: kore[Lbl'Stop'Map{}()]
4+
arg: kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblseq{}(Lbl'Hash'init'UndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int{}(\dv{SortInt{}}("0"),\dv{SortInt{}}("5")),Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1"))))]
5+
hook result: kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblseq{}(Lbl'Hash'init'UndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int{}(\dv{SortInt{}}("0"),\dv{SortInt{}}("5")),Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1"))))]
6+
function: LblinitGeneratedTopCell{} ()
7+
rule: 231 1
8+
VarInit = kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblseq{}(Lbl'Hash'init'UndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int{}(\dv{SortInt{}}("0"),\dv{SortInt{}}("5")),Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1"))))]
9+
function: LblinitKCell{} (0)
10+
rule: 232 1
11+
VarInit = kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblseq{}(Lbl'Hash'init'UndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int{}(\dv{SortInt{}}("0"),\dv{SortInt{}}("5")),Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1"))))]
12+
hook: MAP.lookup LblMap'Coln'lookup{} (0:0:0:0)
13+
arg: kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblseq{}(Lbl'Hash'init'UndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int{}(\dv{SortInt{}}("0"),\dv{SortInt{}}("5")),Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1"))))]
14+
arg: kore[\dv{SortKConfigVar{}}("$PGM")]
15+
hook result: kore[Lblseq{}(Lbl'Hash'init'UndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int{}(\dv{SortInt{}}("0"),\dv{SortInt{}}("5")),Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1")))]
16+
function: Lblproject'Coln'Ops{} (0:0)
17+
rule: 313 1
18+
VarK = kore[Lblseq{}(Lbl'Hash'init'UndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int{}(\dv{SortInt{}}("0"),\dv{SortInt{}}("5")),Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1")))]
19+
function: LblinitAccountsCell{} (1)
20+
rule: 227 0
21+
function: LblinitGeneratedCounterCell{} (2)
22+
rule: 230 0
23+
config: kore[Lbl'-LT-'generatedTop'-GT-'{}(Lbl'-LT-'k'-GT-'{}(kseq{}(Lblseq{}(Lbl'Hash'init'UndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int{}(\dv{SortInt{}}("0"),\dv{SortInt{}}("5")),Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1"))),dotk{}())),Lbl'-LT-'accounts'-GT-'{}(Lbl'Stop'AccountCellMap{}()),Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0")))]
24+
rule: 191 4
25+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
26+
VarACCT = kore[\dv{SortInt{}}("0")]
27+
VarO = kore[Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1"))]
28+
VarVALUE = kore[\dv{SortInt{}}("5")]
29+
config: kore[Lbl'-LT-'generatedTop'-GT-'{}(Lbl'-LT-'k'-GT-'{}(kseq{}(Lbl'Hash'transferFunds'UndsUndsUndsUnds'SAME-NAME-DIFF-VALUE'Unds'Op'Unds'Int'Unds'Int'Unds'Int{}(\dv{SortInt{}}("1"),\dv{SortInt{}}("0"),\dv{SortInt{}}("1")),dotk{}())),Lbl'-LT-'accounts'-GT-'{}(LblAccountCellMapItem{}(Lbl'-LT-'acctID'-GT-'{}(\dv{SortInt{}}("0")),Lbl'-LT-'account'-GT-'{}(Lbl'-LT-'acctID'-GT-'{}(\dv{SortInt{}}("0")),Lbl'-LT-'balance'-GT-'{}(\dv{SortInt{}}("5"))))),Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0")))]
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
module SAME-NAME-DIFF-VALUE
2+
imports INT
3+
imports K-EQUAL
4+
imports BOOL
5+
6+
configuration <k> $PGM:Ops </k>
7+
<accounts>
8+
<account multiplicity="*" type="Map">
9+
<acctID> 0 </acctID>
10+
<balance> 0 </balance>
11+
</account>
12+
</accounts>
13+
14+
syntax Ops ::= Op ";" Ops [symbol(seq)]
15+
| Op
16+
17+
syntax Op ::= "#transferFunds" Int Int Int
18+
| "#init" Int Int
19+
20+
syntax NoOp ::= "#finish"
21+
22+
23+
rule <k> #init ACCT VALUE ; O:Op => O </k>
24+
<accounts>
25+
( .Bag
26+
=>
27+
<account>
28+
<acctID> ACCT </acctID>
29+
<balance> VALUE </balance>
30+
</account>
31+
)
32+
</accounts>
33+
34+
rule <k> #transferFunds ACCT ACCT VALUE => .K ... </k>
35+
<account>
36+
<acctID> ACCT </acctID>
37+
<balance> ORIGFROM </balance>
38+
</account>
39+
requires VALUE <=Int ORIGFROM
40+
41+
42+
rule <k> #transferFunds ACCTFROM ACCTTO VALUE => .K ... </k>
43+
<account>
44+
<acctID> ACCTFROM </acctID>
45+
<balance> ORIGFROM => ORIGFROM -Int VALUE </balance>
46+
...
47+
</account>
48+
<account>
49+
<acctID> ACCTTO </acctID>
50+
<balance> ORIGTO => ORIGTO +Int VALUE </balance>
51+
...
52+
</account>
53+
requires ACCTFROM =/=K ACCTTO andBool VALUE <=Int ORIGFROM
54+
[preserves-definedness]
55+
56+
rule <k> #transferFunds ACCTFROM _ACCTTO VALUE => .K ... </k>
57+
<account>
58+
<acctID> ACCTFROM </acctID>
59+
<balance> ORIGFROM </balance>
60+
...
61+
</account>
62+
requires VALUE >Int ORIGFROM
63+
64+
endmodule

0 commit comments

Comments
 (0)