Built with doc-gen4, running Lean4.
Bubbles () indicate interactive fragments: hover for details, tap to reveal contents.
Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus.
On Mac, use Cmdinstead of Ctrl.
import Pretty.Defs.Factory
import Pretty.Tactic
/-!
## The cost factory for SnowWhite
-/
def
80
/--
The cost factory for SnowWhite (Section 6) along with proofs that
the operations satisfy the contracts imposed by the cost factory interface.
-/
def
∀ {c c' l : ℕ},
c≤c' →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
cl)
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
c'l)=true
∀ {c c' l : ℕ},
c≤c' →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
cl)
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
c'l)=true
∀ {c c' l : ℕ},
c≤c' →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
cl)
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
c'l)=true
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
cl)
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
c'l)=true
∀ {c c' l : ℕ},
c≤c' →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
cl)
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
c'l)=true
∀ {c c' l : ℕ},
c≤c' →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
cl)
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
c'l)=true
∀ {c c' l : ℕ},
c≤c' →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
cl)
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
c'l)=true
∀ {c c' l : ℕ},
c≤c' →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
cl)
((fun cl =>
let a := maxmaxwc-maxw;
let b := c+l-maxmaxwc;
(b* (2*a+b), 0))
c'l)=true
∀ {i i' : ℕ},
i≤i' →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun x => (0, 1)) i) ((fun x => (0, 1)) i')=true
Goals accomplished! 🐙
,
concat_monotonic :=
Goals accomplished! 🐙
∀ {cost₁ cost₂ cost₃ cost₄ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₁cost₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₃cost₄=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₁cost₃)
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₂cost₄)=true
∀ {cost₁ cost₂ cost₃ cost₄ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₁cost₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₃cost₄=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₁cost₃)
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₂cost₄)=true
∀ {cost₁ cost₂ cost₃ cost₄ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₁cost₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₃cost₄=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₁cost₃)
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₂cost₄)=true
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
(sumo₁, h₁)(sumo₂, h₂)=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
(sumo₃, h₃)(sumo₄, h₄)=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
(sumo₁, h₁)(sumo₃, h₃))
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
(sumo₂, h₂)(sumo₄, h₄))=true
∀ {cost₁ cost₂ cost₃ cost₄ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₁cost₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₃cost₄=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₁cost₃)
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₂cost₄)=true
(if sumo₁=sumo₂ then h₁≤h₂ else sumo₁<sumo₂) →
(if sumo₃=sumo₄ then h₃≤h₄ else sumo₃<sumo₄) →
if sumo₁+sumo₃=sumo₂+sumo₄ then h₁+h₃≤h₂+h₄ else sumo₁+sumo₃<sumo₂+sumo₄
∀ {cost₁ cost₂ cost₃ cost₄ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₁cost₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₃cost₄=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₁cost₃)
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₂cost₄)=true
∀ {cost₁ cost₂ cost₃ cost₄ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₁cost₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₃cost₄=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₁cost₃)
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₂cost₄)=true
∀ {cost₁ cost₂ cost₃ cost₄ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₁cost₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
cost₃cost₄=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₁cost₃)
((fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => (sumo₁+sumo₂, h₁+h₂))
cost₂cost₄)=true
∀ {c₁ c₂ c₃ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₃=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₃=true
∀ {c₁ c₂ c₃ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₃=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₃=true
∀ {c₁ c₂ c₃ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₃=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₃=true
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
(sumo₁, h₁)(sumo₂, h₂)=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
(sumo₂, h₂)(sumo₃, h₃)=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
(sumo₁, h₁)(sumo₃, h₃)=true
∀ {c₁ c₂ c₃ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₃=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₃=true
(if sumo₁=sumo₂ then h₁≤h₂ else sumo₁<sumo₂) →
(if sumo₂=sumo₃ then h₂≤h₃ else sumo₂<sumo₃) → if sumo₁=sumo₃ then h₁≤h₃ else sumo₁<sumo₃
∀ {c₁ c₂ c₃ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₃=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₃=true
∀ {c₁ c₂ c₃ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₃=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₃=true
∀ {c₁ c₂ c₃ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₃=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₃=true
∀ {c₁ c₂ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true →
c₁=c₂
∀ {c₁ c₂ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true →
c₁=c₂
∀ {c₁ c₂ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true →
c₁=c₂
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
(sumo₁, h₁)(sumo₂, h₂)=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
(sumo₂, h₂)(sumo₁, h₁)=true →
(sumo₁, h₁)=(sumo₂, h₂)
∀ {c₁ c₂ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true →
c₁=c₂
(if sumo₁=sumo₂ then h₁≤h₂ else sumo₁<sumo₂) →
(if sumo₂=sumo₁ then h₂≤h₁ else sumo₂<sumo₁) → sumo₁=sumo₂∧h₁=h₂
∀ {c₁ c₂ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true →
c₁=c₂
∀ {c₁ c₂ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true →
c₁=c₂
∀ {c₁ c₂ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true →
c₁=c₂
∀ {c₁ c₂ : ℕ×ℕ},
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true →
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true →
c₁=c₂
∀ (c₁ c₂ : ℕ×ℕ),
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true∨(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true
∀ (c₁ c₂ : ℕ×ℕ),
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true∨(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true
∀ (c₁ c₂ : ℕ×ℕ),
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true∨(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
(sumo₁, h₁)(sumo₂, h₂)=true∨(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
(sumo₂, h₂)(sumo₁, h₁)=true
∀ (c₁ c₂ : ℕ×ℕ),
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true∨(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true
(if sumo₁=sumo₂ then h₁≤h₂ else sumo₁<sumo₂) ∨if sumo₂=sumo₁ then h₂≤h₁ else sumo₂<sumo₁
∀ (c₁ c₂ : ℕ×ℕ),
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true∨(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true
∀ (c₁ c₂ : ℕ×ℕ),
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true∨(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true
∀ (c₁ c₂ : ℕ×ℕ),
(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₁c₂=true∨(fun xx_1 =>
match x with
| (sumo₁, h₁) =>
match x_1 with
| (sumo₂, h₂) => if sumo₁=sumo₂ then decide (h₁≤h₂) else decide (sumo₁<sumo₂))
c₂c₁=true