(type u32 (primitive u32)) (type bool (primitive bool)) (type A (enum (A1 (x u32)))) (decl Ext1 (u32) A) (decl Ext2 (u32) A) (extern extractor Ext1 ext1) (extern extractor Ext2 ext2) (decl C (bool) A) (extern constructor C c) (decl Lower (A) A) (rule (Lower (and a (Ext1 x) (Ext2 =q))) (C y)) (type R (enum (A (x u32)))) (type Opcode (enum A B C)) (type MachInst (enum D E F)) (decl Lower2 (Opcode) MachInst) (rule (Lower2 (Opcode.A)) (R.A (Opcode.A))) (rule (Lower2 (Opcode.B)) (MachInst.E)) (rule (Lower2 (Opcode.C)) (MachInst.F))