Article ALGSTR_3, MML version 4.99.1005

:: ALGSTR_3:structnot 1 => ALGSTR_3:struct 1
definition
  struct(ZeroOneStr) TernaryFieldStr(#
    carrier -> set,
    ZeroF -> Element of the carrier of it,
    OneF -> Element of the carrier of it,
    TernOp -> Function-like quasi_total Relation of [:the carrier of it,the carrier of it,the carrier of it:],the carrier of it
  #);
end;

:: ALGSTR_3:attrnot 1 => ALGSTR_3:attr 1
definition
  let a1 be TernaryFieldStr;
  attr a1 is strict;
end;

:: ALGSTR_3:exreg 1
registration
  cluster strict TernaryFieldStr;
end;

:: ALGSTR_3:aggrnot 1 => ALGSTR_3:aggr 1
definition
  let a1 be set;
  let a2, a3 be Element of a1;
  let a4 be Function-like quasi_total Relation of [:a1,a1,a1:],a1;
  aggr TernaryFieldStr(#a1,a2,a3,a4#) -> strict TernaryFieldStr;
end;

:: ALGSTR_3:selnot 1 => ALGSTR_3:sel 1
definition
  let a1 be TernaryFieldStr;
  sel the TernOp of a1 -> Function-like quasi_total Relation of [:the carrier of a1,the carrier of a1,the carrier of a1:],the carrier of a1;
end;

:: ALGSTR_3:exreg 2
registration
  cluster non empty TernaryFieldStr;
end;

:: ALGSTR_3:modenot 1
definition
  let a1 be non empty TernaryFieldStr;
  mode Scalar of a1 is Element of the carrier of a1;
end;

:: ALGSTR_3:funcnot 1 => ALGSTR_3:func 1
definition
  let a1 be non empty TernaryFieldStr;
  let a2, a3, a4 be Element of the carrier of a1;
  func Tern(A2,A3,A4) -> Element of the carrier of a1 equals
    (the TernOp of a1) .(a2,a3,a4);
end;

:: ALGSTR_3:def 1
theorem
for b1 being non empty TernaryFieldStr
for b2, b3, b4 being Element of the carrier of b1 holds
Tern(b2,b3,b4) = (the TernOp of b1) .(b2,b3,b4);

:: ALGSTR_3:funcnot 2 => ALGSTR_3:func 2
definition
  func ternaryreal -> Function-like quasi_total Relation of [:REAL,REAL,REAL:],REAL means
    for b1, b2, b3 being Element of REAL holds
    it .(b1,b2,b3) = (b1 * b2) + b3;
end;

:: ALGSTR_3:def 4
theorem
for b1 being Function-like quasi_total Relation of [:REAL,REAL,REAL:],REAL holds
      b1 = ternaryreal
   iff
      for b2, b3, b4 being Element of REAL holds
      b1 .(b2,b3,b4) = (b2 * b3) + b4;

:: ALGSTR_3:funcnot 3 => ALGSTR_3:func 3
definition
  func TernaryFieldEx -> strict TernaryFieldStr equals
    TernaryFieldStr(#REAL,0,1,ternaryreal#);
end;

:: ALGSTR_3:def 5
theorem
TernaryFieldEx = TernaryFieldStr(#REAL,0,1,ternaryreal#);

:: ALGSTR_3:funcreg 1
registration
  cluster TernaryFieldEx -> non empty strict;
end;

:: ALGSTR_3:funcnot 4 => ALGSTR_3:func 4
definition
  let a1, a2, a3 be Element of the carrier of TernaryFieldEx;
  func tern(A1,A2,A3) -> Element of the carrier of TernaryFieldEx equals
    (the TernOp of TernaryFieldEx) .(a1,a2,a3);
end;

:: ALGSTR_3:def 6
theorem
for b1, b2, b3 being Element of the carrier of TernaryFieldEx holds
tern(b1,b2,b3) = (the TernOp of TernaryFieldEx) .(b1,b2,b3);

:: ALGSTR_3:th 3
theorem
for b1, b2, b3, b4 being Element of REAL
      st b1 <> b2
   holds ex b5 being Element of REAL st
      (b1 * b5) + b3 = (b2 * b5) + b4;

:: ALGSTR_3:th 5
theorem
for b1, b2, b3 being Element of the carrier of TernaryFieldEx
for b4, b5, b6 being Element of REAL
      st b1 = b4 & b2 = b5 & b3 = b6
   holds Tern(b1,b2,b3) = (b4 * b5) + b6;

:: ALGSTR_3:th 7
theorem
1 = 1. TernaryFieldEx;

:: ALGSTR_3:attrnot 2 => ALGSTR_3:attr 2
definition
  let a1 be non empty TernaryFieldStr;
  attr a1 is Ternary-Field-like means
    0. a1 <> 1. a1 &
     (for b1 being Element of the carrier of a1 holds
        Tern(b1,1. a1,0. a1) = b1) &
     (for b1 being Element of the carrier of a1 holds
        Tern(1. a1,b1,0. a1) = b1) &
     (for b1, b2 being Element of the carrier of a1 holds
     Tern(b1,0. a1,b2) = b2) &
     (for b1, b2 being Element of the carrier of a1 holds
     Tern(0. a1,b1,b2) = b2) &
     (for b1, b2, b3 being Element of the carrier of a1 holds
     ex b4 being Element of the carrier of a1 st
        Tern(b1,b2,b4) = b3) &
     (for b1, b2, b3, b4 being Element of the carrier of a1
           st Tern(b1,b2,b3) = Tern(b1,b2,b4)
        holds b3 = b4) &
     (for b1, b2 being Element of the carrier of a1
        st b1 <> b2
     for b3, b4 being Element of the carrier of a1 holds
     ex b5, b6 being Element of the carrier of a1 st
        Tern(b5,b1,b6) = b3 & Tern(b5,b2,b6) = b4) &
     (for b1, b2 being Element of the carrier of a1
        st b1 <> b2
     for b3, b4 being Element of the carrier of a1 holds
     ex b5 being Element of the carrier of a1 st
        Tern(b1,b5,b3) = Tern(b2,b5,b4)) &
     (for b1, b2, b3, b4, b5, b6 being Element of the carrier of a1
           st Tern(b3,b1,b5) = Tern(b4,b1,b6) & Tern(b3,b2,b5) = Tern(b4,b2,b6) & b1 <> b2
        holds b3 = b4);
end;

:: ALGSTR_3:dfs 5
definiens
  let a1 be non empty TernaryFieldStr;
To prove
     a1 is Ternary-Field-like
it is sufficient to prove
  thus 0. a1 <> 1. a1 &
     (for b1 being Element of the carrier of a1 holds
        Tern(b1,1. a1,0. a1) = b1) &
     (for b1 being Element of the carrier of a1 holds
        Tern(1. a1,b1,0. a1) = b1) &
     (for b1, b2 being Element of the carrier of a1 holds
     Tern(b1,0. a1,b2) = b2) &
     (for b1, b2 being Element of the carrier of a1 holds
     Tern(0. a1,b1,b2) = b2) &
     (for b1, b2, b3 being Element of the carrier of a1 holds
     ex b4 being Element of the carrier of a1 st
        Tern(b1,b2,b4) = b3) &
     (for b1, b2, b3, b4 being Element of the carrier of a1
           st Tern(b1,b2,b3) = Tern(b1,b2,b4)
        holds b3 = b4) &
     (for b1, b2 being Element of the carrier of a1
        st b1 <> b2
     for b3, b4 being Element of the carrier of a1 holds
     ex b5, b6 being Element of the carrier of a1 st
        Tern(b5,b1,b6) = b3 & Tern(b5,b2,b6) = b4) &
     (for b1, b2 being Element of the carrier of a1
        st b1 <> b2
     for b3, b4 being Element of the carrier of a1 holds
     ex b5 being Element of the carrier of a1 st
        Tern(b1,b5,b3) = Tern(b2,b5,b4)) &
     (for b1, b2, b3, b4, b5, b6 being Element of the carrier of a1
           st Tern(b3,b1,b5) = Tern(b4,b1,b6) & Tern(b3,b2,b5) = Tern(b4,b2,b6) & b1 <> b2
        holds b3 = b4);

:: ALGSTR_3:def 7
theorem
for b1 being non empty TernaryFieldStr holds
      b1 is Ternary-Field-like
   iff
      0. b1 <> 1. b1 &
       (for b2 being Element of the carrier of b1 holds
          Tern(b2,1. b1,0. b1) = b2) &
       (for b2 being Element of the carrier of b1 holds
          Tern(1. b1,b2,0. b1) = b2) &
       (for b2, b3 being Element of the carrier of b1 holds
       Tern(b2,0. b1,b3) = b3) &
       (for b2, b3 being Element of the carrier of b1 holds
       Tern(0. b1,b2,b3) = b3) &
       (for b2, b3, b4 being Element of the carrier of b1 holds
       ex b5 being Element of the carrier of b1 st
          Tern(b2,b3,b5) = b4) &
       (for b2, b3, b4, b5 being Element of the carrier of b1
             st Tern(b2,b3,b4) = Tern(b2,b3,b5)
          holds b4 = b5) &
       (for b2, b3 being Element of the carrier of b1
          st b2 <> b3
       for b4, b5 being Element of the carrier of b1 holds
       ex b6, b7 being Element of the carrier of b1 st
          Tern(b6,b2,b7) = b4 & Tern(b6,b3,b7) = b5) &
       (for b2, b3 being Element of the carrier of b1
          st b2 <> b3
       for b4, b5 being Element of the carrier of b1 holds
       ex b6 being Element of the carrier of b1 st
          Tern(b2,b6,b4) = Tern(b3,b6,b5)) &
       (for b2, b3, b4, b5, b6, b7 being Element of the carrier of b1
             st Tern(b4,b2,b6) = Tern(b5,b2,b7) & Tern(b4,b3,b6) = Tern(b5,b3,b7) & b2 <> b3
          holds b4 = b5);

:: ALGSTR_3:exreg 3
registration
  cluster non empty strict Ternary-Field-like TernaryFieldStr;
end;

:: ALGSTR_3:modenot 2
definition
  mode Ternary-Field is non empty Ternary-Field-like TernaryFieldStr;
end;

:: ALGSTR_3:th 8
theorem
for b1 being non empty Ternary-Field-like TernaryFieldStr
for b2, b3, b4, b5, b6, b7 being Element of the carrier of b1
      st b2 <> b3 & Tern(b4,b2,b5) = Tern(b6,b2,b7) & Tern(b4,b3,b5) = Tern(b6,b3,b7)
   holds b4 = b6 & b5 = b7;

:: ALGSTR_3:th 11
theorem
for b1 being non empty Ternary-Field-like TernaryFieldStr
for b2 being Element of the carrier of b1
   st b2 <> 0. b1
for b3, b4 being Element of the carrier of b1 holds
ex b5 being Element of the carrier of b1 st
   Tern(b2,b5,b3) = b4;

:: ALGSTR_3:th 12
theorem
for b1 being non empty Ternary-Field-like TernaryFieldStr
for b2, b3, b4, b5 being Element of the carrier of b1
      st b2 <> 0. b1 & Tern(b2,b3,b4) = Tern(b2,b5,b4)
   holds b3 = b5;

:: ALGSTR_3:th 13
theorem
for b1 being non empty Ternary-Field-like TernaryFieldStr
for b2 being Element of the carrier of b1
   st b2 <> 0. b1
for b3, b4 being Element of the carrier of b1 holds
ex b5 being Element of the carrier of b1 st
   Tern(b5,b2,b3) = b4;

:: ALGSTR_3:th 14
theorem
for b1 being non empty Ternary-Field-like TernaryFieldStr
for b2, b3, b4, b5 being Element of the carrier of b1
      st b2 <> 0. b1 & Tern(b3,b2,b4) = Tern(b5,b2,b4)
   holds b3 = b5;