theory Multi_Recsimports "../Nominal2"begin(* multiple recursive binders example 7 from Peter Sewell's bestiary *)atom_decl namenominal_datatype multi_recs: exp = Var name| Unit| Pair exp exp| LetRec l::"lrbs" e::"exp" bind (set) "bs l" in l eand lrb = Assign name expand lrbs = Single lrb| More lrb lrbsbinder b :: "lrb \<Rightarrow> atom set" and bs :: "lrbs \<Rightarrow> atom set"where "b (Assign x e) = {atom x}"| "bs (Single a) = b a"| "bs (More a as) = (b a) \<union> (bs as)"thm multi_recs.distinctthm multi_recs.inductthm multi_recs.inductsthm multi_recs.exhaustthm multi_recs.fv_defsthm multi_recs.bn_defsthm multi_recs.perm_simpsthm multi_recs.eq_iffthm multi_recs.fv_bn_eqvtthm multi_recs.size_eqvtthm multi_recs.supportsthm multi_recs.fsuppthm multi_recs.suppend