61 of SOME app => print_app tyvars is_pat some_thm vars fxy app |
61 of SOME app => print_app tyvars is_pat some_thm vars fxy app |
62 | _ => applify "(" ")" (print_term tyvars is_pat some_thm vars NOBR) fxy |
62 | _ => applify "(" ")" (print_term tyvars is_pat some_thm vars NOBR) fxy |
63 (print_term tyvars is_pat some_thm vars BR t1) [t2]) |
63 (print_term tyvars is_pat some_thm vars BR t1) [t2]) |
64 | print_term tyvars is_pat some_thm vars fxy (IVar v) = |
64 | print_term tyvars is_pat some_thm vars fxy (IVar v) = |
65 print_var vars v |
65 print_var vars v |
66 | print_term tyvars is_pat some_thm vars fxy ((v, ty) `|=> t) = |
66 | print_term tyvars is_pat some_thm vars fxy (t as _ `|=> _) = |
67 let |
67 let |
68 val vars' = intro_vars (the_list v) vars; |
68 val (vs_tys, body) = Code_Thingol.unfold_abs t; |
69 in |
69 val (ps, vars') = fold_map (print_abs_head tyvars) vs_tys vars; |
70 concat [ |
70 val vars' = intro_vars (map_filter fst vs_tys) vars; |
71 enclose "(" ")" [constraint (print_var vars' v) (print_typ tyvars NOBR ty)], |
71 in |
72 str "=>", |
72 brackets (ps @| print_term tyvars false some_thm vars' NOBR body) |
73 print_term tyvars false some_thm vars' NOBR t |
|
74 ] |
|
75 end |
73 end |
76 | print_term tyvars is_pat some_thm vars fxy (ICase case_expr) = |
74 | print_term tyvars is_pat some_thm vars fxy (ICase case_expr) = |
77 (case Code_Thingol.unfold_const_app (#primitive case_expr) |
75 (case Code_Thingol.unfold_const_app (#primitive case_expr) |
78 of SOME (app as ({ sym = Constant const, ... }, _)) => |
76 of SOME (app as ({ sym = Constant const, ... }, _)) => |
79 if is_none (const_syntax const) |
77 if is_none (const_syntax const) |
80 then print_case tyvars some_thm vars fxy case_expr |
78 then print_case tyvars some_thm vars fxy case_expr |
81 else print_app tyvars is_pat some_thm vars fxy app |
79 else print_app tyvars is_pat some_thm vars fxy app |
82 | NONE => print_case tyvars some_thm vars fxy case_expr) |
80 | NONE => print_case tyvars some_thm vars fxy case_expr) |
|
81 and print_abs_head tyvars (some_v, ty) vars = |
|
82 let |
|
83 val vars' = intro_vars (the_list some_v) vars; |
|
84 in |
|
85 (concat [ |
|
86 enclose "(" ")" [constraint (print_var vars' some_v) (print_typ tyvars NOBR ty)], |
|
87 str "=>" |
|
88 ], vars') |
|
89 end |
83 and print_app tyvars is_pat some_thm vars fxy |
90 and print_app tyvars is_pat some_thm vars fxy |
84 (app as ({ sym, typargs, dom, ... }, ts)) = |
91 (app as ({ sym, typargs, dom, ... }, ts)) = |
85 let |
92 let |
86 val k = length ts; |
93 val k = length ts; |
87 val typargs' = if is_pat then [] else typargs; |
94 val typargs' = if is_pat then [] else typargs; |