equal
deleted
inserted
replaced
322 orelse |
322 orelse |
323 (exists (apl (lhs, op occs)) (rhs :: prems)) |
323 (exists (apl (lhs, op occs)) (rhs :: prems)) |
324 orelse |
324 orelse |
325 (null prems andalso |
325 (null prems andalso |
326 Pattern.matches (#tsig (Sign.rep_sg sign)) (lhs, rhs)) |
326 Pattern.matches (#tsig (Sign.rep_sg sign)) (lhs, rhs)) |
327 orelse |
327 (* orelse |
328 (case lhs of |
328 (case lhs of |
329 (f as Free _) $ (Var _) => exists (fn p => f occs p) prems orelse |
329 (f as Free _) $ (Var _) => exists (fn p => f occs p) prems orelse |
330 (null prems andalso f occs rhs) |
330 (null prems andalso f occs rhs) |
331 | _ => false); |
331 | _ => false)*); |
332 (*the condition "null prems" in the last cases is necessary because |
332 (*the condition "null prems" in the last cases is necessary because |
333 conditional rewrites with extra variables in the conditions may terminate |
333 conditional rewrites with extra variables in the conditions may terminate |
334 although the rhs is an instance of the lhs. Example: |
334 although the rhs is an instance of the lhs. Example: |
335 ?m < ?n ==> f(?n) == f(?m)*) |
335 ?m < ?n ==> f(?n) == f(?m)*) |
336 (*FIXME: proper test: lhs does not match a subterm of a premise |
336 (*FIXME: proper test: lhs does not match a subterm of a premise |