src/Doc/Implementation/Eq.thy
changeset 73764 35d8132633c6
parent 73592 c642c3cbbf0e
child 76987 4c275405faae
equal deleted inserted replaced
73763:eccc4a13216d 73764:35d8132633c6
    53   \<open>\<beta>\<eta>\<close>-conversion) and lifting of \<open>\<And>/\<Longrightarrow>\<close> contexts.
    53   \<open>\<beta>\<eta>\<close>-conversion) and lifting of \<open>\<And>/\<Longrightarrow>\<close> contexts.
    54 \<close>
    54 \<close>
    55 
    55 
    56 text %mlref \<open>
    56 text %mlref \<open>
    57   \begin{mldecls}
    57   \begin{mldecls}
    58   @{index_ML Thm.reflexive: "cterm -> thm"} \\
    58   @{define_ML Thm.reflexive: "cterm -> thm"} \\
    59   @{index_ML Thm.symmetric: "thm -> thm"} \\
    59   @{define_ML Thm.symmetric: "thm -> thm"} \\
    60   @{index_ML Thm.transitive: "thm -> thm -> thm"} \\
    60   @{define_ML Thm.transitive: "thm -> thm -> thm"} \\
    61   @{index_ML Thm.abstract_rule: "string -> cterm -> thm -> thm"} \\
    61   @{define_ML Thm.abstract_rule: "string -> cterm -> thm -> thm"} \\
    62   @{index_ML Thm.combination: "thm -> thm -> thm"} \\[0.5ex]
    62   @{define_ML Thm.combination: "thm -> thm -> thm"} \\[0.5ex]
    63   @{index_ML Thm.equal_intr: "thm -> thm -> thm"} \\
    63   @{define_ML Thm.equal_intr: "thm -> thm -> thm"} \\
    64   @{index_ML Thm.equal_elim: "thm -> thm -> thm"} \\
    64   @{define_ML Thm.equal_elim: "thm -> thm -> thm"} \\
    65   \end{mldecls}
    65   \end{mldecls}
    66 
    66 
    67   See also \<^file>\<open>~~/src/Pure/thm.ML\<close> for further description of these inference
    67   See also \<^file>\<open>~~/src/Pure/thm.ML\<close> for further description of these inference
    68   rules, and a few more for primitive \<open>\<beta>\<close> and \<open>\<eta>\<close> conversions. Note that \<open>\<alpha>\<close>
    68   rules, and a few more for primitive \<open>\<beta>\<close> and \<open>\<eta>\<close> conversions. Note that \<open>\<alpha>\<close>
    69   conversion is implicit due to the representation of terms with de-Bruijn
    69   conversion is implicit due to the representation of terms with de-Bruijn
    80   differently, see @{cite \<open>\S9.3\<close> "isabelle-isar-ref"}.
    80   differently, see @{cite \<open>\S9.3\<close> "isabelle-isar-ref"}.
    81 \<close>
    81 \<close>
    82 
    82 
    83 text %mlref \<open>
    83 text %mlref \<open>
    84   \begin{mldecls}
    84   \begin{mldecls}
    85   @{index_ML_structure Conv} \\
    85   @{define_ML_structure Conv} \\
    86   @{index_ML_type conv} \\
    86   @{define_ML_type conv} \\
    87   @{index_ML Simplifier.asm_full_rewrite : "Proof.context -> conv"} \\
    87   @{define_ML Simplifier.asm_full_rewrite : "Proof.context -> conv"} \\
    88   \end{mldecls}
    88   \end{mldecls}
    89 
    89 
    90   \<^descr> \<^ML_structure>\<open>Conv\<close> is a library of combinators to build conversions,
    90   \<^descr> \<^ML_structure>\<open>Conv\<close> is a library of combinators to build conversions,
    91   over type \<^ML_type>\<open>conv\<close> (see also \<^file>\<open>~~/src/Pure/conv.ML\<close>). This is one
    91   over type \<^ML_type>\<open>conv\<close> (see also \<^file>\<open>~~/src/Pure/conv.ML\<close>). This is one
    92   of the few Isabelle/ML modules that are usually used with \<^verbatim>\<open>open\<close>: finding
    92   of the few Isabelle/ML modules that are usually used with \<^verbatim>\<open>open\<close>: finding
   107   definitions of the form \<open>f x\<^sub>1 \<dots> x\<^sub>n \<equiv> u\<close>, but is slightly more general than
   107   definitions of the form \<open>f x\<^sub>1 \<dots> x\<^sub>n \<equiv> u\<close>, but is slightly more general than
   108   that. \<close>
   108   that. \<close>
   109 
   109 
   110 text %mlref \<open>
   110 text %mlref \<open>
   111   \begin{mldecls}
   111   \begin{mldecls}
   112   @{index_ML rewrite_rule: "Proof.context -> thm list -> thm -> thm"} \\
   112   @{define_ML rewrite_rule: "Proof.context -> thm list -> thm -> thm"} \\
   113   @{index_ML rewrite_goals_rule: "Proof.context -> thm list -> thm -> thm"} \\
   113   @{define_ML rewrite_goals_rule: "Proof.context -> thm list -> thm -> thm"} \\
   114   @{index_ML rewrite_goal_tac: "Proof.context -> thm list -> int -> tactic"} \\
   114   @{define_ML rewrite_goal_tac: "Proof.context -> thm list -> int -> tactic"} \\
   115   @{index_ML rewrite_goals_tac: "Proof.context -> thm list -> tactic"} \\
   115   @{define_ML rewrite_goals_tac: "Proof.context -> thm list -> tactic"} \\
   116   @{index_ML fold_goals_tac: "Proof.context -> thm list -> tactic"} \\
   116   @{define_ML fold_goals_tac: "Proof.context -> thm list -> tactic"} \\
   117   \end{mldecls}
   117   \end{mldecls}
   118 
   118 
   119   \<^descr> \<^ML>\<open>rewrite_rule\<close>~\<open>ctxt rules thm\<close> rewrites the whole theorem by the
   119   \<^descr> \<^ML>\<open>rewrite_rule\<close>~\<open>ctxt rules thm\<close> rewrites the whole theorem by the
   120   given rules.
   120   given rules.
   121 
   121