Theory sum

Parents

Contents

Type operators

Constants

Definitions

INL_DEFINR_DEFISLISRIS_SUM_REPOUTLOUTRSUM_ALL_defSUM_FIN_defSUM_MAP_defSUM_REL_defsetL_defsetR_defsum_ISO_DEFsum_TY_DEFsum_case_def

Theorems

EXISTS_SUMFORALL_SUMINLINL_11INL_PRSINL_RSPINRINR_11INR_INL_11INR_PRSINR_RSPINR_neq_INLIN_SUM_FIN_THMISL_OR_ISRISL_PRSISL_RSPISR_PRSISR_RSPNOT_ISL_ISRNOT_ISR_ISLSUM_ALL_CONGSUM_ALL_MONOSUM_ALL_SETSUM_EQUIVSUM_MAPSUM_MAP_CASESUM_MAP_CONGSUM_MAP_ISUM_MAP_PRSSUM_MAP_RSPSUM_MAP_SETSUM_MAP_oSUM_QUOTIENTSUM_REL_EQSUM_REL_REFLSUM_REL_SYMSUM_REL_THMSUM_REL_TRANScond_sum_expanddatatype_sumsum_Axiomsum_CASESsum_INDUCTsum_axiomsum_case_congsum_distinctsum_distinct1

Definitions

INL_DEF
⊢ ∀e. INL e = ABS_sum (λb x y. x = e ∧ b)
INR_DEF
⊢ ∀e. INR e = ABS_sum (λb x y. y = e ∧ ¬b)
ISL
⊢ (∀x. ISL (INL x) ⇔ T) ∧ ∀y. ISL (INR y) ⇔ F
ISR
⊢ (∀x. ISR (INR x) ⇔ T) ∧ ∀y. ISR (INL y) ⇔ F
IS_SUM_REP
⊢ ∀f. IS_SUM_REP f ⇔
      ∃v1 v2. f = (λb x y. x = v1 ∧ b) ∨ f = (λb x y. y = v2 ∧ ¬b)
OUTL
⊢ ∀x. OUTL (INL x) = x
OUTR
⊢ ∀x. OUTR (INR x) = x
SUM_ALL_def
⊢ (∀P Q x. SUM_ALL P Q (INL x) ⇔ P x) ∧ ∀P Q y. SUM_ALL P Q (INR y) ⇔ Q y
SUM_FIN_def
⊢ ∀A B. SUM_FIN A B = (λab. case ab of INL a => a ∈ A | INR b => b ∈ B)
SUM_MAP_def
⊢ (∀f g a. SUM_MAP f g (INL a) = INL (f a)) ∧
  ∀f g b. SUM_MAP f g (INR b) = INR (g b)
SUM_REL_def
⊢ (∀R1 R2 x ab. (R1 +++ R2) (INL x) ab ⇔ ISL ab ∧ R1 x (OUTL ab)) ∧
  ∀R1 R2 y ab. (R1 +++ R2) (INR y) ab ⇔ ISR ab ∧ R2 y (OUTR ab)
setL_def
⊢ (∀a. setL (INL a) = (λx. x = a)) ∧ ∀b. setL (INR b) = (λx. F)
setR_def
⊢ (∀a. setR (INL a) = (λx. F)) ∧ ∀b. setR (INR b) = (λx. x = b)
sum_ISO_DEF
⊢ (∀a. ABS_sum (REP_sum a) = a) ∧
  ∀r. IS_SUM_REP r ⇔ REP_sum (ABS_sum r) = r
sum_TY_DEF
⊢ ∃rep. TYPE_DEFINITION IS_SUM_REP rep
sum_case_def
⊢ (∀x f f1. sum_CASE (INL x) f f1 = f x) ∧
  ∀y f f1. sum_CASE (INR y) f f1 = f1 y

Theorems

⊢ ∀P. (∃s. P s) ⇔ (∃x. P (INL x)) ∨ ∃y. P (INR y)
⊢ (∀s. P s) ⇔ (∀x. P (INL x)) ∧ ∀y. P (INR y)
⊢ ∀x. ISL x ⇒ INL (OUTL x) = x
⊢ INL x = INL y ⇔ x = y
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒ ∀a. INL a = SUM_MAP abs1 abs2 (INL (rep1 a))
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒
      ∀a1 a2. R1 a1 a2 ⇒ (R1 +++ R2) (INL a1) (INL a2)
⊢ ∀x. ISR x ⇒ INR (OUTR x) = x
⊢ INR x = INR y ⇔ x = y
⊢ (∀y x. INL x = INL y ⇔ x = y) ∧ ∀y x. INR x = INR y ⇔ x = y
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒ ∀b. INR b = SUM_MAP abs1 abs2 (INR (rep2 b))
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒
      ∀b1 b2. R2 b1 b2 ⇒ (R1 +++ R2) (INR b1) (INR b2)
