doc-src/IsarAdvanced/Functions/Thy/Functions.thy
changeset 28040 f47b4af3716a
parent 27026 3602b81665b5
child 29781 1e3afd4fe3a3
equal deleted inserted replaced
28039:4d28b4d134f6 28040:f47b4af3716a
   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