datatype ('a) list = Cons of 'a * ('a) list | Nil ; fun MEM v3 = (fn v4 => (case v4 of Nil => false | (Cons (v2, v1)) => ((v3 = v2) orelse ((MEM v3) v1)))) ; datatype ('a) regexp = Repeat of ('a) regexp | Then of ('a) regexp * ('a) regexp | Or of ('a) regexp * ('a) regexp | Charset of ('a) list | Epsilon ; datatype ('a) option = Some of 'a | None ; fun match v13 = (fn v14 => (fn v15 => (case v13 of Nil => (case v14 of Nil => true | (Cons (v2, v1)) => false) | (Cons (v12, v11)) => (case v12 of Epsilon => (((match v11) v14) v15) | (Charset (v5)) => (case v14 of Nil => false | (Cons (v4, v3)) => (((MEM v4) v5) andalso (((match v11) v3) None))) | (Or (v7, v6)) => ((((match (Cons (v7, v11))) v14) v15) orelse (((match (Cons (v6, v11))) v14) v15)) | (Then (v9, v8)) => (((match (Cons (v9, (Cons (v8, v11))))) v14) v15) | (Repeat (v10)) => (if (v15 = (Some ((Cons ((Repeat (v10)), v11))))) then false else ((((match v11) v14) v15) orelse (((match (Cons (v10, (Cons ((Repeat (v10)), v11))))) v14) (Some ((Cons ((Repeat (v10)), v11))))))))))) ;