(*s Interpreting formula as simplified formula *)
Fixpoint CGFormSimplify (f : CGForm) : CGSForm :=
match f with
| CGleq x y d => CGSleq x y d
| CGeq x y d => CGSeq x y d
| CGand f0 f1 => CGSand (CGFormSimplify f0) (CGFormSimplify f1)
| CGor f0 f1 => CGSor (CGFormSimplify f0) (CGFormSimplify f1)
| CGimp f0 f1 => CGSor (CGSnot (CGFormSimplify f0)) (CGFormSimplify f1)
| CGnot f0 => CGSnot (CGFormSimplify f0)
end.

(* Specifications: *)
Lemma CGFormSimplify_correct :
forall (f : CGForm) (rho : ad -> D),
CGeval rho f <-> CGSeval rho (CGFormSimplify f).