Module Qcert.Driver.CompCustom
Require
Import
String
.
Require
Import
List
.
Require
Import
Morphisms
.
Require
Import
Utils
.
Require
Import
SQLRuntime
.
Require
Import
SQLPPRuntime
.
Require
Import
OQLRuntime
.
Require
Import
LambdaNRARuntime
.
Require
Import
CAMPRuleRuntime
.
Require
Import
TechRuleRuntime
.
Require
Import
DesignerRuleRuntime
.
Require
Import
NRARuntime
.
Require
Import
NRAEnvRuntime
.
Require
Import
NNRCRuntime
.
Require
Import
NNRSRuntime
.
Require
Import
NNRSimpRuntime
.
Require
Import
ImpRuntime
.
Require
Import
NNRCMRRuntime
.
Require
Import
DNNRCRuntime
.
Require
Import
tDNNRCRuntime
.
Require
Import
CAMPRuntime
.
Require
Import
JavaScriptAstRuntime
.
Require
Import
JavaScriptRuntime
.
Require
Import
JavaRuntime
.
Require
Import
SparkDFRuntime
.
Require
Import
OQLtoNRAEnv
.
Require
Import
SQLtoNRAEnv
.
Require
Import
SQLPPtoNRAEnv
.
Require
Import
LambdaNRAtoNRAEnv
.
Require
Import
CAMPRuletoCAMP
.
Require
Import
TechRuletoCAMPRule
.
Require
Import
DesignerRuletoCAMPRule
.
Require
Import
CAMPtoNRA
.
Require
Import
CAMPtocNRAEnv
.
Require
Import
CAMPtoNRAEnv
.
Require
Import
NRAtocNNRC
.
Require
Import
cNRAEnvtocNNRC
.
Require
Import
NRAEnvtoNNRC
.
Require
Import
cNRAEnvtoNRA
.
Require
Import
cNRAEnvtoNRAEnv
.
Require
Import
NRAEnvtocNRAEnv
.
Require
Import
NRAtocNRAEnv
.
Require
Import
NNRCtocNNRC
.
Require
Import
NNRCtoNNRS
.
Require
Import
NNRStoNNRSimp
.
Require
Import
NNRSimptoImpData
.
Require
Import
ImpDatatoImpEJson
.
Require
Import
ImpEJsontoJavaScriptAst
.
Require
Import
JavaScriptAsttoJavaScript
.
Require
Import
NNRCtoDNNRC
.
Require
Import
NNRCtoNNRCMR
.
Require
Import
NNRCtoJava
.
Require
Import
cNNRCtoCAMP
.
Require
Import
cNNRCtoNNRC
.
Require
Import
NNRCMRtoNNRC
.
Require
Import
NNRCMRtoDNNRC
.
Require
Import
DNNRCtotDNNRC
.
Require
Import
tDNNRCtoSparkDF
.
Require
Import
NRAEnvOptim
.
Require
Import
NNRCOptim
.
Require
Import
NNRCMROptim
.
Require
Import
tDNNRCOptim
.
Require
Import
NNRSimpOptim
.
Require
Import
OptimizerLogger
.
Require
Import
ForeignDataToEJson
.
Require
Import
ForeignToEJsonRuntime
.
Require
Import
ForeignToWasmAst
.
Require
Import
ForeignToReduceOps
.
Require
Import
ForeignToSpark
.
Require
Import
ForeignToJava
.
Require
Import
ForeignToJavaScriptAst
.
Require
Import
ForeignToScala
.
Compiler Driver
Require
Import
CompLang
.
Require
Import
CompEnv
.
Require
Import
CompConfig
.
Require
Import
CompDriver
.
Section
CompCustom
.
Local
Open
Scope
list_scope
.
Context
{
ft
:
foreign_type
}.
Context
{
fruntime
:
foreign_runtime
}.
Context
{
foreign_ejson_model
:
Set
}.
Context
{
fejson
:
foreign_ejson
foreign_ejson_model
}.
Context
{
foreign_ejson_runtime_op
:
Set
}.
Context
{
ftejson
:
foreign_to_ejson
foreign_ejson_model
foreign_ejson_runtime_op
}.
Context
{
frtejson
:
foreign_to_ejson_runtime
}.
Context
{
ftowasm
:
foreign_to_wasm_ast
foreign_ejson_runtime_op
}.
Context
{
fredop
:
foreign_reduce_op
}.
Context
{
ftoredop
:
foreign_to_reduce_op
}.
Context
{
bm
:
brand_model
}.
Context
{
ftyping
:
foreign_typing
}.
Context
{
nraenv_logger
:
optimizer_logger
string
nraenv
}.
Context
{
nnrc_logger
:
optimizer_logger
string
nnrc
}.
Context
{
nnrs_imp_expr_logger
:
optimizer_logger
string
nnrs_imp_expr
}.
Context
{
nnrs_imp_stmt_logger
:
optimizer_logger
string
nnrs_imp_stmt
}.
Context
{
nnrs_imp_logger
:
optimizer_logger
string
nnrs_imp
}.
Context
{
dnnrc_logger
:
optimizer_logger
string
(
DNNRCBase.dnnrc_base
_
(
type_annotation
unit
)
dataframe
)}.
Context
{
ftojava
:
foreign_to_java
}.
Context
{
ftos
:
foreign_to_scala
}.
Context
{
ftospark
:
foreign_to_spark
}.
Context
{
ftjsast
:
foreign_ejson_to_ajavascript
}.
Section
Verified
.
Definition
compile_nraenv_to_imp_data_verified
(
conf
:
driver_config
) (
q
:
query
) :
query
:=
let
dv
:=
driver_of_path
conf
(
L_nraenv
::
L_nnrc
::
L_nnrs
::
L_nnrs_imp
::
L_imp_data
::
nil
)
in
match
List.rev
(
compile
dv
q
)
with
|
nil
=>
Q_error
"
No
compilation
result
!"
|
target
::
_
=>
target
end
.
Lemma
compile_nraenv_to_imp_data_verified_yields_result
conf
q
:
exists
q
',
compile_nraenv_to_imp_data_verified
conf
(
Q_nraenv
q
) =
Q_imp_data
q
'.
Proof.
unfold
compile_nraenv_to_imp_data_verified
.
simpl
.
exists
(
nnrs_imp_to_imp_data
(
comp_qname_lowercase
conf
)
(
nnrs_to_nnrs_imp
(
nnrc_to_nnrs
(
vars_of_constants_config
(
comp_constants
conf
))
(
NNRCLet
init_venv
(
NNRCConst
(
drec
nil
))
(
NNRCLet
init_vid
(
NNRCConst
dunit
)
(
NRAEnvtoNNRC.nraenv_to_nnrc
q
init_vid
init_venv
)))))).
reflexivity
.
Qed.
Definition
compile_nraenv_to_imp_ejson_verified
(
conf
:
driver_config
) (
q
:
query
) :
query
:=
let
dv
:=
driver_of_path
conf
(
L_nraenv
::
L_nnrc
::
L_nnrs
::
L_nnrs_imp
::
L_imp_data
::
L_imp_ejson
::
nil
)
in
match
List.rev
(
compile
dv
q
)
with
|
nil
=>
Q_error
"
No
compilation
result
!"
|
target
::
_
=>
target
end
.
Lemma
compile_nraenv_to_imp_ejson_verified_yields_result
conf
q
:
exists
q
',
compile_nraenv_to_imp_ejson_verified
conf
(
Q_nraenv
q
) =
Q_imp_ejson
q
'.
Proof.
unfold
compile_nraenv_to_imp_ejson_verified
.
exists
(
imp_data_to_imp_ejson
(
nnrs_imp_to_imp_data
(
comp_qname_lowercase
conf
)
(
nnrs_to_nnrs_imp
(
nnrc_to_nnrs
(
vars_of_constants_config
(
comp_constants
conf
))
(
NNRCLet
init_venv
(
NNRCConst
(
drec
nil
))
(
NNRCLet
init_vid
(
NNRCConst
dunit
)
(
NRAEnvtoNNRC.nraenv_to_nnrc
q
init_vid
init_venv
))))))).
reflexivity
.
Qed.
End
Verified
.
Section
Others
.
Definition
compile_nnrc_to_javascript_ast
(
conf
:
driver_config
) (
q
:
query
) :
query
:=
let
dv
:=
driver_of_path
conf
(
L_nnrc
::
L_nnrs
::
L_nnrs_imp
::
L_imp_data
::
L_imp_ejson
::
L_js_ast
::
nil
)
in
match
List.rev
(
compile
dv
q
)
with
|
nil
=>
Q_error
"
No
compilation
result
!"
|
target
::
_
=>
target
end
.
Definition
compile_nnrc_to_java
(
conf
:
driver_config
) (
q
:
query
) :
query
:=
let
dv
:=
driver_of_path
conf
(
L_nnrc
::
L_java
::
nil
)
in
match
List.rev
(
compile
dv
q
)
with
|
nil
=>
Q_error
"
No
compilation
result
!"
|
target
::
_
=>
target
end
.
End
Others
.
End
CompCustom
.