(* * Copyright (c) 2009 Robert Dockins and Aquinas Hobor. * *)
(* Coq development: using indirection theory to model types in l-calculus *)
(* lam_ref_mach_defs.v: some simple definitions that sit right on top of the TCB. *)
(* Some custom tactics, maybe move into msl in base.v *)
Tactic Notation "omegac" :=
(elimtype False; omega).
Ltac IF_tac :=
match goal with |- context [IF ?a then _ else _] =>
cut (a \/ ~a);
[ let H := fresh "H" in intro H; destruct H;
[try (rewrite IF_then_else_True;[|auto]) | try (rewrite IF_then_else_False; [|auto])]
| ]
end.
Ltac IF_tac_in H :=
match type of H with context [IF ?a then _ else _] =>
cut (a \/ ~a);
[ let H' := fresh "H" in intro H'; destruct H';
[try (rewrite IF_then_else_True in H ;[|auto]) | try (rewrite IF_then_else_False in H; [|auto])]
| ]
end.

(* Coerce from values to exprs... *)
Lemma isvNat: forall n,
isValue (Nat n).