Section Expressions.
Variables
(W : Type)
(G : pfunc W val -> Prop) (* Primitive expressions *).
Inductive unop := UNeg.
Inductive binop := BAdd.
Inductive expr : Type :=
| EVal : forall (v : val), expr
| EUnop : forall (op : unop) (e : expr), expr
| EBinop : forall (op : binop) (e1 e2 : expr), expr
| EPrim : forall (f : pfunc W val), expr.
Definition is_true (v : val) :=
exists n, (v = Vint n \/ v = Vptr n) /\ n <> O.

Lemma is_true_dec : forall v, {is_true v} + {~ is_true v}.