Metamath Proof Explorer


Theorem psmettri2

Description: Triangle inequality for the distance function of a pseudometric. (Contributed by Thierry Arnoux, 11-Feb-2018)

Ref Expression
Assertion psmettri2
|- ( ( D e. ( PsMet ` X ) /\ ( C e. X /\ A e. X /\ B e. X ) ) -> ( A D B ) <_ ( ( C D A ) +e ( C D B ) ) )

Proof

Step Hyp Ref Expression
1 elfvex
 |-  ( D e. ( PsMet ` X ) -> X e. _V )
2 ispsmet
 |-  ( X e. _V -> ( D e. ( PsMet ` X ) <-> ( D : ( X X. X ) --> RR* /\ A. a e. X ( ( a D a ) = 0 /\ A. b e. X A. c e. X ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) ) ) ) )
3 1 2 syl
 |-  ( D e. ( PsMet ` X ) -> ( D e. ( PsMet ` X ) <-> ( D : ( X X. X ) --> RR* /\ A. a e. X ( ( a D a ) = 0 /\ A. b e. X A. c e. X ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) ) ) ) )
4 3 ibi
 |-  ( D e. ( PsMet ` X ) -> ( D : ( X X. X ) --> RR* /\ A. a e. X ( ( a D a ) = 0 /\ A. b e. X A. c e. X ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) ) ) )
5 4 simprd
 |-  ( D e. ( PsMet ` X ) -> A. a e. X ( ( a D a ) = 0 /\ A. b e. X A. c e. X ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) ) )
6 5 r19.21bi
 |-  ( ( D e. ( PsMet ` X ) /\ a e. X ) -> ( ( a D a ) = 0 /\ A. b e. X A. c e. X ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) ) )
7 6 simprd
 |-  ( ( D e. ( PsMet ` X ) /\ a e. X ) -> A. b e. X A. c e. X ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) )
8 7 ralrimiva
 |-  ( D e. ( PsMet ` X ) -> A. a e. X A. b e. X A. c e. X ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) )
9 oveq1
 |-  ( a = A -> ( a D b ) = ( A D b ) )
10 oveq2
 |-  ( a = A -> ( c D a ) = ( c D A ) )
11 10 oveq1d
 |-  ( a = A -> ( ( c D a ) +e ( c D b ) ) = ( ( c D A ) +e ( c D b ) ) )
12 9 11 breq12d
 |-  ( a = A -> ( ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) <-> ( A D b ) <_ ( ( c D A ) +e ( c D b ) ) ) )
13 oveq2
 |-  ( b = B -> ( A D b ) = ( A D B ) )
14 oveq2
 |-  ( b = B -> ( c D b ) = ( c D B ) )
15 14 oveq2d
 |-  ( b = B -> ( ( c D A ) +e ( c D b ) ) = ( ( c D A ) +e ( c D B ) ) )
16 13 15 breq12d
 |-  ( b = B -> ( ( A D b ) <_ ( ( c D A ) +e ( c D b ) ) <-> ( A D B ) <_ ( ( c D A ) +e ( c D B ) ) ) )
17 oveq1
 |-  ( c = C -> ( c D A ) = ( C D A ) )
18 oveq1
 |-  ( c = C -> ( c D B ) = ( C D B ) )
19 17 18 oveq12d
 |-  ( c = C -> ( ( c D A ) +e ( c D B ) ) = ( ( C D A ) +e ( C D B ) ) )
20 19 breq2d
 |-  ( c = C -> ( ( A D B ) <_ ( ( c D A ) +e ( c D B ) ) <-> ( A D B ) <_ ( ( C D A ) +e ( C D B ) ) ) )
21 12 16 20 rspc3v
 |-  ( ( A e. X /\ B e. X /\ C e. X ) -> ( A. a e. X A. b e. X A. c e. X ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) -> ( A D B ) <_ ( ( C D A ) +e ( C D B ) ) ) )
22 21 3comr
 |-  ( ( C e. X /\ A e. X /\ B e. X ) -> ( A. a e. X A. b e. X A. c e. X ( a D b ) <_ ( ( c D a ) +e ( c D b ) ) -> ( A D B ) <_ ( ( C D A ) +e ( C D B ) ) ) )
23 8 22 mpan9
 |-  ( ( D e. ( PsMet ` X ) /\ ( C e. X /\ A e. X /\ B e. X ) ) -> ( A D B ) <_ ( ( C D A ) +e ( C D B ) ) )