-lemma ml_semimetric_set : ∀R.∀ms:pre_semimetric_lattice R. semimetric_set R.
-intros (R ml); constructor 1; [apply (ml : Type);]
-cases ml (l ms with_); clear ml; simplify;
-[1: rewrite < with_; apply (ms_semimetric ? ms);
-|2: cases with_; simplify; apply (ms_properties ? ms);]
-qed.
-
-coercion cic:/matita/lebesgue/ml_semimetric_set.con.
-
-record is_semimetric_lattice (R : real) (ml : pre_semimetric_lattice R) : Prop ≝ {
- prop1a: ∀a : ml.δ (a ∧ a) a ≈ 0;
- prop1b: ∀a : ml.δ (a ∨ a) a ≈ 0;
- prop2a: ∀a,b: ml. δ (a ∨ b) (b ∨ a) ≈ 0;
- prop2b: ∀a,b: ml. δ (a ∧ b) (b ∧ a) ≈ 0;
- prop3a: ∀a,b,c: ml. δ (a ∨ (b ∨ c)) ((a ∨ b) ∨ c) ≈ 0;
- prop3b: ∀a,b,c: ml. δ (a ∧ (b ∧ c)) ((a ∧ b) ∧ c) ≈ 0;
- prop4a: ∀a,b: ml. δ (a ∨ (a ∧ b)) a ≈ 0;
- prop4b: ∀a,b: ml. δ (a ∧ (a ∨ b)) a ≈ 0;
- prop5: ∀a,b,c: ml. δ (a ∨ b) (a ∨ c) + δ (a ∧ b) (a ∧ c) ≤ δ b c
-}.
-
-record semimetric_lattice (R : real) : Type ≝ {
- ml_pre_semimetric_lattice:> pre_semimetric_lattice R;
- ml_semimetric_lattice_properties: is_semimetric_lattice R ml_pre_semimetric_lattice
-}.
-
-definition apart:=
- λR: real. λml: semimetric_lattice R. λa,b: ml.
- (* 0 < δ a b *) ltT ? 0 (δ a b).
- (* < scazzato, ma CSC dice che poi si cambia dopo *)
-
-interpretation "semimetric lattice apartness" 'apart a b =
- (cic:/matita/lebesgue/apart.con _ _ a b).
-interpretation "semimetric lattice non apartness" 'napart a b =
- (cic:/matita/constructive_connectives/Not.con
- (cic:/matita/lebesgue/apart.con _ _ a b)).
-
-
-lemma triangular_inequality : ∀R: real. ∀ms: semimetric_set R.∀a,b,c:ms.
- δ a b ≤ δ a c + δ c b.
-intros (R ms a b c); exact (sm_tri_ineq R ms (ms_semimetric R ms) ms a b c);
-qed.
-
-lemma foo : ∀R: real. ∀ml: semimetric_lattice R.∀a,b,a1,b1: ml.
- a ≈ a1 → b ≈ b1 → (δ a b ≈ δ a1 b1).
-intros;
-lapply (triangular_inequality ? ? a b a1) as H1;
-lapply (triangular_inequality ? ? a1 b b1) as H2;
-lapply (og_ordered_abelian_group_properties R ? ? (δ a a1) H2) as H3;