Article SUB_METR, MML version 4.99.1005

:: SUB_METR:th 1
theorem
for b1, b2 being real set
      st 0 <= b1 & 0 <= b2
   holds max(b1,b2) <= b1 + b2;

:: SUB_METR:th 2
theorem
for b1 being Reflexive discerning symmetric triangle MetrStruct
for b2, b3 being Element of the carrier of b1
      st b2 <> b3
   holds 0 < dist(b2,b3);

:: SUB_METR:th 4
theorem
for b1 being Element of 1 holds
   Empty^2-to-zero .(b1,b1) = 0;

:: SUB_METR:th 5
theorem
for b1, b2 being Element of 1
      st b1 <> b2
   holds 0 < Empty^2-to-zero .(b1,b2);

:: SUB_METR:th 6
theorem
for b1, b2 being Element of 1 holds
Empty^2-to-zero .(b1,b2) = Empty^2-to-zero .(b2,b1);

:: SUB_METR:th 7
theorem
for b1, b2, b3 being Element of 1 holds
Empty^2-to-zero .(b1,b3) <= (Empty^2-to-zero .(b1,b2)) + (Empty^2-to-zero .(b2,b3));

:: SUB_METR:th 8
theorem
for b1, b2, b3 being Element of 1 holds
Empty^2-to-zero .(b1,b3) <= max(Empty^2-to-zero .(b1,b2),Empty^2-to-zero .(b2,b3));

:: SUB_METR:modenot 1
definition
  mode PseudoMetricSpace is non empty Reflexive symmetric triangle MetrStruct;
end;

:: SUB_METR:attrnot 1 => SUB_METR:attr 1
definition
  let a1 be non empty set;
  let a2 be Function-like quasi_total Relation of [:a1,a1:],REAL;
  attr a2 is Discerning means
    for b1, b2 being Element of a1
          st b1 <> b2
       holds 0 < a2 .(b1,b2);
end;

:: SUB_METR:dfs 1
definiens
  let a1 be non empty set;
  let a2 be Function-like quasi_total Relation of [:a1,a1:],REAL;
To prove
     a2 is Discerning
it is sufficient to prove
  thus for b1, b2 being Element of a1
          st b1 <> b2
       holds 0 < a2 .(b1,b2);

:: SUB_METR:def 1
theorem
for b1 being non empty set
for b2 being Function-like quasi_total Relation of [:b1,b1:],REAL holds
      b2 is Discerning(b1)
   iff
      for b3, b4 being Element of b1
            st b3 <> b4
         holds 0 < b2 .(b3,b4);

:: SUB_METR:attrnot 2 => SUB_METR:attr 2
definition
  let a1 be non empty MetrStruct;
  attr a1 is Discerning means
    the distance of a1 is Discerning(the carrier of a1);
end;

:: SUB_METR:dfs 2
definiens
  let a1 be non empty MetrStruct;
To prove
     a1 is Discerning
it is sufficient to prove
  thus the distance of a1 is Discerning(the carrier of a1);

:: SUB_METR:def 2
theorem
for b1 being non empty MetrStruct holds
      b1 is Discerning
   iff
      the distance of b1 is Discerning(the carrier of b1);

:: SUB_METR:th 14
theorem
for b1 being non empty MetrStruct holds
      for b2, b3 being Element of the carrier of b1
            st b2 <> b3
         holds 0 < dist(b2,b3)
   iff
      b1 is Discerning;

