blob: 1235523a84e1b39fedde6c0a3989ee4b7d6194bb [file] [edit]
inductive Lex (ra : α → α → Prop) (rb : β → β → Prop) : α × β → α × β → Prop where
| left {a₁} (b₁) {a₂} (b₂) (h : ra a₁ a₂) : Lex ra rb (a₁, b₁) (a₂, b₂)
| right (a) {b₁ b₂} (h : rb b₁ b₂) : Lex ra rb (a, b₁) (a, b₂)
def lexAccessible1 {ra : α → α → Prop} {rb : β → β → Prop} (aca : (a : α) → Acc ra a) (acb : (b : β) → Acc rb b) (a : α) (b : β) : Acc (Lex ra rb) (a, b) := by
induction aca a generalizing b with
| intro xa aca iha =>
induction acb b with
| intro xb acb ihb =>
apply Acc.intro (xa, xb)
intro p lt
cases lt with
| left b1 b2 h => apply iha _ h
| @right a b1 b2 h => apply ihb _ h
def lexAccessible2 {ra : α → α → Prop} {rb : β → β → Prop} (aca : (a : α) → Acc ra a) (acb : (b : β) → Acc rb b) (a : α) (b : β) : Acc (Lex ra rb) (a, b) := by
induction (aca a) generalizing b with
| intro xa aca iha =>
induction (acb b) with
| intro xb acb ihb =>
apply Acc.intro (xa, xb)
intro p lt
cases lt with
| @left a1 b1 a2 b2 h => apply iha _ h
| right _ h => apply ihb _ h