Theory "semi_ring"

Parents     option ind_type pair

Signature

Type Arity
semi_ring 1
Constant Type
semi_ring_SRM_fupd :(('a -> 'a -> 'a) -> 'a -> 'a -> 'a) -> 'a semi_ring -> 'a semi_ring
semi_ring :'a -> 'a -> ('a -> 'a -> 'a) -> ('a -> 'a -> 'a) -> 'a semi_ring
dest_semi_ring :'a semi_ring -> ('a # 'a # ('a -> 'a -> 'a) # ('a -> 'a -> 'a)) recspace
semi_ring_SR0_fupd :('a -> 'a) -> 'a semi_ring -> 'a semi_ring
semi_ring_size :('a -> num) -> 'a semi_ring -> num
semi_ring_SRM_update :('a -> 'a -> 'a) -> 'a semi_ring -> 'a semi_ring
semi_ring0 :'a -> 'a -> ('a -> 'a -> 'a) -> ('a -> 'a -> 'a) -> 'a semi_ring
is_semi_ring :'a semi_ring -> bool
semi_ring_SRP_fupd :(('a -> 'a -> 'a) -> 'a -> 'a -> 'a) -> 'a semi_ring -> 'a semi_ring
semi_ring_SR0_update :'a -> 'a semi_ring -> 'a semi_ring
semi_ring_case :('a -> 'a -> ('a -> 'a -> 'a) -> ('a -> 'a -> 'a) -> 'b) -> 'a semi_ring -> 'b
semi_ring_SR1_fupd :('a -> 'a) -> 'a semi_ring -> 'a semi_ring
semi_ring_SR0 :'a semi_ring -> 'a
semi_ring_SR1 :'a semi_ring -> 'a
semi_ring_SRM :'a semi_ring -> 'a -> 'a -> 'a
semi_ring_SRP :'a semi_ring -> 'a -> 'a -> 'a
semi_ring_SR1_update :'a -> 'a semi_ring -> 'a semi_ring
semi_ring_SRP_update :('a -> 'a -> 'a) -> 'a semi_ring -> 'a semi_ring
mk_semi_ring :('a # 'a # ('a -> 'a -> 'a) # ('a -> 'a -> 'a)) recspace -> 'a semi_ring

Definitions

semi_ring_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\a0'.
          !'semi_ring'.
            (!a0'.
               (?a0 a1 a2 a3.
                  a0' =
                  (\a0 a1 a2 a3. CONSTR 0 (a0,a1,a2,a3) (\n. BOTTOM)) a0 a1 a2
                    a3) ==>
               'semi_ring' a0') ==>
            'semi_ring' a0') rep
semi_ring_repfns
|- (!a. mk_semi_ring (dest_semi_ring a) = a) /\
   !r.
     (\a0'.
        !'semi_ring'.
          (!a0'.
             (?a0 a1 a2 a3.
                a0' =
                (\a0 a1 a2 a3. CONSTR 0 (a0,a1,a2,a3) (\n. BOTTOM)) a0 a1 a2
                  a3) ==>
             'semi_ring' a0') ==>
          'semi_ring' a0') r =
     (dest_semi_ring (mk_semi_ring r) = r)
semi_ring0_def
|- semi_ring0 =
   (\a0 a1 a2 a3.
      mk_semi_ring
        ((\a0 a1 a2 a3. CONSTR 0 (a0,a1,a2,a3) (\n. BOTTOM)) a0 a1 a2 a3))
semi_ring
|- semi_ring = semi_ring0
semi_ring_case_def
|- !f a0 a1 a2 a3. case f (semi_ring a0 a1 a2 a3) = f a0 a1 a2 a3
semi_ring_size_def
|- !f a0 a1 a2 a3.
     semi_ring_size f (semi_ring a0 a1 a2 a3) = 1 + (f a0 + f a1)
semi_ring_SR0
|- !a a0 f f0. SR0 (semi_ring a a0 f f0) = a
semi_ring_SR1
|- !a a0 f f0. SR1 (semi_ring a a0 f f0) = a0
semi_ring_SRP
|- !a a0 f f0. SRP (semi_ring a a0 f f0) = f
semi_ring_SRM
|- !a a0 f f0. SRM (semi_ring a a0 f f0) = f0
semi_ring_SR0_update
|- !a1 a a0 f f0. semi_ring a a0 f f0 with SR0 := a1 = semi_ring a1 a0 f f0
semi_ring_SR1_update
|- !a1 a a0 f f0. semi_ring a a0 f f0 with SR1 := a1 = semi_ring a a1 f f0
semi_ring_SRP_update
|- !f1 a a0 f f0. semi_ring a a0 f f0 with SRP := f1 = semi_ring a a0 f1 f0
semi_ring_SRM_update
|- !f1 a a0 f f0. semi_ring a a0 f f0 with SRM := f1 = semi_ring a a0 f f1
semi_ring_SR0_fupd
|- !f x. x with SR0 updated_by f = x with SR0 := f (SR0 x)
semi_ring_SR1_fupd
|- !f x. x with SR1 updated_by f = x with SR1 := f (SR1 x)
semi_ring_SRP_fupd
|- !f x. x with SRP updated_by f = x with SRP := f (SRP x)
semi_ring_SRM_fupd
|- !f x. x with SRM updated_by f = x with SRM := f (SRM x)
is_semi_ring_def
|- !r.
     is_semi_ring r =
     (!n m. SRP r n m = SRP r m n) /\
     (!n m p. SRP r n (SRP r m p) = SRP r (SRP r n m) p) /\
     (!n m. SRM r n m = SRM r m n) /\
     (!n m p. SRM r n (SRM r m p) = SRM r (SRM r n m) p) /\
     (!n. SRP r (SR0 r) n = n) /\ (!n. SRM r (SR1 r) n = n) /\
     (!n. SRM r (SR0 r) n = SR0 r) /\
     !n m p. SRM r (SRP r n m) p = SRP r (SRM r n p) (SRM r m p)


Theorems

semi_ring_accessors
|- (!a a0 f f0. SR0 (semi_ring a a0 f f0) = a) /\
   (!a a0 f f0. SR1 (semi_ring a a0 f f0) = a0) /\
   (!a a0 f f0. SRP (semi_ring a a0 f f0) = f) /\
   !a a0 f f0. SRM (semi_ring a a0 f f0) = f0
semi_ring_updates
|- (!a1 a a0 f f0.
      semi_ring a a0 f f0 with SR0 := a1 = semi_ring a1 a0 f f0) /\
   (!a1 a a0 f f0.
      semi_ring a a0 f f0 with SR1 := a1 = semi_ring a a1 f f0) /\
   (!f1 a a0 f f0.
      semi_ring a a0 f f0 with SRP := f1 = semi_ring a a0 f1 f0) /\
   !f1 a a0 f f0. semi_ring a a0 f f0 with SRM := f1 = semi_ring a a0 f f1
semi_ring_fn_updates
|- (!f x. x with SR0 updated_by f = x with SR0 := f (SR0 x)) /\
   (!f x. x with SR1 updated_by f = x with SR1 := f (SR1 x)) /\
   (!f x. x with SRP updated_by f = x with SRP := f (SRP x)) /\
   !f x. x with SRM updated_by f = x with SRM := f (SRM x)
semi_ring_accupds
|- (!x s. SR0 (s with SR1 := x) = SR0 s) /\
   (!x s. SR0 (s with SRP := x) = SR0 s) /\
   (!x s. SR0 (s with SRM := x) = SR0 s) /\
   (!x s. SR1 (s with SR0 := x) = SR1 s) /\
   (!x s. SR1 (s with SRP := x) = SR1 s) /\
   (!x s. SR1 (s with SRM := x) = SR1 s) /\
   (!x s. SRP (s with SR0 := x) = SRP s) /\
   (!x s. SRP (s with SR1 := x) = SRP s) /\
   (!x s. SRP (s with SRM := x) = SRP s) /\
   (!x s. SRM (s with SR0 := x) = SRM s) /\
   (!x s. SRM (s with SR1 := x) = SRM s) /\
   (!x s. SRM (s with SRP := x) = SRM s) /\
   (!x s. SR0 (s with SR0 := x) = x) /\ (!x s. SR1 (s with SR1 := x) = x) /\
   (!x s. SRP (s with SRP := x) = x) /\ !x s. SRM (s with SRM := x) = x
semi_ring_accfupds
|- (!s f. SR0 (s with SR1 updated_by f) = SR0 s) /\
   (!s f. SR0 (s with SRP updated_by f) = SR0 s) /\
   (!s f. SR0 (s with SRM updated_by f) = SR0 s) /\
   (!s f. SR1 (s with SR0 updated_by f) = SR1 s) /\
   (!s f. SR1 (s with SRP updated_by f) = SR1 s) /\
   (!s f. SR1 (s with SRM updated_by f) = SR1 s) /\
   (!s f. SRP (s with SR0 updated_by f) = SRP s) /\
   (!s f. SRP (s with SR1 updated_by f) = SRP s) /\
   (!s f. SRP (s with SRM updated_by f) = SRP s) /\
   (!s f. SRM (s with SR0 updated_by f) = SRM s) /\
   (!s f. SRM (s with SR1 updated_by f) = SRM s) /\
   (!s f. SRM (s with SRP updated_by f) = SRM s) /\
   (!s f. SR0 (s with SR0 updated_by f) = f (SR0 s)) /\
   (!s f. SR1 (s with SR1 updated_by f) = f (SR1 s)) /\
   (!s f. SRP (s with SRP updated_by f) = f (SRP s)) /\
   !s f. SRM (s with SRM updated_by f) = f (SRM s)
semi_ring_updaccs
|- (!s. s with SR0 := SR0 s = s) /\ (!s. s with SR1 := SR1 s = s) /\
   (!s. s with SRP := SRP s = s) /\ !s. s with SRM := SRM s = s
semi_ring_cupdaccs
|- (!val s. (val = SR0 s) ==> (s with SR0 := val = s)) /\
   (!val s. (val = SR1 s) ==> (s with SR1 := val = s)) /\
   (!val s. (val = SRP s) ==> (s with SRP := val = s)) /\
   !val s. (val = SRM s) ==> (s with SRM := val = s)
semi_ring_updupds
|- (!x2 x1 s. s with <|SR0 := x1; SR0 := x2|> = s with SR0 := x1) /\
   (!x2 x1 s. s with <|SR1 := x1; SR1 := x2|> = s with SR1 := x1) /\
   (!x2 x1 s. s with <|SRP := x1; SRP := x2|> = s with SRP := x1) /\
   !x2 x1 s. s with <|SRM := x1; SRM := x2|> = s with SRM := x1
semi_ring_updcanon
|- (!z x s. s with <|SR1 := x; SR0 := z|> = s with <|SR0 := z; SR1 := x|>) /\
   (!z x s. s with <|SRP := x; SR0 := z|> = s with <|SR0 := z; SRP := x|>) /\
   (!z x s. s with <|SRP := x; SR1 := z|> = s with <|SR1 := z; SRP := x|>) /\
   (!z x s. s with <|SRM := x; SR0 := z|> = s with <|SR0 := z; SRM := x|>) /\
   (!z x s. s with <|SRM := x; SR1 := z|> = s with <|SR1 := z; SRM := x|>) /\
   !z x s. s with <|SRM := x; SRP := z|> = s with <|SRP := z; SRM := x|>
semi_ring_SR0_update_semi11
|- !x y r1 r2. (r1 with SR0 := x = r2 with SR0 := y) ==> (x = y)
semi_ring_SR1_update_semi11
|- !x y r1 r2. (r1 with SR1 := x = r2 with SR1 := y) ==> (x = y)
semi_ring_SRP_update_semi11
|- !x y r1 r2. (r1 with SRP := x = r2 with SRP := y) ==> (x = y)
semi_ring_SRM_update_semi11
|- !x y r1 r2. (r1 with SRM := x = r2 with SRM := y) ==> (x = y)
semi_ring_component_equality
|- !s1 s2.
     (s1 = s2) =
     (SR0 s1 = SR0 s2) /\ (SR1 s1 = SR1 s2) /\ (SRP s1 = SRP s2) /\
     (SRM s1 = SRM s2)
semi_ring_updates_eq_literal
|- !s f0 f a0 a.
     s with <|SR0 := a0; SR1 := a; SRP := f0; SRM := f|> =
     <|SR0 := a0; SR1 := a; SRP := f0; SRM := f|>
semi_ring_11
|- !a0 a1 a2 a3 a0' a1' a2' a3'.
     (semi_ring a0 a1 a2 a3 = semi_ring a0' a1' a2' a3') =
     (a0 = a0') /\ (a1 = a1') /\ (a2 = a2') /\ (a3 = a3')
semi_ring_case_cong
|- !M M' f.
     (M = M') /\
     (!a0 a1 a2 a3.
        (M' = semi_ring a0 a1 a2 a3) ==> (f a0 a1 a2 a3 = f' a0 a1 a2 a3)) ==>
     (case f M = case f' M')
semi_ring_nchotomy
|- !s. ?a a0 f f0. s = semi_ring a a0 f f0
semi_ring_Axiom
|- !f. ?fn. !a0 a1 a2 a3. fn (semi_ring a0 a1 a2 a3) = f a0 a1 a2 a3
semi_ring_induction
|- !P. (!a a0 f f0. P (semi_ring a a0 f f0)) ==> !s. P s
plus_sym
|- !r. is_semi_ring r ==> !n m. SRP r n m = SRP r m n
plus_assoc
|- !r. is_semi_ring r ==> !n m p. SRP r n (SRP r m p) = SRP r (SRP r n m) p
mult_sym
|- !r. is_semi_ring r ==> !n m. SRM r n m = SRM r m n
mult_assoc
|- !r. is_semi_ring r ==> !n m p. SRM r n (SRM r m p) = SRM r (SRM r n m) p
plus_zero_left
|- !r. is_semi_ring r ==> !n. SRP r (SR0 r) n = n
mult_one_left
|- !r. is_semi_ring r ==> !n. SRM r (SR1 r) n = n
mult_zero_left
|- !r. is_semi_ring r ==> !n. SRM r (SR0 r) n = SR0 r
distr_left
|- !r.
     is_semi_ring r ==>
     !n m p. SRM r (SRP r n m) p = SRP r (SRM r n p) (SRM r m p)
plus_zero_right
|- !r. is_semi_ring r ==> !n. SRP r n (SR0 r) = n
mult_one_right
|- !r. is_semi_ring r ==> !n. SRM r n (SR1 r) = n
mult_zero_right
|- !r. is_semi_ring r ==> !n. SRM r n (SR0 r) = SR0 r
distr_right
|- !r.
     is_semi_ring r ==>
     !m n p. SRM r m (SRP r n p) = SRP r (SRM r m n) (SRM r m p)
plus_rotate
|- !r. is_semi_ring r ==> !m n p. SRP r (SRP r m n) p = SRP r (SRP r n p) m
plus_permute
|- !r. is_semi_ring r ==> !m n p. SRP r (SRP r m n) p = SRP r (SRP r m p) n
mult_rotate
|- !r. is_semi_ring r ==> !m n p. SRM r (SRM r m n) p = SRM r (SRM r n p) m
mult_permute
|- !r. is_semi_ring r ==> !m n p. SRM r (SRM r m n) p = SRM r (SRM r m p) n