doc-src/IsarRef/Thy/ZF_Specific.thy
author blanchet
Mon, 19 Apr 2010 18:14:45 +0200
changeset 36230 43d10a494c91
parent 30168 9a20be5be90b
child 40255 9ffbc25e1606
permissions -rw-r--r--
added warning about inconsistent context to Metis; it makes more sense here than in Sledgehammer, because Sledgehammer is unsound and there's no point in having people panicking about the consistency of their context when their context is in fact consistent
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26840
ec46381f149d added logic-specific sessions;
wenzelm
parents:
diff changeset
     1
theory ZF_Specific
26894
1120f6cc10b0 proper checking of various Isar elements;
wenzelm
parents: 26852
diff changeset
     2
imports Main
26840
ec46381f149d added logic-specific sessions;
wenzelm
parents:
diff changeset
     3
begin
ec46381f149d added logic-specific sessions;
wenzelm
parents:
diff changeset
     4
26852
a31203f58b20 misc tuning;
wenzelm
parents: 26845
diff changeset
     5
chapter {* Isabelle/ZF \label{ch:zf} *}
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
     6
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
     7
section {* Type checking *}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
     8
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
     9
text {*
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    10
  The ZF logic is essentially untyped, so the concept of ``type
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    11
  checking'' is performed as logical reasoning about set-membership
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    12
  statements.  A special method assists users in this task; a version
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    13
  of this is already declared as a ``solver'' in the standard
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    14
  Simplifier setup.
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    15
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    16
  \begin{matharray}{rcl}
28761
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
    17
    @{command_def (ZF) "print_tcset"}@{text "\<^sup>*"} & : & @{text "context \<rightarrow>"} \\
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
    18
    @{method_def (ZF) typecheck} & : & @{text method} \\
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
    19
    @{attribute_def (ZF) TC} & : & @{text attribute} \\
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    20
  \end{matharray}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    21
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    22
  \begin{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    23
    'TC' (() | 'add' | 'del')
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    24
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    25
  \end{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    26
28760
cbc435f7b16b unified use of declaration environment with IsarImplementation;
wenzelm
parents: 26894
diff changeset
    27
  \begin{description}
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    28
  
28760
cbc435f7b16b unified use of declaration environment with IsarImplementation;
wenzelm
parents: 26894
diff changeset
    29
  \item @{command (ZF) "print_tcset"} prints the collection of
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    30
  typechecking rules of the current context.
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    31
  
28760
cbc435f7b16b unified use of declaration environment with IsarImplementation;
wenzelm
parents: 26894
diff changeset
    32
  \item @{method (ZF) typecheck} attempts to solve any pending
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    33
  type-checking problems in subgoals.
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    34
  
28760
cbc435f7b16b unified use of declaration environment with IsarImplementation;
wenzelm
parents: 26894
diff changeset
    35
  \item @{attribute (ZF) TC} adds or deletes type-checking rules from
cbc435f7b16b unified use of declaration environment with IsarImplementation;
wenzelm
parents: 26894
diff changeset
    36
  the context.
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    37
28760
cbc435f7b16b unified use of declaration environment with IsarImplementation;
wenzelm
parents: 26894
diff changeset
    38
  \end{description}
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    39
*}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    40
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    41
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    42
section {* (Co)Inductive sets and datatypes *}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    43
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    44
subsection {* Set definitions *}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    45
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    46
text {*
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    47
  In ZF everything is a set.  The generic inductive package also
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    48
  provides a specific view for ``datatype'' specifications.
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    49
  Coinductive definitions are available in both cases, too.
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    50
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    51
  \begin{matharray}{rcl}
28761
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
    52
    @{command_def (ZF) "inductive"} & : & @{text "theory \<rightarrow> theory"} \\
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
    53
    @{command_def (ZF) "coinductive"} & : & @{text "theory \<rightarrow> theory"} \\
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
    54
    @{command_def (ZF) "datatype"} & : & @{text "theory \<rightarrow> theory"} \\
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
    55
    @{command_def (ZF) "codatatype"} & : & @{text "theory \<rightarrow> theory"} \\
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    56
  \end{matharray}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    57
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    58
  \begin{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    59
    ('inductive' | 'coinductive') domains intros hints
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    60
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    61
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    62
    domains: 'domains' (term + '+') ('<=' | subseteq) term
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    63
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    64
    intros: 'intros' (thmdecl? prop +)
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    65
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    66
    hints: monos? condefs? typeintros? typeelims?
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    67
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    68
    monos: ('monos' thmrefs)?
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    69
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    70
    condefs: ('con\_defs' thmrefs)?
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    71
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    72
    typeintros: ('type\_intros' thmrefs)?
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    73
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    74
    typeelims: ('type\_elims' thmrefs)?
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    75
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    76
  \end{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    77
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    78
  In the following syntax specification @{text "monos"}, @{text
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    79
  typeintros}, and @{text typeelims} are the same as above.
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    80
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    81
  \begin{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    82
    ('datatype' | 'codatatype') domain? (dtspec + 'and') hints
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    83
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    84
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    85
    domain: ('<=' | subseteq) term
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    86
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    87
    dtspec: term '=' (con + '|')
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    88
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    89
    con: name ('(' (term ',' +) ')')?  
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    90
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    91
    hints: monos? typeintros? typeelims?
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    92
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    93
  \end{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    94
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    95
  See \cite{isabelle-ZF} for further information on inductive
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    96
  definitions in ZF, but note that this covers the old-style theory
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    97
  format.
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    98
*}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
    99
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   100
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   101
subsection {* Primitive recursive functions *}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   102
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   103
text {*
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   104
  \begin{matharray}{rcl}
28761
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
   105
    @{command_def (ZF) "primrec"} & : & @{text "theory \<rightarrow> theory"} \\
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   106
  \end{matharray}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   107
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   108
  \begin{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   109
    'primrec' (thmdecl? prop +)
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   110
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   111
  \end{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   112
*}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   113
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   114
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   115
subsection {* Cases and induction: emulating tactic scripts *}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   116
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   117
text {*
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   118
  The following important tactical tools of Isabelle/ZF have been
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   119
  ported to Isar.  These should not be used in proper proof texts.
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   120
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   121
  \begin{matharray}{rcl}
28761
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
   122
    @{method_def (ZF) case_tac}@{text "\<^sup>*"} & : & @{text method} \\
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
   123
    @{method_def (ZF) induct_tac}@{text "\<^sup>*"} & : & @{text method} \\
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
   124
    @{method_def (ZF) ind_cases}@{text "\<^sup>*"} & : & @{text method} \\
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 28760
diff changeset
   125
    @{command_def (ZF) "inductive_cases"} & : & @{text "theory \<rightarrow> theory"} \\
26845
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   126
  \end{matharray}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   127
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   128
  \begin{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   129
    ('case\_tac' | 'induct\_tac') goalspec? name
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   130
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   131
    indcases (prop +)
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   132
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   133
    inductivecases (thmdecl? (prop +) + 'and')
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   134
    ;
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   135
  \end{rail}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   136
*}
d86eb226ecba converted ZF specific elements;
wenzelm
parents: 26840
diff changeset
   137
26840
ec46381f149d added logic-specific sessions;
wenzelm
parents:
diff changeset
   138
end