Relation Rewrite Rules: Difference between revisions
From Event-B
Jump to navigationJump to search
imported>Laurent Refactor rules about projections |
imported>Laurent Add rule about properties of identity. |
||
| Line 211: | Line 211: | ||
{{RRRow}}| ||{{Rulename|DERIV_PRJ1_SURJ}}||<math>\prjone \in\mathit{Ty}_1\ \mathit{op}\ \mathit{Ty}_2\;\;\defi\;\; \btrue </math> || where <math>\mathit{Ty}_1</math> and <math>\mathit{Ty}_2</math> are types and <math>\mathit{op}</math> is one of <math>\rel, \trel, \srel, \strel, \pfun, \tfun, \psur, \tsur </math> || A | {{RRRow}}| ||{{Rulename|DERIV_PRJ1_SURJ}}||<math>\prjone \in\mathit{Ty}_1\ \mathit{op}\ \mathit{Ty}_2\;\;\defi\;\; \btrue </math> || where <math>\mathit{Ty}_1</math> and <math>\mathit{Ty}_2</math> are types and <math>\mathit{op}</math> is one of <math>\rel, \trel, \srel, \strel, \pfun, \tfun, \psur, \tsur </math> || A | ||
{{RRRow}}| ||{{Rulename|DERIV_PRJ2_SURJ}}||<math>\prjtwo \in\mathit{Ty}_1\ \mathit{op}\ \mathit{Ty}_2\;\;\defi\;\; \btrue </math> || where <math>\mathit{Ty}_1</math> and <math>\mathit{Ty}_2</math> are types and <math>\mathit{op}</math> is one of <math>\rel, \trel, \srel, \strel, \pfun, \tfun, \psur, \tsur </math> || A | {{RRRow}}| ||{{Rulename|DERIV_PRJ2_SURJ}}||<math>\prjtwo \in\mathit{Ty}_1\ \mathit{op}\ \mathit{Ty}_2\;\;\defi\;\; \btrue </math> || where <math>\mathit{Ty}_1</math> and <math>\mathit{Ty}_2</math> are types and <math>\mathit{op}</math> is one of <math>\rel, \trel, \srel, \strel, \pfun, \tfun, \psur, \tsur </math> || A | ||
{{RRRow}}| ||{{Rulename|DERIV_ID_BIJ}}||<math>\id \in\mathit{Ty}\ \mathit{op}\ \mathit{Ty}\;\;\defi\;\; \btrue </math> || where <math>\mathit{Ty}</math> is a type and <math>\mathit{op}</math> is any arrow || A | |||
{{RRRow}}| ||{{Rulename|SIMP_MAPSTO_PRJ1_PRJ2}}||<math>\prjone(E)\mapsto\prjtwo(E)\;\;\defi\;\; E </math> || || A | {{RRRow}}| ||{{Rulename|SIMP_MAPSTO_PRJ1_PRJ2}}||<math>\prjone(E)\mapsto\prjtwo(E)\;\;\defi\;\; E </math> || || A | ||
{{RRRow}}| ||{{Rulename|DERIV_EXPAND_PRJS}}||<math> E \;\;\defi\;\; \prjone(E) \mapsto \prjtwo(E) </math> || || M | {{RRRow}}| ||{{Rulename|DERIV_EXPAND_PRJS}}||<math> E \;\;\defi\;\; \prjone(E) \mapsto \prjtwo(E) </math> || || M | ||
Revision as of 09:30, 18 February 2014
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 | A/M | |
|---|---|---|---|---|
| * | SIMP_DOM_SETENUM |
![]() |
A | |
| * | SIMP_DOM_CONVERSE |
![]() |
A | |
| * | SIMP_RAN_SETENUM |
![]() |
A | |
| * | SIMP_RAN_CONVERSE |
![]() |
A | |
| * | SIMP_SPECIAL_OVERL |
![]() |
A | |
| * | SIMP_MULTI_OVERL |
![]() |
there is a such that and and are syntactically equal. |
A |
| * | SIMP_TYPE_OVERL_CPROD |
![]() |
where is a type expression |
A |
| * | SIMP_SPECIAL_DOMRES_L |
![]() |
A | |
| * | SIMP_SPECIAL_DOMRES_R |
![]() |
A | |
| * | SIMP_TYPE_DOMRES |
![]() |
where is a type expression |
A |
| * | SIMP_MULTI_DOMRES_DOM |
![]() |
A | |
| * | SIMP_MULTI_DOMRES_RAN |
![]() |
A | |
| * | SIMP_DOMRES_DOMRES_ID |
![]() |
A | |
| * | SIMP_DOMRES_DOMSUB_ID |
![]() |
A | |
| * | SIMP_SPECIAL_RANRES_R |
![]() |
A | |
| * | SIMP_SPECIAL_RANRES_L |
![]() |
A | |
| * | SIMP_TYPE_RANRES |
![]() |
where is a type expression |
A |
| * | SIMP_MULTI_RANRES_RAN |
![]() |
A | |
| * | SIMP_MULTI_RANRES_DOM |
![]() |
A | |
| * | SIMP_RANRES_ID |
![]() |
A | |
| * | SIMP_RANSUB_ID |
![]() |
A | |
| * | SIMP_RANRES_DOMRES_ID |
![]() |
A | |
| * | SIMP_RANRES_DOMSUB_ID |
![]() |
A | |
| * | SIMP_SPECIAL_DOMSUB_L |
![]() |
A | |
| * | SIMP_SPECIAL_DOMSUB_R |
![]() |
A | |
| * | SIMP_TYPE_DOMSUB |
![]() |
where is a type expression |
A |
| * | SIMP_MULTI_DOMSUB_DOM |
![]() |
A | |
| * | SIMP_MULTI_DOMSUB_RAN |
![]() |
A | |
| * | SIMP_DOMSUB_DOMRES_ID |
![]() |
A | |
| * | SIMP_DOMSUB_DOMSUB_ID |
![]() |
A | |
| * | SIMP_SPECIAL_RANSUB_R |
![]() |
A | |
| * | SIMP_SPECIAL_RANSUB_L |
![]() |
A | |
| * | SIMP_TYPE_RANSUB |
![]() |
where is a type expression |
A |
| * | SIMP_MULTI_RANSUB_DOM |
![]() |
A | |
| * | SIMP_MULTI_RANSUB_RAN |
![]() |
A | |
| * | SIMP_RANSUB_DOMRES_ID |
![]() |
A | |
| * | SIMP_RANSUB_DOMSUB_ID |
![]() |
A | |
| * | SIMP_SPECIAL_FCOMP |
![]() |
A | |
| * | SIMP_TYPE_FCOMP_ID |
![]() |
A | |
| * | SIMP_TYPE_FCOMP_R |
![]() |
where is a type expression equal to ![]() |
A |
| * | SIMP_TYPE_FCOMP_L |
![]() |
where is a type expression equal to ![]() |
A |
| * | SIMP_FCOMP_ID |
![]() |
A | |
| * | SIMP_SPECIAL_BCOMP |
![]() |
A | |
| * | SIMP_TYPE_BCOMP_ID |
![]() |
A | |
| * | SIMP_TYPE_BCOMP_L |
![]() |
where is a type expression equal to ![]() |
A |
| * | SIMP_TYPE_BCOMP_R |
![]() |
where is a type expression equal to ![]() |
A |
| * | SIMP_BCOMP_ID |
![]() |
A | |
| * | SIMP_SPECIAL_DPROD_R |
![]() |
A | |
| * | SIMP_SPECIAL_DPROD_L |
![]() |
A | |
| * | SIMP_DPROD_CPROD |
![]() |
A | |
| * | SIMP_SPECIAL_PPROD_R |
![]() |
A | |
| * | SIMP_SPECIAL_PPROD_L |
![]() |
A | |
| * | SIMP_PPROD_CPROD |
![]() |
A | |
| * | SIMP_SPECIAL_RELIMAGE_R |
![]() |
A | |
| * | SIMP_SPECIAL_RELIMAGE_L |
![]() |
A | |
| * | SIMP_TYPE_RELIMAGE |
![]() |
where is a type expression |
A |
| * | SIMP_MULTI_RELIMAGE_DOM |
![]() |
A | |
| * | SIMP_RELIMAGE_ID |
![]() |
A | |
| * | SIMP_RELIMAGE_DOMRES_ID |
![]() |
A | |
| * | SIMP_RELIMAGE_DOMSUB_ID |
![]() |
A | |
| * | SIMP_MULTI_RELIMAGE_CPROD_SING |
![]() |
where is a single expression |
A |
| * | SIMP_MULTI_RELIMAGE_SING_MAPSTO |
![]() |
where is a single expression |
A |
| * | SIMP_MULTI_RELIMAGE_CONVERSE_RANSUB |
![]() |
A | |
| * | SIMP_MULTI_RELIMAGE_CONVERSE_RANRES |
![]() |
A | |
| * | SIMP_RELIMAGE_CONVERSE_DOMSUB |
![]() |
A | |
DERIV_RELIMAGE_RANSUB |
![]() |
M | ||
DERIV_RELIMAGE_RANRES |
![]() |
M | ||
| * | SIMP_MULTI_RELIMAGE_DOMSUB |
![]() |
A | |
DERIV_RELIMAGE_DOMSUB |
![]() |
M | ||
DERIV_RELIMAGE_DOMRES |
![]() |
M | ||
| * | SIMP_SPECIAL_CONVERSE |
![]() |
A | |
| * | SIMP_CONVERSE_ID |
![]() |
A | |
| * | SIMP_CONVERSE_CPROD |
![]() |
A | |
| * | SIMP_CONVERSE_SETENUM |
![]() |
A | |
| * | SIMP_CONVERSE_COMPSET |
![]() |
A | |
| * | SIMP_DOM_ID |
![]() |
where has type ![]() |
A |
| * | SIMP_RAN_ID |
![]() |
where has type ![]() |
A |
| * | SIMP_FCOMP_ID_L |
![]() |
A | |
| * | SIMP_FCOMP_ID_R |
![]() |
A | |
| * | SIMP_SPECIAL_REL_R |
![]() |
idem for operators ![]() |
A |
| * | SIMP_SPECIAL_REL_L |
![]() |
idem for operators ![]() |
A |
| * | SIMP_FUNIMAGE_PRJ1 |
![]() |
A | |
| * | SIMP_FUNIMAGE_PRJ2 |
![]() |
A | |
| * | SIMP_DOM_PRJ1 |
![]() |
where has type ![]() |
A |
| * | SIMP_DOM_PRJ2 |
![]() |
where has type ![]() |
A |
| * | SIMP_RAN_PRJ1 |
![]() |
where has type ![]() |
A |
| * | SIMP_RAN_PRJ2 |
![]() |
where has type ![]() |
A |
| * | SIMP_FUNIMAGE_LAMBDA |
![]() |
A | |
| * | SIMP_DOM_LAMBDA |
![]() |
A | |
| * | SIMP_RAN_LAMBDA |
![]() |
A | |
| * | SIMP_IN_FUNIMAGE |
![]() |
A | |
| * | SIMP_IN_FUNIMAGE_CONVERSE_L |
![]() |
A | |
| * | SIMP_IN_FUNIMAGE_CONVERSE_R |
![]() |
A | |
| * | SIMP_MULTI_FUNIMAGE_SETENUM_LL |
![]() |
A | |
| * | SIMP_MULTI_FUNIMAGE_SETENUM_LR |
![]() |
A | |
| * | SIMP_MULTI_FUNIMAGE_OVERL_SETENUM |
![]() |
A | |
| * | SIMP_MULTI_FUNIMAGE_BUNION_SETENUM |
![]() |
A | |
| * | SIMP_FUNIMAGE_CPROD |
![]() |
A | |
| * | SIMP_FUNIMAGE_ID |
![]() |
A | |
| * | SIMP_FUNIMAGE_FUNIMAGE_CONVERSE |
![]() |
A | |
| * | SIMP_FUNIMAGE_CONVERSE_FUNIMAGE |
![]() |
A | |
| * | SIMP_FUNIMAGE_FUNIMAGE_CONVERSE_SETENUM |
![]() |
A | |
| * | SIMP_FUNIMAGE_DOMRES |
![]() |
with hypothesis where is one of , , , , , , . |
AM |
| * | SIMP_FUNIMAGE_DOMSUB |
![]() |
with hypothesis where is one of , , , , , , . |
AM |
| * | SIMP_FUNIMAGE_RANRES |
![]() |
with hypothesis where is one of , , , , , , . |
AM |
| * | SIMP_FUNIMAGE_RANSUB |
![]() |
with hypothesis where is one of , , , , , , . |
AM |
| * | SIMP_FUNIMAGE_SETMINUS |
![]() |
with hypothesis where is one of , , , , , , . |
AM |
DEF_BCOMP |
![]() |
M | ||
DERIV_ID_SING |
![]() |
where is a single expression |
M | |
| * | SIMP_SPECIAL_DOM |
![]() |
A | |
| * | SIMP_SPECIAL_RAN |
![]() |
A | |
| * | SIMP_CONVERSE_CONVERSE |
![]() |
A | |
| * | DERIV_RELIMAGE_FCOMP |
![]() |
M | |
| * | DERIV_FCOMP_DOMRES |
![]() |
M | |
| * | DERIV_FCOMP_DOMSUB |
![]() |
M | |
| * | DERIV_FCOMP_RANRES |
![]() |
M | |
| * | DERIV_FCOMP_RANSUB |
![]() |
M | |
DERIV_FCOMP_SING |
![]() |
A | ||
| * | SIMP_SPECIAL_EQUAL_RELDOMRAN |
![]() |
idem for operators ![]() |
A |
| * | SIMP_TYPE_DOM |
![]() |
where is a type expression equal to ![]() |
A |
| * | SIMP_TYPE_RAN |
![]() |
where is a type expression equal to ![]() |
A |
| * | SIMP_MULTI_DOM_CPROD |
![]() |
A | |
| * | SIMP_MULTI_RAN_CPROD |
![]() |
A | |
| * | SIMP_MULTI_DOM_DOMRES |
![]() |
A | |
| * | SIMP_MULTI_DOM_DOMSUB |
![]() |
A | |
| * | SIMP_MULTI_RAN_RANRES |
![]() |
A | |
| * | SIMP_MULTI_RAN_RANSUB |
![]() |
A | |
| * | DEF_IN_DOM |
![]() |
M | |
| * | DEF_IN_RAN |
![]() |
M | |
| * | DEF_IN_CONVERSE |
![]() |
M | |
| * | DEF_IN_DOMRES |
![]() |
M | |
| * | DEF_IN_RANRES |
![]() |
M | |
| * | DEF_IN_DOMSUB |
![]() |
M | |
| * | DEF_IN_RANSUB |
![]() |
M | |
| * | DEF_IN_RELIMAGE |
![]() |
M | |
| * | DEF_IN_FCOMP |
![]() |
M | |
| * | DEF_OVERL |
![]() |
M | |
| * | DEF_IN_ID |
![]() |
M | |
| * | DEF_IN_DPROD |
![]() |
M | |
| * | DEF_IN_PPROD |
![]() |
M | |
| * | DEF_IN_REL |
![]() |
M | |
| * | DEF_IN_RELDOM |
![]() |
M | |
| * | DEF_IN_RELRAN |
![]() |
M | |
| * | DEF_IN_RELDOMRAN |
![]() |
M | |
| * | DEF_IN_FCT |
![]() |
M | |
| * | DEF_IN_TFCT |
![]() |
M | |
| * | DEF_IN_INJ |
![]() |
M | |
| * | DEF_IN_TINJ |
![]() |
M | |
| * | DEF_IN_SURJ |
![]() |
M | |
| * | DEF_IN_TSURJ |
![]() |
M | |
| * | DEF_IN_BIJ |
![]() |
M | |
DISTRI_BCOMP_BUNION |
![]() |
M | ||
| * | DISTRI_FCOMP_BUNION_R |
![]() |
M | |
| * | DISTRI_FCOMP_BUNION_L |
![]() |
M | |
DISTRI_DPROD_BUNION |
![]() |
M | ||
DISTRI_DPROD_BINTER |
![]() |
M | ||
DISTRI_DPROD_SETMINUS |
![]() |
M | ||
DISTRI_DPROD_OVERL |
![]() |
M | ||
DISTRI_PPROD_BUNION |
![]() |
M | ||
DISTRI_PPROD_BINTER |
![]() |
M | ||
DISTRI_PPROD_SETMINUS |
![]() |
M | ||
DISTRI_PPROD_OVERL |
![]() |
M | ||
DISTRI_OVERL_BUNION_L |
![]() |
M | ||
DISTRI_OVERL_BINTER_L |
![]() |
M | ||
| * | DISTRI_DOMRES_BUNION_R |
![]() |
M | |
| * | DISTRI_DOMRES_BUNION_L |
![]() |
M | |
| * | DISTRI_DOMRES_BINTER_R |
![]() |
M | |
| * | DISTRI_DOMRES_BINTER_L |
![]() |
M | |
DISTRI_DOMRES_SETMINUS_R |
![]() |
M | ||
DISTRI_DOMRES_SETMINUS_L |
![]() |
M | ||
DISTRI_DOMRES_DPROD |
![]() |
M | ||
DISTRI_DOMRES_OVERL |
![]() |
M | ||
| * | DISTRI_DOMSUB_BUNION_R |
![]() |
M | |
| * | DISTRI_DOMSUB_BUNION_L |
![]() |
M | |
| * | DISTRI_DOMSUB_BINTER_R |
![]() |
M | |
| * | DISTRI_DOMSUB_BINTER_L |
![]() |
M | |
DISTRI_DOMSUB_DPROD |
![]() |
M | ||
DISTRI_DOMSUB_OVERL |
![]() |
M | ||
| * | DISTRI_RANRES_BUNION_R |
![]() |
M | |
| * | DISTRI_RANRES_BUNION_L |
![]() |
M | |
| * | DISTRI_RANRES_BINTER_R |
![]() |
M | |
| * | DISTRI_RANRES_BINTER_L |
![]() |
M | |
DISTRI_RANRES_SETMINUS_R |
![]() |
M | ||
DISTRI_RANRES_SETMINUS_L |
![]() |
M | ||
| * | DISTRI_RANSUB_BUNION_R |
![]() |
M | |
| * | DISTRI_RANSUB_BUNION_L |
![]() |
M | |
| * | DISTRI_RANSUB_BINTER_R |
![]() |
M | |
| * | DISTRI_RANSUB_BINTER_L |
![]() |
M | |
| * | DISTRI_CONVERSE_BUNION |
![]() |
M | |
DISTRI_CONVERSE_BINTER |
![]() |
M | ||
DISTRI_CONVERSE_SETMINUS |
![]() |
M | ||
DISTRI_CONVERSE_BCOMP |
![]() |
M | ||
DISTRI_CONVERSE_FCOMP |
![]() |
M | ||
DISTRI_CONVERSE_PPROD |
![]() |
M | ||
DISTRI_CONVERSE_DOMRES |
![]() |
M | ||
DISTRI_CONVERSE_DOMSUB |
![]() |
M | ||
DISTRI_CONVERSE_RANRES |
![]() |
M | ||
DISTRI_CONVERSE_RANSUB |
![]() |
M | ||
| * | DISTRI_DOM_BUNION |
![]() |
M | |
| * | DISTRI_RAN_BUNION |
![]() |
M | |
| * | DISTRI_RELIMAGE_BUNION_R |
![]() |
M | |
| * | DISTRI_RELIMAGE_BUNION_L |
![]() |
M | |
| * | DERIV_DOM_TOTALREL |
![]() |
with hypothesis , where is one of ![]() |
M |
DERIV_RAN_SURJREL |
![]() |
with hypothesis , where is one of ![]() |
M | |
DERIV_PRJ1_SURJ |
![]() |
where and are types and is one of ![]() |
A | |
DERIV_PRJ2_SURJ |
![]() |
where and are types and is one of ![]() |
A | |
DERIV_ID_BIJ |
![]() |
where is a type and is any arrow |
A | |
SIMP_MAPSTO_PRJ1_PRJ2 |
![]() |
A | ||
DERIV_EXPAND_PRJS |
![]() |
M | ||
| * | SIMP_DOM_SUCC |
![]() |
A | |
| * | SIMP_RAN_SUCC |
![]() |
A | |
| * | DERIV_MULTI_IN_BUNION |
![]() |
A | |
| * | DERIV_MULTI_IN_SETMINUS |
![]() |
A | |
| * | DEF_PRED |
![]() |
A |






