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