Local Open Scope logic_base.
Local Open Scope syntax.
Inductive expr : Type :=
| andp : expr -> expr -> expr
| orp : expr -> expr -> expr
| impp : expr -> expr -> expr
| falsep : expr
| varp : nat -> expr
.
Fixpoint beq e1 e2 :=
match e1, e2 with
| falsep , falsep => true
| varp x, varp y => EqNat.beq_nat x y
| andp p11 p12, andp p21 p22 => andb (beq p11 p21) (beq p12 p22)
| orp p11 p12, orp p21 p22 => andb (beq p11 p21) (beq p12 p22)
| impp p11 p12, impp p21 p22 => andb (beq p11 p21) (beq p12 p22)
| _, _ => false
end.

Theorem beq_eq : forall e1 e2, beq e1 e2 = true <-> e1 = e2.