such that
and
and
are syntactically equal.
is a type expression














































![r[\emptyset ] \;\;\defi\;\; \emptyset](/images/math/b/9/a/b9aaf14a5527d53ff1febab3e8883f03.png)
![\emptyset [S] \;\;\defi\;\; \emptyset](/images/math/6/4/8/648fbd380df0ae4c5d64da8bef51ee2d.png)
![r[Ty] \;\;\defi\;\; \ran (r)](/images/math/0/2/1/02153b3e9f952be7157a4d4e336374a7.png)
![r[\dom (r)] \;\;\defi\;\; \ran (r)](/images/math/0/3/4/0346b1b9c1146a8343fa2d18e1732769.png)
![\id[T] \;\;\defi\;\; T](/images/math/4/0/0/4009c72979487233368b217afa41d8ad.png)
![(S \domres \id)[T] \;\;\defi\;\; S \binter T](/images/math/b/e/2/be2ea9770f745da9730119cc0e6c7be3.png)
![(S \domsub \id)[T] \;\;\defi\;\; T \setminus S](/images/math/6/1/4/6143619949a6ea25351813e711f4f395.png)
![(\{ E\} \cprod S)[\{ E\} ] \;\;\defi\;\; S](/images/math/c/5/2/c526fc7db223ce0bfe920622d54d64e0.png)
is a single expression![\{ E \mapsto F\} [\{ E\} ] \;\;\defi\;\; \{ F\}](/images/math/e/2/c/e2c3111e1660139c0d07f75c30de0e5c.png)
![(r \ransub S)^{-1} [S] \;\;\defi\;\; \emptyset](/images/math/0/d/8/0d87a3a40feb382450061c80f9ed103e.png)
![(r \ranres S)^{-1} [S] \;\;\defi\;\; r^{-1} [S]](/images/math/1/7/4/174952bb78d6d7afd42ee6a53ed2ac78.png)
![(S \domsub r)^{-1} [T] \;\;\defi\;\; r^{-1} [T] \setminus S](/images/math/3/4/2/342512ec589776fd0aae93fe8eb732e6.png)
![(r \ransub S)[T] \;\;\defi\;\; r[T] \setminus S](/images/math/5/9/3/5933212d9aad4f59b7641ea383b31a91.png)
![(r \ranres S)[T] \;\;\defi\;\; r[T] \binter S](/images/math/1/9/9/1994ec5d3fa539db498124fe8fd4a27d.png)
![(S \domsub r)[S] \;\;\defi\;\; \emptyset](/images/math/b/f/3/bf31fb9e2da1545464bd5baecc397c01.png)
![(S \domsub r)[T] \;\;\defi\;\; r[T \setminus S]](/images/math/f/2/4/f2407e5c136829c08c1bc390d74a77fe.png)
![(S \domres r)[T] \;\;\defi\;\; r[S \binter T]](/images/math/8/4/0/840633e87abc3f54638ede200920f377.png)






has type 










has type 

has type 


















where
is one of
,
,
,
,
,
,
.








![(p \fcomp q)[s] \;\;\defi\;\; q[p[s]]](/images/math/d/5/2/d525cb240947f85af66b077f0894364c.png)






















![F \in r[w] \;\;\defi\;\; \exists x \qdot x \in w \land x \mapsto F \in r](/images/math/e/a/7/ea7840f0b824a8db50a6356a02b00904.png)

































































![r[S \bunion T] \;\;\defi\;\; r[S] \bunion r[T]](/images/math/6/7/5/675105d6ac145c32895450ddb1a9515f.png)
![(p \bunion q)[S] \;\;\defi\;\; p[S] \bunion q[S]](/images/math/c/d/a/cdad0c6221ccb102d4f674695d7ff79c.png)

, where 



and
are types and 








