blob: 41f21df71034c6c6c417c290988041f04abf3cd6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
signature poloniusListTheory =
sig
type thm = Thm.thm
(* Definitions *)
val get_list_at_x_back_def : thm
val get_list_at_x_fwd_def : thm
val list_t_TY_DEF : thm
val list_t_case_def : thm
val list_t_size_def : thm
(* Theorems *)
val datatype_list_t : thm
val list_t_11 : thm
val list_t_Axiom : thm
val list_t_case_cong : thm
val list_t_case_eq : thm
val list_t_distinct : thm
val list_t_induction : thm
val list_t_nchotomy : thm
val poloniusList_grammars : type_grammar.grammar * term_grammar.grammar
(*
[divDef] Parent theory of "poloniusList"
[get_list_at_x_back_def] Definition
⊢ ∀ls x ret.
get_list_at_x_back ls x ret =
case ls of
ListCons hd tl =>
if hd = x then Return ret
else
do
tl0 <- get_list_at_x_back tl x ret;
Return (ListCons hd tl0)
od
| ListNil => Return ret
[get_list_at_x_fwd_def] Definition
⊢ ∀ls x.
get_list_at_x_fwd ls x =
case ls of
ListCons hd tl =>
if hd = x then Return (ListCons hd tl)
else get_list_at_x_fwd tl x
| ListNil => Return ListNil
[list_t_TY_DEF] Definition
⊢ ∃rep.
TYPE_DEFINITION
(λa0'.
∀ $var$('list_t').
(∀a0'.
(∃a0 a1.
a0' =
(λa0 a1.
ind_type$CONSTR 0 a0
(ind_type$FCONS a1 (λn. ind_type$BOTTOM)))
a0 a1 ∧ $var$('list_t') a1) ∨
a0' =
ind_type$CONSTR (SUC 0) ARB (λn. ind_type$BOTTOM) ⇒
$var$('list_t') a0') ⇒
$var$('list_t') a0') rep
[list_t_case_def] Definition
⊢ (∀a0 a1 f v. list_t_CASE (ListCons a0 a1) f v = f a0 a1) ∧
∀f v. list_t_CASE ListNil f v = v
[list_t_size_def] Definition
⊢ (∀f a0 a1.
list_t_size f (ListCons a0 a1) = 1 + (f a0 + list_t_size f a1)) ∧
∀f. list_t_size f ListNil = 0
[datatype_list_t] Theorem
⊢ DATATYPE (list_t ListCons ListNil)
[list_t_11] Theorem
⊢ ∀a0 a1 a0' a1'.
ListCons a0 a1 = ListCons a0' a1' ⇔ a0 = a0' ∧ a1 = a1'
[list_t_Axiom] Theorem
⊢ ∀f0 f1. ∃fn.
(∀a0 a1. fn (ListCons a0 a1) = f0 a0 a1 (fn a1)) ∧
fn ListNil = f1
[list_t_case_cong] Theorem
⊢ ∀M M' f v.
M = M' ∧ (∀a0 a1. M' = ListCons a0 a1 ⇒ f a0 a1 = f' a0 a1) ∧
(M' = ListNil ⇒ v = v') ⇒
list_t_CASE M f v = list_t_CASE M' f' v'
[list_t_case_eq] Theorem
⊢ list_t_CASE x f v = v' ⇔
(∃t l. x = ListCons t l ∧ f t l = v') ∨ x = ListNil ∧ v = v'
[list_t_distinct] Theorem
⊢ ∀a1 a0. ListCons a0 a1 ≠ ListNil
[list_t_induction] Theorem
⊢ ∀P. (∀l. P l ⇒ ∀t. P (ListCons t l)) ∧ P ListNil ⇒ ∀l. P l
[list_t_nchotomy] Theorem
⊢ ∀ll. (∃t l. ll = ListCons t l) ∨ ll = ListNil
*)
end
|