(*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).