doc-src/TutorialI/IsarOverview/Isar/Calc.thy
author nipkow
Mon, 30 Sep 2002 16:50:39 +0200
changeset 13613 531f1f524848
parent 13562 5b71e1408ac4
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13562
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
     1
theory Calc = Main:
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
     2
13613
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
     3
subsection{* Chains of equalities *}
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
     4
13562
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
     5
axclass
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
     6
  group < zero, plus, minus
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
     7
  assoc:       "(x + y) + z = x + (y + z)"
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
     8
  left_0:      "0 + x = x"
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
     9
  left_minus:  "-x + x = 0"
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    10
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    11
theorem right_minus: "x + -x = (0::'a::group)"
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    12
proof -
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    13
  have   "x + -x = (-(-x) + -x) + (x + -x)"
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    14
    by (simp only: left_0 left_minus)
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    15
  also have "... = -(-x) + ((-x + x) + -x)"
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    16
    by (simp only: group.assoc)
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    17
  also have "... = 0"
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    18
    by (simp only: left_0 left_minus)
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    19
  finally show ?thesis .
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    20
qed
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    21
13613
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    22
subsection{* Inequalities and substitution *}
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    23
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    24
lemmas distrib = zadd_zmult_distrib zadd_zmult_distrib2
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    25
                 zdiff_zmult_distrib zdiff_zmult_distrib2
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    26
declare numeral_2_eq_2[simp]
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    27
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    28
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    29
lemma fixes a :: int shows "(a+b)\<twosuperior> \<le> 2*(a\<twosuperior> + b\<twosuperior>)"
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    30
proof -
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    31
       have "(a+b)\<twosuperior> \<le> (a+b)\<twosuperior> + (a-b)\<twosuperior>"  by simp
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    32
  also have "(a+b)\<twosuperior> \<le> a\<twosuperior> + b\<twosuperior> + 2*a*b"  by(simp add:distrib)
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    33
  also have "(a-b)\<twosuperior> = a\<twosuperior> + b\<twosuperior> - 2*a*b"  by(simp add:distrib)
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    34
  finally show ?thesis by simp
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    35
qed
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    36
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    37
531f1f524848 *** empty log message ***
nipkow
parents: 13562
diff changeset
    38
subsection{* More transitivity *}
13562
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    39
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    40
lemma assumes R: "(a,b) \<in> R" "(b,c) \<in> R" "(c,d) \<in> R"
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    41
      shows "(a,d) \<in> R\<^sup>*"
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    42
proof -
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    43
       have "(a,b) \<in> R\<^sup>*" ..
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    44
  also have "(b,c) \<in> R\<^sup>*" ..
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    45
  also have "(c,d) \<in> R\<^sup>*" ..
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    46
  finally show ?thesis .
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    47
qed
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    48
5b71e1408ac4 *** empty log message ***
nipkow
parents:
diff changeset
    49
end