all rewrite rules - lml.ls.fi.upm.eslml.ls.fi.upm.es/rsd/reference/all_rewrite_rules-event-b.pdf ·...
TRANSCRIPT
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 1/16
All Rewrite RulesFrom EventB
CAUTION! Any modification to this page shall be announced on the User mailing list!
This page groups together all the rewrite rules implemented (or planned for implementation) in the Rodin prover. The rules themselves can be found in their respectivelocation (for editing purposes):
Conventions used in these tables are described in The_Proving_Perspective_(Rodin_User_Manual)#Rewrite_rules
Contents
1 Set Rewrite Rules2 Relation Rewrite Rules3 Empty Set Rewrite Rules4 Arithmetic Rewrite Rules5 Extension Proof Rules
5.1 Rewrite Rules5.2 Inference Rules
Set Rewrite Rules
Rules that are marked with a * in the first column are implemented in the latest version of Rodin. Rules without a * are planned to be implemented in future versions.Other conventions used in these tables are described in The_Proving_Perspective_(Rodin_User_Manual)#Rewrite_Rules.
Name Rule Side Condition
* SIMP_SPECIAL_AND_BTRUE
* SIMP_SPECIAL_AND_BFALSE
* SIMP_MULTI_AND
* SIMP_MULTI_AND_NOT
* SIMP_SPECIAL_OR_BTRUE
* SIMP_SPECIAL_OR_BFALSE
* SIMP_MULTI_OR
* SIMP_MULTI_OR_NOT
* SIMP_SPECIAL_IMP_BTRUE_R
* SIMP_SPECIAL_IMP_BTRUE_L
* SIMP_SPECIAL_IMP_BFALSE_R
* SIMP_SPECIAL_IMP_BFALSE_L
* SIMP_MULTI_IMP
* SIMP_MULTI_IMP_NOT_L
* SIMP_MULTI_IMP_NOT_R
* SIMP_MULTI_IMP_AND
* SIMP_MULTI_IMP_AND_NOT_R
* SIMP_MULTI_IMP_AND_NOT_L
* SIMP_MULTI_EQV
* SIMP_MULTI_EQV_NOT
* SIMP_SPECIAL_NOT_BTRUE
* SIMP_SPECIAL_NOT_BFALSE
* SIMP_NOT_NOT
* SIMP_NOTEQUAL
* SIMP_NOTIN
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 2/16
* SIMP_NOTSUBSET
* SIMP_NOTSUBSETEQ
* SIMP_NOT_LE
* SIMP_NOT_GE
* SIMP_NOT_LT
* SIMP_NOT_GT
* SIMP_SPECIAL_NOT_EQUAL_FALSE_R
* SIMP_SPECIAL_NOT_EQUAL_FALSE_L
* SIMP_SPECIAL_NOT_EQUAL_TRUE_R
* SIMP_SPECIAL_NOT_EQUAL_TRUE_L
* SIMP_FORALL_AND
* SIMP_EXISTS_OR
* SIMP_EXISTS_IMP
* SIMP_FORALL
Quantifiedidentifiers otherthan do not occurin
* SIMP_EXISTS
Quantifiedidentifiers otherthan do not occurin
* SIMP_MULTI_EQUAL
* SIMP_MULTI_NOTEQUAL
* SIMP_EQUAL_MAPSTO
* SIMP_EQUAL_SING
* SIMP_SPECIAL_EQUAL_TRUE
* SIMP_TYPE_SUBSETEQ where is a typeexpression
* SIMP_SUBSETEQ_SING where is asingle expression
* SIMP_SPECIAL_SUBSETEQ
* SIMP_MULTI_SUBSETEQ
* SIMP_SUBSETEQ_BUNION
* SIMP_SUBSETEQ_BINTER
* DERIV_SUBSETEQ_BUNION
* DERIV_SUBSETEQ_BINTER
* SIMP_SPECIAL_IN
* SIMP_MULTI_IN
* SIMP_IN_SING
* SIMP_MULTI_SETENUM
* SIMP_SPECIAL_BINTER
* SIMP_TYPE_BINTER where is a typeexpression
* SIMP_MULTI_BINTER
* SIMP_MULTI_EQUAL_BINTER
* SIMP_SPECIAL_BUNION
* SIMP_TYPE_BUNION where is a typeexpression
* SIMP_MULTI_BUNION
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 3/16
* SIMP_MULTI_EQUAL_BUNION
* SIMP_MULTI_SETMINUS
* SIMP_SPECIAL_SETMINUS_R
* SIMP_SPECIAL_SETMINUS_L
* SIMP_TYPE_SETMINUS where is a typeexpression
* SIMP_TYPE_SETMINUS_SETMINUS where is a typeexpression
* SIMP_KUNION_POW
* SIMP_KUNION_POW1
* SIMP_SPECIAL_KUNION
* SIMP_SPECIAL_QUNION
* SIMP_SPECIAL_KINTER
* SIMP_KINTER_POW
* SIMP_SPECIAL_POW
* SIMP_SPECIAL_POW1
* SIMP_SPECIAL_CPROD_R
* SIMP_SPECIAL_CPROD_L
SIMP_COMPSET_EQUALwhere non freein and non freein
* SIMP_COMPSET_IN where non freein
* SIMP_COMPSET_SUBSETEQ where non freein
* SIMP_SPECIAL_COMPSET_BFALSE
* SIMP_SPECIAL_COMPSET_BTRUE
where the type of is and
is a mapletcombination oflocallybound,pairwisedistinctbound identifiers
* SIMP_SUBSETEQ_COMPSET_L where is fresh
* SIMP_IN_COMPSET where , are not free in
* SIMP_IN_COMPSET_ONEPOINT
Equivalent togeneralsimplificationfollowed by OnePoint Ruleapplication withthe last conjunctpredicate
SIMP_SUBSETEQ_COMPSET_Rwhere non freein
* SIMP_SPECIAL_OVERL
* SIMP_SPECIAL_KBOOL_BTRUE
* SIMP_SPECIAL_KBOOL_BFALSE
DISTRI_SUBSETEQ_BUNION_SING where is a singleexpression
* DEF_FINITE
* SIMP_SPECIAL_FINITE
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 4/16
* SIMP_FINITE_SETENUM
* SIMP_FINITE_BUNION
SIMP_FINITE_UNION
SIMP_FINITE_QUNION
* SIMP_FINITE_POW
* DERIV_FINITE_CPROD
* SIMP_FINITE_CONVERSE
* SIMP_FINITE_UPTO
* SIMP_FINITE_IDwhere has type
* SIMP_FINITE_ID_DOMRES
* SIMP_FINITE_PRJ1where type
* SIMP_FINITE_PRJ2where type
* SIMP_FINITE_PRJ1_DOMRES
* SIMP_FINITE_PRJ2_DOMRES
* SIMP_FINITE_NATURAL
* SIMP_FINITE_NATURAL1
* SIMP_FINITE_INTEGER
* SIMP_FINITE_BOOL
* SIMP_FINITE_LAMBDA
where is amapletcombination ofbound identifiersand expressionsthat are not boundby thecomprehension set(i.e., issyntacticallyinjective) and allidentifiers boundby thecomprehension setthat occur in also occur in
* SIMP_TYPE_IN where is a typeexpression
* SIMP_SPECIAL_EQV_BTRUE
* SIMP_SPECIAL_EQV_BFALSE
* DEF_SUBSET
* SIMP_SPECIAL_SUBSET_R
* SIMP_SPECIAL_SUBSET_L
* SIMP_TYPE_SUBSET_L where is a typeexpression
* SIMP_MULTI_SUBSET
* SIMP_EQUAL_CONSTRwhere datatypeconstructor
* SIMP_EQUAL_CONSTR_DIFFwhere and different datatypeconstructors
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 5/16
* SIMP_DESTR_CONSTR
where datatype destructorfor the ithargument ofdatatypeconstructor
* DISTRI_AND_OR
* DISTRI_OR_AND
* DEF_OR
* DERIV_IMP
* DERIV_IMP_IMP
* DISTRI_IMP_AND
* DISTRI_IMP_OR
* DEF_EQV
* DISTRI_NOT_AND
* DISTRI_NOT_OR
* DERIV_NOT_IMP
* DERIV_NOT_FORALL
* DERIV_NOT_EXISTS
* DEF_IN_MAPSTO
* DEF_IN_POW
* DEF_IN_POW1
* DEF_SUBSETEQ where is not freein or
* DEF_IN_BUNION
* DEF_IN_BINTER
* DEF_IN_SETMINUS
* DEF_IN_SETENUM
* DEF_IN_KUNION where is fresh
* DEF_IN_QUNION where is fresh
* DEF_IN_KINTER where is fresh
* DEF_IN_QINTER where is fresh
* DEF_IN_UPTO
* DISTRI_BUNION_BINTER
* DISTRI_BINTER_BUNION
DISTRI_BINTER_SETMINUS
DISTRI_SETMINUS_BUNION
* DERIV_TYPE_SETMINUS_BINTER where is a typeexpression
* DERIV_TYPE_SETMINUS_BUNION where is a typeexpression
* DERIV_TYPE_SETMINUS_SETMINUS where is a typeexpression
DISTRI_CPROD_BINTER
DISTRI_CPROD_BUNION
DISTRI_CPROD_SETMINUS
where
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 6/16
* DERIV_SUBSETEQ the type of
* DERIV_EQUALwhere the type of
* DERIV_SUBSETEQ_SETMINUS_L
* DERIV_SUBSETEQ_SETMINUS_R
* DEF_PARTITION
SIMP_EMPTY_PARTITION
SIMP_SINGLE_PARTITION
Relation Rewrite Rules
Rules that are marked with a * in the first column are implemented in the latest version of Rodin. Rules without a * are planned to be implemented in future versions.Other conventions used in these tables are described in The_Proving_Perspective_(Rodin_User_Manual)#Rewrite_Rules.
Name Rule Side Condition
* SIMP_DOM_SETENUM
* SIMP_DOM_CONVERSE
* SIMP_RAN_SETENUM
* SIMP_RAN_CONVERSE
* SIMP_SPECIAL_OVERL
* SIMP_MULTI_OVERLthere is a such that
and syntactically equal.
* SIMP_TYPE_OVERL_CPROD where is a type expression
* SIMP_SPECIAL_DOMRES_L
* SIMP_SPECIAL_DOMRES_R
* SIMP_TYPE_DOMRES where is a type expression
* SIMP_MULTI_DOMRES_DOM
* SIMP_MULTI_DOMRES_RAN
* SIMP_DOMRES_DOMRES_ID
* SIMP_DOMRES_DOMSUB_ID
* SIMP_SPECIAL_RANRES_R
* SIMP_SPECIAL_RANRES_L
* SIMP_TYPE_RANRES where is a type expression
* SIMP_MULTI_RANRES_RAN
* SIMP_MULTI_RANRES_DOM
* SIMP_RANRES_ID
* SIMP_RANSUB_ID
* SIMP_RANRES_DOMRES_ID
* SIMP_RANRES_DOMSUB_ID
* SIMP_SPECIAL_DOMSUB_L
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 7/16
* SIMP_SPECIAL_DOMSUB_R
* SIMP_TYPE_DOMSUB where is a type expression
* SIMP_MULTI_DOMSUB_DOM
* SIMP_MULTI_DOMSUB_RAN
* SIMP_DOMSUB_DOMRES_ID
* SIMP_DOMSUB_DOMSUB_ID
* SIMP_SPECIAL_RANSUB_R
* SIMP_SPECIAL_RANSUB_L
* SIMP_TYPE_RANSUB where is a type expression
* SIMP_MULTI_RANSUB_DOM
* SIMP_MULTI_RANSUB_RAN
* SIMP_RANSUB_DOMRES_ID
* SIMP_RANSUB_DOMSUB_ID
* SIMP_SPECIAL_FCOMP
* SIMP_TYPE_FCOMP_ID
* SIMP_TYPE_FCOMP_R where is a type expression equalto
* SIMP_TYPE_FCOMP_L where is a type expression equalto
* SIMP_FCOMP_ID
* SIMP_SPECIAL_BCOMP
* SIMP_TYPE_BCOMP_ID
* SIMP_TYPE_BCOMP_L where is a type expression equalto
* SIMP_TYPE_BCOMP_R where is a type expression equalto
* SIMP_BCOMP_ID
* SIMP_SPECIAL_DPROD_R
* SIMP_SPECIAL_DPROD_L
* SIMP_DPROD_CPROD
* SIMP_SPECIAL_PPROD_R
* SIMP_SPECIAL_PPROD_L
* SIMP_PPROD_CPROD
* SIMP_SPECIAL_RELIMAGE_R
* SIMP_SPECIAL_RELIMAGE_L
* SIMP_TYPE_RELIMAGE where is a type expression
* SIMP_MULTI_RELIMAGE_DOM
* SIMP_RELIMAGE_ID
* SIMP_RELIMAGE_DOMRES_ID
* SIMP_RELIMAGE_DOMSUB_ID
* SIMP_MULTI_RELIMAGE_CPROD_SING where is a single expression
* SIMP_MULTI_RELIMAGE_SING_MAPSTO where is a single expression
* SIMP_MULTI_RELIMAGE_CONVERSE_RANSUB
* SIMP_MULTI_RELIMAGE_CONVERSE_RANRES
* SIMP_RELIMAGE_CONVERSE_DOMSUB
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 8/16
DERIV_RELIMAGE_RANSUB
DERIV_RELIMAGE_RANRES
* SIMP_MULTI_RELIMAGE_DOMSUB
DERIV_RELIMAGE_DOMSUB
DERIV_RELIMAGE_DOMRES
* SIMP_SPECIAL_CONVERSE
* SIMP_CONVERSE_ID
* SIMP_CONVERSE_CPROD
* SIMP_CONVERSE_SETENUM
* SIMP_CONVERSE_COMPSET
* SIMP_DOM_ID where has type
* SIMP_RAN_ID where has type
* SIMP_FCOMP_ID_L
* SIMP_FCOMP_ID_R
* SIMP_SPECIAL_REL_R idem for operators
* SIMP_SPECIAL_REL_L idem for operators
* SIMP_FUNIMAGE_PRJ1
* SIMP_FUNIMAGE_PRJ2
* SIMP_DOM_PRJ1where has type
* SIMP_DOM_PRJ2where has type
* SIMP_RAN_PRJ1where has type
* SIMP_RAN_PRJ2where has type
* SIMP_FUNIMAGE_LAMBDA
* SIMP_DOM_LAMBDA
* SIMP_RAN_LAMBDA
* SIMP_IN_FUNIMAGE
* SIMP_IN_FUNIMAGE_CONVERSE_L
* SIMP_IN_FUNIMAGE_CONVERSE_R
* SIMP_MULTI_FUNIMAGE_SETENUM_LL
* SIMP_MULTI_FUNIMAGE_SETENUM_LR
* SIMP_MULTI_FUNIMAGE_OVERL_SETENUM
* SIMP_MULTI_FUNIMAGE_BUNION_SETENUM
* SIMP_FUNIMAGE_CPROD
* SIMP_FUNIMAGE_ID
* SIMP_FUNIMAGE_FUNIMAGE_CONVERSE
* SIMP_FUNIMAGE_CONVERSE_FUNIMAGE
* SIMP_FUNIMAGE_FUNIMAGE_CONVERSE_SETENUM
* SIMP_FUNIMAGE_DOMRESwith hypothesiswhere is one of , , , .
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 9/16
* SIMP_FUNIMAGE_DOMSUBwith hypothesiswhere is one of , , , .
* SIMP_FUNIMAGE_RANRESwith hypothesiswhere is one of , , , .
* SIMP_FUNIMAGE_RANSUBwith hypothesiswhere is one of , , , .
* SIMP_FUNIMAGE_SETMINUSwith hypothesiswhere is one of , , , .
DEF_BCOMP
DERIV_ID_SING where is a single expression
* SIMP_SPECIAL_DOM
* SIMP_SPECIAL_RAN
* SIMP_CONVERSE_CONVERSE
* DERIV_RELIMAGE_FCOMP
* DERIV_FCOMP_DOMRES
* DERIV_FCOMP_DOMSUB
* DERIV_FCOMP_RANRES
* DERIV_FCOMP_RANSUB
DERIV_FCOMP_SING
* SIMP_SPECIAL_EQUAL_RELDOMRAN idem for operators
* SIMP_TYPE_DOM where is a type expression equalto
* SIMP_TYPE_RAN where is a type expression equalto
* SIMP_MULTI_DOM_CPROD
* SIMP_MULTI_RAN_CPROD
* SIMP_MULTI_DOM_DOMRES
* SIMP_MULTI_DOM_DOMSUB
* SIMP_MULTI_RAN_RANRES
* SIMP_MULTI_RAN_RANSUB
* DEF_IN_DOM
* DEF_IN_RAN
* DEF_IN_CONVERSE
* DEF_IN_DOMRES
* DEF_IN_RANRES
* DEF_IN_DOMSUB
* DEF_IN_RANSUB
* DEF_IN_RELIMAGE
* DEF_IN_FCOMP
* DEF_OVERL
* DEF_IN_ID
* DEF_IN_DPROD
* DEF_IN_PPROD
* DEF_IN_REL
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 10/16
* DEF_IN_RELDOM
* DEF_IN_RELRAN
* DEF_IN_RELDOMRAN
* DEF_IN_FCT
* DEF_IN_TFCT
* DEF_IN_INJ
* DEF_IN_TINJ
* DEF_IN_SURJ
* DEF_IN_TSURJ
* DEF_IN_BIJ
DISTRI_BCOMP_BUNION
* DISTRI_FCOMP_BUNION_R
* DISTRI_FCOMP_BUNION_L
DISTRI_DPROD_BUNION
DISTRI_DPROD_BINTER
DISTRI_DPROD_SETMINUS
DISTRI_DPROD_OVERL
DISTRI_PPROD_BUNION
DISTRI_PPROD_BINTER
DISTRI_PPROD_SETMINUS
DISTRI_PPROD_OVERL
DISTRI_OVERL_BUNION_L
DISTRI_OVERL_BINTER_L
* DISTRI_DOMRES_BUNION_R
* DISTRI_DOMRES_BUNION_L
* DISTRI_DOMRES_BINTER_R
* DISTRI_DOMRES_BINTER_L
DISTRI_DOMRES_SETMINUS_R
DISTRI_DOMRES_SETMINUS_L
DISTRI_DOMRES_DPROD
DISTRI_DOMRES_OVERL
* DISTRI_DOMSUB_BUNION_R
* DISTRI_DOMSUB_BUNION_L
* DISTRI_DOMSUB_BINTER_R
* DISTRI_DOMSUB_BINTER_L
DISTRI_DOMSUB_DPROD
DISTRI_DOMSUB_OVERL
* DISTRI_RANRES_BUNION_R
* DISTRI_RANRES_BUNION_L
* DISTRI_RANRES_BINTER_R
* DISTRI_RANRES_BINTER_L
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 11/16
DISTRI_RANRES_SETMINUS_R
DISTRI_RANRES_SETMINUS_L
* DISTRI_RANSUB_BUNION_R
* DISTRI_RANSUB_BUNION_L
* DISTRI_RANSUB_BINTER_R
* DISTRI_RANSUB_BINTER_L
* DISTRI_CONVERSE_BUNION
DISTRI_CONVERSE_BINTER
DISTRI_CONVERSE_SETMINUS
DISTRI_CONVERSE_BCOMP
DISTRI_CONVERSE_FCOMP
DISTRI_CONVERSE_PPROD
DISTRI_CONVERSE_DOMRES
DISTRI_CONVERSE_DOMSUB
DISTRI_CONVERSE_RANRES
DISTRI_CONVERSE_RANSUB
* DISTRI_DOM_BUNION
* DISTRI_RAN_BUNION
* DISTRI_RELIMAGE_BUNION_R
* DISTRI_RELIMAGE_BUNION_L
* DERIV_DOM_TOTALRELwith hypothesis where is one of
DERIV_RAN_SURJRELwith hypothesis where is one of
* DERIV_PRJ1_SURJwhere and are types and is one of
* DERIV_PRJ2_SURJwhere and are types and is one of
* DERIV_ID_BIJ where is a type and arrow
* SIMP_MAPSTO_PRJ1_PRJ2
DERIV_EXPAND_PRJS
* SIMP_DOM_SUCC
* SIMP_RAN_SUCC
* DERIV_MULTI_IN_BUNION
* DERIV_MULTI_IN_SETMINUS
* DEF_PRED
Empty Set Rewrite Rules
Rules that are marked with a * in the first column are implemented in the latest version of Rodin. Rules without a * are planned to be implemented in future versions.Other conventions used in these tables are described in The_Proving_Perspective_(Rodin_User_Manual)#Rewrite_Rules.
All rewrite rules that match the pattern are also applicable to predicates of the form and , as these predicates are equivalent. All rewrite rulesthat match the pattern are also applicable to predicates of the form and , as these predicates are equivalent.
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 12/16
Name Rule Side Condition
* DEF_SPECIAL_NOT_EQUAL where is not free in
* SIMP_SETENUM_EQUAL_EMPTY
* SIMP_SPECIAL_EQUAL_COMPSET
* SIMP_BINTER_EQUAL_TYPE where is a type expression
* SIMP_BINTER_SING_EQUAL_EMPTY
* SIMP_BINTER_SETMINUS_EQUAL_EMPTY
* SIMP_BUNION_EQUAL_EMPTY
* SIMP_SETMINUS_EQUAL_EMPTY
* SIMP_SETMINUS_EQUAL_TYPE where is a type expression
* SIMP_POW_EQUAL_EMPTY
* SIMP_POW1_EQUAL_EMPTY
* SIMP_KINTER_EQUAL_TYPE where is a type expression
* SIMP_KUNION_EQUAL_EMPTY
* SIMP_QINTER_EQUAL_TYPE where is a type expression
* SIMP_QUNION_EQUAL_EMPTY
* SIMP_NATURAL_EQUAL_EMPTY
* SIMP_NATURAL1_EQUAL_EMPTY
* SIMP_TYPE_EQUAL_EMPTY where is a type expression
* SIMP_CPROD_EQUAL_EMPTY
* SIMP_CPROD_EQUAL_TYPE where is a type expressionequal to
* SIMP_UPTO_EQUAL_EMPTY
* SIMP_UPTO_EQUAL_INTEGER
* SIMP_UPTO_EQUAL_NATURAL
* SIMP_UPTO_EQUAL_NATURAL1
* SIMP_SPECIAL_EQUAL_REL idem for operators
SIMP_TYPE_EQUAL_REL where is a type expressionequal to
* SIMP_SPECIAL_EQUAL_RELDOM idem for operator
SIMP_TYPE_EQUAL_RELDOMRANwhere is a type expression,idem for operator
* SIMP_SREL_EQUAL_EMPTY
* SIMP_STREL_EQUAL_EMPTY
* SIMP_DOM_EQUAL_EMPTY
* SIMP_RAN_EQUAL_EMPTY
* SIMP_FCOMP_EQUAL_EMPTY
* SIMP_BCOMP_EQUAL_EMPTY
* SIMP_DOMRES_EQUAL_EMPTY
* SIMP_DOMRES_EQUAL_TYPE where is a type expressionequal to
* SIMP_DOMSUB_EQUAL_EMPTY
* SIMP_DOMSUB_EQUAL_TYPE where is a type expression
* SIMP_RANRES_EQUAL_EMPTY
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 13/16
* SIMP_RANRES_EQUAL_TYPE where is a type expressionequal to
* SIMP_RANSUB_EQUAL_EMPTY
* SIMP_RANSUB_EQUAL_TYPE where is a type expression
* SIMP_CONVERSE_EQUAL_EMPTY
* SIMP_CONVERSE_EQUAL_TYPE where is a type expression
* SIMP_RELIMAGE_EQUAL_EMPTY
* SIMP_OVERL_EQUAL_EMPTY
* SIMP_DPROD_EQUAL_EMPTY
* SIMP_DPROD_EQUAL_TYPEwhere is a type expressionequal to
* SIMP_PPROD_EQUAL_EMPTY
* SIMP_PPROD_EQUAL_TYPEwhere is a type expressionequal to
* SIMP_ID_EQUAL_EMPTY
* SIMP_PRJ1_EQUAL_EMPTY
* SIMP_PRJ2_EQUAL_EMPTY
Arithmetic Rewrite Rules
Rules that are marked with a * in the first column are implemented in the latest version of Rodin. Rules without a * are planned to be implemented in future versions.Other conventions used in these tables are described in The_Proving_Perspective_(Rodin_User_Manual)#Rewrite_Rules.
Name Rule Side Condition
* SIMP_SPECIAL_MOD_0
* SIMP_SPECIAL_MOD_1
* SIMP_MIN_SING where is asingle expression
* SIMP_MAX_SING where is asingle expression
* SIMP_MIN_NATURAL
* SIMP_MIN_NATURAL1
* SIMP_MIN_BUNION_SING
* SIMP_MAX_BUNION_SING
* SIMP_MIN_UPTO
* SIMP_MAX_UPTO
* SIMP_LIT_MIN where and areliterals and
* SIMP_LIT_MAX where and areliterals and
* SIMP_SPECIAL_CARD
* SIMP_CARD_SING where is asingle expression
* SIMP_SPECIAL_EQUAL_CARD
* SIMP_CARD_POW
* SIMP_CARD_BUNION
with hypotheses
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 14/16
SIMP_CARD_SETMINUS and either or
SIMP_CARD_SETMINUS_SETENUMwith hypotheses
for all
* SIMP_CARD_CONVERSE
* SIMP_CARD_IDwhere has type
* SIMP_CARD_ID_DOMRES
* SIMP_CARD_PRJ1where hastype
* SIMP_CARD_PRJ2where hastype
* SIMP_CARD_PRJ1_DOMRES
* SIMP_CARD_PRJ2_DOMRES
* SIMP_CARD_LAMBDA
where is amaplet combinationof bound identifiersand expressionsthat are not boundby thecomprehension set(i.e., issyntacticallyinjective) and allidentifiers bound bythe comprehensionset that occur in also occur in
* SIMP_LIT_CARD_UPTO where and areliterals and
SIMP_TYPE_CARD
where is acarrier setcontaining elements
* SIMP_LIT_GE_CARD_1
* SIMP_LIT_LE_CARD_1
* SIMP_LIT_LE_CARD_0
* SIMP_LIT_GE_CARD_0
* SIMP_LIT_GT_CARD_0
* SIMP_LIT_LT_CARD_0
* SIMP_LIT_EQUAL_CARD_1
* SIMP_CARD_NATURAL
* SIMP_CARD_NATURAL1
* SIMP_LIT_IN_NATURAL where is a nonnegative literal
* SIMP_SPECIAL_IN_NATURAL1
* SIMP_LIT_IN_NATURAL1 where is apositive literal
* SIMP_LIT_UPTO where and areliterals and
* SIMP_LIT_IN_MINUS_NATURAL where is apositive literal
* SIMP_LIT_IN_MINUS_NATURAL1 where is a nonnegative literal
* DEF_IN_NATURAL
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 15/16
* DEF_IN_NATURAL1
* SIMP_LIT_EQUAL_KBOOL_TRUE
* SIMP_LIT_EQUAL_KBOOL_FALSE
DEF_EQUAL_MIN where non free in
DEF_EQUAL_MAX where non free in
* SIMP_SPECIAL_PLUS
* SIMP_SPECIAL_MINUS_R
* SIMP_SPECIAL_MINUS_L
* SIMP_MINUS_MINUS
* SIMP_MINUS_UNMINUS
where is aunary minusexpression or anegative literal
* SIMP_MULTI_MINUS
* SIMP_MULTI_MINUS_PLUS_L
* SIMP_MULTI_MINUS_PLUS_R
* SIMP_MULTI_MINUS_PLUS_PLUS
* SIMP_MULTI_PLUS_MINUS
* SIMP_MULTI_ARITHREL_PLUS_PLUS
where the rootrelation ( here) isone of
* SIMP_MULTI_ARITHREL_PLUS_R
where the rootrelation ( here) isone of
* SIMP_MULTI_ARITHREL_PLUS_L
where the rootrelation ( here) isone of
* SIMP_MULTI_ARITHREL_MINUS_MINUS_R
where the rootrelation ( here) isone of
* SIMP_MULTI_ARITHREL_MINUS_MINUS_L
where the rootrelation ( here) isone of
* SIMP_SPECIAL_PROD_0
* SIMP_SPECIAL_PROD_1
* SIMP_SPECIAL_PROD_MINUS_EVEN if an even numberof
* SIMP_SPECIAL_PROD_MINUS_ODD if an odd number of
* SIMP_LIT_MINUS where is a literal
* SIMP_LIT_EQUAL where and areliterals
* SIMP_LIT_LE where and areliterals
* SIMP_LIT_LT where and areliterals
* SIMP_LIT_GE where and areliterals
* SIMP_LIT_GTwhere and areliterals
9/21/2015 All Rewrite Rules - Event-B
http://wiki.event-b.org/index.php/All_Rewrite_Rules 16/16
* SIMP_DIV_MINUS
* SIMP_SPECIAL_DIV_1
* SIMP_SPECIAL_DIV_0
* SIMP_SPECIAL_EXPN_1_R
* SIMP_SPECIAL_EXPN_1_L
* SIMP_SPECIAL_EXPN_0
* SIMP_MULTI_LE
* SIMP_MULTI_LT
* SIMP_MULTI_GE
* SIMP_MULTI_GT
* SIMP_MULTI_DIV
* SIMP_MULTI_DIV_PROD
* SIMP_MULTI_MOD
DISTRI_PROD_PLUS
DISTRI_PROD_MINUS
DERIV_NOT_EQUAL and must beof Integer type
Extension Proof Rules
Rules that are marked with a * in the first column are implemented in the latest version of Rodin. Rules without a * are planned to be implemented in future versions.Other conventions used in these tables are described in The_Proving_Perspective_(Rodin_User_Manual)#Rewrite_Rules.
Rewrite Rules
Name Rule Side Condition A/M
* SIMP_SPECIAL_COND_BTRUE A
* SIMP_SPECIAL_COND_BFALSE A
* SIMP_MULTI_COND A
Inference Rules
Name Rule Side Condition
* DATATYPE_DISTINCT_CASE
where has a datatype as typeand appears free in , hasconstructors ,parameters are introduced asfresh identifiers
* DATATYPE_INDUCTION
where has inductive datatype as type and appears free in
are the inductive parameters (ifany); an antecedent is created forevery constructor of ; allparameters are introduced as freshidentifiers; examples here
Retrieved from "http://wiki.eventb.org/index.php?title=All_Rewrite_Rules&oldid=12789"Categories: User documentation Rodin Platform User manual
This page was last modified on 26 April 2013, at 14:29.