Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Timmy Weerwag
splc
Commits
523202ce
Commit
523202ce
authored
Jun 20, 2016
by
Timmy Weerwag
Browse files
second example
parent
8668805e
Pipeline
#3596
skipped
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
semantics/Makefile
View file @
523202ce
...
...
@@ -95,6 +95,7 @@ endif
######################
VFILES
:=
example.v
\
example2.v
\
program.v
\
tactics.v
\
types.v
...
...
semantics/_CoqProject
View file @
523202ce
-R . SPLSemantics
example.v
example2.v
program.v
tactics.v
types.v
semantics/example2.v
0 → 100644
View file @
523202ce
Require
Import
List
ZArith
String
.
Require
Import
program
types
tactics
.
Import
List
.
ListNotations
.
Local
Open
Scope
Z_scope
.
Local
Open
Scope
string_scope
.
(
*
// This is ex-should-work/compile-example4.spl
*
[
Int
]
l
=
[];
*
*
mult
(
n
)
::
Int
->
Int
{
*
Int
i
=
0
;
*
Int
x
=
1
;
*
while
(
i
<
n
)
{
*
x
=
x
*
l
.
hd
;
*
l
=
l
.
tl
;
*
i
=
i
+
1
;
*
}
*
return
x
;
*
}
*
*
seq
(
n
)
::
Int
->
[
Int
]
{
*
Int
i
=
2
;
*
l
=
1
:
[];
*
while
(
i
<=
n
)
{
*
l
=
i
:
l
;
*
i
=
i
+
1
;
*
}
*
return
l
;
*
}
*
*
fac
(
n
)
::
Int
->
Int
{
*
Int
n2
=
n
;
*
if
(
n2
<
2
)
{
*
n2
=
1
;
*
}
*
seq
(
n2
);
*
return
mult
(
n2
);
*
}
*
*
main
()
::
->
Void
{
*
fac
(
6
);
*
}
*
)
Definition
var_l
:=
ENil
.
Definition
type_var_l
:=
(
TList
TInt
).
Definition
fun_mult
:=
(
SVal
"i"
(
ENum
0
)
(
SVal
"x"
(
ENum
1
)
(
SSeq
(
SWhile
(
EBinOp
LT
(
EFieldSel
(
FVar
"i"
))
(
EFieldSel
(
FVar
"n"
)))
(
SSeq
(
SAssign
(
FVar
"x"
)
(
EBinOp
Mul
(
EFieldSel
(
FVar
"x"
))
(
EFieldSel
(
FHd
(
FVar
"l"
)))))
(
SSeq
(
SAssign
(
FVar
"l"
)
(
EFieldSel
(
FTl
(
FVar
"l"
))))
(
SSeq
(
SAssign
(
FVar
"i"
)
(
EBinOp
Add
(
EFieldSel
(
FVar
"i"
))
(
ENum
1
)))
SSkip
))))
(
SSeq
(
SReturn
(
Some
(
EFieldSel
(
FVar
"x"
))))
SSkip
)))).
Definition
type_fun_mult
:=
(
TFun
[
TInt
]
TInt
).
Definition
fun_seq
:=
(
SVal
"i"
(
ENum
2
)
(
SSeq
(
SAssign
(
FVar
"l"
)
(
EBinOp
Cons
(
ENum
1
)
ENil
))
(
SSeq
(
SWhile
(
EBinOp
LEq
(
EFieldSel
(
FVar
"i"
))
(
EFieldSel
(
FVar
"n"
)))
(
SSeq
(
SAssign
(
FVar
"l"
)
(
EBinOp
Cons
(
EFieldSel
(
FVar
"i"
))
(
EFieldSel
(
FVar
"l"
))))
(
SSeq
(
SAssign
(
FVar
"i"
)
(
EBinOp
Add
(
EFieldSel
(
FVar
"i"
))
(
ENum
1
)))
SSkip
)))
(
SSeq
(
SReturn
(
Some
(
EFieldSel
(
FVar
"l"
))))
SSkip
)))).
Definition
type_fun_seq
:=
(
TFun
[
TInt
]
(
TList
TInt
)).
Definition
fun_fac
:=
(
SVal
"n2"
(
EFieldSel
(
FVar
"n"
))
(
SSeq
(
SIf
(
EBinOp
LT
(
EFieldSel
(
FVar
"n2"
))
(
ENum
2
))
(
SSeq
(
SAssign
(
FVar
"n2"
)
(
ENum
1
))
SSkip
)
SSkip
)
(
SSeq
(
SFunCall
"seq"
[(
EFieldSel
(
FVar
"n2"
))])
(
SSeq
(
SReturn
(
Some
(
EFunCall
"mult"
[(
EFieldSel
(
FVar
"n2"
))])))
SSkip
)))).
Definition
type_fun_fac
:=
(
TFun
[
TInt
]
TInt
).
Definition
fun_main
:=
(
SSeq
(
SFunCall
"fac"
[(
ENum
6
)])
SSkip
).
Definition
type_fun_main
:=
(
TFun
[]
TVoid
).
Definition
the_program
:=
(
PVal
"l"
var_l
(
PFun
"mult"
[
"n"
]
fun_mult
(
PFun
"seq"
[
"n"
]
fun_seq
(
PFun
"fac"
[
"n"
]
fun_fac
(
PFun
"main"
[]
fun_main
PEnd
))))).
Theorem
program_typed
:
prog_type
empty_env
the_program
.
Proof
.
solve_var
type_var_l
.
solve_fun
type_fun_mult
.
solve_stmt_val
TInt
.
solve_stmt_val
TInt
.
solve_assign
TInt
.
solve_assign
(
TList
TInt
).
solve_assign
TInt
.
solve_binop_explicit
TInt
TInt
.
solve_fun
type_fun_seq
.
solve_stmt_val
TInt
.
solve_assign
(
TList
TInt
).
solve_assign
(
TList
TInt
).
solve_assign
TInt
.
solve_binop_explicit
TInt
TInt
.
solve_fun
type_fun_fac
.
solve_stmt_val
TInt
.
solve_assign
TInt
.
solve_simple_stmt_funcall
[
TInt
]
(
TList
TInt
).
solve_simple_funcall
[
TInt
].
solve_fun
type_fun_main
.
solve_simple_stmt_funcall
[
TInt
]
TInt
.
Qed
.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment