equal
deleted
inserted
replaced
311 \end{isabelle} |
311 \end{isabelle} |
312 *} |
312 *} |
313 |
313 |
314 |
314 |
315 text {* |
315 text {* |
316 |
316 The key to this error message is the matrix at the bottom. The rows |
317 |
|
318 The the key to this error message is the matrix at the bottom. The rows |
|
319 of that matrix correspond to the different recursive calls (In our |
317 of that matrix correspond to the different recursive calls (In our |
320 case, there is just one). The columns are the function's arguments |
318 case, there is just one). The columns are the function's arguments |
321 (expressed through different measure functions, which map the |
319 (expressed through different measure functions, which map the |
322 argument tuple to a natural number). |
320 argument tuple to a natural number). |
323 |
321 |
482 | "And X X = X" |
480 | "And X X = X" |
483 |
481 |
484 |
482 |
485 text {* |
483 text {* |
486 This definition is useful, because the equations can directly be used |
484 This definition is useful, because the equations can directly be used |
487 as simplification rules rules. But the patterns overlap: For example, |
485 as simplification rules. But the patterns overlap: For example, |
488 the expression @{term "And T T"} is matched by both the first and |
486 the expression @{term "And T T"} is matched by both the first and |
489 the second equation. By default, Isabelle makes the patterns disjoint by |
487 the second equation. By default, Isabelle makes the patterns disjoint by |
490 splitting them up, producing instances: |
488 splitting them up, producing instances: |
491 *} |
489 *} |
492 |
490 |
594 |
592 |
595 This is an arithmetic triviality, but unfortunately the |
593 This is an arithmetic triviality, but unfortunately the |
596 @{text arith} method cannot handle this specific form of an |
594 @{text arith} method cannot handle this specific form of an |
597 elimination rule. However, we can use the method @{text |
595 elimination rule. However, we can use the method @{text |
598 "atomize_elim"} to do an ad-hoc conversion to a disjunction of |
596 "atomize_elim"} to do an ad-hoc conversion to a disjunction of |
599 existentials, which can then be soved by the arithmetic decision procedure. |
597 existentials, which can then be solved by the arithmetic decision procedure. |
600 Pattern compatibility and termination are automatic as usual. |
598 Pattern compatibility and termination are automatic as usual. |
601 *} |
599 *} |
602 (*<*)ML_val "goals_limit := 10"(*>*) |
600 (*<*)ML_val "goals_limit := 10"(*>*) |
603 apply atomize_elim |
601 apply atomize_elim |
604 apply arith |
602 apply arith |