Professional Documents
Culture Documents
SECTION: ALPHA
SUBJECT: FMSE
INVARIANT
settemp ∈ ℕ∧ mintemp∈ ℕ∧maxtemp∈ ℕ ∧settemp ∈ ℕ ∧te ∈ ℕ ∧ mintemp<settemp ∧
settemp<maxtemp ∧ ∧ heatingsystem:BOOL ∧ plasticstatus :BOOL ∧ button:BOOL ∧
status:BOOL
penstatus :BOOL
INITIALISATION
status, heatingsystem, plasticstatus,button, penstatus,settemp := FALSE, FALSE,FALSE,
FALSE,FALSE,150
OPERATIONS
START =
PRE status=FALSE&heatingsystem=FALSE
THEN
status:=TRUE
END;
HT =
PRE status=TRUE&heatingsystem=FALSE
THEN
heatingsystem:=TRUE
END;
beginworking=
PRE status=TRUE &heatingsystem= TRUE
THEN
button:= TRUE
END;
melting=
PRE status=TRUE& heatingsystem= TRUE &button =TRUE
THEN
plasticstatus:=TRUE
END;
tempcheck=
PRE mintemp<=te∧te<=maxtemp ∧te:ℕ
THEN settemp:=te
END;
working_pen =
PRE status= TRUE & heatingsystem=TRUE &button=TRUE &plasticstatus=TRUE
THEN
penstatus:=TRUE
END
END
PROOF OBLIGATIONS
--------------------
"Invariant is preserved" => 150: NATURAL
--------------------
"Invariant is preserved" => mintemp: NATURAL
--------------------
"Invariant is preserved" => maxtemp: NATURAL
--------------------
"Invariant is preserved" => te: NATURAL
--------------------
"Invariant is preserved" => mintemp+1<=150
--------------------
"Invariant is preserved" => 150+1<=maxtemp
--------------------
"Invariant is preserved" => mintemp+1<=te
--------------------
"Invariant is preserved" => te+1<=maxtemp
REFINEMENT
REFINEMENT doodlerrrrr_r
REFINES doodlerrrrr
VARIABLES
status,heatingsystem, plasticstatus, button, penstatus,settemp
INITIALISATION
status, heatingsystem, plasticstatus,button, penstatus,settemp := FALSE, FALSE,FALSE,
FALSE,FALSE,150
OPERATIONS
START =
PRE status=FALSE&heatingsystem=FALSE
THEN
status:=TRUE
END;
HT =
PRE status=TRUE&heatingsystem=FALSE
THEN
heatingsystem:=TRUE
END;
beginworking=
PRE status=TRUE &heatingsystem= TRUE
THEN
button:= TRUE
END;
melting=
PRE status=TRUE& heatingsystem= TRUE &button =TRUE
THEN
plasticstatus:=TRUE
END;
tempcheck=
PRE mintemp<=te∧te<=maxtemp ∧te:ℕ
THEN settemp:=te
END;
working_pen =
PRE status= TRUE & heatingsystem=TRUE &button=TRUE &plasticstatus=TRUE
THEN
penstatus:=TRUE
END
END
PROOF OBLIGATIONS
--------------------
"Precondition can be deduced" => status$1 = FALSE
--------------------
"Precondition can be deduced" => heatingsystem$1 = FALSE
--------------------
"Precondition can be deduced" => status$1 = TRUE
--------------------
"Precondition can be deduced" => heatingsystem$1 = FALSE
--------------------
"Precondition can be deduced" => status$1 = TRUE
--------------------
"Precondition can be deduced" => heatingsystem$1 = TRUE
--------------------
"Precondition can be deduced" => status$1 = TRUE
--------------------
"Precondition can be deduced" => heatingsystem$1 = TRUE
--------------------
"Precondition can be deduced" => button$1 = TRUE
--------------------
"Precondition can be deduced" => status$1 = TRUE
--------------------
"Precondition can be deduced" => heatingsystem$1 = TRUE
--------------------
"Precondition can be deduced" => button$1 = TRUE
--------------------
"Precondition can be deduced" => plasticstatus$1 = TRUE
IMPLEMENTATION
IMPLEMENTATION doodlerrrrr_i
REFINES doodlerrrrr_r
VALUES
mintemp=100;maxtemp=250;te=10
CONCRETE_VARIABLES
status,heatingsystem, plasticstatus, button, penstatus,settemp
INITIALISATION
status, heatingsystem, plasticstatus,button, penstatus,settemp := FALSE, FALSE,FALSE,
FALSE,FALSE,150
OPERATIONS
START =
IF status=FALSE&heatingsystem=FALSE
THEN
status:=TRUE
END;
HT =
IF status=TRUE&heatingsystem=FALSE
THEN
heatingsystem:=TRUE
END;
beginworking=
IF status=TRUE &heatingsystem= TRUE
THEN
button:= TRUE
END;
melting=
IF status=TRUE& heatingsystem= TRUE &button =TRUE
THEN
plasticstatus:=TRUE
END;
tempcheck=
IF mintemp<=te∧te<=maxtemp
THEN settemp:=te
END;
working_pen =
IF status= TRUE & heatingsystem=TRUE &button=TRUE &plasticstatus=TRUE
THEN
penstatus:=TRUE
END
END
PROOF OBLIGATIONS
--------------------
status$1 = FALSE &
heatingsystem$1 = FALSE &
not(status$1 = FALSE & heatingsystem$1 = FALSE) &
"Refinement is correct"
=>
TRUE = status$1
--------------------
status$1 = TRUE &
heatingsystem$1 = FALSE &
not(status$1 = TRUE & heatingsystem$1 = FALSE) &
"Refinement is correct"
=>
TRUE = heatingsystem$1
--------------------
status$1 = TRUE &
heatingsystem$1 = TRUE &
not(status$1 = TRUE & heatingsystem$1 = TRUE) &
"Refinement is correct"
=>
TRUE = button$1
--------------------
status$1 = TRUE &
heatingsystem$1 = TRUE &
button$1 = TRUE &
not(status$1 = TRUE & heatingsystem$1 = TRUE & button$1 = TRUE) &
"Refinement is correct"
=>
TRUE = plasticstatus$1
--------------------
mintemp<=te &
te<=maxtemp &
not(mintemp<=te & te<=maxtemp) &
"Refinement is correct"
=>
te = settemp$1
--------------------
status$1 = TRUE &
heatingsystem$1 = TRUE &
button$1 = TRUE &
plasticstatus$1 = TRUE &
not(status$1 = TRUE & heatingsystem$1 = TRUE & button$1 = TRUE & plasticstatus$1 =
TRUE) &
"Refinement is correct"
=>
TRUE = penstatus$1
SCREENSHOT
CODE
#ifndef _doodlerrrrr_h
#define _doodlerrrrr_h
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Clause SETS */
/* Clause CONCRETE_CONSTANTS */
/* Basic constants */
/* TO DO: #define doodlerrrrr__mintemp */
/* Clause CONCRETE_VARIABLES */
/* Clause OPERATIONS */
#ifdef __cplusplus
#endif /* __cplusplus */
#endif /* _doodlerrrrr_h */