src/HOL/ex/Points.ML
author paulson
Wed, 11 Nov 1998 15:45:32 +0100
changeset 5846 d99feda2d226
parent 5753 c90b5f7d0c61
permissions -rw-r--r--
tidied
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5846
paulson
parents: 5753
diff changeset
     1
(*  Title:      HOL/ex/Points.thy
paulson
parents: 5753
diff changeset
     2
    ID:         $Id$
paulson
parents: 5753
diff changeset
     3
    Author:     Wolfgang Naraschewski and Markus Wenzel, TU Muenchen
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
     4
5846
paulson
parents: 5753
diff changeset
     5
Basic use of extensible records in HOL, including the famous points
paulson
parents: 5753
diff changeset
     6
and coloured points.
paulson
parents: 5753
diff changeset
     7
paulson
parents: 5753
diff changeset
     8
Note: any of these goals may be solved at a stroke by Auto_tac or Force_tac
paulson
parents: 5753
diff changeset
     9
*)
5753
wenzelm
parents: 5741
diff changeset
    10
wenzelm
parents: 5741
diff changeset
    11
wenzelm
parents: 5741
diff changeset
    12
(* some basic simplifications *)
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    13
5846
paulson
parents: 5753
diff changeset
    14
Goal "x (| x = m, y = n, ... = p |) = m";
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    15
by (Simp_tac 1);
5753
wenzelm
parents: 5741
diff changeset
    16
result();
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    17
5846
paulson
parents: 5753
diff changeset
    18
Goal "(| x = m, y = n, ... = p |) (| x:= 0 |) = (| x = 0, y = n, ... = p |)";
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    19
by (Simp_tac 1);
5753
wenzelm
parents: 5741
diff changeset
    20
result();
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    21
139a25a1e01e Example for records
narasche
parents:
diff changeset
    22
5846
paulson
parents: 5753
diff changeset
    23
(* splitting quantifiers: the !!r is NECESSARY *)
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    24
5846
paulson
parents: 5753
diff changeset
    25
Goal "!!r. r (| x := n |) (| y := m |) = r (| y := m |) (| x := n |)";
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    26
by (record_split_tac 1);
139a25a1e01e Example for records
narasche
parents:
diff changeset
    27
by (Simp_tac 1);
5753
wenzelm
parents: 5741
diff changeset
    28
result();
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    29
5846
paulson
parents: 5753
diff changeset
    30
Goal "!!r. r (| x := n |) (| x := m |) = r (| x := m |)";
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    31
by (record_split_tac 1);
139a25a1e01e Example for records
narasche
parents:
diff changeset
    32
by (Simp_tac 1);
5753
wenzelm
parents: 5741
diff changeset
    33
result();
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    34
139a25a1e01e Example for records
narasche
parents:
diff changeset
    35
5753
wenzelm
parents: 5741
diff changeset
    36
(* record equality *)
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    37
5846
paulson
parents: 5753
diff changeset
    38
Goal "(| x = n, y = p |) = (| x = n', y = p' |) & n = 0 ==> n' = 0";
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    39
by (Asm_full_simp_tac 1);
5753
wenzelm
parents: 5741
diff changeset
    40
by (Blast_tac 1);
wenzelm
parents: 5741
diff changeset
    41
result();
5741
139a25a1e01e Example for records
narasche
parents:
diff changeset
    42
139a25a1e01e Example for records
narasche
parents:
diff changeset
    43
Goalw [getX_def, setX_def, incX_def] "!!r n. incX r = setX r (Suc (getX r))";
139a25a1e01e Example for records
narasche
parents:
diff changeset
    44
by (record_split_tac 1);
5753
wenzelm
parents: 5741
diff changeset
    45
by (Simp_tac 1);
wenzelm
parents: 5741
diff changeset
    46
result();