doc-src/IsarImplementation/Thy/Eq.thy
author kuncar
Mon, 26 Mar 2012 15:32:54 +0200
changeset 47116 529d2a949bd4
parent 46486 4a607979290d
permissions -rw-r--r--
tuned proof - no smt call
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46295
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
     1
theory Eq
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
     2
imports Base
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
     3
begin
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
     4
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
     5
chapter {* Equational reasoning *}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
     6
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
     7
text {* Equality is one of the most fundamental concepts of
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
     8
  mathematics.  The Isabelle/Pure logic (\chref{ch:logic}) provides a
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
     9
  builtin relation @{text "\<equiv> :: \<alpha> \<Rightarrow> \<alpha> \<Rightarrow> prop"} that expresses equality
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    10
  of arbitrary terms (or propositions) at the framework level, as
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    11
  expressed by certain basic inference rules (\secref{sec:eq-rules}).
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    12
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    13
  Equational reasoning means to replace equals by equals, using
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    14
  reflexivity and transitivity to form chains of replacement steps,
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    15
  and congruence rules to access sub-structures.  Conversions
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    16
  (\secref{sec:conv}) provide a convenient framework to compose basic
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    17
  equational steps to build specific equational reasoning tools.
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    18
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    19
  Higher-order matching is able to provide suitable instantiations for
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    20
  giving equality rules, which leads to the versatile concept of
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    21
  @{text "\<lambda>"}-term rewriting (\secref{sec:rewriting}).  Internally
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    22
  this is based on the general-purpose Simplifier engine of Isabelle,
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    23
  which is more specific and more efficient than plain conversions.
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    24
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    25
  Object-logics usually introduce specific notions of equality or
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    26
  equivalence, and relate it with the Pure equality.  This enables to
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    27
  re-use the Pure tools for equational reasoning for particular
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    28
  object-logic connectives as well.
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    29
*}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    30
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    31
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    32
section {* Basic equality rules \label{sec:eq-rules} *}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    33
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    34
text {* FIXME *}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    35
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    36
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    37
section {* Conversions \label{sec:conv} *}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    38
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    39
text {* FIXME *}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    40
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    41
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    42
section {* Rewriting \label{sec:rewriting} *}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    43
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    44
text {* Rewriting normalizes a given term (theorem or goal) by
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    45
  replacing instances of given equalities @{text "t \<equiv> u"} in subterms.
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    46
  Rewriting continues until no rewrites are applicable to any subterm.
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    47
  This may be used to unfold simple definitions of the form @{text "f
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    48
  x\<^sub>1 \<dots> x\<^sub>n \<equiv> u"}, but is slightly more general than that.
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    49
*}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    50
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    51
text %mlref {*
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    52
  \begin{mldecls}
46486
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    53
  @{index_ML rewrite_rule: "thm list -> thm -> thm"} \\
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    54
  @{index_ML rewrite_goals_rule: "thm list -> thm -> thm"} \\
46295
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    55
  @{index_ML rewrite_goal_tac: "thm list -> int -> tactic"} \\
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    56
  @{index_ML rewrite_goals_tac: "thm list -> tactic"} \\
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    57
  @{index_ML fold_goals_tac: "thm list -> tactic"} \\
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    58
  \end{mldecls}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    59
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    60
  \begin{description}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    61
46486
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    62
  \item @{ML rewrite_rule}~@{text "rules thm"} rewrites the whole
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    63
  theorem by the given rules.
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    64
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    65
  \item @{ML rewrite_goals_rule}~@{text "rules thm"} rewrites the
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    66
  outer premises of the given theorem.  Interpreting the same as a
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    67
  goal state (\secref{sec:tactical-goals}) it means to rewrite all
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    68
  subgoals (in the same manner as @{ML rewrite_goals_tac}).
4a607979290d updated rewrite_goals_rule, rewrite_rule;
wenzelm
parents: 46295
diff changeset
    69
46295
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    70
  \item @{ML rewrite_goal_tac}~@{text "rules i"} rewrites subgoal
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    71
  @{text "i"} by the given rewrite rules.
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    72
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    73
  \item @{ML rewrite_goals_tac}~@{text "rules"} rewrites all subgoals
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    74
  by the given rewrite rules.
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    75
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    76
  \item @{ML fold_goals_tac}~@{text "rules"} essentially uses @{ML
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    77
  rewrite_goals_tac} with the symmetric form of each member of @{text
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    78
  "rules"}, re-ordered to fold longer expression first.  This supports
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    79
  to idea to fold primitive definitions that appear in expended form
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    80
  in the proof state.
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    81
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    82
  \end{description}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    83
*}
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    84
2548a85b0e02 basic setup for equational reasoning;
wenzelm
parents:
diff changeset
    85
end