Theory Transport_Functions_Mono_Conditions
subsection ‹Monotonicity Conditions›
theory Transport_Functions_Mono_Conditions
imports
Transport_Functions_Base
begin
paragraph ‹Summary›
text ‹In the dependent function relator case, we need to stipulate monotonicity conditions,
which we formalize here.›
context transport_Dep_Fun_Rel
begin
definition "mono_cond_left_rel ≡ ((x1 x2 ∷ (≥⇘L1⇙)) ⇒ ⦇x3 x4 ∷ (≤⇘L1⇙) | x1 ≤⇘L1⇙ x3⦈ ⇛ (≤)) L2"
lemma mono_cond_left_relI [intro]:
assumes "((x1 x2 ∷ (≥⇘L1⇙)) ⇒ ⦇x3 x4 ∷ (≤⇘L1⇙) | x1 ≤⇘L1⇙ x3⦈ ⇛ (≤)) L2"
shows mono_cond_left_rel
using assms unfolding mono_cond_left_rel_def by auto
lemma mono_cond_left_relD [dest]:
assumes mono_cond_left_rel
shows "((x1 x2 ∷ (≥⇘L1⇙)) ⇒ ⦇x3 x4 ∷ (≤⇘L1⇙) | x1 ≤⇘L1⇙ x3⦈ ⇛ (≤)) L2"
using assms unfolding mono_cond_left_rel_def by auto
end
context transport_Dep_Fun_Rel
begin
interpretation flip : transport_Dep_Fun_Rel R1 L1 r1 l1 R2 L2 r2 l2 .
definition "mono_cond_right_rel ≡ flip.mono_cond_left_rel"
lemma mono_cond_right_relI [intro]:
assumes "((x1' x2' ∷ (≥⇘R1⇙)) ⇒ ⦇x3' x4' ∷ (≤⇘R1⇙) | x1' ≤⇘R1⇙ x3'⦈ ⇛ (≤)) R2"
shows mono_cond_right_rel
using assms unfolding mono_cond_right_rel_def by (rule flip.mono_cond_left_relI)
lemma mono_cond_right_relD [dest]:
assumes mono_cond_right_rel
shows "((x1' x2' ∷ (≥⇘R1⇙)) ⇒ ⦇x3' x4' ∷ (≤⇘R1⇙) | x1' ≤⇘R1⇙ x3'⦈ ⇛ (≤)) R2"
using assms unfolding mono_cond_right_rel_def by (rule flip.mono_cond_left_relD)
definition "mono_conds_rel ≡ mono_cond_left_rel ∧ mono_cond_right_rel"
lemma mono_conds_relI [intro]:
assumes mono_cond_left_rel
and mono_cond_right_rel
shows mono_conds_rel
using assms unfolding mono_conds_rel_def by auto
lemma mono_conds_relE [elim]:
assumes mono_conds_rel
obtains mono_cond_left_rel mono_cond_right_rel
using assms unfolding mono_conds_rel_def by auto
definition "mono_cond_left_fun ≡ ((x1' x2' ∷ (≤⇘R1⇙)) ⇒ (x1 x2 ∷ (≤⇘L1⇙) | x2 ⇘L1⇙⪅ x1') ⇛
in_field (≤⇘L2 x1 (r1 x2')⇙) ⇛ (≤⇘R2 (l1 x1) x2'⇙)) l2"
lemma mono_cond_left_funI [intro]:
assumes "((x1' x2' ∷ (≤⇘R1⇙)) ⇒ (x1 x2 ∷ (≤⇘L1⇙) | x2 ⇘L1⇙⪅ x1') ⇛
in_field (≤⇘L2 x1 (r1 x2')⇙) ⇛ (≤⇘R2 (l1 x1) x2'⇙)) l2"
shows mono_cond_left_fun
using assms unfolding mono_cond_left_fun_def by auto
lemma mono_cond_left_funD [dest]:
assumes mono_cond_left_fun
shows "((x1' x2' ∷ (≤⇘R1⇙)) ⇒ (x1 x2 ∷ (≤⇘L1⇙) | x2 ⇘L1⇙⪅ x1') ⇛
in_field (≤⇘L2 x1 (r1 x2')⇙) ⇛ (≤⇘R2 (l1 x1) x2'⇙)) l2"
using assms unfolding mono_cond_left_fun_def by auto
definition "mono_cond_right_fun ≡ ((x1 x2 ∷ (≤⇘L1⇙)) ⇒ (x1' x2' ∷ (≤⇘R1⇙) | x2 ⇘L1⇙⪅ x1') ⇛
in_field (≤⇘R2 (l1 x1) x2'⇙) ⇛ (≤⇘L2 x1 (r1 x2')⇙)) r2"
lemma mono_cond_right_funI [intro]:
assumes "((x1 x2 ∷ (≤⇘L1⇙)) ⇒ (x1' x2' ∷ (≤⇘R1⇙) | x2 ⇘L1⇙⪅ x1') ⇛
in_field (≤⇘R2 (l1 x1) x2'⇙) ⇛ (≤⇘L2 x1 (r1 x2')⇙)) r2"
shows mono_cond_right_fun
using assms unfolding mono_cond_right_fun_def by simp
lemma mono_cond_right_funD [dest]:
assumes mono_cond_right_fun
shows "((x1 x2 ∷ (≤⇘L1⇙)) ⇒ (x1' x2' ∷ (≤⇘R1⇙) | x2 ⇘L1⇙⪅ x1') ⇛
in_field (≤⇘R2 (l1 x1) x2'⇙) ⇛ (≤⇘L2 x1 (r1 x2')⇙)) r2"
using assms unfolding mono_cond_right_fun_def by simp
definition "mono_conds_fun ≡ mono_cond_left_fun ∧ mono_cond_right_fun"
lemma mono_conds_funI [intro]:
assumes mono_cond_left_fun
and mono_cond_right_fun
shows "mono_conds_fun"
using assms unfolding mono_conds_fun_def by auto
lemma mono_conds_funE [elim]:
assumes "mono_conds_fun"
obtains mono_cond_left_fun mono_cond_right_fun
using assms unfolding mono_conds_fun_def by auto
definition "mono_conds ≡ mono_conds_rel ∧ mono_conds_fun"
lemma mono_condsI [intro]:
assumes mono_conds_rel
and mono_conds_fun
shows mono_conds
using assms unfolding mono_conds_def by auto
lemma mono_condsE [elim]:
assumes mono_conds
obtains mono_conds_rel mono_conds_fun
using assms unfolding mono_conds_def by auto
lemmas mono_cond_intros =
mono_cond_left_relI mono_cond_right_relI mono_conds_relI
mono_cond_left_funI mono_cond_right_funI mono_conds_funI
mono_condsI
end
end