@@ -343,11 +343,9 @@ module INT-SYNTAX
343343 syntax Int ::= r"[\\+-]?[0-9]+" [prefer, token, prec(2 )]
344344endmodule
345345
346- module INT
346+ module INT-COMMON
347347 imports INT-SYNTAX
348348 imports BOOL
349- imports K-EQUAL
350-
351349 syntax Int ::= "~Int" Int [function, functional, latex(\mathop{\sim_{\scriptstyle\it Int}}{#1}), hook(INT.not)]
352350 > left:
353351 Int "^Int" Int [function, left, smtlib(^), latex({#1}\mathrel{{\char`\^}_{\!\scriptstyle\it Int}}{#2}), hook(INT.pow)]
@@ -373,6 +371,7 @@ module INT
373371 Int "xorInt" Int [function, functional, left, latex({#1}\mathrel{\oplus_{\scriptstyle\it Int}}{#2}), hook(INT.xor)]
374372 > left:
375373 Int "|Int" Int [function, functional, left, latex({#1}\mathrel{|_{\scriptstyle\it Int}}{#2}), hook(INT.or)]
374+
376375 syntax Int ::= "minInt" "(" Int "," Int ")" [function, functional, smtlib(int_min), hook(INT.min)]
377376 | "maxInt" "(" Int "," Int ")" [function, functional, smtlib(int_max), hook(INT.max)]
378377 | absInt ( Int ) [function, functional, smtlib(int_abs), hook(INT.abs)]
@@ -381,6 +380,32 @@ module INT
381380 syntax Int ::= bitRangeInt ( Int, indexInt: Int, lengthInt: Int ) [function, hook(INT.bitRange)]
382381 syntax Int ::= signExtendBitRangeInt ( Int, indexInt: Int, lengthInt: Int ) [function, hook(INT.signExtendBitRange)]
383382
383+ syntax Bool ::= Int "<=Int" Int [function, functional, left, smtlib(<=), latex({#1}\mathrel{\leq_{\scriptstyle\it Int}}{#2}), hook(INT.le)]
384+ | Int "<Int" Int [function, functional, left, smtlib(<), latex({#1}\mathrel{<_{\scriptstyle\it Int}}{#2}), hook(INT.lt)]
385+ | Int ">=Int" Int [function, functional, left, smtlib(>=), latex({#1}\mathrel{\geq_{\scriptstyle\it Int}}{#2}), hook(INT.ge)]
386+ | Int ">Int" Int [function, functional, left, smtlib(>), latex({#1}\mathrel{>_{\scriptstyle\it Int}}{#2}), hook(INT.gt)]
387+ | Int "==Int" Int [function, functional, left, smtlib(=), latex({#1}\mathrel{{=}{=}_{\scriptstyle\it Int}}{#2}), hook(INT.eq), klabel(_==Int_)]
388+ | Int "=/=Int" Int [function, functional, left, smtlib(distinct), latex({#1}\mathrel{{=}{/}{=}_{\scriptstyle\it Int}}{#2}), hook(INT.ne)]
389+ | Int "dividesInt" Int [function]
390+ endmodule
391+
392+ module INT-SYMBOLIC [symbolic, kore]
393+ imports INT-COMMON
394+ imports ML-SYNTAX
395+
396+ /**
397+ * Definability conditions for _/Int_ and _%Int_
398+ */
399+
400+ rule #Ceil(I1:Int /Int I2:Int) => {(I2 =/=Int 0) #Equals true} [anywhere]
401+ rule #Ceil(I1:Int %Int I2:Int) => {(I2 =/=Int 0) #Equals true} [anywhere]
402+ endmodule
403+
404+ module INT
405+ imports INT-COMMON
406+ imports INT-SYMBOLIC
407+ imports K-EQUAL
408+
384409 rule bitRangeInt(I::Int, IDX::Int, LEN::Int) => (I >>Int IDX) modInt (1 <<Int LEN)
385410
386411 rule signExtendBitRangeInt(I::Int, IDX::Int, LEN::Int) => (bitRangeInt(I, IDX, LEN) +Int (1 <<Int (LEN -Int 1 ))) modInt (1 <<Int LEN) -Int (1 <<Int (LEN -Int 1 ))
@@ -396,14 +421,6 @@ module INT
396421 rule minInt(I1 :Int, I2 :Int) => I1 requires I1 <=Int I2
397422 rule minInt(I1 :Int, I2 :Int) => I2 requires I1 >=Int I2
398423
399- syntax Bool ::= Int "<=Int" Int [function, functional, left, smtlib(<=), latex({#1}\mathrel{\leq_{\scriptstyle\it Int}}{#2}), hook(INT.le)]
400- | Int "<Int" Int [function, functional, left, smtlib(<), latex({#1}\mathrel{<_{\scriptstyle\it Int}}{#2}), hook(INT.lt)]
401- | Int ">=Int" Int [function, functional, left, smtlib(>=), latex({#1}\mathrel{\geq_{\scriptstyle\it Int}}{#2}), hook(INT.ge)]
402- | Int ">Int" Int [function, functional, left, smtlib(>), latex({#1}\mathrel{>_{\scriptstyle\it Int}}{#2}), hook(INT.gt)]
403- | Int "==Int" Int [function, functional, left, smtlib(=), latex({#1}\mathrel{{=}{=}_{\scriptstyle\it Int}}{#2}), hook(INT.eq), klabel(_==Int_)]
404- | Int "=/=Int" Int [function, functional, left, smtlib(distinct), latex({#1}\mathrel{{=}{/}{=}_{\scriptstyle\it Int}}{#2}), hook(INT.ne)]
405- | Int "dividesInt" Int [function]
406-
407424 rule I1 :Int ==Int I2 :Int => I1 ==K I2
408425 rule I1 :Int =/=Int I2 :Int => notBool (I1 ==Int I2 )
409426 rule (I1 :Int dividesInt I2 :Int) => (I2 %Int I1 ) ==Int 0
0 commit comments