src/Doc/Implementation/Logic.thy
changeset 73763 eccc4a13216d
parent 71777 3875815f5967
child 73764 35d8132633c6
equal deleted inserted replaced
73762:14841c6e4d5f 73763:eccc4a13216d
   100   @{cite "nipkow-prehofer"}.
   100   @{cite "nipkow-prehofer"}.
   101 \<close>
   101 \<close>
   102 
   102 
   103 text %mlref \<open>
   103 text %mlref \<open>
   104   \begin{mldecls}
   104   \begin{mldecls}
   105   @{index_ML_type class: string} \\
   105   @{index_ML_type class = string} \\
   106   @{index_ML_type sort: "class list"} \\
   106   @{index_ML_type sort = "class list"} \\
   107   @{index_ML_type arity: "string * sort list * sort"} \\
   107   @{index_ML_type arity = "string * sort list * sort"} \\
   108   @{index_ML_type typ} \\
   108   @{index_ML_type typ} \\
   109   @{index_ML Term.map_atyps: "(typ -> typ) -> typ -> typ"} \\
   109   @{index_ML Term.map_atyps: "(typ -> typ) -> typ -> typ"} \\
   110   @{index_ML Term.fold_atyps: "(typ -> 'a -> 'a) -> typ -> 'a -> 'a"} \\
   110   @{index_ML Term.fold_atyps: "(typ -> 'a -> 'a) -> typ -> 'a -> 'a"} \\
   111   \end{mldecls}
   111   \end{mldecls}
   112   \begin{mldecls}
   112   \begin{mldecls}
   312 \<close>
   312 \<close>
   313 
   313 
   314 text %mlref \<open>
   314 text %mlref \<open>
   315   \begin{mldecls}
   315   \begin{mldecls}
   316   @{index_ML_type term} \\
   316   @{index_ML_type term} \\
   317   @{index_ML_op "aconv": "term * term -> bool"} \\
   317   @{index_ML_infix "aconv": "term * term -> bool"} \\
   318   @{index_ML Term.map_types: "(typ -> typ) -> term -> term"} \\
   318   @{index_ML Term.map_types: "(typ -> typ) -> term -> term"} \\
   319   @{index_ML Term.fold_types: "(typ -> 'a -> 'a) -> term -> 'a -> 'a"} \\
   319   @{index_ML Term.fold_types: "(typ -> 'a -> 'a) -> term -> 'a -> 'a"} \\
   320   @{index_ML Term.map_aterms: "(term -> term) -> term -> term"} \\
   320   @{index_ML Term.map_aterms: "(term -> term) -> term -> term"} \\
   321   @{index_ML Term.fold_aterms: "(term -> 'a -> 'a) -> term -> 'a -> 'a"} \\
   321   @{index_ML Term.fold_aterms: "(term -> 'a -> 'a) -> term -> 'a -> 'a"} \\
   322   \end{mldecls}
   322   \end{mldecls}
   334   \end{mldecls}
   334   \end{mldecls}
   335 
   335 
   336   \<^descr> Type \<^ML_type>\<open>term\<close> represents de-Bruijn terms, with comments in
   336   \<^descr> Type \<^ML_type>\<open>term\<close> represents de-Bruijn terms, with comments in
   337   abstractions, and explicitly named free variables and constants; this is a
   337   abstractions, and explicitly named free variables and constants; this is a
   338   datatype with constructors @{index_ML Bound}, @{index_ML Free}, @{index_ML
   338   datatype with constructors @{index_ML Bound}, @{index_ML Free}, @{index_ML
   339   Var}, @{index_ML Const}, @{index_ML Abs}, @{index_ML_op "$"}.
   339   Var}, @{index_ML Const}, @{index_ML Abs}, @{index_ML_infix "$"}.
   340 
   340 
   341   \<^descr> \<open>t\<close>~\<^ML_text>\<open>aconv\<close>~\<open>u\<close> checks \<open>\<alpha>\<close>-equivalence of two terms. This is the
   341   \<^descr> \<open>t\<close>~\<^ML_text>\<open>aconv\<close>~\<open>u\<close> checks \<open>\<alpha>\<close>-equivalence of two terms. This is the
   342   basic equality relation on type \<^ML_type>\<open>term\<close>; raw datatype equality
   342   basic equality relation on type \<^ML_type>\<open>term\<close>; raw datatype equality
   343   should only be used for operations related to parsing or printing!
   343   should only be used for operations related to parsing or printing!
   344 
   344 
  1020   %FIXME @{inference_def elim_resolution}, @{inference_def dest_resolution}
  1020   %FIXME @{inference_def elim_resolution}, @{inference_def dest_resolution}
  1021 \<close>
  1021 \<close>
  1022 
  1022 
  1023 text %mlref \<open>
  1023 text %mlref \<open>
  1024   \begin{mldecls}
  1024   \begin{mldecls}
  1025   @{index_ML_op "RSN": "thm * (int * thm) -> thm"} \\
  1025   @{index_ML_infix "RSN": "thm * (int * thm) -> thm"} \\
  1026   @{index_ML_op "RS": "thm * thm -> thm"} \\
  1026   @{index_ML_infix "RS": "thm * thm -> thm"} \\
  1027 
  1027 
  1028   @{index_ML_op "RLN": "thm list * (int * thm list) -> thm list"} \\
  1028   @{index_ML_infix "RLN": "thm list * (int * thm list) -> thm list"} \\
  1029   @{index_ML_op "RL": "thm list * thm list -> thm list"} \\
  1029   @{index_ML_infix "RL": "thm list * thm list -> thm list"} \\
  1030 
  1030 
  1031   @{index_ML_op "MRS": "thm list * thm -> thm"} \\
  1031   @{index_ML_infix "MRS": "thm list * thm -> thm"} \\
  1032   @{index_ML_op "OF": "thm * thm list -> thm"} \\
  1032   @{index_ML_infix "OF": "thm * thm list -> thm"} \\
  1033   \end{mldecls}
  1033   \end{mldecls}
  1034 
  1034 
  1035   \<^descr> \<open>rule\<^sub>1 RSN (i, rule\<^sub>2)\<close> resolves the conclusion of \<open>rule\<^sub>1\<close> with the
  1035   \<^descr> \<open>rule\<^sub>1 RSN (i, rule\<^sub>2)\<close> resolves the conclusion of \<open>rule\<^sub>1\<close> with the
  1036   \<open>i\<close>-th premise of \<open>rule\<^sub>2\<close>, according to the @{inference resolution}
  1036   \<open>i\<close>-th premise of \<open>rule\<^sub>2\<close>, according to the @{inference resolution}
  1037   principle explained above. Unless there is precisely one resolvent it raises
  1037   principle explained above. Unless there is precisely one resolvent it raises
  1195   @{index_ML Proof_Syntax.read_proof: "theory -> bool -> bool -> string -> proof"} \\
  1195   @{index_ML Proof_Syntax.read_proof: "theory -> bool -> bool -> string -> proof"} \\
  1196   @{index_ML Proof_Syntax.pretty_proof: "Proof.context -> proof -> Pretty.T"} \\
  1196   @{index_ML Proof_Syntax.pretty_proof: "Proof.context -> proof -> Pretty.T"} \\
  1197   \end{mldecls}
  1197   \end{mldecls}
  1198 
  1198 
  1199   \<^descr> Type \<^ML_type>\<open>proof\<close> represents proof terms; this is a datatype with
  1199   \<^descr> Type \<^ML_type>\<open>proof\<close> represents proof terms; this is a datatype with
  1200   constructors @{index_ML Abst}, @{index_ML AbsP}, @{index_ML_op "%"},
  1200   constructors @{index_ML Abst}, @{index_ML AbsP}, @{index_ML_infix "%"},
  1201   @{index_ML_op "%%"}, @{index_ML PBound}, @{index_ML MinProof}, @{index_ML
  1201   @{index_ML_infix "%%"}, @{index_ML PBound}, @{index_ML MinProof}, @{index_ML
  1202   Hyp}, @{index_ML PAxm}, @{index_ML Oracle}, @{index_ML PThm} as explained
  1202   Hyp}, @{index_ML PAxm}, @{index_ML Oracle}, @{index_ML PThm} as explained
  1203   above. %FIXME PClass (!?)
  1203   above. %FIXME PClass (!?)
  1204 
  1204 
  1205   \<^descr> Type \<^ML_type>\<open>proof_body\<close> represents the nested proof information of a
  1205   \<^descr> Type \<^ML_type>\<open>proof_body\<close> represents the nested proof information of a
  1206   named theorem, consisting of a digest of oracles and named theorem over some
  1206   named theorem, consisting of a digest of oracles and named theorem over some