⊢ ∀v1 v2. INR v2 ≠ INL v1
⊢ (INL a ∈ SUM_FIN A B ⇔ a ∈ A) ∧ (INR b ∈ SUM_FIN A B ⇔ b ∈ B)
⊢ ∀x. ISL x ∨ ISR x
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒ ∀a. ISL a ⇔ ISL (SUM_MAP rep1 rep2 a)
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒ ∀a1 a2. (R1 +++ R2) a1 a2 ⇒ (ISL a1 ⇔ ISL a2)
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒ ∀a. ISR a ⇔ ISR (SUM_MAP rep1 rep2 a)
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒ ∀a1 a2. (R1 +++ R2) a1 a2 ⇒ (ISR a1 ⇔ ISR a2)
⊢ ∀x. ¬ISL x ⇔ ISR x
⊢ ∀x. ¬ISR x ⇔ ISL x
⊢ ∀s s' P P' Q Q'.
    s = s' ∧ (∀a. s' = INL a ⇒ (P a ⇔ P' a)) ∧
    (∀b. s' = INR b ⇒ (Q b ⇔ Q' b)) ⇒
    (SUM_ALL P Q s ⇔ SUM_ALL P' Q' s')
⊢ (∀x. P x ⇒ P' x) ∧ (∀y. Q y ⇒ Q' y) ⇒ SUM_ALL P Q s ⇒ SUM_ALL P' Q' s
⊢ SUM_ALL P Q ab ⇔ (∀a. a ∈ setL ab ⇒ P a) ∧ ∀b. b ∈ setR ab ⇒ Q b
⊢ ∀R1 R2. EQUIV R1 ⇒ EQUIV R2 ⇒ EQUIV (R1 +++ R2)
⊢ ∀f g z.
    SUM_MAP f g z = if ISL z then INL (f (OUTL z)) else INR (g (OUTR z))
⊢ ∀f g z. SUM_MAP f g z = sum_CASE z (INL ∘ f) (INR ∘ g)
⊢ (∀a. a ∈ setL ab ⇒ f1 a = f2 a) ∧ (∀b. b ∈ setR ab ⇒ g1 b = g2 b) ⇒
  SUM_MAP f1 g1 ab = SUM_MAP f2 g2 ab
⊢ SUM_MAP I I = I
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒
      ∀R3 abs3 rep3.
        QUOTIENT R3 abs3 rep3 ⇒
        ∀R4 abs4 rep4.
          QUOTIENT R4 abs4 rep4 ⇒
          ∀f g.
            SUM_MAP f g =
            (SUM_MAP rep1 rep3 --> SUM_MAP abs2 abs4)
              (SUM_MAP ((abs1 --> rep2) f) ((abs3 --> rep4) g))
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒
      ∀R3 abs3 rep3.
        QUOTIENT R3 abs3 rep3 ⇒
        ∀R4 abs4 rep4.
          QUOTIENT R4 abs4 rep4 ⇒
          ∀f1 f2 g1 g2.
            (R1 ===> R2) f1 f2 ∧ (R3 ===> R4) g1 g2 ⇒
            ((R1 +++ R3) ===> (R2 +++ R4)) (SUM_MAP f1 g1) (SUM_MAP f2 g2)
⊢ setL (SUM_MAP f g ab) = (λc. ∃a. c = f a ∧ a ∈ setL ab) ∧
  setR (SUM_MAP f g ab) = (λd. ∃b. d = g b ∧ b ∈ setR ab)
⊢ SUM_MAP f g ∘ SUM_MAP h k = SUM_MAP (f ∘ h) (g ∘ k)
⊢ ∀R1 abs1 rep1.
    QUOTIENT R1 abs1 rep1 ⇒
    ∀R2 abs2 rep2.
      QUOTIENT R2 abs2 rep2 ⇒
      QUOTIENT (R1 +++ R2) (SUM_MAP abs1 abs2) (SUM_MAP rep1 rep2)
⊢ $= +++ $= = $=
⊢ (∀x. R1 x x) ∧ (∀a. R2 a a) ⇒ ∀xy. (R1 +++ R2) xy xy
⊢ (∀x y. R1 x y ⇔ R1 y x) ∧ (∀a b. R2 a b ⇔ R2 b a) ⇒
  ∀xy ab. (R1 +++ R2) xy ab ⇔ (R1 +++ R2) ab xy
⊢ ((R1 +++ R2) (INL x) (INL a) ⇔ R1 x a) ∧
  ((R1 +++ R2) (INL x) (INR b) ⇔ F) ∧ ((R1 +++ R2) (INR y) (INL a) ⇔ F) ∧
  ((R1 +++ R2) (INR y) (INR b) ⇔ R2 y b)
⊢ (∀x y z. R1 x y ∧ R1 y z ⇒ R1 x z) ∧ (∀a b c. R2 a b ∧ R2 b c ⇒ R2 a c) ⇒
  ∀xy ab uv. (R1 +++ R2) xy ab ∧ (R1 +++ R2) ab uv ⇒ (R1 +++ R2) xy uv
⊢ (∀x y z. (if P then INR x else INL y) = INR z ⇔ P ∧ z = x) ∧
  (∀x y z. (if P then INR x else INL y) = INL z ⇔ ¬P ∧ z = y) ∧
  (∀x y z. (if P then INL x else INR y) = INL z ⇔ P ∧ z = x) ∧
  ∀x y z. (if P then INL x else INR y) = INR z ⇔ ¬P ∧ z = y
⊢ DATATYPE (sum INL INR)
⊢ ∀f g. ∃h. (∀x. h (INL x) = f x) ∧ ∀y. h (INR y) = g y
⊢ ∀ss. (∃x. ss = INL x) ∨ ∃y. ss = INR y
⊢ ∀P. (∀x. P (INL x)) ∧ (∀y. P (INR y)) ⇒ ∀s. P s
⊢ ∀f g. ∃!h. h ∘ INL = f ∧ h ∘ INR = g
⊢ ∀M M' f f1.
    M = M' ∧ (∀x. M' = INL x ⇒ f x = f' x) ∧
    (∀y. M' = INR y ⇒ f1 y = f1' y) ⇒
    sum_CASE M f f1 = sum_CASE M' f' f1'
⊢ ∀x y. INL x ≠ INR y
⊢ ∀x y. INR y ≠ INL x