26 lines
1.2 KiB
Text
26 lines
1.2 KiB
Text
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
|