added an intro lemma for freshness of products; set up
the simplifier so that it can deal with the compact and
long notation for freshness constraints (FIXME: it should
also be able to deal with the special case of freshness
of atoms)
structure ROOT =
struct
structure Nat =
struct
datatype nat = Zero_nat | Suc of nat;
end; (*struct Nat*)
structure Codegen =
struct
val dummy_set : Nat.nat -> Nat.nat list = Nat.Suc :: [];
val foobar_set : Nat.nat list =
Nat.Zero_nat ::
(Nat.Suc Nat.Zero_nat :: (Nat.Suc (Nat.Suc Nat.Zero_nat) :: []));
end; (*struct Codegen*)
end; (*struct ROOT*)