Module NRAEnvSize
Section
NRAEnvSize
.
Require
Import
Omega
.
Require
Import
BasicRuntime
.
Require
Import
NRAEnv
.
Context
{
fruntime
:
foreign_runtime
}.
Fixpoint
nraenv_size
(
a
:
nraenv
) :
nat
:=
match
a
with
|
NRAEnvID
=> 1
|
NRAEnvConst
d
=> 1
|
NRAEnvBinop
op
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvUnop
op
a
₁ =>
S
(
nraenv_size
a
₁)
|
NRAEnvMap
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvMapConcat
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvProduct
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvSelect
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvDefault
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvEither
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvEitherConcat
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvApp
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvGetConstant
_
=> 1
|
NRAEnvEnv
=> 1
|
NRAEnvAppEnv
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvMapEnv
a
₁ =>
S
(
nraenv_size
a
₁)
|
NRAEnvFlatMap
a
₁
a
₂ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂)
|
NRAEnvJoin
a
₁
a
₂
a
₃ =>
S
(
nraenv_size
a
₁ +
nraenv_size
a
₂ +
nraenv_size
a
₃)
|
NRAEnvProject
_
a
₁ =>
S
(
nraenv_size
a
₁)
|
NRAEnvGroupBy
_
_
a
₁ =>
S
(
nraenv_size
a
₁)
|
NRAEnvUnnest
_
_
a
₁ =>
S
(
nraenv_size
a
₁)
end
.
Lemma
nraenv_size_nzero
(
a
:
nraenv
) :
nraenv_size
a
<> 0.
Proof.
induction
a
;
simpl
;
omega
.
Qed.
Fixpoint
nraenv_depth
(
a
:
nraenv
) :
nat
:=
match
a
with
|
NRAEnvID
=> 0
|
NRAEnvConst
d
=> 0
|
NRAEnvBinop
op
a
₁
a
₂ =>
max
(
nraenv_depth
a
₁) (
nraenv_depth
a
₂)
|
NRAEnvUnop
op
a
₁ =>
nraenv_depth
a
₁
|
NRAEnvMap
a
₁
a
₂ =>
max
(
S
(
nraenv_depth
a
₁)) (
nraenv_depth
a
₂)
|
NRAEnvMapConcat
a
₁
a
₂ =>
max
(
S
(
nraenv_depth
a
₁)) (
nraenv_depth
a
₂)
|
NRAEnvProduct
a
₁
a
₂ =>
max
(
nraenv_depth
a
₁) (
nraenv_depth
a
₂)
|
NRAEnvSelect
a
₁
a
₂ =>
max
(
S
(
nraenv_depth
a
₁)) (
nraenv_depth
a
₂)
|
NRAEnvDefault
a
₁
a
₂ =>
max
(
nraenv_depth
a
₁) (
nraenv_depth
a
₂)
|
NRAEnvEither
a
₁
a
₂=>
max
(
nraenv_depth
a
₁) (
nraenv_depth
a
₂)
|
NRAEnvEitherConcat
a
₁
a
₂=>
max
(
nraenv_depth
a
₁) (
nraenv_depth
a
₂)
|
NRAEnvApp
a
₁
a
₂ =>
max
(
nraenv_depth
a
₁) (
nraenv_depth
a
₂)
|
NRAEnvGetConstant
_
=> 0
|
NRAEnvEnv
=> 0
|
NRAEnvAppEnv
a
₁
a
₂ =>
max
(
nraenv_depth
a
₁) (
nraenv_depth
a
₂)
|
NRAEnvMapEnv
a
₁ => (
S
(
nraenv_depth
a
₁))
|
NRAEnvFlatMap
a
₁
a
₂ =>
max
(
S
(
nraenv_depth
a
₁)) (
nraenv_depth
a
₂)
|
NRAEnvJoin
a
₁
a
₂
a
₃ =>
max
(
S
(
nraenv_depth
a
₁)) (
max
(
nraenv_depth
a
₂) (
nraenv_depth
a
₃))
|
NRAEnvProject
_
a
₁ => (
nraenv_depth
a
₁)
|
NRAEnvGroupBy
_
_
a
₁ => (
nraenv_depth
a
₁)
|
NRAEnvUnnest
_
_
a
₁ => (
nraenv_depth
a
₁)
end
.
End
NRAEnvSize
.