src/HOL/antisym_setup.ML
author kleing
Sat, 30 Apr 2005 14:18:36 +0200
changeset 15900 d6156cb8dc2e
parent 15531 08c8dad8e399
child 16833 a4e99217e9f9
permissions -rw-r--r--
fixed typo
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15198
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
     1
local
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
     2
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
     3
val order_antisym_conv = thm "order_antisym_conv"
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
     4
val linorder_antisym_conv1 = thm "linorder_antisym_conv1"
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
     5
val linorder_antisym_conv2 = thm "linorder_antisym_conv2"
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
     6
val linorder_antisym_conv3 = thm "linorder_antisym_conv3"
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
     7
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
     8
fun prp t thm = (#prop(rep_thm thm) = t);
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
     9
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    10
fun prove_antisym_le sg ss ((le as Const(_,T)) $ r $ s) =
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    11
  let val prems = prems_of_ss ss;
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    12
      val less = Const("op <",T);
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    13
      val t = HOLogic.mk_Trueprop(le $ s $ r);
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    14
  in case Library.find_first (prp t) prems of
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    15
       NONE =>
15198
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    16
         let val t = HOLogic.mk_Trueprop(HOLogic.not_const $ (less $ r $ s))
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    17
         in case Library.find_first (prp t) prems of
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    18
              NONE => NONE
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    19
            | SOME thm => SOME(mk_meta_eq(thm RS linorder_antisym_conv1))
15198
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    20
         end
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    21
     | SOME thm => SOME(mk_meta_eq(thm RS order_antisym_conv))
15198
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    22
  end
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    23
  handle THM _ => NONE;
15198
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    24
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    25
fun prove_antisym_less sg ss (NotC $ ((less as Const(_,T)) $ r $ s)) =
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    26
  let val prems = prems_of_ss ss;
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    27
      val le = Const("op <=",T);
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    28
      val t = HOLogic.mk_Trueprop(le $ r $ s);
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    29
  in case Library.find_first (prp t) prems of
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    30
       NONE =>
15198
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    31
         let val t = HOLogic.mk_Trueprop(NotC $ (less $ s $ r))
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    32
         in case Library.find_first (prp t) prems of
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    33
              NONE => NONE
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    34
            | SOME thm => SOME(mk_meta_eq(thm RS linorder_antisym_conv3))
15198
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    35
         end
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    36
     | SOME thm => SOME(mk_meta_eq(thm RS linorder_antisym_conv2))
15198
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    37
  end
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15198
diff changeset
    38
  handle THM _ => NONE;
15198
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    39
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    40
val antisym_le = Simplifier.simproc (Theory.sign_of (the_context()))
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    41
  "antisym le" ["(x::'a::order) <= y"] prove_antisym_le;
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    42
val antisym_less = Simplifier.simproc (Theory.sign_of (the_context()))
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    43
  "antisym less" ["~ (x::'a::linorder) < y"] prove_antisym_less;
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    44
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    45
in
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    46
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    47
val antisym_setup =
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    48
 [Simplifier.change_simpset_of (op addsimprocs) [antisym_le,antisym_less]];
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    49
44495334adcc antisymmetry simproc
nipkow
parents:
diff changeset
    50
end