Qcert.NRA.Lang.NRASize
Section NRASize.
Context {fruntime:foreign_runtime}.
Fixpoint nra_size (a:nra) : nat :=
match a with
| AID ⇒ 1
| AConst d ⇒ 1
| ABinop op a₁ a₂ ⇒ S (nra_size a₁ + nra_size a₂)
| AUnop op a₁ ⇒ S (nra_size a₁)
| AMap a₁ a₂ ⇒ S (nra_size a₁ + nra_size a₂)
| AMapConcat a₁ a₂ ⇒ S (nra_size a₁ + nra_size a₂)
| AProduct a₁ a₂ ⇒ S (nra_size a₁ + nra_size a₂)
| ASelect a₁ a₂ ⇒ S (nra_size a₁ + nra_size a₂)
| ADefault a₁ a₂ ⇒ S (nra_size a₁ + nra_size a₂)
| AEither a₁ a₂⇒ S (nra_size a₁ + nra_size a₂)
| AEitherConcat a₁ a₂ ⇒ S (nra_size a₁ + nra_size a₂)
| AApp a₁ a₂ ⇒ S (nra_size a₁ + nra_size a₂)
end.
Lemma nra_size_nzero (a:nra) : nra_size a ≠ 0.
Fixpoint nra_depth (a:nra) : nat :=
match a with
| AID ⇒ 0
| AConst d ⇒ 0
| ABinop op a₁ a₂ ⇒ max (nra_depth a₁) (nra_depth a₂)
| AUnop op a₁ ⇒ nra_depth a₁
| AMap a₁ a₂ ⇒ max (S (nra_depth a₁)) (nra_depth a₂)
| AMapConcat a₁ a₂ ⇒ max (S (nra_depth a₁)) (nra_depth a₂)
| AProduct a₁ a₂ ⇒ max (nra_depth a₁) (nra_depth a₂)
| ASelect a₁ a₂ ⇒ max (S (nra_depth a₁)) (nra_depth a₂)
| ADefault a₁ a₂ ⇒ max (nra_depth a₁) (nra_depth a₂)
| AEither a₁ a₂⇒ max (nra_depth a₁) (nra_depth a₂)
| AEitherConcat a₁ a₂ ⇒ max (nra_depth a₁) (nra_depth a₂)
| AApp a₁ a₂ ⇒ max (nra_depth a₁) (nra_depth a₂)
end.
End NRASize.