all rewrite rules - lml.ls.fi.upm.eslml.ls.fi.upm.es/rsd/reference/all_rewrite_rules-event-b.pdf ·...

16
9/21/2015 All Rewrite Rules - Event-B http://wiki.event-b.org/index.php/All_Rewrite_Rules 1/16 All Rewrite Rules From 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 respective location (for editing purposes): Conventions used in these tables are described in The_Proving_Perspective_(Rodin_User_Manual)#Rewrite_rules Contents 1 Set Rewrite Rules 2 Relation Rewrite Rules 3 Empty Set Rewrite Rules 4 Arithmetic Rewrite Rules 5 Extension Proof Rules 5.1 Rewrite Rules 5.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 Con * 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

Upload: dotruc

Post on 25-Apr-2019

220 views

Category:

Documents


0 download

TRANSCRIPT

9/21/2015 All Rewrite Rules - Event-B

http://wiki.event-b.org/index.php/All_Rewrite_Rules 1/16

All Rewrite RulesFrom Event­B

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 oflocally­bound,pairwise­distinctbound 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 i­thargument 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 non­negative 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 non­negative 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.event­b.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.