- FUN_REL_EQUALS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f g.
         respects (R1 ===> R2) f ∧ respects (R1 ===> R2) g ⇒
         (((rep1 --> abs2) f = (rep1 --> abs2) g) ⇔
          ∀x y. R1 x y ⇒ R2 (f x) (g y))
- EQUIV_IMP_PARTIAL_EQUIV
- 
|- ∀R. EQUIV R ⇒ PARTIAL_EQUIV R
 
- QUOTIENT_ABS_REP
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀a. abs (rep a) = a
 
- QUOTIENT_REP_REFL
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀a. R (rep a) (rep a)
 
- QUOTIENT_REL
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒ ∀r s. R r s ⇔ R r r ∧ R s s ∧ (abs r = abs s)
- QUOTIENT_REL_ABS
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀r s. R r s ⇒ (abs r = abs s)
 
- QUOTIENT_REL_ABS_EQ
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒ ∀r s. R r r ⇒ R s s ⇒ (R r s ⇔ (abs r = abs s))
- QUOTIENT_REL_REP
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀a b. R (rep a) (rep b) ⇔ (a = b)
 
- QUOTIENT_REP_ABS
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀r. R r r ⇒ R (rep (abs r)) r
 
- IDENTITY_EQUIV
- 
|- EQUIV $=
 
- IDENTITY_QUOTIENT
- 
|- QUOTIENT $= I I
 
- EQUIV_REFL_SYM_TRANS
- 
|- ∀R.
     (∀x y. R x y ⇔ (R x = R y)) ⇔
     (∀x. R x x) ∧ (∀x y. R x y ⇒ R y x) ∧ ∀x y z. R x y ∧ R y z ⇒ R x z
- QUOTIENT_SYM
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀x y. R x y ⇒ R y x
 
- QUOTIENT_TRANS
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀x y z. R x y ∧ R y z ⇒ R x z
 
- FUN_MAP_THM
- 
|- ∀f g h x. (f --> g) h x = g (h (f x))
 
- FUN_MAP_I
- 
|- I --> I = I
 
- IN_FUN
- 
|- ∀f g s x. x ∈ (f --> g) s ⇔ g (f x ∈ s)
 
- FUN_REL_EQ
- 
|- $= ===> $= = $=
 
- FUN_QUOTIENT
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       QUOTIENT (R1 ===> R2) (rep1 --> abs2) (abs1 --> rep2)
- RESPECTS
- 
|- ∀R x. respects R x ⇔ R x x
 
- IN_RESPECTS
- 
|- ∀R x. x ∈ respects R ⇔ R x x
 
- RESPECTS_THM
- 
|- ∀R1 R2 f. respects (R1 ===> R2) f ⇔ ∀x y. R1 x y ⇒ R2 (f x) (f y)
 
- RESPECTS_MP
- 
|- ∀R1 R2 f x y. respects (R1 ===> R2) f ∧ R1 x y ⇒ R2 (f x) (f y)
 
- RESPECTS_REP_ABS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 f x. respects (R1 ===> R2) f ∧ R1 x x ⇒ R2 (f (rep1 (abs1 x))) (f x)
- RESPECTS_o
- 
|- ∀R1 R2 R3 f g.
     respects (R2 ===> R3) f ∧ respects (R1 ===> R2) g ⇒
     respects (R1 ===> R3) (f o g)
- RES_EXISTS_EQUIV
- 
|- ∀R m.
     RES_EXISTS_EQUIV R m ⇔
     (∃x::respects R. m x) ∧ ∀x y::respects R. m x ∧ m y ⇒ R x y
- FUN_REL_EQ_REL
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f g.
         (R1 ===> R2) f g ⇔
         respects (R1 ===> R2) f ∧ respects (R1 ===> R2) g ∧
         ((rep1 --> abs2) f = (rep1 --> abs2) g)
- FUN_REL_MP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f g x y. (R1 ===> R2) f g ∧ R1 x y ⇒ R2 (f x) (g y)
- FUN_REL_IMP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f g.
         respects (R1 ===> R2) f ∧ respects (R1 ===> R2) g ∧
         ((rep1 --> abs2) f = (rep1 --> abs2) g) ⇒
         ∀x y. R1 x y ⇒ R2 (f x) (g y)
