Theory "ring"

Parents     semi_ring

Signature

Type Arity
ring 1
Constant Type
ring_R1_fupd :('a -> 'a) -> 'a ring -> 'a ring
ring_R0_update :'a -> 'a ring -> 'a ring
ring0 :'a -> 'a -> ('a -> 'a -> 'a) -> ('a -> 'a -> 'a) -> ('a -> 'a) -> 'a ring
mk_ring :('a # 'a # ('a -> 'a -> 'a) # ('a -> 'a -> 'a) # ('a -> 'a)) recspace -> 'a ring
ring_size :('a -> num) -> 'a ring -> num
dest_ring :'a ring -> ('a # 'a # ('a -> 'a -> 'a) # ('a -> 'a -> 'a) # ('a -> 'a)) recspace
ring_R1_update :'a -> 'a ring -> 'a ring
ring_RP_update :('a -> 'a -> 'a) -> 'a ring -> 'a ring
ring_RM_fupd :(('a -> 'a -> 'a) -> 'a -> 'a -> 'a) -> 'a ring -> 'a ring
semi_ring_of :'a ring -> 'a semi_ring
ring_R0_fupd :('a -> 'a) -> 'a ring -> 'a ring
ring_case :('a -> 'a -> ('a -> 'a -> 'a) -> ('a -> 'a -> 'a) -> ('a -> 'a) -> 'b) -> 'a ring -> 'b
ring_R0 :'a ring -> 'a
ring_R1 :'a ring -> 'a
ring_RM :'a ring -> 'a -> 'a -> 'a
ring_RN :'a ring -> 'a -> 'a
ring_RP :'a ring -> 'a -> 'a -> 'a
ring_RM_update :('a -> 'a -> 'a) -> 'a ring -> 'a ring
ring :'a -> 'a -> ('a -> 'a -> 'a) -> ('a -> 'a -> 'a) -> ('a -> 'a) -> 'a ring
ring_RN_fupd :(('a -> 'a) -> 'a -> 'a) -> 'a ring -> 'a ring
ring_RP_fupd :(('a -> 'a -> 'a) -> 'a -> 'a -> 'a) -> 'a ring -> 'a ring
ring_RN_update :('a -> 'a) -> 'a ring -> 'a ring
is_ring :'a ring -> bool

Definitions

ring_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\a0'.
          !'ring'.
            (!a0'.
               (?a0 a1 a2 a3 a4.
                  a0' =
                  (\a0 a1 a2 a3 a4. CONSTR 0 (a0,a1,a2,a3,a4) (\n. BOTTOM)) a0
                    a1 a2 a3 a4) ==>
               'ring' a0') ==>
            'ring' a0') rep
ring_repfns
|- (!a. mk_ring (dest_ring a) = a) /\
   !r.
     (\a0'.
        !'ring'.
          (!a0'.
             (?a0 a1 a2 a3 a4.
                a0' =
                (\a0 a1 a2 a3 a4. CONSTR 0 (a0,a1,a2,a3,a4) (\n. BOTTOM)) a0
                  a1 a2 a3 a4) ==>
             'ring' a0') ==>
          'ring' a0') r =
     (dest_ring (mk_ring r) = r)
ring0_def
|- ring0 =
   (\a0 a1 a2 a3 a4.
      mk_ring
        ((\a0 a1 a2 a3 a4. CONSTR 0 (a0,a1,a2,a3,a4) (\n. BOTTOM)) a0 a1 a2 a3
           a4))
ring
|- ring = ring0
ring_case_def
|- !f a0 a1 a2 a3 a4. case f (ring a0 a1 a2 a3 a4) = f a0 a1 a2 a3 a4
ring_size_def
|- !f a0 a1 a2 a3 a4. ring_size f (ring a0 a1 a2 a3 a4) = 1 + (f a0 + f a1)
ring_R0
|- !a a0 f f0 f1. R0 (ring a a0 f f0 f1) = a
ring_R1
|- !a a0 f f0 f1. R1 (ring a a0 f f0 f1) = a0
ring_RP
|- !a a0 f f0 f1. RP (ring a a0 f f0 f1) = f
ring_RM
|- !a a0 f f0 f1. RM (ring a a0 f f0 f1) = f0
ring_RN
|- !a a0 f f0 f1. RN (ring a a0 f f0 f1) = f1
ring_R0_update
|- !a1 a a0 f f0 f1. ring a a0 f f0 f1 with R0 := a1 = ring a1 a0 f f0 f1
ring_R1_update
|- !a1 a a0 f f0 f1. ring a a0 f f0 f1 with R1 := a1 = ring a a1 f f0 f1
ring_RP_update
|- !f2 a a0 f f0 f1. ring a a0 f f0 f1 with RP := f2 = ring a a0 f2 f0 f1
ring_RM_update
|- !f2 a a0 f f0 f1. ring a a0 f f0 f1 with RM := f2 = ring a a0 f f2 f1
ring_RN_update
|- !f2 a a0 f f0 f1. ring a a0 f f0 f1 with RN := f2 = ring a a0 f f0 f2
ring_R0_fupd
|- !f x. x with R0 updated_by f = x with R0 := f (R0 x)
ring_R1_fupd
|- !f x. x with R1 updated_by f = x with R1 := f (R1 x)
ring_RP_fupd
|- !f x. x with RP updated_by f = x with RP := f (RP x)
ring_RM_fupd
|- !f x. x with RM updated_by f = x with RM := f (RM x)
ring_RN_fupd
|- !f x. x with RN updated_by f = x with RN := f (RN x)
is_ring_def
|- !r.
     is_ring r =
     (!n m. RP r n m = RP r m n) /\
     (!n m p. RP r n (RP r m p) = RP r (RP r n m) p) /\
     (!n m. RM r n m = RM r m n) /\
     (!n m p. RM r n (RM r m p) = RM r (RM r n m) p) /\
     (!n. RP r (R0 r) n = n) /\ (!n. RM r (R1 r) n = n) /\
     (!n. RP r n (RN r n) = R0 r) /\
     !n m p. RM r (RP r n m) p = RP r (RM r n p) (RM r m p)
semi_ring_of_def
|- !r. semi_ring_of r = semi_ring (R0 r) (R1 r) (RP r) (RM r)


Theorems

ring_accessors
|- (!a a0 f f0 f1. R0 (ring a a0 f f0 f1) = a) /\
   (!a a0 f f0 f1. R1 (ring a a0 f f0 f1) = a0) /\
   (!a a0 f f0 f1. RP (ring a a0 f f0 f1) = f) /\
   (!a a0 f f0 f1. RM (ring a a0 f f0 f1) = f0) /\
   !a a0 f f0 f1. RN (ring a a0 f f0 f1) = f1
ring_updates
|- (!a1 a a0 f f0 f1. ring a a0 f f0 f1 with R0 := a1 = ring a1 a0 f f0 f1) /\
   (!a1 a a0 f f0 f1. ring a a0 f f0 f1 with R1 := a1 = ring a a1 f f0 f1) /\
   (!f2 a a0 f f0 f1. ring a a0 f f0 f1 with RP := f2 = ring a a0 f2 f0 f1) /\
   (!f2 a a0 f f0 f1. ring a a0 f f0 f1 with RM := f2 = ring a a0 f f2 f1) /\
   !f2 a a0 f f0 f1. ring a a0 f f0 f1 with RN := f2 = ring a a0 f f0 f2
ring_fn_updates
|- (!f x. x with R0 updated_by f = x with R0 := f (R0 x)) /\
   (!f x. x with R1 updated_by f = x with R1 := f (R1 x)) /\
   (!f x. x with RP updated_by f = x with RP := f (RP x)) /\
   (!f x. x with RM updated_by f = x with RM := f (RM x)) /\
   !f x. x with RN updated_by f = x with RN := f (RN x)
ring_accupds
|- (!x r. R0 (r with R1 := x) = R0 r) /\ (!x r. R0 (r with RP := x) = R0 r) /\
   (!x r. R0 (r with RM := x) = R0 r) /\ (!x r. R0 (r with RN := x) = R0 r) /\
   (!x r. R1 (r with R0 := x) = R1 r) /\ (!x r. R1 (r with RP := x) = R1 r) /\
   (!x r. R1 (r with RM := x) = R1 r) /\ (!x r. R1 (r with RN := x) = R1 r) /\
   (!x r. RP (r with R0 := x) = RP r) /\ (!x r. RP (r with R1 := x) = RP r) /\
   (!x r. RP (r with RM := x) = RP r) /\ (!x r. RP (r with RN := x) = RP r) /\
   (!x r. RM (r with R0 := x) = RM r) /\ (!x r. RM (r with R1 := x) = RM r) /\
   (!x r. RM (r with RP := x) = RM r) /\ (!x r. RM (r with RN := x) = RM r) /\
   (!x r. RN (r with R0 := x) = RN r) /\ (!x r. RN (r with R1 := x) = RN r) /\
   (!x r. RN (r with RP := x) = RN r) /\ (!x r. RN (r with RM := x) = RN r) /\
   (!x r. R0 (r with R0 := x) = x) /\ (!x r. R1 (r with R1 := x) = x) /\
   (!x r. RP (r with RP := x) = x) /\ (!x r. RM (r with RM := x) = x) /\
   !x r. RN (r with RN := x) = x
ring_accfupds
|- (!r f. R0 (r with R1 updated_by f) = R0 r) /\
   (!r f. R0 (r with RP updated_by f) = R0 r) /\
   (!r f. R0 (r with RM updated_by f) = R0 r) /\
   (!r f. R0 (r with RN updated_by f) = R0 r) /\
   (!r f. R1 (r with R0 updated_by f) = R1 r) /\
   (!r f. R1 (r with RP updated_by f) = R1 r) /\
   (!r f. R1 (r with RM updated_by f) = R1 r) /\
   (!r f. R1 (r with RN updated_by f) = R1 r) /\
   (!r f. RP (r with R0 updated_by f) = RP r) /\
   (!r f. RP (r with R1 updated_by f) = RP r) /\
   (!r f. RP (r with RM updated_by f) = RP r) /\
   (!r f. RP (r with RN updated_by f) = RP r) /\
   (!r f. RM (r with R0 updated_by f) = RM r) /\
   (!r f. RM (r with R1 updated_by f) = RM r) /\
   (!r f. RM (r with RP updated_by f) = RM r) /\
   (!r f. RM (r with RN updated_by f) = RM r) /\
   (!r f. RN (r with R0 updated_by f) = RN r) /\
   (!r f. RN (r with R1 updated_by f) = RN r) /\
   (!r f. RN (r with RP updated_by f) = RN r) /\
   (!r f. RN (r with RM updated_by f) = RN r) /\
   (!r f. R0 (r with R0 updated_by f) = f (R0 r)) /\
   (!r f. R1 (r with R1 updated_by f) = f (R1 r)) /\
   (!r f. RP (r with RP updated_by f) = f (RP r)) /\
   (!r f. RM (r with RM updated_by f) = f (RM r)) /\
   !r f. RN (r with RN updated_by f) = f (RN r)
ring_updaccs
|- (!r. r with R0 := R0 r = r) /\ (!r. r with R1 := R1 r = r) /\
   (!r. r with RP := RP r = r) /\ (!r. r with RM := RM r = r) /\
   !r. r with RN := RN r = r
ring_cupdaccs
|- (!val r. (val = R0 r) ==> (r with R0 := val = r)) /\
   (!val r. (val = R1 r) ==> (r with R1 := val = r)) /\
   (!val r. (val = RP r) ==> (r with RP := val = r)) /\
   (!val r. (val = RM r) ==> (r with RM := val = r)) /\
   !val r. (val = RN r) ==> (r with RN := val = r)
ring_updupds
|- (!x2 x1 r. r with <|R0 := x1; R0 := x2|> = r with R0 := x1) /\
   (!x2 x1 r. r with <|R1 := x1; R1 := x2|> = r with R1 := x1) /\
   (!x2 x1 r. r with <|RP := x1; RP := x2|> = r with RP := x1) /\
   (!x2 x1 r. r with <|RM := x1; RM := x2|> = r with RM := x1) /\
   !x2 x1 r. r with <|RN := x1; RN := x2|> = r with RN := x1
ring_updcanon
|- (!z x r. r with <|R1 := x; R0 := z|> = r with <|R0 := z; R1 := x|>) /\
   (!z x r. r with <|RP := x; R0 := z|> = r with <|R0 := z; RP := x|>) /\
   (!z x r. r with <|RP := x; R1 := z|> = r with <|R1 := z; RP := x|>) /\
   (!z x r. r with <|RM := x; R0 := z|> = r with <|R0 := z; RM := x|>) /\
   (!z x r. r with <|RM := x; R1 := z|> = r with <|R1 := z; RM := x|>) /\
   (!z x r. r with <|RM := x; RP := z|> = r with <|RP := z; RM := x|>) /\
   (!z x r. r with <|RN := x; R0 := z|> = r with <|R0 := z; RN := x|>) /\
   (!z x r. r with <|RN := x; R1 := z|> = r with <|R1 := z; RN := x|>) /\
   (!z x r. r with <|RN := x; RP := z|> = r with <|RP := z; RN := x|>) /\
   !z x r. r with <|RN := x; RM := z|> = r with <|RM := z; RN := x|>
ring_R0_update_semi11
|- !x y r1 r2. (r1 with R0 := x = r2 with R0 := y) ==> (x = y)
ring_R1_update_semi11
|- !x y r1 r2. (r1 with R1 := x = r2 with R1 := y) ==> (x = y)
ring_RP_update_semi11
|- !x y r1 r2. (r1 with RP := x = r2 with RP := y) ==> (x = y)
ring_RM_update_semi11
|- !x y r1 r2. (r1 with RM := x = r2 with RM := y) ==> (x = y)
ring_RN_update_semi11
|- !x y r1 r2. (r1 with RN := x = r2 with RN := y) ==> (x = y)
ring_component_equality
|- !r1 r2.
     (r1 = r2) =
     (R0 r1 = R0 r2) /\ (R1 r1 = R1 r2) /\ (RP r1 = RP r2) /\
     (RM r1 = RM r2) /\ (RN r1 = RN r2)
ring_updates_eq_literal
|- !r f1 f0 f a0 a.
     r with <|R0 := a0; R1 := a; RP := f1; RM := f0; RN := f|> =
     <|R0 := a0; R1 := a; RP := f1; RM := f0; RN := f|>
ring_11
|- !a0 a1 a2 a3 a4 a0' a1' a2' a3' a4'.
     (ring a0 a1 a2 a3 a4 = ring a0' a1' a2' a3' a4') =
     (a0 = a0') /\ (a1 = a1') /\ (a2 = a2') /\ (a3 = a3') /\ (a4 = a4')
ring_case_cong
|- !M M' f.
     (M = M') /\
     (!a0 a1 a2 a3 a4.
        (M' = ring a0 a1 a2 a3 a4) ==>
        (f a0 a1 a2 a3 a4 = f' a0 a1 a2 a3 a4)) ==>
     (case f M = case f' M')
ring_nchotomy
|- !r. ?a a0 f f0 f1. r = ring a a0 f f0 f1
ring_Axiom
|- !f. ?fn. !a0 a1 a2 a3 a4. fn (ring a0 a1 a2 a3 a4) = f a0 a1 a2 a3 a4
ring_induction
|- !P. (!a a0 f f0 f1. P (ring a a0 f f0 f1)) ==> !r. P r
plus_sym
|- !r. is_ring r ==> !n m. RP r n m = RP r m n
plus_assoc
|- !r. is_ring r ==> !n m p. RP r n (RP r m p) = RP r (RP r n m) p
mult_sym
|- !r. is_ring r ==> !n m. RM r n m = RM r m n
mult_assoc
|- !r. is_ring r ==> !n m p. RM r n (RM r m p) = RM r (RM r n m) p
plus_zero_left
|- !r. is_ring r ==> !n. RP r (R0 r) n = n
mult_one_left
|- !r. is_ring r ==> !n. RM r (R1 r) n = n
opp_def
|- !r. is_ring r ==> !n. RP r n (RN r n) = R0 r
distr_left
|- !r. is_ring r ==> !n m p. RM r (RP r n m) p = RP r (RM r n p) (RM r m p)
plus_zero_right
|- !r. is_ring r ==> !n. RP r n (R0 r) = n
mult_zero_left
|- !r. is_ring r ==> !n. RM r (R0 r) n = R0 r
mult_zero_right
|- !r. is_ring r ==> !n. RM r n (R0 r) = R0 r
ring_is_semi_ring
|- !r. is_ring r ==> is_semi_ring (semi_ring_of r)
mult_one_right
|- !r. is_ring r ==> !n. RM r n (R1 r) = n
neg_mult
|- !r. is_ring r ==> !a b. RM r (RN r a) b = RN r (RM r a b)