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.