Вы находитесь на странице: 1из 243

Overture Technical Report Series No. TR-001

Feb 2018

VDM-10 Language Manual

by

Peter Gorm Larsen Kenneth Lausdahl Nick Battle John Fitzgerald Sune Wolff Shin Sahara Marcel Verhoef Peter W. V. Tran-Jørgensen Tomohiro Oda Paul Chisholm

VDM-10 Language Manual

VDM-10 Language Manual

Document history

Month

Year

Version

Version of Overture.exe

Comment

April

2010

 

0.2

 

May

2010

1

0.2

 

February

2011

2

1.0.0

 

July

2012

3

1.2.2

 

April

2013

4

2.0.0

 

March

2014

5

2.0.4

Includes RMs #16, #17, #18, #20

November

2014

6

2.1.2

Includes RMs #25, #26, #29

August

2015

7

2.3.0

Includes RMs #27

April

2016

8

2.3.4

Review inputs from Paul Chisholm

September

2016

9

2.4.0

RMs #35, #36

May

2017

10

2.5.0

RM #39

Feb

2018

11

2.6.0

Includes RM #42

ii

Contents

1 Introduction

1

1.1 The VDM Specification Language (VDM-SL) .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

1

1.2 The VDM++ Language

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

1

1.3 The VDM Real Time Language (VDM-RT)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

2

1.4 Purpose of The Document

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

2

1.5 Structure of the Document

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

2

2 Concrete Syntax Notation

 

3

3 Data Type Definitions

 

5

3.1 Basic Data Types

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

3.1.1 The Boolean Type

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

3.1.2 The Numeric Types .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

3.1.3 The Character Type .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

11

3.1.4 The Quote Type .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

11

3.1.5 The Token Type .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

12

3.2 Compound Types

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

12

3.2.1

Set Types

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

3.2.2

Sequence Types .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

3.2.3

Map Types

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

3.2.4 Product Types .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

22

3.2.5 Composite Types

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

23

3.2.6 Union and Optional Types

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

26

3.2.7 The Object Reference Type (VDM++ and VDM-RT)

.

.

.

.

.

.

.

.

.

.

.

.

28

3.2.8 Function Types

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

29

3.3 Invariants

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

31

3.4 Equality

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

32

3.5 Order

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

35

4 Algorithm Definitions

 

39

iii

VDM-10 Language Manual

VDM-10 Language Manual

5 Function Definitions

41

5.1 Polymorphic Functions

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

47

5.2 Higher Order Functions

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

49

6 Expressions

51

6.1 Let Expressions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

51

6.2 The Define Expression

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

54

6.3 Unary and Binary Expressions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

55

6.4 Conditional Expressions

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

56

6.5 Quantified Expressions

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

58

6.6 The Iota Expression .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

60

6.7 Set Expressions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

61

6.8 Sequence Expressions .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

63

6.9 Map Expressions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

65

6.10 Tuple Constructor Expressions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

66

6.11 Record Expressions .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

66

6.12 Apply Expressions

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

68

6.13 The New Expression (VDM++ and VDM-RT)

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

69

6.14 The Self Expression (VDM++ and VDM-RT)

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

70

6.15 The Threadid Expression (VDM++ and VDM-RT)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

71

6.16 The Lambda Expression

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

73

6.17 Narrow Expressions .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

74

6.18 Is Expressions .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

76

6.19 Base Class Membership (VDM++ and VDM-RT)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

77

6.20 Class Membership

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

77

6.21 Same Base Class Membership (VDM++ and VDM-RT) .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

78

6.22 Same Class Membership (VDM++ and VDM-RT) .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

78

6.23 History Expressions (VDM++ and VDM-RT)

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

79

6.24 The Time Expression (VDM-RT)

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

80

6.25 Literals and Names

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

81

6.26 The Undefined Expression

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

83

6.27 The Precondition Expression

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

83

7 Patterns

87

7.1

Object Pattern (VDM++ and VDM-RT)

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

92

8 Bindings

95

9 Value (Constant) Definitions

 

97

10 Declaration of Modifiable State Components

 

99

10.1 Instance Variables (VDM++ and VDM-RT)

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

99

10.2 The State Definition (VDM-SL)

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 101

iv

CONTENTS

CONTENTS

11 Operation Definitions

103

11.1

Constructors (VDM++ and VDM-RT)

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 110

12 Statements

111

12.1 Let Statements

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 111

12.2 The Define Statement .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 113

12.3 The Block Statement

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 114

12.4 The Assignment Statement

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.