src/HOLCF/ex/Witness.ML
author oheimb
Sat, 15 Feb 1997 17:55:11 +0100
changeset 2638 6c6a44b5f757
parent 2570 24d7e8fb8261
child 2642 3c3a84cc85a9
permissions -rw-r--r--
reflecting my recent changes of the classical reasoner
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     1
open Witness;
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     2
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     3
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     4
(* classes cplus, cminus, ctimes, cdiv introduce 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     5
   characteristic constants  o+ o- o* o/
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     6
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     7
	"bullet":: "void -> void -> void"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     8
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     9
   is the witness for o+ o- o* o/	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    10
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    11
   No characteristic axioms are to be checked
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    12
*)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    13
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    14
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    15
(* classes per and qpo introduce characteristic constants
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    16
	".="	:: "'a::per -> 'a -> tr"		(cinfixl 55)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    17
	".<="	:: "'a::qpo -> 'a -> tr"		(cinfixl 55)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    18
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    19
   The witness for these is 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    20
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    21
	"cric"	:: "void -> void -> tr"			(cinfixl 55)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    22
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    23
   the classes equiv, eq, qlinear impose additional axioms
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    24
*)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    25
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    26
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    27
(* 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    28
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    29
characteristic axioms of class per:
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    30
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    31
strict_per	"(UU .= x) = UU & (x .= UU) = UU"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    32
total_per	"[|x ~= UU; y ~= UU|] ==> (x .= y) ~= UU"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    33
flat_per	"flat (UU::'a::per)"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    34
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    35
sym_per		"(x .= y) = (y .= x)"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    36
trans_per	"[|(x .= y)=TT; (y .= z)=TT |] ==> (x .= z)=TT"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    37
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    38
   --------------------------------------------------------------------
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    39
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    40
characteristic axioms of class equiv:
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    41
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    42
refl_per	"[|(x::'a::equiv) ~= UU|] ==> (x .= x)=TT"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    43
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    44
   --------------------------------------------------------------------
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    45
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    46
characteristic axioms of class eq:
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    47
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    48
weq	"[|(x::'a::eq) ~= UU; y ~= UU|] ==> (x = y --> (x .= y)=TT) & (x ~= y --> Çx .= yÈ)"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    49
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    50
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    51
   --------------------------------------------------------------------
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    52
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    53
characteristic axioms of class qpo:
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    54
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    55
strict_qpo	"(UU .<= x) = UU & (x .<= UU) = UU"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    56
total_qpo	"[|x ~= UU; y ~= UU|] ==> (x .<= y) ~= UU"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    57
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    58
refl_qpo	"[|x ~= UU|] ==> (x .<= x)=TT"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    59
antisym_qpo	"[|(x .<= y)=TT; (y .<= x)=TT |] ==> (x .= y)=TT"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    60
trans_qpo	"[|(x .<= y)=TT; (y .<= z)=TT |] ==> (x .<= z)=TT"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    61
antisym_qpo_rev	" (x .= y)=TT ==> (x .<= y)=TT & (y .<= x)=TT" 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    62
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    63
   --------------------------------------------------------------------
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    64
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    65
characteristic axioms of class qlinear:
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    66
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    67
qlinear	"[|(x::'a::qlinear) ~= UU; y ~= UU|] ==> (x .<= y)=TT | (y .<= x)=TT "
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    68
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    69
*)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    70
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    71
(* strict_per, strict_qpo *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    72
val prems = goal thy "(UU circ x) = UU & (x circ UU) = UU";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    73
by (simp_tac (HOLCF_ss addsimps [circ_def]) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    74
result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    75
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    76
(* total_per, total_qpo *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    77
val prems = goal thy "[|x ~= UU; y ~= UU|] ==> (x circ y) ~= UU";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    78
by (cut_facts_tac prems 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    79
by (etac notE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    80
by (rtac unique_void2 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    81
result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    82
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    83
(* flat_per *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    84
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    85
val prems = goal thy "flat (UU::void)";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    86
by (rtac flat_void 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    87
result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    88
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    89
(* sym_per *)  
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    90
val prems = goal thy "(x circ y) = (y circ x)";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    91
by (simp_tac (HOLCF_ss addsimps [circ_def]) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    92
result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    93
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    94
(* trans_per, trans_qpo *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    95
val prems = goal thy "[|(x bullet y)=TT; (y bullet z)=TT |] ==> (x bullet z)=TT";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    96
by (cut_facts_tac prems 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    97
by (asm_full_simp_tac (HOLCF_ss addsimps [bullet_def]) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    98
result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    99
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   100
(* refl_per *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   101
val prems = goal thy "[|(x::void) ~= UU|] ==> (x bullet x)=TT";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   102
by (cut_facts_tac prems 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   103
by (etac notE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   104
by (rtac unique_void2 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   105
result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   106
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   107
(* weq *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   108
val prems = goal thy 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   109
	"[|(x::void) ~= UU; y ~= UU|] ==> (x = y --> (x bullet y)=TT) & (x ~= y --> (x bullet y)=FF)";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   110
by (cut_facts_tac prems 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   111
by (etac notE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   112
by (rtac unique_void2 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   113
result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   114
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   115
(* antisym_qpo *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   116
val prems = goal thy "[|(x bullet y)=TT; (y bullet x)=TT |] ==> (x bullet y)=TT";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   117
by (cut_facts_tac prems 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   118
by (asm_full_simp_tac (HOLCF_ss addsimps [bullet_def]) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   119
result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   120
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   121
(* antisym_qpo_rev *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   122
val prems = goal thy "(x bullet y)=TT ==> (x bullet y)=TT & (y bullet x)=TT";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   123
by (cut_facts_tac prems 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   124
by (asm_full_simp_tac (HOLCF_ss addsimps [bullet_def]) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   125
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   126
(* qlinear *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   127
val prems = goal thy 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   128
	"[|(x::void) ~= UU; y ~= UU|] ==> (x bullet y)=TT | (y bullet x)=TT ";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   129
by (cut_facts_tac prems 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   130
by (etac notE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   131
by (rtac unique_void2 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   132
result();