typedef struct { struct {} b, union { struct {} s, bool c } u } s_t;
typedef struct { struct {} b, struct {} u } s1_t;
typedef struct { struct {} b, bool u } s2_t;

place s s_t;
place s1 s1_t: <s1_t;
place s2 s2_t: >s2_t;

trans s_s1 in { s: s; } out { s1: is s1_t s; } gate s.u is s;

trans s_s2 in { s: s; } out { s2: is s2_t s; } gate s.u is c;

trans s1_s in { s1: s; } out { s: is s_t s; };

trans s2_s in { s2: s; } out { s: is s_t s; };
