Classical.Phase: phase semantics and soundness for CLL
X^β₯ = { y | β x β X, x Β· y β β«« } the "counter-bags" of X
Ξ β¨ Ξ iff β¦Aββ§ β β¦ β β¦Aββ§ β β¦Bββ§^β₯ β β¦ β β¦Bββ§^β₯ β β««
From LinearLogic.Classical Require Export Sequent.
Classical phase spaces
- a commutative monoid (M, Β·, Ξ΅) up to β‘, as in the intuitionistic case;
- a pole β«« β M, closed under β‘;
- a set J of reusable phases. It contains Ξ΅, is closed under Β·, and its elements can be discarded and duplicated in front of the pole: if y β β«« then j Β· y β β««, and if (j Β· j) Β· y β β«« then j Β· y β β««.
Record cphase_space : Type := { ccarrier :> Type; cph_equiv : Equiv ccarrier; cph_op : ccarrier -> ccarrier -> ccarrier; cph_e : ccarrier; cph_pole : propset ccarrier; cph_J : propset ccarrier; cph_equivalence : Equivalence (@equiv _ cph_equiv); cph_op_proper : Proper (@equiv _ cph_equiv ==> @equiv _ cph_equiv ==> @equiv _ cph_equiv) cph_op; cph_assoc : β x y z, @equiv _ cph_equiv (cph_op x (cph_op y z)) (cph_op (cph_op x y) z); cph_comm : β x y, @equiv _ cph_equiv (cph_op x y) (cph_op y x); cph_unit_l : β x, @equiv _ cph_equiv (cph_op cph_e x) x; cph_pole_proper : β x y, @equiv _ cph_equiv x y -> x β cph_pole -> y β cph_pole; cph_J_proper : β x y, @equiv _ cph_equiv x y -> x β cph_J -> y β cph_J; cph_J_unit : cph_e β cph_J; cph_J_op : β x y, x β cph_J -> y β cph_J -> cph_op x y β cph_J; cph_J_weak : β j y, j β cph_J -> y β cph_pole -> cph_op j y β cph_pole; cph_J_contr : β j y, j β cph_J -> cph_op (cph_op j j) y β cph_pole -> cph_op j y β cph_pole; }. Arguments cph_op {_}. Arguments cph_e {_}. Arguments cph_pole {_}. Arguments cph_J {_}. Arguments cph_assoc {_}. Arguments cph_comm {_}. Arguments cph_unit_l {_}. Arguments cph_pole_proper {_}. Arguments cph_J_proper {_}. Arguments cph_J_unit {_}. Arguments cph_J_op {_}. Arguments cph_J_weak {_}. Arguments cph_J_contr {_}. #[export] Existing Instance cph_equiv. #[export] Instance cph_equivalence' (P : cphase_space) : Equivalence (β‘@{P}) := cph_equivalence P. #[export] Instance cph_op_proper' (P : cphase_space) : Proper ((β‘) ==> (β‘) ==> (β‘)) (@cph_op P) := cph_op_proper P.
Declare Scope cll_phase_scope. Open Scope cll_phase_scope. Notation "x Β· y" := (cph_op x y) (at level 40, left associativity) : cll_phase_scope. Notation "β««" := cph_pole : cll_phase_scope. Section SetFormers. Context {P : cphase_space}. Implicit Types (X Y : propset P) (x y z : P).
{Ξ΅} up to β‘, the product X β Y, and the orthogonal X^β₯.
Definition one_set : propset P := {[ z | z β‘ cph_e ]}. Definition prod_set X Y : propset P := {[ z | β a b, a β X β§ b β Y β§ z β‘ a Β· b ]}. Definition orth X : propset P := {[ y | β x, x β X -> x Β· y β β«« ]}. Definition full_set : propset P := {[ _ | True ]}.P: cphase_space
z: Pz β one_set β z β‘ cph_eP: cphase_space
z: Pz β one_set β z β‘ cph_eby rewrite elem_of_PropSet. Qed.P: cphase_space
z: Pz β {[ z0 | z0 β‘ cph_e ]} β z β‘ cph_eP: cphase_space
X, Y: propset P
z: Pz β prod_set X Y β β a b : P, a β X β§ b β Y β§ z β‘ a Β· bP: cphase_space
X, Y: propset P
z: Pz β prod_set X Y β β a b : P, a β X β§ b β Y β§ z β‘ a Β· bby rewrite elem_of_PropSet. Qed.P: cphase_space
X, Y: propset P
z: Pz β {[ z0 | β a b : P, a β X β§ b β Y β§ z0 β‘ a Β· b ]} β β a b : P, a β X β§ b β Y β§ z β‘ a Β· bP: cphase_space
X: propset P
y: Py β orth X β β x, x β X β x Β· y β β««P: cphase_space
X: propset P
y: Py β orth X β β x, x β X β x Β· y β β««by rewrite elem_of_PropSet. Qed.P: cphase_space
X: propset P
y: Py β {[ y0 | β x, x β X β x Β· y0 β β«« ]} β β x, x β X β x Β· y β β««P: cphase_space
z: Pz β full_setP: cphase_space
z: Pz β full_setby rewrite elem_of_PropSet. Qed. End SetFormers. Infix "β" := prod_set (at level 40, left associativity) : cll_phase_scope. Notation "X ^β₯" := (orth X) (at level 20, format "X ^β₯") : cll_phase_scope.P: cphase_space
z: Pz β {[ _ | True ]}
Section Orth. Context {P : cphase_space}. Implicit Types (X Y Z F R : propset P) (x y z : P).P: cphase_space
x: Px Β· cph_e β‘ xP: cphase_space
x: Px Β· cph_e β‘ xapply cph_unit_l. Qed.P: cphase_space
x: Pcph_e Β· x β‘ xP: cphase_space
X: propset P
y, y': Py β‘ y' β y β X^β₯ β y' β X^β₯P: cphase_space
X: propset P
y, y': Py β‘ y' β y β X^β₯ β y' β X^β₯P: cphase_space
X: propset P
y, y': Py β‘ y' β (β x, x β X β x Β· y β β««) β β x, x β X β x Β· y' β β««apply (cph_pole_proper (x Β· y)); [by rewrite Hy | auto]. Qed.P: cphase_space
X: propset P
y, y': P
Hy: y β‘ y'
H: β x, x β X β x Β· y β β««
x: P
Hx: x β Xx Β· y' β β««P: cphase_space
X, Y: propset PX β Y β Y^β₯ β X^β₯P: cphase_space
X, Y: propset PX β Y β Y^β₯ β X^β₯P: cphase_space
X, Y: propset P
H: X β Y
y: Py β Y^β₯ β y β X^β₯naive_solver. Qed.P: cphase_space
X, Y: propset P
H: X β Y
y: P(β x, x β Y β x Β· y β β««) β β x, x β X β x Β· y β β««
X β X^β₯β₯: every bag is orthogonal to its counter-bags.
P: cphase_space
X: propset PX β (X^β₯)^β₯P: cphase_space
X: propset PX β (X^β₯)^β₯P: cphase_space
X: propset P
x: P
Hx: x β Xx β (X^β₯)^β₯P: cphase_space
X: propset P
x: P
Hx: x β Xβ x0, x0 β X^β₯ β x0 Β· x β β««P: cphase_space
X: propset P
x: P
Hx: x β X
y: P
Hy: y β X^β₯y Β· x β β««apply (cph_pole_proper (x Β· y)); [apply cph_comm | auto]. Qed.P: cphase_space
X: propset P
x: P
Hx: x β X
y: P
Hy: β x, x β X β x Β· y β β««y Β· x β β««P: cphase_space
X: propset P((X^β₯)^β₯)^β₯ β X^β₯apply orth_anti, biorth. Qed.P: cphase_space
X: propset P((X^β₯)^β₯)^β₯ β X^β₯P: cphase_space
X, Y: propset PX β Y β (X^β₯)^β₯ β (Y^β₯)^β₯P: cphase_space
X, Y: propset PX β Y β (X^β₯)^β₯ β (Y^β₯)^β₯by apply orth_anti, orth_anti. Qed.P: cphase_space
X, Y: propset P
H: X β Y(X^β₯)^β₯ β (Y^β₯)^β₯
A fact is a set equal to its biorthogonal.
Definition fact F : Prop := F^β₯^β₯ β F.P: cphase_space
X: propset Pfact (X^β₯)apply triorth. Qed.P: cphase_space
X: propset Pfact (X^β₯)P: cphase_space
X, Y: propset Pfact X β fact Y β fact (X β© Y)P: cphase_space
X, Y: propset Pfact X β fact Y β fact (X β© Y)P: cphase_space
X, Y: propset P
HX: fact X
HY: fact Y
z: P
Hz: z β ((X β© Y)^β₯)^β₯z β X β© Ysplit; [apply HX | apply HY]; revert z Hz; apply biorth_mono; set_solver. Qed.P: cphase_space
X, Y: propset P
HX: fact X
HY: fact Y
z: P
Hz: z β ((X β© Y)^β₯)^β₯z β X β§ z β YP: cphase_spacefact full_setP: cphase_spacefact full_setapply elem_of_full. Qed.P: cphase_space
z: Pz β full_setP: cphase_space
F: propset P
x, y: Pfact F β x β‘ y β x β F β y β FP: cphase_space
F: propset P
x, y: Pfact F β x β‘ y β x β F β y β FP: cphase_space
F: propset P
x, y: P
HF: fact F
Hxy: x β‘ y
Hx: x β Fy β Fapply (orth_proper _ x); [done | by apply biorth]. Qed.P: cphase_space
F: propset P
x, y: P
HF: fact F
Hxy: x β‘ y
Hx: x β Fy β (F^β₯)^β₯
The key adjunction: X β Y β β«« iff Y β X^β₯.
P: cphase_space
X, Y: propset PX β Y β β«« β Y β X^β₯P: cphase_space
X, Y: propset PX β Y β β«« β Y β X^β₯P: cphase_space
X, Y: propset PX β Y β β«« β Y β X^β₯P: cphase_space
X, Y: propset PY β X^β₯ β X β Y β β««P: cphase_space
X, Y: propset PX β Y β β«« β Y β X^β₯P: cphase_space
X, Y: propset P
H: X β Y β β««
y: P
Hy: y β Yy β X^β₯P: cphase_space
X, Y: propset P
H: X β Y β β««
y: P
Hy: y β Yβ x, x β X β x Β· y β β««P: cphase_space
X, Y: propset P
H: X β Y β β««
y: P
Hy: y β Y
x: P
Hx: x β Xx Β· y β β««by exists x, y.P: cphase_space
X, Y: propset P
H: X β Y β β««
y: P
Hy: y β Y
x: P
Hx: x β Xβ a b : P, a β X β§ b β Y β§ x Β· y β‘ a Β· bP: cphase_space
X, Y: propset PY β X^β₯ β X β Y β β««P: cphase_space
X, Y: propset P
H: Y β X^β₯
z, a, b: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· bz β β««P: cphase_space
X, Y: propset P
H: Y β X^β₯
z, a, b: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· ba Β· b β β««P: cphase_space
X, Y: propset P
b: P
H: b β X^β₯
z, a: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· ba Β· b β β««auto. Qed.P: cphase_space
X, Y: propset P
b: P
H: β x, x β X β x Β· b β β««
z, a: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· ba Β· b β β««P: cphase_space
X, X', Y, Y': propset PX β X' β Y β Y' β X β Y β X' β Y'P: cphase_space
X, X', Y, Y': propset PX β X' β Y β Y' β X β Y β X' β Y'P: cphase_space
X, X', Y, Y': propset P
HX: X β X'
HY: Y β Y'
z, a, b: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· bz β X' β Y'P: cphase_space
X, X', Y, Y': propset P
HX: X β X'
HY: Y β Y'
z, a, b: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· bβ a0 b0 : P, a0 β X' β§ b0 β Y' β§ z β‘ a0 Β· b0auto. Qed.P: cphase_space
X, X', Y, Y': propset P
HX: X β X'
HY: Y β Y'
z, a, b: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· ba β X' β§ b β Y' β§ z β‘ a Β· bP: cphase_space
X, Y, Z: propset PX β (Y β Z) β X β Y β ZP: cphase_space
X, Y, Z: propset PX β (Y β Z) β X β Y β ZP: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a β X
b, c: P
Hb: b β Y
Hc: c β Z
Hw: w β‘ b Β· c
Hz: z β‘ a Β· wz β X β Y β ZP: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a β X
b, c: P
Hb: b β Y
Hc: c β Z
Hw: w β‘ b Β· c
Hz: z β‘ a Β· wβ a0 b0 : P, a0 β X β Y β§ b0 β Z β§ z β‘ a0 Β· b0P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a β X
b, c: P
Hb: b β Y
Hc: c β Z
Hw: w β‘ b Β· c
Hz: z β‘ a Β· wa Β· b β X β Y β§ c β Z β§ z β‘ a Β· b Β· cP: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a β X
b, c: P
Hb: b β Y
Hc: c β Z
Hw: w β‘ b Β· c
Hz: z β‘ a Β· w(β a0 b0 : P, a0 β X β§ b0 β Y β§ a Β· b β‘ a0 Β· b0) β§ c β Z β§ z β‘ a Β· b Β· cP: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a β X
b, c: P
Hb: b β Y
Hc: c β Z
Hw: w β‘ b Β· c
Hz: z β‘ a Β· wβ a0 b0 : P, a0 β X β§ b0 β Y β§ a Β· b β‘ a0 Β· b0P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a β X
b, c: P
Hb: b β Y
Hc: c β Z
Hw: w β‘ b Β· c
Hz: z β‘ a Β· wz β‘ a Β· b Β· cby exists a, b.P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a β X
b, c: P
Hb: b β Y
Hc: c β Z
Hw: w β‘ b Β· c
Hz: z β‘ a Β· wβ a0 b0 : P, a0 β X β§ b0 β Y β§ a Β· b β‘ a0 Β· b0P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a β X
b, c: P
Hb: b β Y
Hc: c β Z
Hw: w β‘ b Β· c
Hz: z β‘ a Β· wz β‘ a Β· b Β· capply cph_assoc. Qed.P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a β X
b, c: P
Hb: b β Y
Hc: c β Z
Hw: w β‘ b Β· c
Hz: z β‘ a Β· wa Β· (b Β· c) β‘ a Β· b Β· cP: cphase_space
X, Y, Z: propset PX β Y β Z β X β (Y β Z)P: cphase_space
X, Y, Z: propset PX β Y β Z β X β (Y β Z)P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· cz β X β (Y β Z)P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· cβ a0 b0 : P, a0 β X β§ b0 β Y β Z β§ z β‘ a0 Β· b0P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· ca β X β§ b Β· c β Y β Z β§ z β‘ a Β· (b Β· c)P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· ca β X β§ (β a0 b0 : P, a0 β Y β§ b0 β Z β§ b Β· c β‘ a0 Β· b0) β§ z β‘ a Β· (b Β· c)P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· cβ a0 b0 : P, a0 β Y β§ b0 β Z β§ b Β· c β‘ a0 Β· b0P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· cz β‘ a Β· (b Β· c)by exists b, c.P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· cβ a0 b0 : P, a0 β Y β§ b0 β Z β§ b Β· c β‘ a0 Β· b0P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· cz β‘ a Β· (b Β· c)P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· ca Β· b Β· c β‘ a Β· (b Β· c)apply cph_assoc. Qed.P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a β X
Hb: b β Y
Hw: w β‘ a Β· b
Hc: c β Z
Hz: z β‘ w Β· ca Β· (b Β· c) β‘ a Β· b Β· cP: cphase_space
X, Y: propset PX β Y β Y β XP: cphase_space
X, Y: propset PX β Y β Y β XP: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· bz β Y β XP: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· bβ a0 b0 : P, a0 β Y β§ b0 β X β§ z β‘ a0 Β· b0P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· bb β Y β§ a β X β§ z β‘ b Β· aby rewrite Hz, cph_comm. Qed.P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β X
Hb: b β Y
Hz: z β‘ a Β· bz β‘ b Β· aP: cphase_space
F: propset Pfact F β F β one_set β FP: cphase_space
F: propset Pfact F β F β one_set β FP: cphase_space
F: propset P
HF: fact F
z, a, b: P
Ha: a β F
Hb: b β‘ cph_e
Hz: z β‘ a Β· bz β Fby rewrite Hz, Hb, cph_unit_r. Qed.P: cphase_space
F: propset P
HF: fact F
z, a, b: P
Ha: a β F
Hb: b β‘ cph_e
Hz: z β‘ a Β· ba β‘ zP: cphase_space
X: propset PX β one_set β XP: cphase_space
X: propset PX β one_set β XP: cphase_space
X: propset P
x: P
Hx: x β Xx β one_set β XP: cphase_space
X: propset P
x: P
Hx: x β Xβ a b : P, a β one_set β§ b β X β§ x β‘ a Β· bP: cphase_space
X: propset P
x: P
Hx: x β Xcph_e β one_set β§ x β X β§ x β‘ cph_e Β· xdone. Qed.P: cphase_space
X: propset P
x: P
Hx: x β Xcph_e β‘ cph_e β§ x β X β§ x β‘ x
Stability: X^β₯β₯ β Y^β₯β₯ β (X β Y)^β₯β₯. In the intuitionistic
semantics this was an axiom about cl. Here it follows from the
definition of ^β₯.
P: cphase_space
X, Y: propset P(X^β₯)^β₯ β (Y^β₯)^β₯ β ((X β Y)^β₯)^β₯P: cphase_space
X, Y: propset P(X^β₯)^β₯ β (Y^β₯)^β₯ β ((X β Y)^β₯)^β₯P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· bz β ((X β Y)^β₯)^β₯P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· bβ x, x β (X β Y)^β₯ β x Β· z β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: w β (X β Y)^β₯w Β· z β β««(* first: for y β Y, y Β· w is a counter-bag of X *)P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««w Β· z β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««β y, y β Y β y Β· w β X^β₯P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯w Β· z β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««β y, y β Y β y Β· w β X^β₯P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
y: P
Hy: y β Yy Β· w β X^β₯P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
y: P
Hy: y β Yβ x, x β X β x Β· (y Β· w) β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
y: P
Hy: y β Y
x: P
Hx: x β Xx Β· (y Β· w) β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
y: P
Hy: y β Y
x: P
Hx: x β Xx Β· y Β· w β β««by exists x, y.P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
y: P
Hy: y β Y
x: P
Hx: x β Xβ a0 b0 : P, a0 β X β§ b0 β Y β§ x Β· y β‘ a0 Β· b0(* then: w Β· a is a counter-bag of Y *)P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯w Β· z β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯w Β· a β Y^β₯P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
H2: w Β· a β Y^β₯w Β· z β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯w Β· a β Y^β₯P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯β x, x β Y β x Β· (w Β· a) β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
y: P
Hy: y β Yy Β· (w Β· a) β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: β x, x β X^β₯ β x Β· a β β««
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
y: P
Hy: y β Yy Β· (w Β· a) β β««apply (cph_pole_proper ((y Β· w) Β· a)); [symmetry; apply cph_assoc | done].P: cphase_space
X, Y: propset P
z, a, b, w, y: P
Ha: y Β· w Β· a β β««
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
Hy: y β Yy Β· (w Β· a) β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: b β (Y^β₯)^β₯
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
H2: w Β· a β Y^β₯w Β· z β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
Hb: β x, x β Y^β₯ β x Β· b β β««
Hz: z β‘ a Β· b
w: P
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
H2: w Β· a β Y^β₯w Β· z β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
w: P
Hb: w Β· a Β· b β β««
Hz: z β‘ a Β· b
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
H2: w Β· a β Y^β₯w Β· z β β««P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
w: P
Hb: w Β· a Β· b β β««
Hz: z β‘ a Β· b
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
H2: w Β· a β Y^β₯w Β· a Β· b β‘ w Β· zP: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
w: P
Hb: w Β· a Β· b β β««
Hz: z β‘ a Β· b
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
H2: w Β· a β Y^β₯w Β· a Β· b β‘ w Β· (a Β· b)apply cph_assoc. Qed.P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a β (X^β₯)^β₯
w: P
Hb: w Β· a Β· b β β««
Hz: z β‘ a Β· b
Hw: β x, x β X β Y β x Β· w β β««
H1: β y, y β Y β y Β· w β X^β₯
H2: w Β· a β Y^β₯w Β· (a Β· b) β‘ w Β· a Β· bP: cphase_space
X, Y: propset PX^β₯ β© Y^β₯ β (X βͺ Y)^β₯P: cphase_space
X, Y: propset PX^β₯ β© Y^β₯ β (X βͺ Y)^β₯P: cphase_space
X, Y: propset P
z: P
HX: z β X^β₯
HY: z β Y^β₯z β (X βͺ Y)^β₯P: cphase_space
X, Y: propset P
z: P
HX: β x, x β X β x Β· z β β««
HY: β x, x β Y β x Β· z β β««z β (X βͺ Y)^β₯intros x [Hx | Hx]%elem_of_union; auto. Qed.P: cphase_space
X, Y: propset P
z: P
HX: β x, x β X β x Β· z β β««
HY: β x, x β Y β x Β· z β β««β x, x β X βͺ Y β x Β· z β β««P: cphase_space
R: propset PR β β«« β R β one_set^β₯P: cphase_space
R: propset PR β β«« β R β one_set^β₯P: cphase_space
R: propset P
H: R β β««
r: P
Hr: r β Rr β one_set^β₯P: cphase_space
R: propset P
H: R β β««
r: P
Hr: r β Rβ x, x β one_set β x Β· r β β««apply (cph_pole_proper r); [by rewrite Hx, cph_unit_l | auto]. Qed.P: cphase_space
R: propset P
H: R β β««
r: P
Hr: r β R
x: P
Hx: x β‘ cph_ex Β· r β β««P: cphase_space
R1, R2, X: propset PR1 β X β R2 β X^β₯ β R1 β R2 β β««P: cphase_space
R1, R2, X: propset PR1 β X β R2 β X^β₯ β R1 β R2 β β««P: cphase_space
R1, R2, X: propset P
H1: R1 β X
H2: R2 β X^β₯R1 β R2 β β««by apply prod_pole. Qed.P: cphase_space
R1, R2, X: propset P
H1: R1 β X
H2: R2 β X^β₯X β X^β₯ β β««
Weakening: anything in the pole stays there after a reusable phase
is added.
P: cphase_space
R, X: propset PR β β«« β R β (X β© cph_J)^β₯P: cphase_space
R, X: propset PR β β«« β R β (X β© cph_J)^β₯P: cphase_space
R, X: propset P
H: R β β««
r: P
Hr: r β Rr β (X β© cph_J)^β₯P: cphase_space
R, X: propset P
H: R β β««
r: P
Hr: r β Rβ x, x β X β© cph_J β x Β· r β β««by apply cph_J_weak, H. Qed.P: cphase_space
R, X: propset P
H: R β β««
r: P
Hr: r β R
j: P
Hj: j β cph_Jj Β· r β β««
Contraction: a reusable phase that may be used twice may be used
once.
P: cphase_space
R, X: propset PR β (((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯)^β₯ β R β (X β© cph_J)^β₯P: cphase_space
R, X: propset PR β (((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯)^β₯ β R β (X β© cph_J)^β₯P: cphase_space
R, X: propset P
H: R β (((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯)^β₯
r: P
Hr: r β Rr β (X β© cph_J)^β₯P: cphase_space
R, X: propset P
H: R β (((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯)^β₯
r: P
Hr: r β Rβ x, x β X β© cph_J β x Β· r β β««P: cphase_space
R, X: propset P
H: R β (((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯)^β₯
r: P
Hr: r β R
j: P
Hj: j β X β© cph_Jj Β· r β β««P: cphase_space
R, X: propset P
H: R β (((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯)^β₯
r: P
Hr: r β R
j: P
Hj: j β X β© cph_J
HJ: j β cph_Jj Β· r β β««P: cphase_space
R, X: propset P
H: R β (((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯)^β₯
r: P
Hr: r β R
j: P
Hj: j β X β© cph_J
HJ: j β cph_Jj Β· j Β· r β β««P: cphase_space
R, X: propset P
r: P
H: r β (((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯)^β₯
Hr: r β R
j: P
Hj: j β X β© cph_J
HJ: j β cph_Jj Β· j Β· r β β««P: cphase_space
R, X: propset P
r: P
H: β x, x β ((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯ β x Β· r β β««
Hr: r β R
j: P
Hj: j β X β© cph_J
HJ: j β cph_Jj Β· j Β· r β β««P: cphase_space
R, X: propset P
r: P
H: β x, x β ((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯ β x Β· r β β««
Hr: r β R
j: P
Hj: j β X β© cph_J
HJ: j β cph_Jβ a b : P, a β ((X β© cph_J)^β₯)^β₯ β§ b β ((X β© cph_J)^β₯)^β₯ β§ j Β· j β‘ a Β· bsplit_and!; [by apply biorth | by apply biorth | done]. Qed.P: cphase_space
R, X: propset P
r: P
H: β x, x β ((X β© cph_J)^β₯)^β₯ β ((X β© cph_J)^β₯)^β₯ β x Β· r β β««
Hr: r β R
j: P
Hj: j β X β© cph_J
HJ: j β cph_Jj β ((X β© cph_J)^β₯)^β₯ β§ j β ((X β© cph_J)^β₯)^β₯ β§ j Β· j β‘ j Β· j
X is J-generated when it is included in the biorthogonal of its
reusable part. Promotion needs every formula in the context to be
J-generated.
Definition jgen X : Prop := X β (X β© cph_J)^β₯^β₯.P: cphase_space
Y: propset Pjgen (((Y β© cph_J)^β₯)^β₯)P: cphase_space
Y: propset Pjgen (((Y β© cph_J)^β₯)^β₯)P: cphase_space
Y: propset PY β© cph_J β ((Y β© cph_J)^β₯)^β₯ β© cph_JP: cphase_space
Y: propset P
x: P
Hx: x β Y
HJ: x β cph_Jx β ((Y β© cph_J)^β₯)^β₯ β© cph_Jsplit; [by apply biorth | done]. Qed. End Orth.P: cphase_space
Y: propset P
x: P
Hx: x β Y
HJ: x β cph_Jx β ((Y β© cph_J)^β₯)^β₯ β§ x β cph_J
Fixpoint bigprod {P : cphase_space} (L : list (propset P)) : propset P := match L with | [] => one_set | X :: L => X β bigprod L end. Notation "β¨ L" := (bigprod L) (at level 30) : cll_phase_scope. Section BigProd. Context {P : cphase_space}. Implicit Types (L : list (propset P)).P: cphase_space
L, L': list (propset P)L β‘β L' β β¨ L β β¨ L'P: cphase_space
L, L': list (propset P)L β‘β L' β β¨ L β β¨ L'P: cphase_spaceone_set β one_setP: cphase_space
X: propset P
L, L': list (propset P)
IH: β¨ L β β¨ L'X β β¨ L β X β β¨ L'P: cphase_space
X, Y: propset P
L: list (propset P)Y β (X β β¨ L) β X β (Y β β¨ L)P: cphase_space
L, L', L'': list (propset P)
IH1: β¨ L β β¨ L'
IH2: β¨ L' β β¨ L''β¨ L β β¨ L''done.P: cphase_spaceone_set β one_setby apply prod_mono.P: cphase_space
X: propset P
L, L': list (propset P)
IH: β¨ L β β¨ L'X β β¨ L β X β β¨ L'P: cphase_space
X, Y: propset P
L: list (propset P)Y β (X β β¨ L) β X β (Y β β¨ L)P: cphase_space
X, Y: propset P
L: list (propset P)Y β X β β¨ L β X β (Y β β¨ L)apply prod_assoc_r.P: cphase_space
X, Y: propset P
L: list (propset P)X β Y β β¨ L β X β (Y β β¨ L)by etransitivity. Qed.P: cphase_space
L, L', L'': list (propset P)
IH1: β¨ L β β¨ L'
IH2: β¨ L' β β¨ L''β¨ L β β¨ L''P: cphase_space
L1, L2: list (propset P)β¨ (L1 ++ L2) β β¨ L1 β β¨ L2P: cphase_space
L1, L2: list (propset P)β¨ (L1 ++ L2) β β¨ L1 β β¨ L2P: cphase_space
L2: list (propset P)β¨ L2 β one_set β β¨ L2P: cphase_space
X: propset P
L1, L2: list (propset P)
IH: β¨ (L1 ++ L2) β β¨ L1 β β¨ L2X β β¨ (L1 ++ L2) β X β β¨ L1 β β¨ L2apply prod_one_l.P: cphase_space
L2: list (propset P)β¨ L2 β one_set β β¨ L2P: cphase_space
X: propset P
L1, L2: list (propset P)
IH: β¨ (L1 ++ L2) β β¨ L1 β β¨ L2X β β¨ (L1 ++ L2) β X β β¨ L1 β β¨ L2apply prod_assoc_l. Qed.P: cphase_space
X: propset P
L1, L2: list (propset P)
IH: β¨ (L1 ++ L2) β β¨ L1 β β¨ L2X β (β¨ L1 β β¨ L2) β X β β¨ L1 β β¨ L2
A big product of J-generated sets is J-generated.
P: cphase_space
L: list (propset P)Forall jgen L β jgen (β¨ L)P: cphase_space
L: list (propset P)Forall jgen L β jgen (β¨ L)P: cphase_spaceone_set β ((one_set β© cph_J)^β₯)^β₯P: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯X β β¨ L β (((X β β¨ L) β© cph_J)^β₯)^β₯P: cphase_spaceone_set β ((one_set β© cph_J)^β₯)^β₯P: cphase_space
z: P
Hz: z β one_setz β ((one_set β© cph_J)^β₯)^β₯P: cphase_space
z: P
Hz: z β one_setz β one_set β§ z β cph_JP: cphase_space
z: P
Hz: z β one_setz β cph_Japply (cph_J_proper cph_e); [by symmetry | apply cph_J_unit].P: cphase_space
z: P
Hz: z β‘ cph_ez β cph_JP: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯X β β¨ L β (((X β β¨ L) β© cph_J)^β₯)^β₯P: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯((X β© cph_J)^β₯)^β₯ β ((β¨ L β© cph_J)^β₯)^β₯ β (((X β β¨ L) β© cph_J)^β₯)^β₯P: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯((X β© cph_J β (β¨ L β© cph_J))^β₯)^β₯ β (((X β β¨ L) β© cph_J)^β₯)^β₯P: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯X β© cph_J β (β¨ L β© cph_J) β (X β β¨ L) β© cph_JP: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯
z, a, b: P
Ha: a β X
HJa: a β cph_J
Hb: b β β¨ L
HJb: b β cph_J
Hz: z β‘ a Β· bz β (X β β¨ L) β© cph_JP: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯
z, a, b: P
Ha: a β X
HJa: a β cph_J
Hb: b β β¨ L
HJb: b β cph_J
Hz: z β‘ a Β· bz β X β β¨ L β§ z β cph_JP: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯
z, a, b: P
Ha: a β X
HJa: a β cph_J
Hb: b β β¨ L
HJb: b β cph_J
Hz: z β‘ a Β· bz β X β β¨ LP: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯
z, a, b: P
Ha: a β X
HJa: a β cph_J
Hb: b β β¨ L
HJb: b β cph_J
Hz: z β‘ a Β· bz β cph_JP: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯
z, a, b: P
Ha: a β X
HJa: a β cph_J
Hb: b β β¨ L
HJb: b β cph_J
Hz: z β‘ a Β· bz β X β β¨ Lby exists a, b.P: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯
z, a, b: P
Ha: a β X
HJa: a β cph_J
Hb: b β β¨ L
HJb: b β cph_J
Hz: z β‘ a Β· bβ a0 b0 : P, a0 β X β§ b0 β β¨ L β§ z β‘ a0 Β· b0apply (cph_J_proper (a Β· b)); [by symmetry | by apply cph_J_op]. Qed. End BigProd.P: cphase_space
X: propset P
L: list (propset P)
HX: X β ((X β© cph_J)^β₯)^β₯
IH: β¨ L β ((β¨ L β© cph_J)^β₯)^β₯
z, a, b: P
Ha: a β X
HJa: a β cph_J
Hb: b β β¨ L
HJb: b β cph_J
Hz: z β‘ a Β· bz β cph_J
Interpreting formulas and sequents
$p β¦ (v p)^β₯β₯ A^β₯ β¦ β¦Aβ§^β₯
π β¦ {Ξ΅}^β₯β₯ β₯ β¦ {Ξ΅}^β₯
A β B β¦ (β¦Aβ§ β β¦Bβ§)^β₯β₯ A β
B β¦ (β¦Aβ§^β₯ β β¦Bβ§^β₯)^β₯
A & B β¦ β¦Aβ§ β© β¦Bβ§ A β B β¦ (β¦Aβ§ βͺ β¦Bβ§)^β₯β₯
β€ β¦ M π β¦ β
^β₯β₯
!A β¦ (β¦Aβ§ β© J)^β₯β₯ ? A β¦ (β¦Aβ§^β₯ β© J)^β₯
Fixpoint interp {P : cphase_space} (v : nat -> propset P) (A : cformula) : propset P := match A with | CAtom p => (v p)^β₯^β₯ | CNeg A => (interp v A)^β₯ | COne => one_set^β₯^β₯ | CBot => one_set^β₯ | CTop => full_set | CZero => (β : propset P)^β₯^β₯ | CTensor A B => (interp v A β interp v B)^β₯^β₯ | CPar A B => ((interp v A)^β₯ β (interp v B)^β₯)^β₯ | CWith A B => interp v A β© interp v B | CPlus A B => (interp v A βͺ interp v B)^β₯^β₯ | CBang A => (interp v A β© cph_J)^β₯^β₯ | CWhy A => ((interp v A)^β₯ β© cph_J)^β₯ end. Notation "β¦ A β§ v" := (interp v A) (at level 1, A at level 200, v at level 1, format "β¦ A β§ v") : cll_phase_scope.
A sequent becomes a list of sets: β¦Aβ§ for each hypothesis and
β¦Bβ§^β₯ for each conclusion.
Definition sq {P : cphase_space} (v : nat -> propset P) (Ξ Ξ : list cformula) : list (propset P) := map (interp v) Ξ ++ map (Ξ» B, (interp v B)^β₯) Ξ. Definition valid_in {P : cphase_space} (v : nat -> propset P) Ξ Ξ : Prop := β¨ (sq v Ξ Ξ) β β««. Definition valid (Ξ Ξ : list cformula) : Prop := β (P : cphase_space) (v : nat -> propset P), valid_in v Ξ Ξ. Notation "Ξ β¨ Ξ" := (valid Ξ Ξ) (at level 80, no associativity) : cll_phase_scope. Section Sequents. Context {P : cphase_space} (v : nat -> propset P). Implicit Types (R : propset P).P: cphase_space
v: nat β propset P
A: cformulafact β¦Aβ§vinduction A; simpl; auto using fact_orth, fact_inter, fact_full. Qed.P: cphase_space
v: nat β propset P
A: cformulafact β¦Aβ§v
A hypothesis A at the head: its bag must be orthogonal to the
rest.
P: cphase_space
v: nat β propset P
A: cformula
Ξ, Ξ: list cformulavalid_in v (A :: Ξ) Ξ β β¨ sq v Ξ Ξ β β¦Aβ§v^β₯apply prod_pole. Qed.P: cphase_space
v: nat β propset P
A: cformula
Ξ, Ξ: list cformulavalid_in v (A :: Ξ) Ξ β β¨ sq v Ξ Ξ β β¦Aβ§v^β₯P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulasq v Ξ (B :: Ξ) β‘β β¦Bβ§v^β₯ :: sq v Ξ ΞP: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulasq v Ξ (B :: Ξ) β‘β β¦Bβ§v^β₯ :: sq v Ξ ΞP: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulamap (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) (B :: Ξ) β‘β β¦Bβ§v^β₯ :: map (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) Ξby rewrite Permutation_middle. Qed.P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulamap (interp v) Ξ ++ β¦Bβ§v^β₯ :: map (Ξ» B0 : cformula, β¦B0β§v^β₯) Ξ β‘β β¦Bβ§v^β₯ :: map (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) Ξ
A conclusion B at the head: the rest must land in β¦Bβ§.
P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulavalid_in v Ξ (B :: Ξ) β β¨ sq v Ξ Ξ β β¦Bβ§vP: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulavalid_in v Ξ (B :: Ξ) β β¨ sq v Ξ Ξ β β¦Bβ§vP: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulaβ¨ sq v Ξ (B :: Ξ) β β«« β β¨ sq v Ξ Ξ β β¦Bβ§vP: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulaβ¨ sq v Ξ (B :: Ξ) β β«« β β¨ sq v Ξ Ξ β β¦Bβ§vP: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulaβ¨ sq v Ξ Ξ β β¦Bβ§v β β¨ sq v Ξ (B :: Ξ) β β««P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulaβ¨ sq v Ξ (B :: Ξ) β β«« β β¨ sq v Ξ Ξ β β¦Bβ§vP: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ (B :: Ξ) β β««β¨ sq v Ξ Ξ β β¦Bβ§vP: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ (B :: Ξ) β β««β¨ sq v Ξ Ξ β (β¦Bβ§v^β₯)^β₯P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ (B :: Ξ) β β««β¦Bβ§v^β₯ β β¨ sq v Ξ Ξ β β««P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ (B :: Ξ) β β««β¦Bβ§v^β₯ β β¨ sq v Ξ Ξ β β¨ sq v Ξ (B :: Ξ)by rewrite sq_cons_r.P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ (B :: Ξ) β β««β¦Bβ§v^β₯ :: sq v Ξ Ξ β‘β sq v Ξ (B :: Ξ)P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformulaβ¨ sq v Ξ Ξ β β¦Bβ§v β β¨ sq v Ξ (B :: Ξ) β β««P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ Ξ β β¦Bβ§vβ¨ sq v Ξ (B :: Ξ) β β««P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ Ξ β β¦Bβ§vβ¨ (β¦Bβ§v^β₯ :: sq v Ξ Ξ) β β««P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ Ξ β β¦Bβ§vβ¦Bβ§v^β₯ β β¨ sq v Ξ Ξ β β««etransitivity; [exact H | apply biorth]. Qed.P: cphase_space
v: nat β propset P
B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ Ξ β β¦Bβ§vβ¨ sq v Ξ Ξ β (β¦Bβ§v^β₯)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulavalid_in v (A :: B :: Ξ) Ξ β β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulavalid_in v (A :: B :: Ξ) Ξ β β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulaβ¨ sq v (A :: B :: Ξ) Ξ β β«« β β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulaβ¦Aβ§v β (β¦Bβ§v β β¨ (map (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) Ξ)) β β«« β β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
H: β¦Aβ§v β (β¦Bβ§v β β¨ (map (interp v) Ξ ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξ)) β β««β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯β¦Aβ§v β (β¦Bβ§v β β¨ (map (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) Ξ)) β β««P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
H: β¦Aβ§v β (β¦Bβ§v β β¨ (map (interp v) Ξ ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξ)) β β««β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯etransitivity; [apply prod_assoc_r | exact H].P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
H: β¦Aβ§v β (β¦Bβ§v β β¨ (map (interp v) Ξ ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξ)) β β««β¦Aβ§v β β¦Bβ§v β β¨ sq v Ξ Ξ β β««P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
H: β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯β¦Aβ§v β (β¦Bβ§v β β¨ (map (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) Ξ)) β β««etransitivity; [apply prod_assoc_l | exact H]. Qed.P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
H: β¦Aβ§v β β¦Bβ§v β β¨ sq v Ξ Ξ β β««β¦Aβ§v β (β¦Bβ§v β β¨ (map (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) Ξ)) β β««P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulavalid_in v Ξ (A :: B :: Ξ) β β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulavalid_in v Ξ (A :: B :: Ξ) β β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulasq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ ΞP: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξvalid_in v Ξ (A :: B :: Ξ) β β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulasq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ ΞP: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulamap (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: map (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) Ξsolve_Permutation.P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformulamap (interp v) Ξ ++ β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: map (Ξ» B0 : cformula, β¦B0β§v^β₯) Ξ β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: map (interp v) Ξ ++ map (Ξ» B0 : cformula, β¦B0β§v^β₯) ΞP: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξvalid_in v Ξ (A :: B :: Ξ) β β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξβ¨ sq v Ξ (A :: B :: Ξ) β β«« β β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ
H: β¨ sq v Ξ (A :: B :: Ξ) β β««β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ
H: β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯β¨ sq v Ξ (A :: B :: Ξ) β β««P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ
H: β¨ sq v Ξ (A :: B :: Ξ) β β««β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ
H: β¨ sq v Ξ (A :: B :: Ξ) β β««β¦Aβ§v^β₯ β β¦Bβ§v^β₯ β β¨ sq v Ξ Ξ β β««etransitivity; [apply (bigprod_perm _ _ (symmetry Hp)) | exact H].P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ
H: β¨ sq v Ξ (A :: B :: Ξ) β β««β¦Aβ§v^β₯ β (β¦Bβ§v^β₯ β β¨ sq v Ξ Ξ) β β««P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ
H: β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯β¨ sq v Ξ (A :: B :: Ξ) β β««P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ
H: β¦Aβ§v^β₯ β β¦Bβ§v^β₯ β β¨ sq v Ξ Ξ β β««β¨ sq v Ξ (A :: B :: Ξ) β β««P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ
H: β¦Aβ§v^β₯ β β¦Bβ§v^β₯ β β¨ sq v Ξ Ξ β β««β¨ (β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ) β β««etransitivity; [apply prod_assoc_l | exact H]. Qed.P: cphase_space
v: nat β propset P
A, B: cformula
Ξ, Ξ: list cformula
Hp: sq v Ξ (A :: B :: Ξ) β‘β β¦Aβ§v^β₯ :: β¦Bβ§v^β₯ :: sq v Ξ Ξ
H: β¦Aβ§v^β₯ β β¦Bβ§v^β₯ β β¨ sq v Ξ Ξ β β««β¦Aβ§v^β₯ β (β¦Bβ§v^β₯ β β¨ sq v Ξ Ξ) β β««P: cphase_space
v: nat β propset P
Ξβ, Ξβ, Ξβ, Ξβ: list cformulaβ¨ sq v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ) β β¨ sq v Ξβ Ξβ β β¨ sq v Ξβ ΞβP: cphase_space
v: nat β propset P
Ξβ, Ξβ, Ξβ, Ξβ: list cformulaβ¨ sq v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ) β β¨ sq v Ξβ Ξβ β β¨ sq v Ξβ ΞβP: cphase_space
v: nat β propset P
Ξβ, Ξβ, Ξβ, Ξβ: list cformulaβ¨ sq v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ) β β¨ (sq v Ξβ Ξβ ++ sq v Ξβ Ξβ)P: cphase_space
v: nat β propset P
Ξβ, Ξβ, Ξβ, Ξβ: list cformulasq v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ) β‘β sq v Ξβ Ξβ ++ sq v Ξβ ΞβP: cphase_space
v: nat β propset P
Ξβ, Ξβ, Ξβ, Ξβ: list cformulamap (interp v) (Ξβ ++ Ξβ) ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) (Ξβ ++ Ξβ) β‘β (map (interp v) Ξβ ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξβ) ++ map (interp v) Ξβ ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξβsolve_Permutation. Qed.P: cphase_space
v: nat β propset P
Ξβ, Ξβ, Ξβ, Ξβ: list cformula(map (interp v) Ξβ ++ map (interp v) Ξβ) ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξβ ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξβ β‘β (map (interp v) Ξβ ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξβ) ++ map (interp v) Ξβ ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) ΞβP: cphase_space
v: nat β propset P
Ξ, Ξ', Ξ, Ξ': list cformulaΞ β‘β Ξ' β Ξ β‘β Ξ' β valid_in v Ξ Ξ β valid_in v Ξ' Ξ'P: cphase_space
v: nat β propset P
Ξ, Ξ', Ξ, Ξ': list cformulaΞ β‘β Ξ' β Ξ β‘β Ξ' β valid_in v Ξ Ξ β valid_in v Ξ' Ξ'P: cphase_space
v: nat β propset P
Ξ, Ξ', Ξ, Ξ': list cformula
HΞ: Ξ β‘β Ξ'
HΞ: Ξ β‘β Ξ'
H: valid_in v Ξ Ξvalid_in v Ξ' Ξ'P: cphase_space
v: nat β propset P
Ξ, Ξ', Ξ, Ξ': list cformula
HΞ: Ξ β‘β Ξ'
HΞ: Ξ β‘β Ξ'
H: valid_in v Ξ Ξβ¨ sq v Ξ' Ξ' β β««P: cphase_space
v: nat β propset P
Ξ, Ξ', Ξ, Ξ': list cformula
HΞ: Ξ β‘β Ξ'
HΞ: Ξ β‘β Ξ'
H: valid_in v Ξ Ξβ¨ sq v Ξ' Ξ' β β¨ sq v Ξ ΞP: cphase_space
v: nat β propset P
Ξ, Ξ', Ξ, Ξ': list cformula
HΞ: Ξ β‘β Ξ'
HΞ: Ξ β‘β Ξ'
H: valid_in v Ξ Ξsq v Ξ' Ξ' β‘β sq v Ξ Ξby rewrite HΞ, HΞ. Qed.P: cphase_space
v: nat β propset P
Ξ, Ξ', Ξ, Ξ': list cformula
HΞ: Ξ β‘β Ξ'
HΞ: Ξ β‘β Ξ'
H: valid_in v Ξ Ξmap (interp v) Ξ' ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξ' β‘β map (interp v) Ξ ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) Ξ
The context of a promotion is J-generated.
P: cphase_space
v: nat β propset P
Ξ£, Ξ : list cformulaβ¨ sq v (βΌΞ£) (βΞ ) β ((β¨ sq v (βΌΞ£) (βΞ ) β© cph_J)^β₯)^β₯P: cphase_space
v: nat β propset P
Ξ£, Ξ : list cformulaβ¨ sq v (βΌΞ£) (βΞ ) β ((β¨ sq v (βΌΞ£) (βΞ ) β© cph_J)^β₯)^β₯P: cphase_space
v: nat β propset P
Ξ£, Ξ : list cformulaForall jgen (sq v (βΌΞ£) (βΞ ))P: cphase_space
v: nat β propset P
Ξ£, Ξ : list cformulaForall jgen (map (interp v) (βΌΞ£) ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) (βΞ ))apply Forall_app; split; apply Forall_forall; intros X (B & <- & _)%list_elem_of_In%in_map_iff; simpl; apply jgen_biorth. Qed. End Sequents.P: cphase_space
v: nat β propset P
Ξ£, Ξ : list cformulaForall jgen (map (Ξ» x : cformula, β¦!xβ§v) Ξ£ ++ map (Ξ» x : cformula, β¦? xβ§v^β₯) Ξ )
Soundness
c: bool
Ξ, Ξ: list cformulaΞ β’[c] Ξ β Ξ β¨ Ξc: bool
Ξ, Ξ: list cformulaΞ β’[c] Ξ β Ξ β¨ Ξc: bool
Ξ, Ξ: list cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset Pvalid_in v Ξ Ξc: bool
A: cformula
P: cphase_space
v: nat β propset Pvalid_in v [A] [A]c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A: cformula
H: c = true
H0: Ξβ β’[c] A :: Ξβ
H1: A :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v Ξβ (A :: Ξβ)
IHcll2: valid_in v (A :: Ξβ) Ξβvalid_in v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ)c: bool
Ξ, Ξ', Ξ, Ξ': list cformula
H: Ξ β‘β Ξ'
H0: Ξ β‘β Ξ'
H1: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v Ξ' Ξ'c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: Ξ)valid_in v ((A^β₯)%cll :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: Ξ) Ξvalid_in v Ξ ((A^β₯)%cll :: Ξ)c: bool
Ξ, Ξ: list cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v (π :: Ξ) Ξc: bool
P: cphase_space
v: nat β propset Pvalid_in v [] [π]c: bool
P: cphase_space
v: nat β propset Pvalid_in v [β₯] []c: bool
Ξ, Ξ: list cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v Ξ (β₯ :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: B :: Ξ) Ξvalid_in v (A β B :: Ξ) Ξc: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: Ξβ β’[c] A :: Ξβ
H0: Ξβ β’[c] B :: Ξβ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v Ξβ (A :: Ξβ)
IHcll2: valid_in v Ξβ (B :: Ξβ)valid_in v (Ξβ ++ Ξβ) (A β B :: Ξβ ++ Ξβ)c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: A :: Ξβ β’[c] Ξβ
H0: B :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v (A :: Ξβ) Ξβ
IHcll2: valid_in v (B :: Ξβ) Ξβvalid_in v (A β B :: Ξβ ++ Ξβ) (Ξβ ++ Ξβ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: B :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: B :: Ξ)valid_in v Ξ (A β B :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: Ξ) Ξvalid_in v (A & B :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (B :: Ξ) Ξvalid_in v (A & B :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
H0: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v Ξ (A :: Ξ)
IHcll2: valid_in v Ξ (B :: Ξ)valid_in v Ξ (A & B :: Ξ)c: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset Pvalid_in v Ξ (β€ :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
H0: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v (A :: Ξ) Ξ
IHcll2: valid_in v (B :: Ξ) Ξvalid_in v (A β B :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: Ξ)valid_in v Ξ (A β B :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (B :: Ξ)valid_in v Ξ (A β B :: Ξ)c: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset Pvalid_in v (π :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: Ξ) Ξvalid_in v (!A :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v (!A :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A: cformula
H: !A :: !A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (!A :: !A :: Ξ) Ξvalid_in v (!A :: Ξ) Ξc: bool
Ξ£, Ξ : list cformula
A: cformula
H: βΌΞ£ β’[c] A :: βΞ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (βΌΞ£) (A :: βΞ )valid_in v (βΌΞ£) (!A :: βΞ )c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: Ξ)valid_in v Ξ (? A :: Ξ)c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v Ξ (? A :: Ξ)c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] ? A :: ? A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (? A :: ? A :: Ξ)valid_in v Ξ (? A :: Ξ)c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: βΌΞ£ β’[c] βΞ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: βΌΞ£) (βΞ )valid_in v (? A :: βΌΞ£) (βΞ )c: bool
A: cformula
P: cphase_space
v: nat β propset Pvalid_in v [A] [A]c: bool
A: cformula
P: cphase_space
v: nat β propset Pβ¨ sq v [] [A] β β¦Aβ§v^β₯c: bool
A: cformula
P: cphase_space
v: nat β propset Pβ¨ (map (interp v) [] ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) [A]) β β¦Aβ§v^β₯apply prod_one_r, fact_orth.c: bool
A: cformula
P: cphase_space
v: nat β propset Pβ¦Aβ§v^β₯ β one_set β β¦Aβ§v^β₯c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A: cformula
H: c = true
H0: Ξβ β’[c] A :: Ξβ
H1: A :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v Ξβ (A :: Ξβ)
IHcll2: valid_in v (A :: Ξβ) Ξβvalid_in v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ)c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A: cformula
H: c = true
H0: Ξβ β’[c] A :: Ξβ
H1: A :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v
IHcll2: valid_in v (A :: Ξβ) Ξβvalid_in v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ)c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A: cformula
H: c = true
H0: Ξβ β’[c] A :: Ξβ
H1: A :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v
IHcll2: β¨ sq v Ξβ Ξβ β β¦Aβ§v^β₯valid_in v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ)etransitivity; [apply valid_split | by eapply cut_pole].c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A: cformula
H: c = true
H0: Ξβ β’[c] A :: Ξβ
H1: A :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v
IHcll2: β¨ sq v Ξβ Ξβ β β¦Aβ§v^β₯β¨ sq v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ) β β««by eapply valid_perm.c: bool
Ξ, Ξ', Ξ, Ξ': list cformula
H: Ξ β‘β Ξ'
H0: Ξ β‘β Ξ'
H1: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v Ξ' Ξ'c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: Ξ)valid_in v ((A^β₯)%cll :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: Ξ)β¨ sq v Ξ Ξ β β¦A^β₯β§v^β₯c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vβ¨ sq v Ξ Ξ β β¦A^β₯β§v^β₯etransitivity; [exact IHcll | apply biorth].c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vβ¨ sq v Ξ Ξ β (β¦Aβ§v^β₯)^β₯c: bool
Ξ, Ξ: list cformula
A: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: Ξ) Ξvalid_in v Ξ ((A^β₯)%cll :: Ξ)by apply valid_l in IHcll.c: bool
Ξ, Ξ: list cformula
A: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: Ξ) Ξβ¨ sq v Ξ Ξ β β¦A^β₯β§vc: bool
Ξ, Ξ: list cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v (π :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξβ¨ sq v Ξ Ξ β β¦πβ§v^β₯etransitivity; [by apply pole_orth_one | apply biorth].c: bool
Ξ, Ξ: list cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξβ¨ sq v Ξ Ξ β ((one_set^β₯)^β₯)^β₯c: bool
P: cphase_space
v: nat β propset Pvalid_in v [] [π]c: bool
P: cphase_space
v: nat β propset Pβ¨ sq v [] [] β β¦πβ§vc: bool
P: cphase_space
v: nat β propset Pβ¨ (map (interp v) [] ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) []) β β¦πβ§vapply biorth.c: bool
P: cphase_space
v: nat β propset Pone_set β (one_set^β₯)^β₯c: bool
P: cphase_space
v: nat β propset Pvalid_in v [β₯] []c: bool
P: cphase_space
v: nat β propset Pβ¨ sq v [] [] β β¦β₯β§v^β₯c: bool
P: cphase_space
v: nat β propset Pβ¨ (map (interp v) [] ++ map (Ξ» B : cformula, β¦Bβ§v^β₯) []) β β¦β₯β§v^β₯apply biorth.c: bool
P: cphase_space
v: nat β propset Pone_set β (one_set^β₯)^β₯c: bool
Ξ, Ξ: list cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v Ξ (β₯ :: Ξ)c: bool
Ξ, Ξ: list cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξβ¨ sq v Ξ Ξ β β¦β₯β§vby apply pole_orth_one.c: bool
Ξ, Ξ: list cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξβ¨ sq v Ξ Ξ β one_set^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: B :: Ξ) Ξvalid_in v (A β B :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: B :: Ξ) Ξβ¨ sq v Ξ Ξ β β¦A β Bβ§v^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯β¨ sq v Ξ Ξ β β¦A β Bβ§v^β₯etransitivity; [exact IHcll | apply biorth].c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β (β¦Aβ§v β β¦Bβ§v)^β₯β¨ sq v Ξ Ξ β (((β¦Aβ§v β β¦Bβ§v)^β₯)^β₯)^β₯c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: Ξβ β’[c] A :: Ξβ
H0: Ξβ β’[c] B :: Ξβ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v Ξβ (A :: Ξβ)
IHcll2: valid_in v Ξβ (B :: Ξβ)valid_in v (Ξβ ++ Ξβ) (A β B :: Ξβ ++ Ξβ)c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: Ξβ β’[c] A :: Ξβ
H0: Ξβ β’[c] B :: Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v
IHcll2: β¨ sq v Ξβ Ξβ β β¦Bβ§vvalid_in v (Ξβ ++ Ξβ) (A β B :: Ξβ ++ Ξβ)c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: Ξβ β’[c] A :: Ξβ
H0: Ξβ β’[c] B :: Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v
IHcll2: β¨ sq v Ξβ Ξβ β β¦Bβ§vβ¨ sq v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ) β β¦A β Bβ§vc: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: Ξβ β’[c] A :: Ξβ
H0: Ξβ β’[c] B :: Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v
IHcll2: β¨ sq v Ξβ Ξβ β β¦Bβ§vβ¨ sq v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ) β ((β¦Aβ§v β β¦Bβ§v)^β₯)^β₯etransitivity; [by apply prod_mono | apply biorth].c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: Ξβ β’[c] A :: Ξβ
H0: Ξβ β’[c] B :: Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v
IHcll2: β¨ sq v Ξβ Ξβ β β¦Bβ§vβ¨ sq v Ξβ Ξβ β β¨ sq v Ξβ Ξβ β ((β¦Aβ§v β β¦Bβ§v)^β₯)^β₯c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: A :: Ξβ β’[c] Ξβ
H0: B :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v (A :: Ξβ) Ξβ
IHcll2: valid_in v (B :: Ξβ) Ξβvalid_in v (A β B :: Ξβ ++ Ξβ) (Ξβ ++ Ξβ)c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: A :: Ξβ β’[c] Ξβ
H0: B :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξβ Ξβ β β¦Bβ§v^β₯valid_in v (A β B :: Ξβ ++ Ξβ) (Ξβ ++ Ξβ)c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: A :: Ξβ β’[c] Ξβ
H0: B :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξβ Ξβ β β¦Bβ§v^β₯β¨ sq v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ) β β¦A β Bβ§v^β₯c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: A :: Ξβ β’[c] Ξβ
H0: B :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξβ Ξβ β β¦Bβ§v^β₯β¨ sq v (Ξβ ++ Ξβ) (Ξβ ++ Ξβ) β ((β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯)^β₯etransitivity; [by apply prod_mono | apply biorth].c: bool
Ξβ, Ξβ, Ξβ, Ξβ: list cformula
A, B: cformula
H: A :: Ξβ β’[c] Ξβ
H0: B :: Ξβ β’[c] Ξβ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξβ Ξβ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξβ Ξβ β β¦Bβ§v^β₯β¨ sq v Ξβ Ξβ β β¨ sq v Ξβ Ξβ β ((β¦Aβ§v^β₯ β β¦Bβ§v^β₯)^β₯)^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: B :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: B :: Ξ)valid_in v Ξ (A β B :: Ξ)by apply valid_rr in IHcll.c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: B :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: B :: Ξ)β¨ sq v Ξ Ξ β β¦A β Bβ§vc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: Ξ) Ξvalid_in v (A & B :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: Ξ) Ξβ¨ sq v Ξ Ξ β β¦A & Bβ§v^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯β¨ sq v Ξ Ξ β β¦A & Bβ§v^β₯etransitivity; [exact IHcll | apply orth_anti; set_solver].c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯β¨ sq v Ξ Ξ β (β¦Aβ§v β© β¦Bβ§v)^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (B :: Ξ) Ξvalid_in v (A & B :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (B :: Ξ) Ξβ¨ sq v Ξ Ξ β β¦A & Bβ§v^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Bβ§v^β₯β¨ sq v Ξ Ξ β β¦A & Bβ§v^β₯etransitivity; [exact IHcll | apply orth_anti; set_solver].c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Bβ§v^β₯β¨ sq v Ξ Ξ β (β¦Aβ§v β© β¦Bβ§v)^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
H0: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v Ξ (A :: Ξ)
IHcll2: valid_in v Ξ (B :: Ξ)valid_in v Ξ (A & B :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
H0: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξ Ξ β β¦Aβ§v
IHcll2: β¨ sq v Ξ Ξ β β¦Bβ§vvalid_in v Ξ (A & B :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
H0: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξ Ξ β β¦Aβ§v
IHcll2: β¨ sq v Ξ Ξ β β¦Bβ§vβ¨ sq v Ξ Ξ β β¦A & Bβ§vset_solver.c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
H0: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξ Ξ β β¦Aβ§v
IHcll2: β¨ sq v Ξ Ξ β β¦Bβ§vβ¨ sq v Ξ Ξ β β¦Aβ§v β© β¦Bβ§vc: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset Pvalid_in v Ξ (β€ :: Ξ)c: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset Pβ¨ sq v Ξ Ξ β β¦β€β§vapply elem_of_full.c: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset P
z: Pz β β¦β€β§vc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
H0: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll1: valid_in v (A :: Ξ) Ξ
IHcll2: valid_in v (B :: Ξ) Ξvalid_in v (A β B :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
H0: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξ Ξ β β¦Bβ§v^β₯valid_in v (A β B :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
H0: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξ Ξ β β¦Bβ§v^β₯β¨ sq v Ξ Ξ β β¦A β Bβ§v^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
H0: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξ Ξ β β¦Bβ§v^β₯β¨ sq v Ξ Ξ β (((β¦Aβ§v βͺ β¦Bβ§v)^β₯)^β₯)^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
H0: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξ Ξ β β¦Bβ§v^β₯β¨ sq v Ξ Ξ β (β¦Aβ§v βͺ β¦Bβ§v)^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
H0: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξ Ξ β β¦Bβ§v^β₯
z: P
Hz: z β β¨ sq v Ξ Ξz β (β¦Aβ§v βͺ β¦Bβ§v)^β₯auto.c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: A :: Ξ β’[c] Ξ
H0: B :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll1: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯
IHcll2: β¨ sq v Ξ Ξ β β¦Bβ§v^β₯
z: P
Hz: z β β¨ sq v Ξ Ξz β β¦Aβ§v^β₯ β§ z β β¦Bβ§v^β₯c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: Ξ)valid_in v Ξ (A β B :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vvalid_in v Ξ (A β B :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vβ¨ sq v Ξ Ξ β β¦A β Bβ§vc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vβ¨ sq v Ξ Ξ β ((β¦Aβ§v βͺ β¦Bβ§v)^β₯)^β₯set_solver.c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vβ¨ sq v Ξ Ξ β β¦Aβ§v βͺ β¦Bβ§vc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (B :: Ξ)valid_in v Ξ (A β B :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Bβ§vvalid_in v Ξ (A β B :: Ξ)c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Bβ§vβ¨ sq v Ξ Ξ β β¦A β Bβ§vc: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Bβ§vβ¨ sq v Ξ Ξ β ((β¦Aβ§v βͺ β¦Bβ§v)^β₯)^β₯set_solver.c: bool
Ξ, Ξ: list cformula
A, B: cformula
H: Ξ β’[c] B :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Bβ§vβ¨ sq v Ξ Ξ β β¦Aβ§v βͺ β¦Bβ§vc: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset Pvalid_in v (π :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset Pβ¨ sq v Ξ Ξ β β¦πβ§v^β₯c: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset Pβ¨ sq v Ξ Ξ β ((β ^β₯)^β₯)^β₯c: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset Pβ¨ sq v Ξ Ξ β β ^β₯c: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset P
z: Pz β β ^β₯set_solver.c: bool
Ξ, Ξ: list cformula
P: cphase_space
v: nat β propset P
z: Pβ x : P, x β β β x Β· z β β««c: bool
Ξ, Ξ: list cformula
A: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: Ξ) Ξvalid_in v (!A :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: Ξ) Ξβ¨ sq v Ξ Ξ β β¦!Aβ§v^β₯c: bool
Ξ, Ξ: list cformula
A: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯β¨ sq v Ξ Ξ β β¦!Aβ§v^β₯c: bool
Ξ, Ξ: list cformula
A: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯β¨ sq v Ξ Ξ β (((β¦Aβ§v β© cph_J)^β₯)^β₯)^β₯etransitivity; [apply (orth_anti (β¦Aβ§v β© cph_J)); set_solver | apply biorth].c: bool
Ξ, Ξ: list cformula
A: cformula
H: A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§v^β₯β¦Aβ§v^β₯ β (((β¦Aβ§v β© cph_J)^β₯)^β₯)^β₯c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v (!A :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξβ¨ sq v Ξ Ξ β β¦!Aβ§v^β₯etransitivity; [by apply weak_orth | apply biorth].c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξβ¨ sq v Ξ Ξ β (((β¦Aβ§v β© cph_J)^β₯)^β₯)^β₯c: bool
Ξ, Ξ: list cformula
A: cformula
H: !A :: !A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (!A :: !A :: Ξ) Ξvalid_in v (!A :: Ξ) Ξc: bool
Ξ, Ξ: list cformula
A: cformula
H: !A :: !A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (!A :: !A :: Ξ) Ξβ¨ sq v Ξ Ξ β β¦!Aβ§v^β₯c: bool
Ξ, Ξ: list cformula
A: cformula
H: !A :: !A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β (β¦!Aβ§v β β¦!Aβ§v)^β₯β¨ sq v Ξ Ξ β β¦!Aβ§v^β₯etransitivity; [by apply contr_orth | apply biorth].c: bool
Ξ, Ξ: list cformula
A: cformula
H: !A :: !A :: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β (((β¦Aβ§v β© cph_J)^β₯)^β₯ β ((β¦Aβ§v β© cph_J)^β₯)^β₯)^β₯β¨ sq v Ξ Ξ β (((β¦Aβ§v β© cph_J)^β₯)^β₯)^β₯c: bool
Ξ£, Ξ : list cformula
A: cformula
H: βΌΞ£ β’[c] A :: βΞ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (βΌΞ£) (A :: βΞ )valid_in v (βΌΞ£) (!A :: βΞ )c: bool
Ξ£, Ξ : list cformula
A: cformula
H: βΌΞ£ β’[c] A :: βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§vvalid_in v (βΌΞ£) (!A :: βΞ )c: bool
Ξ£, Ξ : list cformula
A: cformula
H: βΌΞ£ β’[c] A :: βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§vβ¨ sq v (βΌΞ£) (βΞ ) β β¦!Aβ§vc: bool
Ξ£, Ξ : list cformula
A: cformula
H: βΌΞ£ β’[c] A :: βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§vβ¨ sq v (βΌΞ£) (βΞ ) β ((β¦Aβ§v β© cph_J)^β₯)^β₯c: bool
Ξ£, Ξ : list cformula
A: cformula
H: βΌΞ£ β’[c] A :: βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§v((β¨ sq v (βΌΞ£) (βΞ ) β© cph_J)^β₯)^β₯ β ((β¦Aβ§v β© cph_J)^β₯)^β₯set_solver.c: bool
Ξ£, Ξ : list cformula
A: cformula
H: βΌΞ£ β’[c] A :: βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§vβ¨ sq v (βΌΞ£) (βΞ ) β© cph_J β β¦Aβ§v β© cph_Jc: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (A :: Ξ)valid_in v Ξ (? A :: Ξ)c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vvalid_in v Ξ (? A :: Ξ)c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vβ¨ sq v Ξ Ξ β β¦? Aβ§vc: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vβ¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β© cph_J)^β₯etransitivity; [apply biorth | apply orth_anti; set_solver].c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β β¦Aβ§vβ¦Aβ§v β (β¦Aβ§v^β₯ β© cph_J)^β₯c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξvalid_in v Ξ (? A :: Ξ)c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξβ¨ sq v Ξ Ξ β β¦? Aβ§vby apply weak_orth.c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ Ξβ¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β© cph_J)^β₯c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] ? A :: ? A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (? A :: ? A :: Ξ)valid_in v Ξ (? A :: Ξ)c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] ? A :: ? A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: valid_in v Ξ (? A :: ? A :: Ξ)β¨ sq v Ξ Ξ β β¦? Aβ§vc: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] ? A :: ? A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β (β¦? Aβ§v^β₯ β β¦? Aβ§v^β₯)^β₯β¨ sq v Ξ Ξ β β¦? Aβ§vby apply contr_orth.c: bool
Ξ, Ξ: list cformula
A: cformula
H: Ξ β’[c] ? A :: ? A :: Ξ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v Ξ Ξ β (((β¦Aβ§v^β₯ β© cph_J)^β₯)^β₯ β ((β¦Aβ§v^β₯ β© cph_J)^β₯)^β₯)^β₯β¨ sq v Ξ Ξ β (β¦Aβ§v^β₯ β© cph_J)^β₯c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: βΌΞ£ β’[c] βΞ
P: cphase_space
v: nat β propset P
IHcll: valid_in v (A :: βΌΞ£) (βΞ )valid_in v (? A :: βΌΞ£) (βΞ )c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: βΌΞ£ β’[c] βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§v^β₯valid_in v (? A :: βΌΞ£) (βΞ )c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: βΌΞ£ β’[c] βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§v^β₯β¨ sq v (βΌΞ£) (βΞ ) β β¦? Aβ§v^β₯c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: βΌΞ£ β’[c] βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§v^β₯β¨ sq v (βΌΞ£) (βΞ ) β ((β¦Aβ§v^β₯ β© cph_J)^β₯)^β₯c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: βΌΞ£ β’[c] βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§v^β₯((β¨ sq v (βΌΞ£) (βΞ ) β© cph_J)^β₯)^β₯ β ((β¦Aβ§v^β₯ β© cph_J)^β₯)^β₯set_solver. Qed.c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: βΌΞ£ β’[c] βΞ
P: cphase_space
v: nat β propset P
IHcll: β¨ sq v (βΌΞ£) (βΞ ) β β¦Aβ§v^β₯β¨ sq v (βΌΞ£) (βΞ ) β© cph_J β β¦Aβ§v^β₯ β© cph_J
Using the semantics: balance
pole: propset Zcphase_spacepole: propset Zcphase_spaceall: try apply _; intros; unfold equiv in *; set_unfold; repeat match goal with H : _ β§ _ |- _ => destruct H end; subst; rewrite ?Z.add_0_l, ?Z.add_0_r in *; try done; lia. Defined. Definition one_each {pole} : nat -> propset (int_space pole) := Ξ» _, {[ z | z = 1%Z ]}.pole: propset Zβ x y z : Z, (x + (y + z))%Z β‘ (x + y + z)%Zpole: propset Zβ x y : Z, (x + y)%Z β‘ (y + x)%Zpole: propset Zβ x : Z, (0 + x)%Z β‘ xpole: propset Zβ x y : Z, x β‘ y β x β pole β y β polepole: propset Zβ x y : Z, x β‘ y β x β {[ z | z = 0%Z ]} β y β {[ z | z = 0%Z ]}pole: propset Z0%Z β {[ z | z = 0%Z ]}pole: propset Zβ x y : Z, x β {[ z | z = 0%Z ]} β y β {[ z | z = 0%Z ]} β (x + y)%Z β {[ z | z = 0%Z ]}pole: propset Zβ j y : Z, j β {[ z | z = 0%Z ]} β y β pole β (j + y)%Z β polepole: propset Zβ j y : Z, j β {[ z | z = 0%Z ]} β (j + j + y)%Z β pole β (j + y)%Z β pole
The balance model: the pole is {0}.
Definition balance_space : cphase_space := int_space {[ z | z = 0%Z ]}.
Every variable denotes {1}: one unit of supply.
Definition bval : nat -> propset balance_space := Ξ» _, {[ z | z = 1%Z ]}.
denotes A n: in the balance model, A denotes exactly {n}.
Definition denotes (A : cformula) (n : Z) : Prop := β z : balance_space, z β β¦Aβ§bval β z = n. Section Balance. Notation M := balance_space. Implicit Types (X Y : propset M) (z : M).X: propset M
n: Z(β z, z β X β z = n) β β z, z β X^β₯ β z = (- n)%ZX: propset M
n: Z(β z, z β X β z = n) β β z, z β X^β₯ β z = (- n)%ZX: propset M
n: Z
HX: β z, z β X β z = n
z: Mz β X^β₯ β z = (- n)%ZX: propset M
n: Z
HX: β z, z β X β z = n
z: M(β x : M, x β X β x Β· z β β««) β z = (- n)%ZX: propset M
n: Z
HX: β z, z β X β z = n
z: M(β x : M, x β X β x Β· z β β««) β z = (- n)%ZX: propset M
n: Z
HX: β z, z β X β z = n
z: Mz = (- n)%Z β β x : M, x β X β x Β· z β β««X: propset M
n: Z
HX: β z, z β X β z = n
z: M(β x : M, x β X β x Β· z β β««) β z = (- n)%ZX: propset M
n: Z
HX: β z, z β X β z = n
z: M
H: β x : M, x β X β x Β· z β β««z = (- n)%ZX: propset M
n: Z
HX: β z, z β X β z = n
z: M
H: n Β· z β β««z = (- n)%ZX: propset M
n: Z
HX: β z, z β X β z = n
z: M
H: (n + z)%Z β {[ z | z = 0%Z ]}z = (- n)%Zlia.X: propset Z
n, z: Z
HX: β x : Z, x β X β x = n
H: (n + z)%Z = 0%Zz = (- n)%ZX: propset M
n: Z
HX: β z, z β X β z = n
z: Mz = (- n)%Z β β x : M, x β X β x Β· z β β««X: propset M
n: Z
HX: β z, z β X β z = n
x: M
Hx: x = nx Β· (- n)%Z β β««X: propset M
n: Z
HX: β z, z β X β z = n
x: M
Hx: x = n(x + - n)%Z β {[ z | z = 0%Z ]}lia. Qed.X: propset Z
n, x: Z
HX: β x : Z, x β X β x = n
Hx: x = n(x + - n)%Z = 0%ZX, Y: propset M
n, m: Z(β z, z β X β z = n) β (β z, z β Y β z = m) β β z, z β X β Y β z = (n + m)%ZX, Y: propset M
n, m: Z(β z, z β X β z = n) β (β z, z β Y β z = m) β β z, z β X β Y β z = (n + m)%ZX, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = m
z: Mz β X β Y β z = (n + m)%ZX, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = m
z: M(β a b : M, a β X β§ b β Y β§ z β‘ a Β· b) β z = (n + m)%ZX, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = m
z: M(β a b : M, a β X β§ b β Y β§ z β‘ a Β· b) β z = (n + m)%ZX, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = m
z: Mz = (n + m)%Z β β a b : M, a β X β§ b β Y β§ z β‘ a Β· bX, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = m
z: M(β a b : M, a β X β§ b β Y β§ z β‘ a Β· b) β z = (n + m)%Zexact Hz.X, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = m
z: M
Hz: z β‘ n Β· mz = (n + m)%ZX, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = m
z: Mz = (n + m)%Z β β a b : M, a β X β§ b β Y β§ z β‘ a Β· bX, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = mβ a b : M, a β X β§ b β Y β§ (n + m)%Z β‘ a Β· bX, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = mn β X β§ m β Y β§ (n + m)%Z β‘ n Β· mdone. Qed.X, Y: propset M
n, m: Z
HX: β z, z β X β z = n
HY: β z, z β Y β z = mn = n β§ m = m β§ (n + m)%Z β‘ n Β· mp: natdenotes $p 1p: natdenotes $p 1p: natβ z, z β bval p β z = 1%Zp: nat
H: β z, z β bval p β z = 1%Zdenotes $p 1p: natβ z, z β bval p β z = 1%Zp: nat
z: Mz β bval p β z = 1%Zby rewrite elem_of_PropSet.p: nat
z: Mz β {[ z0 | z0 = 1%Z ]} β z = 1%Zp: nat
H: β z, z β bval p β z = 1%Zdenotes $p 1p: nat
H: β z, z β bval p β z = 1%Z
z: Mz β β¦$pβ§bval β z = 1%Zp: nat
H: β z, z β bval p β z = 1%Z
z: Mz β (bval p^β₯)^β₯ β z = 1%Zlia. Qed.p: nat
H: β z, z β bval p β z = 1%Z
z: Mz = (- - (1))%Z β z = 1%ZA: cformula
n: Zdenotes A n β denotes (A^β₯) (- n)A: cformula
n: Zdenotes A n β denotes (A^β₯) (- n)exact (single_orth _ _ H z). Qed.A: cformula
n: Z
H: denotes A n
z: Mz β β¦A^β₯β§bval β z = (- n)%ZA, B: cformula
n, m: Zdenotes A n β denotes B m β denotes (A β B) (n + m)A, B: cformula
n, m: Zdenotes A n β denotes B m β denotes (A β B) (n + m)A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: Mz β β¦A β Bβ§bval β z = (n + m)%ZA, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: Mz β ((β¦Aβ§bval β β¦Bβ§bval)^β₯)^β₯ β z = (n + m)%Zlia. Qed.A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: Mz = (- - (n + m))%Z β z = (n + m)%ZA, B: cformula
n, m: Zdenotes A n β denotes B m β denotes (A β B) (n + m)A, B: cformula
n, m: Zdenotes A n β denotes B m β denotes (A β B) (n + m)A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: Mz β β¦A β Bβ§bval β z = (n + m)%ZA, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: Mz β (β¦Aβ§bval^β₯ β β¦Bβ§bval^β₯)^β₯ β z = (n + m)%Zlia. Qed.A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: Mz = (- (- n + - m))%Z β z = (n + m)%ZA, B: cformula
n: Zdenotes A n β denotes B n β denotes (A & B) nA, B: cformula
n: Zdenotes A n β denotes B n β denotes (A & B) nA, B: cformula
n: Z
HA: denotes A n
HB: denotes B n
z: Mz β β¦A & Bβ§bval β z = nA, B: cformula
n: Z
HA: denotes A n
HB: denotes B n
z: Mz β β¦Aβ§bval β© β¦Bβ§bval β z = nnaive_solver. Qed.A, B: cformula
n: Z
HA: denotes A n
HB: denotes B n
z: Mz = n β§ z = n β z = n
A list of singletons multiplies to the singleton of the sum.
L: list (propset M)
ns: list ZForall2 (Ξ» X (n : M), β z, z β X β z = n) L ns β (foldr Z.add 0%Z ns : M) β β¨ LL: list (propset M)
ns: list ZForall2 (Ξ» X (n : M), β z, z β X β z = n) L ns β (foldr Z.add 0%Z ns : M) β β¨ L0%Z β one_setX: propset M
n: M
L: list (propset M)
ns: list M
HX: β z, z β X β z = n
IH: foldr Z.add 0%Z ns β β¨ L(n + foldr Z.add 0 ns)%Z β X β β¨ Lby apply elem_of_one.0%Z β one_setX: propset M
n: M
L: list (propset M)
ns: list M
HX: β z, z β X β z = n
IH: foldr Z.add 0%Z ns β β¨ L(n + foldr Z.add 0 ns)%Z β X β β¨ LX: propset M
n: M
L: list (propset M)
ns: list M
HX: β z, z β X β z = n
IH: foldr Z.add 0%Z ns β β¨ Lβ a b : M, a β X β§ b β β¨ L β§ (n + foldr Z.add 0 ns)%Z β‘ a Β· bby rewrite HX. Qed.X: propset M
n: M
L: list (propset M)
ns: list M
HX: β z, z β X β z = n
IH: foldr Z.add 0%Z ns β β¨ Ln β X β§ foldr Z.add 0%Z ns β β¨ L β§ (n + foldr Z.add 0 ns)%Z β‘ n Β· foldr Z.add 0%Z nsk: Z
l: list Zfoldr Z.add k l = (k + foldr Z.add 0 l)%Zinduction l; simpl; lia. Qed.k: Z
l: list Zfoldr Z.add k l = (k + foldr Z.add 0 l)%Zl: list Zfoldr Z.add 0%Z (map Z.opp l) = (- foldr Z.add 0 l)%Zinduction l; simpl; lia. Qed.l: list Zfoldr Z.add 0%Z (map Z.opp l) = (- foldr Z.add 0 l)%Z
The balance theorem: in a provable sequent whose formulas all have
weights, the supply on the left equals the supply on the right.
Ξ, Ξ: list cformula
ns, ms: list ZΞ β’ Ξ β Forall2 denotes Ξ ns β Forall2 denotes Ξ ms β foldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list ZΞ β’ Ξ β Forall2 denotes Ξ ns β Forall2 denotes Ξ ms β foldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ msfoldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: valid_in bval Ξ Ξfoldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««foldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««
Hsum: (foldr Z.add 0%Z (ns ++ map Z.opp ms) : M) β β¨ sq bval Ξ Ξfoldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««foldr Z.add 0%Z (ns ++ map Z.opp ms) β β¨ sq bval Ξ ΞΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««
Hsum: (foldr Z.add 0%Z (ns ++ map Z.opp ms) : M) β β¨ sq bval Ξ Ξfoldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««
Hsum: foldr Z.add 0%Z (ns ++ map Z.opp ms) β β««foldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««
Hsum: foldr Z.add 0%Z (ns ++ map Z.opp ms) β {[ z | z = 0%Z ]}foldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««
Hsum: foldr Z.add 0%Z (ns ++ map Z.opp ms) = 0%Zfoldr Z.add 0%Z ns = foldr Z.add 0%Z mslia.Ξ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««
Hsum: (- foldr Z.add 0 ms + foldr Z.add 0 ns)%Z = 0%Zfoldr Z.add 0%Z ns = foldr Z.add 0%Z msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««foldr Z.add 0%Z (ns ++ map Z.opp ms) β β¨ sq bval Ξ ΞΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««Forall2 (Ξ» X (n : M), β z, z β X β z = n) (sq bval Ξ Ξ) (ns ++ map Z.opp ms)Ξ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««Forall2 (Ξ» X (n : M), β z, z β X β z = n) (map (interp bval) Ξ ++ map (Ξ» B : cformula, β¦Bβ§bval^β₯) Ξ) (ns ++ map Z.opp ms)Ξ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««Forall2 (Ξ» X (n : M), β z, z β X β z = n) (map (interp bval) Ξ) nsΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««Forall2 (Ξ» X (n : M), β z, z β X β z = n) (map (Ξ» B : cformula, β¦Bβ§bval^β₯) Ξ) (map Z.opp ms)Ξ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««Forall2 (Ξ» X (n : M), β z, z β X β z = n) (map (interp bval) Ξ) nsexact HΞ.Ξ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««Forall2 ((Ξ» X (n : M), β z, z β X β z = n) β interp bval) Ξ nsΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««Forall2 (Ξ» X (n : M), β z, z β X β z = n) (map (Ξ» B : cformula, β¦Bβ§bval^β₯) Ξ) (map Z.opp ms)Ξ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««Forall2 (Ξ» (x1 : cformula) (x2 : Z), β z, z β β¦x1β§bval^β₯ β z = (- x2)%Z) Ξ msΞ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««β (x : cformula) (y : Z), denotes x y β β z, z β β¦xβ§bval^β₯ β z = (- y)%Zby apply single_orth. Qed. End Balance.Ξ, Ξ: list cformula
ns, ms: list Z
H: Ξ β’ Ξ
HΞ: Forall2 denotes Ξ ns
HΞ: Forall2 denotes Ξ ms
S: β¨ sq bval Ξ Ξ β β««
B: cformula
m: Z
HB: denotes B mβ z, z β β¦Bβ§bval^β₯ β z = (- m)%Z
weigh proves the Forall2 denotes side conditions of balance,
computing each weight as it goes. It dispatches on the shape of the
formula, so it never asks Rocq to unify two different connectives
(which would unfold denotes and interp and take forever).
Ltac weigh :=
repeat match goal with
| |- Forall2 _ _ _ => constructor
| |- denotes ($ _) _ => apply denotes_atom
| |- denotes (_^β₯) _ => apply denotes_neg
| |- denotes (_ β _) _ => apply denotes_tensor
| |- denotes (_ β
_) _ => apply denotes_par
| |- denotes (_ & _) _ => apply denotes_with
end.
refute_by_balance applies balance with weights left to weigh,
then checks that the two sums differ.
Ltac refute_by_balance :=
intros H; eapply balance in H; [| weigh | weigh]; simpl in H; lia.
No contraction: supply 1 β demand 2.
Β¬ ([$0] β’ [$0 β $0])refute_by_balance. Qed.Β¬ ([$0] β’ [$0 β $0])
No weakening: supply 2 β demand 1.
Β¬ ([$0; $1] β’ [$0])refute_by_balance. Qed.Β¬ ([$0; $1] β’ [$0])
& is not β: $0 & $1 weighs 1 (both components are offered,
only one is used), $0 β $1 weighs 2.
Β¬ ([$0 & $1] β’ [$0 β $1])refute_by_balance. Qed.Β¬ ([$0 & $1] β’ [$0 β $1])
No duplicator: $0 βΈ $0 β $0, i.e. $0^β₯ β
($0 β $0), has weight
-1 + 2 = 1, but the empty left side supplies nothing.
Β¬ ([] β’ [$0 βΈ $0 β $0])refute_by_balance. Qed.Β¬ ([] β’ [$0 βΈ $0 β $0])
No eraser: $0 β $1 βΈ $0 has weight -2 + 1 = -1.
Β¬ ([] β’ [$0 β $1 βΈ $0])refute_by_balance. Qed.Β¬ ([] β’ [$0 β $1 βΈ $0])
Balance is necessary but not sufficient. [$0 β
$1] β’ [$0 β $1]
balances, since both sides weigh 2, yet it is not provable without
the extra MIX rule (Ξβ β’ Ξβ and Ξβ β’ Ξβ give Ξβ,Ξβ β’ Ξβ,Ξβ).
The balance model cannot tell the two formulas apart:
denotes ($0 β $1) (1 + 1) β§ denotes ($0 β $1) (1 + 1)split; weigh. Qed.denotes ($0 β $1) (1 + 1) β§ denotes ($0 β $1) (1 + 1)
Consistency
Β¬ ([] β’ [])Β¬ ([] β’ [])H: [] β’ []FalseH: [] β’ []0%Z β βby apply elem_of_one. Qed.H: [] β’ []0%Z β β¨ sq one_each [] []
As a consequence, neither β₯ nor π is provable: cut either one
against its left rule to get β’.
Β¬ ([] β’ [β₯])Β¬ ([] β’ [β₯])apply consistency, (cut _ [] [] [] [] β₯); [done | exact H | apply botL]. Qed.H: [] β’ [β₯]FalseΒ¬ ([] β’ [π])Β¬ ([] β’ [π])apply consistency, (cut _ [] [] [] [] π); [done | exact H | apply zeroL]. Qed.H: [] β’ [π]False