- EQUALS_PRS
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀x y. (x = y) ⇔ R (rep x) (rep y)
 
- EQUALS_RSP
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒
     ∀x1 x2 y1 y2. R x1 x2 ∧ R y1 y2 ⇒ (R x1 y1 ⇔ R x2 y2)
- LAMBDA_PRS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f. (λx. f x) = (rep1 --> abs2) (λx. rep2 (f (abs1 x)))
- LAMBDA_PRS1
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f. (λx. f x) = (rep1 --> abs2) (λx. (abs1 --> rep2) f x)
- LAMBDA_RSP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f1 f2. (R1 ===> R2) f1 f2 ⇒ (R1 ===> R2) (λx. f1 x) (λy. f2 y)
- ABSTRACT_PRS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f.
         f = (rep1 --> abs2) (RES_ABSTRACT (respects R1) ((abs1 --> rep2) f))
- RES_ABSTRACT_RSP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f1 f2.
         (R1 ===> R2) f1 f2 ⇒
         (R1 ===> R2) (RES_ABSTRACT (respects R1) f1)
           (RES_ABSTRACT (respects R1) f2)
- LET_RES_ABSTRACT
- 
|- ∀r lam v. v ∈ r ⇒ (LET (RES_ABSTRACT r lam) v = LET lam v)
 
