Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/Doc/Implementation/   (Beweissystem Isabelle Version 2025-1©)  Datei vom 16.11.2025 mit Größe 7 kB image not shown  

Quelle  Local_Theory.thy

  Sprache: Isabelle
 

(*:maxLineLen=78:*)

theory Local_Theory
imports Base
begin

chapter Local theory specifications \label{ch:local-theory}

text 
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "macro" is null
 \secref{sec:context}), such that definitional specifications may be given
 relatively to parameters and assumptions. A local theory is represented as a
 regular proof context, augmented by administrative data about the 🪙target
 context
.

 The target is usually derived from the background theory by adding local
 🪙 and 🪙 elements, plus suitable modifications of
 non-logical context data (e.g.a special type-checking discipline). Once
 initialized, the target is ready to absorb definitional primitives:
 🪙 for terms and 🪙 for theorems. Such definitions may get
 transformed in a target-specific way, but the programming interface hides
 such details.

 Isabelle/Pure provides target mechanisms for locales, type-classes,
 type-class instantiations, and general overloading. In principle, users can
 implement new targets as well, but this rather arcane discipline is beyond
 the scope of this manual. In contrast, implementing derived definitional
 packages to be used within a local theory context is quite easy: the
 interfaces are even simpler and more abstract than the underlying primitives
 for raw theories.

 Many definitional packages for local theories are available in Isabelle.
 Although a few old packages only work for global theories, the standard way
 of implementing definitional packages in Isabelle is via the local theory
 interface.
 



section Definitional elements

text 
 There are separate elements 🪙 c t for terms, and 🪙 b =
 thm
for theorems. Types are treated implicitly, according to Hindley-Milner
 discipline (cf.\secref{sec:variables}). These definitional primitives
 essentially act like let-bindings within a local context that may already
 contain earlier let-bindings and some initial λ-bindings. Thus we gain
 🪙dependent definitions that are relative to an initial axiomatic context.
 The following diagram illustrates this idea of axiomatic elements versus
 definitional elements:

 \begin{center}
 \begin{tabular}{|l|l|l|}
 \hline
 & λ-binding & let-binding \\
 \hline
 types & fixed α & arbitrary β \\
 terms & 🪙 x :: τ & 🪙 c t \\
 theorems & 🪙 a: A & 🪙 b = 🪙B🪙 \\
 \hline
 \end{tabular}
 \end{center}

 A user package merely needs to produce suitable 🪙 and 🪙
 elements according to the application. For example, a package for inductive
 definitions might first 🪙 a certain predicate as some fixed-point
 construction, then 🪙 a proven result about monotonicity of the
 functor involved here, and then produce further derived concepts via
 additional 🪙 and 🪙 elements.

 The cumulative sequence of 🪙 and 🪙 produced at package
 runtime is managed by the local theory infrastructure by means of an
 🪙auxiliary context. Thus the system holds up the impression of working
 within a fully abstract situation with hypothetical entities: 🪙 c
 t
always results in a literal fact 🪙c t🪙, where c is a
 fixed variable c. The details about global constants, name spaces etc. are
 handled internally.

 So the general structure of a local theory is a sandwich of three layers:

 \begin{center}
 \framebox{\quad auxiliary context \quad\framebox{\quad target context \quad\framebox{\quad background theory\quad}}}
 \end{center}

 When a definitional package is finished, the auxiliary context is reset to
 the target context. The target now holds definitions for terms and theorems
 that stem from the hypothetical 🪙 and 🪙 elements,
 transformed by the particular target policy (see cite\S4--5 in
 "Haftmann-Wenzel:2009"
for details).
 


text %mlref 
 \begin{mldecls}
 @{define_ML_type local_theory = Proof.context} \\
 @{define_ML Named_Target.init: "Bundle.name list -> string -> theory -> local_theory"} \\[1ex]
 @{define_ML Local_Theory.define: "(binding * mixfix) * (Attrib.binding * term) ->
 local_theory -> (term * (string * thm)) * local_theory"} \\
 @{define_ML Local_Theory.note: "Attrib.binding * thm list ->
 local_theory -> (string * thm list) * local_theory"} \\
 \end{mldecls}

 🪙 Type 🪙local_theory represents local theories. Although this is
 merely an alias for 🪙Proof.context, it is semantically a subtype
 of the same: a 🪙local_theory holds target information as special
 context data. Subtyping means that any value lthy:~🪙local_theory
 can be also used with operations on expecting a regular ctxt:~🪙Proof.context.

 🪙 🪙Named_Target.init~includes name thy initializes a local theory
 derived from the given background theory. An empty name refers to a 🪙global
 theory
context, and a non-empty name refers to a @{command locale} or
 @{command class} context (a fully-qualified internal name is expected here).
 This is useful for experimentation --- normally the Isar toplevel already
 takes care to initialize the local theory context.

 🪙 🪙Local_Theory.define~((b, mx), (a, rhs)) lthy defines a local
 entity according to the specification that is given relatively to the
 current lthy context. In particular the term of the RHS may refer to
 earlier local entities from the auxiliary context, or hypothetical
 parameters from the target context. The result is the newly defined term
 (which is always a fixed variable with exactly the same name as specified
 for the LHS), together with an equational theorem that states the definition
 as a hypothetical fact.

 Unless an explicit name binding is given for the RHS, the resulting fact
 will be called b_def. Any given attributes are applied to that same fact
 --- immediately in the auxiliary context 🪙and in any transformed versions
 stemming from target-specific policies or any later interpretations of
 results from the target context (think of @{command locale} and @{command
 interpretation}, for example). This means that attributes should be usually
 plain declarations such as @{attribute simp}, while non-trivial rules like
 @{attribute simplified} are better avoided.

 🪙 🪙Local_Theory.note~(a, ths) lthy is analogous to 🪙Local_Theory.define, but defines facts instead of terms. There is also a
 slightly more general variant 🪙Local_Theory.notes that defines several
 facts (with attribute expressions) simultaneously.

 This is essentially the internal version of the @{command lemmas} command,
 or @{command declare} if an empty name binding is given.
 



section Morphisms and declarations \label{sec:morphisms}

text 
 %FIXME

 See also cite"Chaieb-Wenzel:2007".
 


end

Messung V0.5 in Prozent
C=87 H=92 G=89

¤ Dauer der Verarbeitung: 0.8 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.