α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ {l₁ l₂ l₃ : Lists α}, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
α : Type u_1
⊢ ∀ {l₁ l₂ l₃ : Lists α}, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
let trans := fun l₁ : Lists α => ∀ ⦃l₂ l₃⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ PProd (∀ (l₁ : Lists α), trans l₁) (∀ (l : Lists' α true) (l' : Lists α), l' ∈ Lists'.toList l → trans l')
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ {l₁ l₂ l₃ : Lists α}, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
suffices PProd (∀ l₁, trans l₁) (∀ (l : Lists' α true), ∀ l' ∈ l.toList, trans l') by exact this.1
case C0
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ (a : α), trans (atom a)

case C1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ (l : Lists' α true), (∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l') → trans (of' l)

case D0
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ (l' : Lists α), l' ∈ Lists'.toList Lists'.nil → trans l'

case D1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ (a : Lists α) (l : Lists' α true),
    trans a →
      (∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l') →
        ∀ (l' : Lists α), l' ∈ Lists'.toList (Lists'.cons a l) → trans l'
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ PProd (∀ (l₁ : Lists α), trans l₁) (∀ (l : Lists' α true) (l' : Lists α), l' ∈ Lists'.toList l → trans l')
apply inductionMut
no goals
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
this : PProd (∀ (l₁ : Lists α), trans l₁) (∀ (l : Lists' α true) (l' : Lists α), l' ∈ Lists'.toList l → trans l')
⊢ ∀ {l₁ l₂ l₃ : Lists α}, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
exact this.1
case C0
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : α
l₂ l₃ : Lists α
h₁ : atom a ~ l₂
h₂ : l₂ ~ l₃
⊢ atom a ~ l₃
case C0
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ (a : α), trans (atom a)
intro a l₂ l₃ h₁ h₂
no goals
case C0
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : α
l₂ l₃ : Lists α
h₁ : atom a ~ l₂
h₂ : l₂ ~ l₃
⊢ atom a ~ l₃
rwa [← equiv_atom.1 h₁] at h₂
case C1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ l₃ : Lists α
h₁ : of' l₁ ~ l₂
h₂ : l₂ ~ l₃
⊢ of' l₁ ~ l₃
case C1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ (l : Lists' α true), (∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l') → trans (of' l)
intro l₁ IH l₂ l₃ h₁ h₂
case C1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ l₃ : Lists α
h₁ : of' l₁ ~ l₂
h₂ : l₂ ~ l₃
h₁' : of' l₁ ~ l₂
⊢ of' l₁ ~ l₃
case C1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ l₃ : Lists α
h₁ : of' l₁ ~ l₂
h₂ : l₂ ~ l₃
⊢ of' l₁ ~ l₃
have h₁' := h₁
case C1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ l₃ : Lists α
h₁ : of' l₁ ~ l₂
h₂ : l₂ ~ l₃
h₁' : of' l₁ ~ l₂
h₂' : l₂ ~ l₃
⊢ of' l₁ ~ l₃
case C1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ l₃ : Lists α
h₁ : of' l₁ ~ l₂
h₂ : l₂ ~ l₃
h₁' : of' l₁ ~ l₂
⊢ of' l₁ ~ l₃
have h₂' := h₂
case C1.refl
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₃ : Lists α
h₂ : of' l₁ ~ l₃
h₁' : of' l₁ ~ of' l₁
h₂' : of' l₁ ~ l₃
⊢ of' l₁ ~ l₃

case C1.antisymm
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₃ : Lists α
l₂ : Lists' α true
a✝¹ : Lists'.Subset l₁ l₂
a✝ : Lists'.Subset l₂ l₁
h₂ : { fst := true, snd := l₂ } ~ l₃
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
h₂' : { fst := true, snd := l₂ } ~ l₃
⊢ of' l₁ ~ l₃
case C1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ l₃ : Lists α
h₁ : of' l₁ ~ l₂
h₂ : l₂ ~ l₃
h₁' : of' l₁ ~ l₂
h₂' : l₂ ~ l₃
⊢ of' l₁ ~ l₃
cases' h₁ with _ _ l₂
case C1.antisymm.refl
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝¹ : Lists'.Subset l₁ l₂
a✝ : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₂ }
⊢ of' l₁ ~ { fst := true, snd := l₂ }

case C1.antisymm.antisymm
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
⊢ of' l₁ ~ { fst := true, snd := l₃ }
case C1.antisymm
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₃ : Lists α
l₂ : Lists' α true
a✝¹ : Lists'.Subset l₁ l₂
a✝ : Lists'.Subset l₂ l₁
h₂ : { fst := true, snd := l₂ } ~ l₃
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
h₂' : { fst := true, snd := l₂ } ~ l₃
⊢ of' l₁ ~ l₃
cases' h₂ with _ _ l₃
case C1.antisymm.antisymm.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
⊢ of' l₁ ~ { fst := true, snd := l₃ }
case C1.antisymm.antisymm
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
⊢ of' l₁ ~ { fst := true, snd := l₃ }
cases' Equiv.antisymm_iff.1 h₁' with hl₁ hr₁
case C1.antisymm.antisymm.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
⊢ of' l₁ ~ { fst := true, snd := l₃ }
case C1.antisymm.antisymm.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
⊢ of' l₁ ~ { fst := true, snd := l₃ }
cases' Equiv.antisymm_iff.1 h₂' with hl₂ hr₂
case C1.antisymm.antisymm.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
⊢ l₁ ⊆ l₃ ∧ l₃ ⊆ l₁
case C1.antisymm.antisymm.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
⊢ of' l₁ ~ { fst := true, snd := l₃ }
apply Equiv.antisymm_iff.2
case C1.antisymm.antisymm.intro.intro.left
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
⊢ ∀ (a : Lists α), a ∈ Lists'.toList l₁ → a ∈ l₃

case C1.antisymm.antisymm.intro.intro.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
⊢ ∀ (a : Lists α), a ∈ Lists'.toList l₃ → a ∈ l₁
case C1.antisymm.antisymm.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
⊢ l₁ ⊆ l₃ ∧ l₃ ⊆ l₁
constructor <;> apply Lists'.subset_def.2
no goals
case C1.refl
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₃ : Lists α
h₂ : of' l₁ ~ l₃
h₁' : of' l₁ ~ of' l₁
h₂' : of' l₁ ~ l₃
⊢ of' l₁ ~ l₃
exact h₂
no goals
case C1.antisymm.refl
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝¹ : Lists'.Subset l₁ l₂
a✝ : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₂ }
⊢ of' l₁ ~ { fst := true, snd := l₂ }
exact h₁'
case C1.antisymm.antisymm.intro.intro.left
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₁ : Lists α
m₁ : a₁ ∈ Lists'.toList l₁
⊢ a₁ ∈ l₃
case C1.antisymm.antisymm.intro.intro.left
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
⊢ ∀ (a : Lists α), a ∈ Lists'.toList l₁ → a ∈ l₃
intro a₁ m₁
case C1.antisymm.antisymm.intro.intro.left.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₁ : Lists α
m₁ : a₁ ∈ Lists'.toList l₁
a₂ : Lists α
m₂ : a₂ ∈ Lists'.toList l₂
e₁₂ : a₁ ~ a₂
⊢ a₁ ∈ l₃
case C1.antisymm.antisymm.intro.intro.left
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₁ : Lists α
m₁ : a₁ ∈ Lists'.toList l₁
⊢ a₁ ∈ l₃
rcases Lists'.mem_of_subset' hl₁ m₁ with ⟨a₂, m₂, e₁₂⟩
case C1.antisymm.antisymm.intro.intro.left.intro.intro.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₁ : Lists α
m₁ : a₁ ∈ Lists'.toList l₁
a₂ : Lists α
m₂ : a₂ ∈ Lists'.toList l₂
e₁₂ : a₁ ~ a₂
a₃ : Lists α
m₃ : a₃ ∈ Lists'.toList l₃
e₂₃ : a₂ ~ a₃
⊢ a₁ ∈ l₃
case C1.antisymm.antisymm.intro.intro.left.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₁ : Lists α
m₁ : a₁ ∈ Lists'.toList l₁
a₂ : Lists α
m₂ : a₂ ∈ Lists'.toList l₂
e₁₂ : a₁ ~ a₂
⊢ a₁ ∈ l₃
rcases Lists'.mem_of_subset' hl₂ m₂ with ⟨a₃, m₃, e₂₃⟩
no goals
case C1.antisymm.antisymm.intro.intro.left.intro.intro.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₁ : Lists α
m₁ : a₁ ∈ Lists'.toList l₁
a₂ : Lists α
m₂ : a₂ ∈ Lists'.toList l₂
e₁₂ : a₁ ~ a₂
a₃ : Lists α
m₃ : a₃ ∈ Lists'.toList l₃
e₂₃ : a₂ ~ a₃
⊢ a₁ ∈ l₃
exact ⟨a₃, m₃, IH _ m₁ e₁₂ e₂₃⟩
case C1.antisymm.antisymm.intro.intro.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₃ : Lists α
m₃ : a₃ ∈ Lists'.toList l₃
⊢ a₃ ∈ l₁
case C1.antisymm.antisymm.intro.intro.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
⊢ ∀ (a : Lists α), a ∈ Lists'.toList l₃ → a ∈ l₁
intro a₃ m₃
case C1.antisymm.antisymm.intro.intro.right.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₃ : Lists α
m₃ : a₃ ∈ Lists'.toList l₃
a₂ : Lists α
m₂ : a₂ ∈ Lists'.toList l₂
e₃₂ : a₃ ~ a₂
⊢ a₃ ∈ l₁
case C1.antisymm.antisymm.intro.intro.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₃ : Lists α
m₃ : a₃ ∈ Lists'.toList l₃
⊢ a₃ ∈ l₁
rcases Lists'.mem_of_subset' hr₂ m₃ with ⟨a₂, m₂, e₃₂⟩
case C1.antisymm.antisymm.intro.intro.right.intro.intro.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₃ : Lists α
m₃ : a₃ ∈ Lists'.toList l₃
a₂ : Lists α
m₂ : a₂ ∈ Lists'.toList l₂
e₃₂ : a₃ ~ a₂
a₁ : Lists α
m₁ : a₁ ∈ Lists'.toList l₁
e₂₁ : a₂ ~ a₁
⊢ a₃ ∈ l₁
case C1.antisymm.antisymm.intro.intro.right.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₃ : Lists α
m₃ : a₃ ∈ Lists'.toList l₃
a₂ : Lists α
m₂ : a₂ ∈ Lists'.toList l₂
e₃₂ : a₃ ~ a₂
⊢ a₃ ∈ l₁
rcases Lists'.mem_of_subset' hr₁ m₂ with ⟨a₁, m₁, e₂₁⟩
no goals
case C1.antisymm.antisymm.intro.intro.right.intro.intro.intro.intro
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
l₁ : Lists' α true
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l₁ → trans l'
l₂ : Lists' α true
a✝³ : Lists'.Subset l₁ l₂
a✝² : Lists'.Subset l₂ l₁
h₁' : of' l₁ ~ { fst := true, snd := l₂ }
l₃ : Lists' α true
a✝¹ : Lists'.Subset l₂ l₃
a✝ : Lists'.Subset l₃ l₂
h₂' : { fst := true, snd := l₂ } ~ { fst := true, snd := l₃ }
hl₁ : l₁ ⊆ l₂
hr₁ : l₂ ⊆ l₁
hl₂ : l₂ ⊆ l₃
hr₂ : l₃ ⊆ l₂
a₃ : Lists α
m₃ : a₃ ∈ Lists'.toList l₃
a₂ : Lists α
m₂ : a₂ ∈ Lists'.toList l₂
e₃₂ : a₃ ~ a₂
a₁ : Lists α
m₁ : a₁ ∈ Lists'.toList l₁
e₂₁ : a₂ ~ a₁
⊢ a₃ ∈ l₁
exact ⟨a₁, m₁, (IH _ m₁ e₂₁.symm e₃₂.symm).symm⟩
no goals
case D0
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ (l' : Lists α), l' ∈ Lists'.toList Lists'.nil → trans l'
rintro _ ⟨⟩
case D1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ (l' : Lists α), l' ∈ Lists'.toList (Lists'.cons a l) → trans l'
case D1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
⊢ ∀ (a : Lists α) (l : Lists' α true),
    trans a →
      (∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l') →
        ∀ (l' : Lists α), l' ∈ Lists'.toList (Lists'.cons a l) → trans l'
intro a l IH₁ IH
case D1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ (∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃) ∧
    ∀ (a : Lists α), a ∈ Lists'.toList l → ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃
case D1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ (l' : Lists α), l' ∈ Lists'.toList (Lists'.cons a l) → trans l'
simp only [Lists'.toList, Sigma.eta, List.find?, List.mem_cons, forall_eq_or_imp]
case D1.left
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃

case D1.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ (a : Lists α), a ∈ Lists'.toList l → ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃
case D1
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ (∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃) ∧
    ∀ (a : Lists α), a ∈ Lists'.toList l → ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃
constructor
case D1.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ (a : Lists α), a ∈ Lists'.toList l → ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃
case D1.left
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃

case D1.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ (a : Lists α), a ∈ Lists'.toList l → ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃
. intros l₂ l₃ h₁ h₂
  exact IH₁ h₁ h₂
no goals
case D1.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ (a : Lists α), a ∈ Lists'.toList l → ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃
. intros a h₁ l₂ l₃ h₂ h₃
  exact IH _ h₁ h₂ h₃
case D1.left
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
l₂ l₃ : Lists α
h₁ : a ~ l₂
h₂ : l₂ ~ l₃
⊢ a ~ l₃
case D1.left
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃
intros l₂ l₃ h₁ h₂
no goals
case D1.left
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
l₂ l₃ : Lists α
h₁ : a ~ l₂
h₂ : l₂ ~ l₃
⊢ a ~ l₃
exact IH₁ h₁ h₂
case D1.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a✝ : Lists α
l : Lists' α true
IH₁ : trans a✝
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
a : Lists α
h₁ : a ∈ Lists'.toList l
l₂ l₃ : Lists α
h₂ : a ~ l₂
h₃ : l₂ ~ l₃
⊢ a ~ l₃
case D1.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a : Lists α
l : Lists' α true
IH₁ : trans a
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
⊢ ∀ (a : Lists α), a ∈ Lists'.toList l → ∀ ⦃l₂ l₃ : Lists α⦄, a ~ l₂ → l₂ ~ l₃ → a ~ l₃
intros a h₁ l₂ l₃ h₂ h₃
no goals
case D1.right
α : Type u_1
trans : Lists α → Prop := fun l₁ => ∀ ⦃l₂ l₃ : Lists α⦄, l₁ ~ l₂ → l₂ ~ l₃ → l₁ ~ l₃
a✝ : Lists α
l : Lists' α true
IH₁ : trans a✝
IH : ∀ (l' : Lists α), l' ∈ Lists'.toList l → trans l'
a : Lists α
h₁ : a ∈ Lists'.toList l
l₂ l₃ : Lists α
h₂ : a ~ l₂
h₃ : l₂ ~ l₃
⊢ a ~ l₃
exact IH _ h₁ h₂ h₃