Theory ternaryComparisons

Parents

Contents

Type operators

Constants

Definitions

invert_comparison_defnum_compare_defordering_BIJordering_CASEordering_TY_DEFordering_size_defpair_compare_def

Theorems

bool_compare_defbool_compare_indcompare_equaldatatype_orderinginvert_eq_EQUALlist_compare_deflist_compare_indlist_merge_deflist_merge_indnum2ordering_11num2ordering_ONTOnum2ordering_ordering2numnum2ordering_thmoption_compare_defoption_compare_indordering2num_11ordering2num_ONTOordering2num_num2orderingordering2num_thmordering_Axiomordering_EQ_orderingordering_case_congordering_case_defordering_case_eqordering_distinctordering_distinct1ordering_distinct2ordering_eq_decordering_inductionordering_nchotomy

Definitions

⊢ invert_comparison GREATER = LESS ∧ invert_comparison LESS = GREATER ∧
  invert_comparison EQUAL = EQUAL
⊢ ∀n1 n2.
    num_compare n1 n2 =
    if n1 = n2 then EQUAL else if n1 < n2 then LESS else GREATER
ordering_BIJ
⊢ (∀a. num2ordering (ordering2num a) = a) ∧
  ∀r. (λn. n < 3) r ⇔ ordering2num (num2ordering r) = r
ordering_CASE
⊢ ∀x v0 v1 v2.
    (case x of LESS => v0 | EQUAL => v1 | GREATER => v2) =
    (λm. if m < 1 then v0 else if m = 1 then v1 else v2) (ordering2num x)
ordering_TY_DEF
⊢ ∃rep. TYPE_DEFINITION (λn. n < 3) rep
ordering_size_def
⊢ ∀x. ordering_size x = 0
⊢ ∀c1 c2 a b x y.
    pair_compare c1 c2 (a,b) (x,y) =
    case c1 a x of LESS => LESS | EQUAL => c2 b y | GREATER => GREATER

Theorems

⊢ bool_compare T T = EQUAL ∧ bool_compare F F = EQUAL ∧
  bool_compare T F = GREATER ∧ bool_compare F T = LESS
⊢ ∀P. P T T ∧ P F F ∧ P T F ∧ P F T ⇒ ∀v v1. P v v1
⊢ (∀x y. cmp x y = EQUAL ⇔ x = y) ⇒
  ∀l1 l2. list_compare cmp l1 l2 = EQUAL ⇔ l1 = l2
datatype_ordering
⊢ DATATYPE (ordering LESS EQUAL GREATER)
⊢ ∀x. invert_comparison x = EQUAL ⇔ x = EQUAL
⊢ (∀cmp. list_compare cmp [] [] = EQUAL) ∧
  (∀v9 v8 cmp. list_compare cmp [] (v8::v9) = LESS) ∧
  (∀v5 v4 cmp. list_compare cmp (v4::v5) [] = GREATER) ∧
  ∀y x l2 l1 cmp.
    list_compare cmp (x::l1) (y::l2) =
    case cmp x y of
      LESS => LESS
    | EQUAL => list_compare cmp l1 l2
    | GREATER => GREATER
⊢ ∀P. (∀cmp. P cmp [] []) ∧ (∀cmp v8 v9. P cmp [] (v8::v9)) ∧
      (∀cmp v4 v5. P cmp (v4::v5) []) ∧
      (∀cmp x l1 y l2.
         (cmp x y = EQUAL ⇒ P cmp l1 l2) ⇒ P cmp (x::l1) (y::l2)) ⇒
      ∀v v1 v2. P v v1 v2
⊢ (∀l1 a_lt. list_merge a_lt l1 [] = l1) ∧
  (∀v5 v4 a_lt. list_merge a_lt [] (v4::v5) = v4::v5) ∧
  ∀y x l2 l1 a_lt.
    list_merge a_lt (x::l1) (y::l2) =
    if a_lt x y then x::list_merge a_lt l1 (y::l2)
    else y::list_merge a_lt (x::l1) l2
⊢ ∀P. (∀a_lt l1. P a_lt l1 []) ∧ (∀a_lt v4 v5. P a_lt [] (v4::v5)) ∧
      (∀a_lt x l1 y l2.
         (¬a_lt x y ⇒ P a_lt (x::l1) l2) ∧ (a_lt x y ⇒ P a_lt l1 (y::l2)) ⇒
         P a_lt (x::l1) (y::l2)) ⇒
      ∀v v1 v2. P v v1 v2
