- ALG_CANON1_CONSTANT
-
|- !l. alg_sorted l /\ alg_prefixfree l ==> (alg_canon1 l = l)
- ALG_CANON1_PREFIXFREE
-
|- !l. alg_prefixfree (alg_canon1 l)
- ALG_CANON1_SORTED
-
|- !l. alg_sorted (alg_canon1 l)
- ALG_CANON2_CONSTANT
-
|- !l. alg_twinfree l ==> (alg_canon2 l = l)
- ALG_CANON2_PREFIXFREE_PRESERVE
-
|- !l h.
(!x. MEM x l ==> ~IS_PREFIX h x /\ ~IS_PREFIX x h) ==>
!x. MEM x (alg_canon2 l) ==> ~IS_PREFIX h x /\ ~IS_PREFIX x h
- ALG_CANON2_SHORTENS
-
|- !l x. MEM x (alg_canon2 l) ==> ?y. MEM y l /\ IS_PREFIX y x
- ALG_CANON2_SORTED_PREFIXFREE_TWINFREE
-
|- !l.
alg_sorted l /\ alg_prefixfree l ==>
alg_sorted (alg_canon2 l) /\ alg_prefixfree (alg_canon2 l) /\
alg_twinfree (alg_canon2 l)
- ALG_CANON_BASIC
-
|- (alg_canon [] = []) /\ (alg_canon [[]] = [[]]) /\ !x. alg_canon [x] = [x]
- ALG_CANON_CONSTANT
-
|- !l.
alg_sorted l /\ alg_prefixfree l /\ alg_twinfree l ==> (alg_canon l = l)
- ALG_CANON_FIND_CONSTANT
-
|- !l b.
alg_sorted (l::b) /\ alg_prefixfree (l::b) ==>
(alg_canon_find l b = l::b)
- ALG_CANON_FIND_DELETES
-
|- !l b x. MEM x (alg_canon_find l b) ==> MEM x (l::b)
- ALG_CANON_FIND_HD
-
|- !l h t.
(HD (alg_canon_find l (h::t)) = l) \/ (HD (alg_canon_find l (h::t)) = h)
- ALG_CANON_FIND_PREFIXFREE
-
|- !l b.
alg_sorted b /\ alg_prefixfree b ==> alg_prefixfree (alg_canon_find l b)
- ALG_CANON_FIND_SORTED
-
|- !l b. alg_sorted b ==> alg_sorted (alg_canon_find l b)
- ALG_CANON_IDEMPOT
-
|- !l. alg_canon (alg_canon l) = alg_canon l
- ALG_CANON_MERGE_CONSTANT
-
|- !l b. alg_twinfree (l::b) ==> (alg_canon_merge l b = l::b)
- ALG_CANON_MERGE_PREFIXFREE_PRESERVE
-
|- !l b h.
(!x. MEM x (l::b) ==> ~IS_PREFIX h x /\ ~IS_PREFIX x h) ==>
!x. MEM x (alg_canon_merge l b) ==> ~IS_PREFIX h x /\ ~IS_PREFIX x h
- ALG_CANON_MERGE_SHORTENS
-
|- !l b x. MEM x (alg_canon_merge l b) ==> ?y. MEM y (l::b) /\ IS_PREFIX y x
- ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE
-
|- !l b.
alg_sorted (l::b) /\ alg_prefixfree (l::b) /\ alg_twinfree b ==>
alg_sorted (alg_canon_merge l b) /\
alg_prefixfree (alg_canon_merge l b) /\
alg_twinfree (alg_canon_merge l b)
- ALG_CANON_PREFS_CONSTANT
-
|- !l b. alg_prefixfree (l::b) ==> (alg_canon_prefs l b = l::b)
- ALG_CANON_PREFS_DELETES
-
|- !l b x. MEM x (alg_canon_prefs l b) ==> MEM x (l::b)
- ALG_CANON_PREFS_HD
-
|- !l b. HD (alg_canon_prefs l b) = l
- ALG_CANON_PREFS_PREFIXFREE
-
|- !l b.
alg_sorted b /\ alg_prefixfree b ==> alg_prefixfree (alg_canon_prefs l b)
- ALG_CANON_PREFS_SORTED
-
|- !l b. alg_sorted (l::b) ==> alg_sorted (alg_canon_prefs l b)
- ALG_CANON_SORTED_PREFIXFREE_TWINFREE
-
|- !l.
alg_sorted (alg_canon l) /\ alg_prefixfree (alg_canon l) /\
alg_twinfree (alg_canon l)
- ALG_LONGEST_APPEND
-
|- !l1 l2.
alg_longest l1 <= alg_longest (APPEND l1 l2) /\
alg_longest l2 <= alg_longest (APPEND l1 l2)
- ALG_LONGEST_HD
-
|- !h t. LENGTH h <= alg_longest (h::t)
- ALG_LONGEST_TL
-
|- !h t. alg_longest t <= alg_longest (h::t)
- ALG_LONGEST_TLS
-
|- !h t b. alg_longest (MAP (CONS b) (h::t)) = SUC (alg_longest (h::t))
- ALG_ORDER_ANTISYM
-
|- !x y. alg_order x y /\ alg_order y x ==> (x = y)
- alg_order_def
-
|- (alg_order [] (v6::v7) = T) /\ (alg_order [] [] = T) /\
(alg_order (v2::v3) [] = F) /\
(alg_order (h::t) (h'::t') =
(h = T) /\ (h' = F) \/ (h = h') /\ alg_order t t')
- alg_order_ind
-
|- !P.
(!v6 v7. P [] (v6::v7)) /\ P [] [] /\ (!v2 v3. P (v2::v3) []) /\
(!h t h' t'. P t t' ==> P (h::t) (h'::t')) ==>
!v v1. P v v1
- ALG_ORDER_NIL
-
|- !x. alg_order [] x /\ (alg_order x [] = (x = []))
- ALG_ORDER_PREFIX
-
|- !x y. IS_PREFIX y x ==> alg_order x y
- ALG_ORDER_PREFIX_ANTI
-
|- !x y. alg_order x y /\ IS_PREFIX x y ==> (x = y)
- ALG_ORDER_PREFIX_MONO
-
|- !x y z. alg_order x y /\ alg_order y z /\ IS_PREFIX z x ==> IS_PREFIX y x
- ALG_ORDER_PREFIX_TRANS
-
|- !x y z. alg_order x y /\ IS_PREFIX y z ==> alg_order x z \/ IS_PREFIX x z
- ALG_ORDER_REFL
-
|- !x. alg_order x x
- ALG_ORDER_SNOC
-
|- !x l. ~alg_order (SNOC x l) l
- ALG_ORDER_TOTAL
-
|- !x y. alg_order x y \/ alg_order y x
- ALG_ORDER_TRANS
-
|- !x y z. alg_order x y /\ alg_order y z ==> alg_order x z
- ALG_PREFIXFREE_APPEND
-
|- !h h' t t'.
alg_prefixfree (APPEND (h::t) (h'::t')) =
alg_prefixfree (h::t) /\ alg_prefixfree (h'::t') /\
~IS_PREFIX h' (LAST (h::t))
- alg_prefixfree_def
-
|- (alg_prefixfree (x::y::z) = ~IS_PREFIX y x /\ alg_prefixfree (y::z)) /\
(alg_prefixfree [v] = T) /\ (alg_prefixfree [] = T)
- ALG_PREFIXFREE_ELT
-
|- !h t.
alg_sorted (h::t) /\ alg_prefixfree (h::t) ==>
!x. MEM x t ==> ~IS_PREFIX x h /\ ~IS_PREFIX h x
- ALG_PREFIXFREE_FILTER
-
|- !P b. alg_sorted b /\ alg_prefixfree b ==> alg_prefixfree (FILTER P b)
- alg_prefixfree_ind
-
|- !P. (!x y z. P (y::z) ==> P (x::y::z)) /\ (!v. P [v]) /\ P [] ==> !v. P v
- ALG_PREFIXFREE_MONO
-
|- !x y z.
alg_sorted (x::y::z) /\ alg_prefixfree (x::y::z) ==>
alg_prefixfree (x::z)
- ALG_PREFIXFREE_STEP
-
|- !l1 l2.
alg_prefixfree (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2)) =
alg_prefixfree l1 /\ alg_prefixfree l2
- ALG_PREFIXFREE_TL
-
|- !h t. alg_prefixfree (h::t) ==> alg_prefixfree t
- ALG_PREFIXFREE_TLS
-
|- !l b. alg_prefixfree (MAP (CONS b) l) = alg_prefixfree l
- ALG_SORTED_APPEND
-
|- !h h' t t'.
alg_sorted (APPEND (h::t) (h'::t')) =
alg_sorted (h::t) /\ alg_sorted (h'::t') /\ alg_order (LAST (h::t)) h'
- alg_sorted_def
-
|- (alg_sorted (x::y::z) = alg_order x y /\ alg_sorted (y::z)) /\
(alg_sorted [v] = T) /\ (alg_sorted [] = T)
- ALG_SORTED_DEF_ALT
-
|- !h t. alg_sorted (h::t) = (!x. MEM x t ==> alg_order h x) /\ alg_sorted t
- ALG_SORTED_FILTER
-
|- !P b. alg_sorted b ==> alg_sorted (FILTER P b)
- alg_sorted_ind
-
|- !P. (!x y z. P (y::z) ==> P (x::y::z)) /\ (!v. P [v]) /\ P [] ==> !v. P v
- ALG_SORTED_MIN
-
|- !h t. alg_sorted (h::t) ==> !x. MEM x t ==> alg_order h x
- ALG_SORTED_MONO
-
|- !x y z. alg_sorted (x::y::z) ==> alg_sorted (x::z)
- ALG_SORTED_PREFIXFREE_EQUALITY
-
|- !l l'.
(!x. MEM x l = MEM x l') /\ alg_sorted l /\ alg_sorted l' /\
alg_prefixfree l /\ alg_prefixfree l' ==>
(l = l')
- ALG_SORTED_PREFIXFREE_MEM_NIL
-
|- !l. alg_sorted l /\ alg_prefixfree l /\ MEM [] l = (l = [[]])
- ALG_SORTED_STEP
-
|- !l1 l2.
alg_sorted (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2)) =
alg_sorted l1 /\ alg_sorted l2
- ALG_SORTED_TL
-
|- !h t. alg_sorted (h::t) ==> alg_sorted t
- ALG_SORTED_TLS
-
|- !l b. alg_sorted (MAP (CONS b) l) = alg_sorted l
- ALG_TWIN_CONS
-
|- !x y z h t.
(alg_twin (x::y::z) (h::t) = (x = h) /\ alg_twin (y::z) t) /\
(alg_twin (h::t) (x::y::z) = (x = h) /\ alg_twin t (y::z))
- ALG_TWIN_NIL
-
|- !l. ~alg_twin l [] /\ ~alg_twin [] l
- ALG_TWIN_REDUCE
-
|- !h t t'. alg_twin (h::t) (h::t') = alg_twin t t'
- ALG_TWIN_SING
-
|- !x l.
(alg_twin [x] l = (x = T) /\ (l = [F])) /\
(alg_twin l [x] = (l = [T]) /\ (x = F))
- alg_twinfree_def
-
|- (alg_twinfree (x::y::z) = ~alg_twin x y /\ alg_twinfree (y::z)) /\
(alg_twinfree [v] = T) /\ (alg_twinfree [] = T)
- alg_twinfree_ind
-
|- !P. (!x y z. P (y::z) ==> P (x::y::z)) /\ (!v. P [v]) /\ P [] ==> !v. P v
- ALG_TWINFREE_STEP
-
|- !l1 l2.
~MEM [] l1 \/ ~MEM [] l2 ==>
(alg_twinfree (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2)) =
alg_twinfree l1 /\ alg_twinfree l2)
- ALG_TWINFREE_STEP1
-
|- !l1 l2.
alg_twinfree (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2)) ==>
alg_twinfree l1 /\ alg_twinfree l2
- ALG_TWINFREE_STEP2
-
|- !l1 l2.
(~MEM [] l1 \/ ~MEM [] l2) /\ alg_twinfree l1 /\ alg_twinfree l2 ==>
alg_twinfree (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2))
- ALG_TWINFREE_TL
-
|- !h t. alg_twinfree (h::t) ==> alg_twinfree t
- ALG_TWINFREE_TLS
-
|- !l b. alg_twinfree (MAP (CONS b) l) = alg_twinfree l
- ALG_TWINS_PREFIX
-
|- !x l.
IS_PREFIX x l ==>
(x = l) \/ IS_PREFIX x (SNOC T l) \/ IS_PREFIX x (SNOC F l)
- ALGEBRA_CANON_BASIC
-
|- algebra_canon [] /\ algebra_canon [[]] /\ !x. algebra_canon [x]
- ALGEBRA_CANON_CASES
-
|- !P.
P [] /\ P [[]] /\
(!l1 l2.
algebra_canon l1 /\ algebra_canon l2 /\
algebra_canon (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2)) ==>
P (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2))) ==>
!l. algebra_canon l ==> P l
- ALGEBRA_CANON_CASES_THM
-
|- !l.
algebra_canon l ==>
(l = []) \/ (l = [[]]) \/
?l1 l2.
algebra_canon l1 /\ algebra_canon l2 /\
(l = APPEND (MAP (CONS T) l1) (MAP (CONS F) l2))
- ALGEBRA_CANON_DEF_ALT
-
|- !l. algebra_canon l = alg_sorted l /\ alg_prefixfree l /\ alg_twinfree l
- ALGEBRA_CANON_INDUCTION
-
|- !P.
P [] /\ P [[]] /\
(!l1 l2.
algebra_canon l1 /\ algebra_canon l2 /\ P l1 /\ P l2 /\
algebra_canon (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2)) ==>
P (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2))) ==>
!l. algebra_canon l ==> P l
- ALGEBRA_CANON_NIL_MEM
-
|- !l. algebra_canon l /\ MEM [] l = (l = [[]])
- ALGEBRA_CANON_STEP
-
|- !l1 l2.
~(l1 = [[]]) \/ ~(l2 = [[]]) ==>
(algebra_canon (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2)) =
algebra_canon l1 /\ algebra_canon l2)
- ALGEBRA_CANON_STEP1
-
|- !l1 l2.
algebra_canon (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2)) ==>
algebra_canon l1 /\ algebra_canon l2
- ALGEBRA_CANON_STEP2
-
|- !l1 l2.
(~(l1 = [[]]) \/ ~(l2 = [[]])) /\ algebra_canon l1 /\
algebra_canon l2 ==>
algebra_canon (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2))
- ALGEBRA_CANON_TL
-
|- !h t. algebra_canon (h::t) ==> algebra_canon t
- ALGEBRA_CANON_TLS
-
|- !l b. algebra_canon (MAP (CONS b) l) = algebra_canon l
- MEM_NIL_STEP
-
|- !l1 l2. ~MEM [] (APPEND (MAP (CONS T) l1) (MAP (CONS F) l2))