Canonical agenv_aspace U : {aspace aT} := ASpace (agenv_is_aspace U).

(* Specifications: *)
Lemma agenvE U : agenv U = agenv_aspace U. Proof. by []. Qed.
(* Kleene algebra properties *)
Lemma agenvM U : (agenv U * agenv U)%VS = agenv U. Proof. exact: prodv_id. Qed.
Lemma agenvX n U : (agenv U ^+ n.+1)%VS = agenv U. Proof. exact: expv_id. Qed.
Lemma sub1_agenv U : (1 <= agenv U)%VS. Proof. by rewrite agenvEl addvSl. Qed.
Lemma sub_agenv U : (U <= agenv U)%VS.
Lemma agenv_sub_modl U V : (1 <= V -> U * V <= V -> agenv U <= V)%VS.
Lemma agenv_sub_modr U V : (1 <= V -> V * U <= V -> agenv U <= V)%VS.
Lemma agenv_id U : agenv (agenv U) = agenv U.
Lemma agenvS U V : (U <= V -> agenv U <= agenv V)%VS.
Lemma agenv_add_id U V : agenv (agenv U + V) = agenv (U + V).
Lemma subv_adjoin U x : (U <= <<U; x>>)%VS.
Lemma subvP_adjoin U x y : y \in U -> y \in <<U; x>>%VS.
Lemma vsval_invr w : vsval w \is a GRing.unit -> val w^-1 = (val w)^-1.
End SubFalgType.