num2ordering_11
⊢ ∀r r'. r < 3 ⇒ r' < 3 ⇒ (num2ordering r = num2ordering r' ⇔ r = r')
num2ordering_ONTO
⊢ ∀a. ∃r. a = num2ordering r ∧ r < 3
num2ordering_ordering2num
⊢ ∀a. num2ordering (ordering2num a) = a
num2ordering_thm
⊢ num2ordering 0 = LESS ∧ num2ordering 1 = EQUAL ∧ num2ordering 2 = GREATER
⊢ option_compare c NONE NONE = EQUAL ∧
  option_compare c NONE (SOME v0) = LESS ∧
  option_compare c (SOME v3) NONE = GREATER ∧
  option_compare c (SOME v1) (SOME v2) = c v1 v2
⊢ ∀P. (∀c. P c NONE NONE) ∧ (∀c v0. P c NONE (SOME v0)) ∧
      (∀c v3. P c (SOME v3) NONE) ∧ (∀c v1 v2. P c (SOME v1) (SOME v2)) ⇒
      ∀v v1 v2. P v v1 v2
ordering2num_11
⊢ ∀a a'. ordering2num a = ordering2num a' ⇔ a = a'
ordering2num_ONTO
⊢ ∀r. r < 3 ⇔ ∃a. r = ordering2num a
ordering2num_num2ordering
⊢ ∀r. r < 3 ⇔ ordering2num (num2ordering r) = r
ordering2num_thm
⊢ ordering2num LESS = 0 ∧ ordering2num EQUAL = 1 ∧ ordering2num GREATER = 2
ordering_Axiom
⊢ ∀x0 x1 x2. ∃f. f LESS = x0 ∧ f EQUAL = x1 ∧ f GREATER = x2
ordering_EQ_ordering
⊢ ∀a a'. a = a' ⇔ ordering2num a = ordering2num a'
ordering_case_cong
⊢ ∀M M' v0 v1 v2.
    M = M' ∧ (M' = LESS ⇒ v0 = v0') ∧ (M' = EQUAL ⇒ v1 = v1') ∧
    (M' = GREATER ⇒ v2 = v2') ⇒
    (case M of LESS => v0 | EQUAL => v1 | GREATER => v2) =
    case M' of LESS => v0' | EQUAL => v1' | GREATER => v2'
ordering_case_def
⊢ (∀v0 v1 v2. (case LESS of LESS => v0 | EQUAL => v1 | GREATER => v2) = v0) ∧
  (∀v0 v1 v2. (case EQUAL of LESS => v0 | EQUAL => v1 | GREATER => v2) = v1) ∧
  ∀v0 v1 v2.
    (case GREATER of LESS => v0 | EQUAL => v1 | GREATER => v2) = v2
ordering_case_eq
⊢ (case x of LESS => v0 | EQUAL => v1 | GREATER => v2) = v ⇔
  x = LESS ∧ v0 = v ∨ x = EQUAL ∧ v1 = v ∨ x = GREATER ∧ v2 = v
ordering_distinct
⊢ LESS ≠ EQUAL ∧ LESS ≠ GREATER ∧ EQUAL ≠ GREATER
⊢ EQUAL ≠ LESS
⊢ GREATER ≠ EQUAL
⊢ (∀x. x = x ⇔ T) ∧ (LESS = EQUAL ⇔ F) ∧ (LESS = GREATER ⇔ F) ∧
  (EQUAL = GREATER ⇔ F) ∧ (EQUAL = LESS ⇔ F) ∧ (GREATER = LESS ⇔ F) ∧
  (GREATER = EQUAL ⇔ F) ∧ (∀x. ordering_size x = 0) ∧
  (ordering2num LESS = 0 ∧ ordering2num EQUAL = 1 ∧
   ordering2num GREATER = 2) ∧ num2ordering 0 = LESS ∧
  num2ordering 1 = EQUAL ∧ num2ordering 2 = GREATER
ordering_induction
⊢ ∀P. P EQUAL ∧ P GREATER ∧ P LESS ⇒ ∀a. P a
ordering_nchotomy
⊢ ∀a. a = LESS ∨ a = EQUAL ∨ a = GREATER