Qcert.NRAEnv.Lang.NRAEnvSize
Section NRAEnvSize.
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.
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.