- LAMBDA_REP_ABS_RSP
- 
|- ∀REL1 abs1 rep1 REL2 abs2 rep2 f1 f2.
     ((∀r r'. REL1 r r' ⇒ REL1 r (rep1 (abs1 r'))) ∧
      ∀r r'. REL2 r r' ⇒ REL2 r (rep2 (abs2 r'))) ∧ (REL1 ===> REL2) f1 f2 ⇒
     (REL1 ===> REL2) f1 ((abs1 --> rep2) ((rep1 --> abs2) f2))
- REP_ABS_RSP
- 
|- ∀REL abs rep.
     QUOTIENT REL abs rep ⇒ ∀x1 x2. REL x1 x2 ⇒ REL x1 (rep (abs x2))
- FORALL_PRS
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒ ∀f. $! f ⇔ RES_FORALL (respects R) ((abs --> I) f)
- RES_FORALL_RSP
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒
     ∀f g.
       (R ===> $<=>) f g ⇒
       (RES_FORALL (respects R) f ⇔ RES_FORALL (respects R) g)
- RES_FORALL_PRS
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒
     ∀P f. RES_FORALL P f ⇔ RES_FORALL ((abs --> I) P) ((abs --> I) f)
- EXISTS_PRS
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒ ∀f. $? f ⇔ RES_EXISTS (respects R) ((abs --> I) f)
- RES_EXISTS_RSP
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒
     ∀f g.
       (R ===> $<=>) f g ⇒
       (RES_EXISTS (respects R) f ⇔ RES_EXISTS (respects R) g)
- RES_EXISTS_PRS
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒
     ∀P f. RES_EXISTS P f ⇔ RES_EXISTS ((abs --> I) P) ((abs --> I) f)
- EXISTS_UNIQUE_PRS
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒ ∀f. $?! f ⇔ RES_EXISTS_EQUIV R ((abs --> I) f)
- RES_EXISTS_EQUIV_RSP
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒
     ∀f g. (R ===> $<=>) f g ⇒ (RES_EXISTS_EQUIV R f ⇔ RES_EXISTS_EQUIV R g)
- COND_PRS
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒
     ∀a b c. (if a then b else c) = abs (if a then rep b else rep c)
- COND_RSP
- 
|- ∀R abs rep.
     QUOTIENT R abs rep ⇒
     ∀a1 a2 b1 b2 c1 c2.
       (a1 ⇔ a2) ∧ R b1 b2 ∧ R c1 c2 ⇒
       R (if a1 then b1 else c1) (if a2 then b2 else c2)
- LET_PRS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f x. LET f x = abs2 (LET ((abs1 --> rep2) f) (rep1 x))
- LET_RSP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f g x y. (R1 ===> R2) f g ∧ R1 x y ⇒ R2 (LET f x) (LET g y)
- literal_case_PRS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f x.
         literal_case f x = abs2 (literal_case ((abs1 --> rep2) f) (rep1 x))
- literal_case_RSP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f g x y.
         (R1 ===> R2) f g ∧ R1 x y ⇒ R2 (literal_case f x) (literal_case g y)
- APPLY_PRS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒ ∀f x. f x = abs2 ((abs1 --> rep2) f (rep1 x))
- APPLY_RSP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f g x y. (R1 ===> R2) f g ∧ R1 x y ⇒ R2 (f x) (g y)
- I_PRS
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀e. I e = abs (I (rep e))
 
- I_RSP
- 
|- ∀R abs rep. QUOTIENT R abs rep ⇒ ∀e1 e2. R e1 e2 ⇒ R (I e1) (I e2)
 
- K_PRS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒ ∀x y. K x y = abs1 (K (rep1 x) (rep2 y))
- K_RSP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀x1 x2 y1 y2. R1 x1 x2 ∧ R2 y1 y2 ⇒ R1 (K x1 y1) (K x2 y2)
- o_PRS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀R3 abs3 rep3.
         QUOTIENT R3 abs3 rep3 ⇒
         ∀f g. f o g = (rep1 --> abs3) ((abs2 --> rep3) f o (abs1 --> rep2) g)
- o_RSP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀R3 abs3 rep3.
         QUOTIENT R3 abs3 rep3 ⇒
         ∀f1 f2 g1 g2.
           (R2 ===> R3) f1 f2 ∧ (R1 ===> R2) g1 g2 ⇒
           (R1 ===> R3) (f1 o g1) (f2 o g2)
- C_PRS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀R3 abs3 rep3.
         QUOTIENT R3 abs3 rep3 ⇒
         ∀f x y.
           combin$C f x y =
           abs3 (combin$C ((abs1 --> abs2 --> rep3) f) (rep2 x) (rep1 y))
- C_RSP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀R3 abs3 rep3.
         QUOTIENT R3 abs3 rep3 ⇒
         ∀f1 f2 x1 x2 y1 y2.
           (R1 ===> R2 ===> R3) f1 f2 ∧ R2 x1 x2 ∧ R1 y1 y2 ⇒
           R3 (combin$C f1 x1 y1) (combin$C f2 x2 y2)
- W_PRS
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f x. W f x = abs2 (W ((abs1 --> abs1 --> rep2) f) (rep1 x))
- W_RSP
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 abs2 rep2.
       QUOTIENT R2 abs2 rep2 ⇒
       ∀f1 f2 x1 x2.
         (R1 ===> R1 ===> R2) f1 f2 ∧ R1 x1 x2 ⇒ R2 (W f1 x1) (W f2 x2)
- EQ_IMPLIES
- 
|- ∀P Q. (P ⇔ Q) ⇒ P ⇒ Q
 
- EQUALS_IMPLIES
- 
|- ∀P P' Q Q'. (P = Q) ∧ (P' = Q') ⇒ (P = P') ⇒ (Q = Q')
 
- CONJ_IMPLIES
- 
|- ∀P P' Q Q'. (P ⇒ Q) ∧ (P' ⇒ Q') ⇒ P ∧ P' ⇒ Q ∧ Q'
 
- DISJ_IMPLIES
- 
|- ∀P P' Q Q'. (P ⇒ Q) ∧ (P' ⇒ Q') ⇒ P ∨ P' ⇒ Q ∨ Q'
 
- IMP_IMPLIES
- 
|- ∀P P' Q Q'. (Q ⇒ P) ∧ (P' ⇒ Q') ⇒ (P ⇒ P') ⇒ Q ⇒ Q'
 
- NOT_IMPLIES
- 
|- ∀P Q. (Q ⇒ P) ⇒ ¬P ⇒ ¬Q
 
- EQUALS_EQUIV_IMPLIES
- 
|- ∀R. EQUIV R ⇒ R a1 a2 ∧ R b1 b2 ⇒ (a1 = b1) ⇒ R a2 b2
 
- ABSTRACT_RES_ABSTRACT
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 f g. (R1 ===> R2) f g ⇒ (R1 ===> R2) f (RES_ABSTRACT (respects R1) g)
- RES_ABSTRACT_ABSTRACT
- 
|- ∀R1 abs1 rep1.
     QUOTIENT R1 abs1 rep1 ⇒
     ∀R2 f g. (R1 ===> R2) f g ⇒ (R1 ===> R2) (RES_ABSTRACT (respects R1) f) g
- EQUIV_RES_ABSTRACT_LEFT
- 
|- ∀R1 R2 f1 f2 x1 x2.
     R2 (f1 x1) (f2 x2) ∧ R1 x1 x1 ⇒
     R2 (RES_ABSTRACT (respects R1) f1 x1) (f2 x2)
- EQUIV_RES_ABSTRACT_RIGHT
- 
|- ∀R1 R2 f1 f2 x1 x2.
     R2 (f1 x1) (f2 x2) ∧ R1 x2 x2 ⇒
     R2 (f1 x1) (RES_ABSTRACT (respects R1) f2 x2)
- EQUIV_RES_FORALL
- 
|- ∀E P. EQUIV E ⇒ (RES_FORALL (respects E) P ⇔ $! P)
 
- EQUIV_RES_EXISTS
- 
|- ∀E P. EQUIV E ⇒ (RES_EXISTS (respects E) P ⇔ $? P)
 
- EQUIV_RES_EXISTS_UNIQUE
- 
|- ∀E P. EQUIV E ⇒ (RES_EXISTS_UNIQUE (respects E) P ⇔ $?! P)
 
- FORALL_REGULAR
- 
|- ∀P Q. (∀x. P x ⇒ Q x) ⇒ $! P ⇒ $! Q
 
- EXISTS_REGULAR
- 
|- ∀P Q. (∀x. P x ⇒ Q x) ⇒ $? P ⇒ $? Q
 
- RES_FORALL_REGULAR
- 
|- ∀P Q R. (∀x. R x ⇒ P x ⇒ Q x) ⇒ RES_FORALL R P ⇒ RES_FORALL R Q
 
- RES_EXISTS_REGULAR
- 
|- ∀P Q R. (∀x. R x ⇒ P x ⇒ Q x) ⇒ RES_EXISTS R P ⇒ RES_EXISTS R Q
 
- LEFT_RES_FORALL_REGULAR
- 
|- ∀P R Q. (∀x. R x ∧ (Q x ⇒ P x)) ⇒ RES_FORALL R Q ⇒ $! P
 
- RIGHT_RES_FORALL_REGULAR
- 
|- ∀P R Q. (∀x. R x ⇒ P x ⇒ Q x) ⇒ $! P ⇒ RES_FORALL R Q
 
- LEFT_RES_EXISTS_REGULAR
- 
|- ∀P R Q. (∀x. R x ⇒ Q x ⇒ P x) ⇒ RES_EXISTS R Q ⇒ $? P
 
- RIGHT_RES_EXISTS_REGULAR
- 
|- ∀P R Q. (∀x. R x ∧ (P x ⇒ Q x)) ⇒ $? P ⇒ RES_EXISTS R Q
 
- EXISTS_UNIQUE_REGULAR
- 
|- ∀P E Q.
     (∀x. P x ⇒ respects E x ∧ Q x) ∧
     (∀x y. respects E x ∧ Q x ∧ respects E y ∧ Q y ⇒ E x y) ⇒
     $?! P ⇒
     RES_EXISTS_EQUIV E Q
- RES_EXISTS_UNIQUE_RESPECTS_REGULAR
- 
|- ∀R P. RES_EXISTS_UNIQUE (respects R) P ⇒ RES_EXISTS_EQUIV R P
 
- RES_EXISTS_UNIQUE_REGULAR
- 
|- ∀P R Q.
     (∀x. P x ⇒ Q x) ∧
     (∀x y. respects R x ∧ Q x ∧ respects R y ∧ Q y ⇒ R x y) ⇒
     RES_EXISTS_UNIQUE (respects R) P ⇒
     RES_EXISTS_EQUIV R Q
- RES_EXISTS_UNIQUE_REGULAR_SAME
- 
|- ∀R P Q.
     (R ===> $<=>) P Q ⇒
     RES_EXISTS_UNIQUE (respects R) P ⇒
     RES_EXISTS_EQUIV R Q