88 t = Bound n andalso not(loose_bvar1(s,n)) end |
88 t = Bound n andalso not(loose_bvar1(s,n)) end |
89 | NONE => false); |
89 | NONE => false); |
90 |
90 |
91 fun extract_conj fst xs t = case dest_conj t of NONE => NONE |
91 fun extract_conj fst xs t = case dest_conj t of NONE => NONE |
92 | SOME(conj,P,Q) => |
92 | SOME(conj,P,Q) => |
93 (if not fst andalso def xs P then SOME(xs,P,Q) else |
93 (if def xs P then (if fst then NONE else SOME(xs,P,Q)) else |
94 if def xs Q then SOME(xs,Q,P) else |
94 if def xs Q then SOME(xs,Q,P) else |
95 (case extract_conj false xs P of |
95 (case extract_conj false xs P of |
96 SOME(xs,eq,P') => SOME(xs,eq, conj $ P' $ Q) |
96 SOME(xs,eq,P') => SOME(xs,eq, conj $ P' $ Q) |
97 | NONE => (case extract_conj false xs Q of |
97 | NONE => (case extract_conj false xs Q of |
98 SOME(xs,eq,Q') => SOME(xs,eq,conj $ P $ Q') |
98 SOME(xs,eq,Q') => SOME(xs,eq,conj $ P $ Q') |
99 | NONE => NONE))); |
99 | NONE => NONE))); |
100 |
100 |
101 fun extract_imp fst xs t = case dest_imp t of NONE => NONE |
101 fun extract_imp fst xs t = case dest_imp t of NONE => NONE |
102 | SOME(imp,P,Q) => if not fst andalso def xs P then SOME(xs,P,Q) |
102 | SOME(imp,P,Q) => if def xs P then (if fst then NONE else SOME(xs,P,Q)) |
103 else (case extract_conj false xs P of |
103 else (case extract_conj false xs P of |
104 SOME(xs,eq,P') => SOME(xs, eq, imp $ P' $ Q) |
104 SOME(xs,eq,P') => SOME(xs, eq, imp $ P' $ Q) |
105 | NONE => (case extract_imp false xs Q of |
105 | NONE => (case extract_imp false xs Q of |
106 NONE => NONE |
106 NONE => NONE |
107 | SOME(xs,eq,Q') => |
107 | SOME(xs,eq,Q') => |