Theory Dinitz_Garg_Goemans_Counterexample
theory Dinitz_Garg_Goemans_Counterexample
imports Complex_Main
begin
section ‹Finite path-flow instances›
text ‹
We use a path-based formulation of single-source flow. A route records one
admissible source-to-terminal path, and @{term pf_uses} is its arc-incidence
predicate. The finite carrier types make all loads and costs explicit finite
sums.
›
record ('commodity, 'route, 'arc) path_flow_instance =
pf_admissible :: "'commodity ⇒ 'route ⇒ bool"
pf_demand :: "'commodity ⇒ real"
pf_capacity :: "'arc ⇒ real"
pf_cost :: "'arc ⇒ real"
pf_uses :: "'commodity ⇒ 'route ⇒ 'arc ⇒ bool"
definition fractional_load ::
"('commodity::finite, 'route::finite, 'arc) path_flow_instance ⇒
('commodity ⇒ 'route ⇒ real) ⇒ 'arc ⇒ real" where
"fractional_load I f a =
(∑k∈UNIV. ∑r∈UNIV. if pf_uses I k r a then f k r else 0)"
definition fractional_cost ::
"('commodity::finite, 'route::finite, 'arc::finite) path_flow_instance ⇒
('commodity ⇒ 'route ⇒ real) ⇒ real" where
"fractional_cost I f =
(∑a∈UNIV. pf_cost I a * fractional_load I f a)"
definition maximum_demand ::
"('commodity::finite, 'route, 'arc) path_flow_instance ⇒ real" where
"maximum_demand I = Max (pf_demand I ` (UNIV :: 'commodity set))"
definition well_formed_instance ::
"('commodity, 'route, 'arc) path_flow_instance ⇒ bool" where
"well_formed_instance I ⟷
(∀k. 0 < pf_demand I k ∧ (∃r. pf_admissible I k r)) ∧
(∀a. 0 ≤ pf_capacity I a ∧ 0 ≤ pf_cost I a)"
definition fractional_feasible ::
"('commodity::finite, 'route::finite, 'arc) path_flow_instance ⇒
('commodity ⇒ 'route ⇒ real) ⇒ bool" where
"fractional_feasible I f ⟷
well_formed_instance I ∧
(∀k r. 0 ≤ f k r) ∧
(∀k r. ¬ pf_admissible I k r ⟶ f k r = 0) ∧
(∀k. (∑r∈UNIV. f k r) = pf_demand I k) ∧
(∀a. fractional_load I f a ≤ pf_capacity I a)"
definition unsplittable_routing ::
"('commodity, 'route, 'arc) path_flow_instance ⇒
('commodity ⇒ 'route) ⇒ bool" where
"unsplittable_routing I q ⟷ (∀k. pf_admissible I k (q k))"
definition unsplittable_load ::
"('commodity::finite, 'route, 'arc) path_flow_instance ⇒
('commodity ⇒ 'route) ⇒ 'arc ⇒ real" where
"unsplittable_load I q a =
(∑k∈UNIV. if pf_uses I k (q k) a then pf_demand I k else 0)"
definition unsplittable_cost ::
"('commodity::finite, 'route, 'arc::finite) path_flow_instance ⇒
('commodity ⇒ 'route) ⇒ real" where
"unsplittable_cost I q =
(∑a∈UNIV. pf_cost I a * unsplittable_load I q a)"
definition weak_dgg_rounding ::
"('commodity::finite, 'route::finite, 'arc::finite) path_flow_instance ⇒
('commodity ⇒ 'route ⇒ real) ⇒
('commodity ⇒ 'route) ⇒ bool" where
"weak_dgg_rounding I f q ⟷
unsplittable_routing I q ∧
(∀a. unsplittable_load I q a
≤ fractional_load I f a + maximum_demand I) ∧
unsplittable_cost I q ≤ fractional_cost I f"
definition strict_dgg_rounding ::
"('commodity::finite, 'route::finite, 'arc::finite) path_flow_instance ⇒
('commodity ⇒ 'route ⇒ real) ⇒
('commodity ⇒ 'route) ⇒ bool" where
"strict_dgg_rounding I f q ⟷
unsplittable_routing I q ∧
(∀a. unsplittable_load I q a
< fractional_load I f a + maximum_demand I) ∧
unsplittable_cost I q ≤ fractional_cost I f"
definition weak_dgg_property ::
"('commodity::finite, 'route::finite, 'arc::finite) path_flow_instance ⇒
('commodity ⇒ 'route ⇒ real) ⇒ bool" where
"weak_dgg_property I f ⟷ (∃q. weak_dgg_rounding I f q)"
definition strict_dgg_property ::
"('commodity::finite, 'route::finite, 'arc::finite) path_flow_instance ⇒
('commodity ⇒ 'route ⇒ real) ⇒ bool" where
"strict_dgg_property I f ⟷ (∃q. strict_dgg_rounding I f q)"
definition dgg_counterexample ::
"('commodity::finite, 'route::finite, 'arc::finite) path_flow_instance ⇒
('commodity ⇒ 'route ⇒ real) ⇒ bool" where
"dgg_counterexample I f ⟷
well_formed_instance I ∧ fractional_feasible I f ∧
¬ weak_dgg_property I f"
lemma strict_dgg_rounding_imp_weak:
"strict_dgg_rounding I f q ⟹ weak_dgg_rounding I f q"
unfolding strict_dgg_rounding_def weak_dgg_rounding_def
by (blast intro: less_imp_le)
section ‹The directed graph and all of its terminal paths›