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