:: SUB_METR:funcreg 1
registration
  cluster MetrStruct(#1,Empty^2-to-zero#) -> strict Reflexive symmetric triangle Discerning;
end;

:: SUB_METR:exreg 1
registration
  cluster non empty Reflexive symmetric triangle Discerning MetrStruct;
end;

:: SUB_METR:modenot 2
definition
  mode SemiMetricSpace is non empty Reflexive symmetric Discerning MetrStruct;
end;

:: SUB_METR:th 18
theorem
for b1 being non empty Reflexive Discerning MetrStruct
for b2, b3 being Element of the carrier of b1 holds
0 <= dist(b2,b3);

:: SUB_METR:modenot 3
definition
  mode NonSymmetricMetricSpace is non empty Reflexive triangle Discerning MetrStruct;
end;

:: SUB_METR:attrnot 3 => SUB_METR:attr 3
definition
  let a1 be non empty MetrStruct;
  attr a1 is ultra means
    for b1, b2, b3 being Element of the carrier of a1 holds
    dist(b1,b3) <= max(dist(b1,b2),dist(b2,b3));
end;

:: SUB_METR:dfs 3
definiens
  let a1 be non empty MetrStruct;
To prove
     a1 is ultra
it is sufficient to prove
  thus for b1, b2, b3 being Element of the carrier of a1 holds
    dist(b1,b3) <= max(dist(b1,b2),dist(b2,b3));

:: SUB_METR:def 4
theorem
for b1 being non empty MetrStruct holds
      b1 is ultra
   iff
      for b2, b3, b4 being Element of the carrier of b1 holds
      dist(b2,b4) <= max(dist(b2,b3),dist(b3,b4));

:: SUB_METR:exreg 2
registration
  cluster non empty strict Reflexive symmetric Discerning ultra MetrStruct;
end;

:: SUB_METR:modenot 4
definition
  mode UltraMetricSpace is non empty Reflexive symmetric Discerning ultra MetrStruct;
end;

:: SUB_METR:condreg 1
registration
  cluster non empty Reflexive discerning symmetric triangle -> Discerning (MetrStruct);
end;

:: SUB_METR:condreg 2
registration
  cluster non empty Reflexive symmetric Discerning ultra -> discerning triangle (MetrStruct);
end;

:: SUB_METR:funcnot 1 => SUB_METR:func 1
definition
  func Set_to_zero -> Function-like quasi_total Relation of [:{{},{{}}},{{},{{}}}:],REAL equals
    [:{{},{{}}},{{},{{}}}:] --> 0;
end;

:: SUB_METR:def 5
theorem
Set_to_zero = [:{{},{{}}},{{},{{}}}:] --> 0;

:: SUB_METR:th 40
theorem
for b1, b2 being Element of {{},{{}}} holds
Set_to_zero .(b1,b2) = 0;

:: SUB_METR:th 42
theorem
for b1, b2 being Element of {{},{{}}} holds
Set_to_zero .(b1,b2) = Set_to_zero .(b2,b1);

:: SUB_METR:th 43
theorem
for b1, b2, b3 being Element of {{},{{}}} holds
Set_to_zero .(b1,b3) <= (Set_to_zero .(b1,b2)) + (Set_to_zero .(b2,b3));

:: SUB_METR:funcnot 2 => SUB_METR:func 2
definition
  func ZeroSpace -> MetrStruct equals
    MetrStruct(#{{},{{}}},Set_to_zero#);
end;

:: SUB_METR:def 6
theorem
ZeroSpace = MetrStruct(#{{},{{}}},Set_to_zero#);

:: SUB_METR:funcreg 2
registration
  cluster ZeroSpace -> non empty strict;
end;

:: SUB_METR:funcreg 3
registration
  cluster ZeroSpace -> Reflexive symmetric triangle;
end;

:: SUB_METR:prednot 1 => SUB_METR:pred 1
definition
  let a1 be MetrStruct;
  let a2, a3, a4 be Element of the carrier of a1;
  pred A3 is_between A2,A4 means
    a2 <> a3 &
     a2 <> a4 &
     a3 <> a4 &
     dist(a2,a4) = (dist(a2,a3)) + dist(a3,a4);
end;

:: SUB_METR:dfs 6
definiens
  let a1 be MetrStruct;
  let a2, a3, a4 be Element of the carrier of a1;
To prove
     a3 is_between a2,a4
it is sufficient to prove
  thus a2 <> a3 &
     a2 <> a4 &
     a3 <> a4 &
     dist(a2,a4) = (dist(a2,a3)) + dist(a3,a4);

:: SUB_METR:def 7
theorem
for b1 being MetrStruct
for b2, b3, b4 being Element of the carrier of b1 holds
   b3 is_between b2,b4
iff
   b2 <> b3 &
    b2 <> b4 &
    b3 <> b4 &
    dist(b2,b4) = (dist(b2,b3)) + dist(b3,b4);

:: SUB_METR:th 47
theorem
for b1 being non empty Reflexive symmetric triangle MetrStruct
for b2, b3, b4 being Element of the carrier of b1
      st b3 is_between b2,b4
   holds b3 is_between b4,b2;

:: SUB_METR:th 48
theorem
for b1 being Reflexive discerning symmetric triangle MetrStruct
for b2, b3, b4 being Element of the carrier of b1
      st b3 is_between b2,b4
   holds not b2 is_between b3,b4 & not b4 is_between b2,b3;

:: SUB_METR:th 49
theorem
for b1 being Reflexive discerning symmetric triangle MetrStruct
for b2, b3, b4, b5 being Element of the carrier of b1
      st b3 is_between b2,b4 & b4 is_between b2,b5
   holds b3 is_between b2,b5 & b4 is_between b3,b5;

:: SUB_METR:funcnot 3 => SUB_METR:func 3
definition
  let a1 be non empty MetrStruct;
  let a2, a3 be Element of the carrier of a1;
  func open_dist_Segment(A2,A3) -> Element of bool the carrier of a1 equals
    {b1 where b1 is Element of the carrier of a1: b1 is_between a2,a3};
end;

:: SUB_METR:def 8
theorem
for b1 being non empty MetrStruct
for b2, b3 being Element of the carrier of b1 holds
open_dist_Segment(b2,b3) = {b4 where b4 is Element of the carrier of b1: b4 is_between b2,b3};

:: SUB_METR:th 51
theorem
for b1 being non empty Reflexive discerning symmetric triangle MetrStruct
for b2, b3, b4 being Element of the carrier of b1 holds
   b4 in open_dist_Segment(b2,b3)
iff
   b4 is_between b2,b3;

:: SUB_METR:funcnot 4 => SUB_METR:func 4
definition
  let a1 be non empty MetrStruct;
  let a2, a3 be Element of the carrier of a1;
  func close_dist_Segment(A2,A3) -> Element of bool the carrier of a1 equals
    {b1 where b1 is Element of the carrier of a1: b1 is_between a2,a3} \/ {a2,a3};
end;

:: SUB_METR:def 9
theorem
for b1 being non empty MetrStruct
for b2, b3 being Element of the carrier of b1 holds
close_dist_Segment(b2,b3) = {b4 where b4 is Element of the carrier of b1: b4 is_between b2,b3} \/ {b2,b3};

:: SUB_METR:th 53
theorem
for b1 being non empty MetrStruct
for b2, b3, b4 being Element of the carrier of b1 holds
   b4 in close_dist_Segment(b2,b3)
iff
   (not b4 is_between b2,b3 & b4 <> b2 implies b4 = b3);