internlm/Lean-Github huggingface dataset:
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hP'ns : ¬List.Special a b d P'
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
⊢ False
Tactic:
simp only [List.Special, hP'₁, List.getLast_cons_cons, List.getLast_cons_cons, hPd,
  hP'₂, hP'₃, ← ha₁, and_true, true_and, not_or, not_not] at hP'ns
Proof state after:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
⊢ False
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
⊢ False
Tactic:
have : SimpleTriangle b₁₂ a₂ b₂₃ := ⟨hba, hab, hP'ns.2.symm, hb⟩
Proof state after:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this : SimpleTriangle b₁₂ a₂ b₂₃
⊢ False
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this : SimpleTriangle b₁₂ a₂ b₂₃
⊢ False
Tactic:
replace := habc_min _ _ _ this
Proof state after:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
⊢ False
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
⊢ False
Tactic:
have h9 := eqn_9 habc hacd hbd' hbd hPmin
Proof state after:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
h9 : (a₁ :: a₂ :: a₃ :: l).pathLength < dist a d + Delta a b c
⊢ False
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
h9 : (a₁ :: a₂ :: a₃ :: l).pathLength < dist a d + Delta a b c
⊢ False
Tactic:
suffices dist a d ≤ P'.pathLength by linarith
Proof state after:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
h9 : (a₁ :: a₂ :: a₃ :: l).pathLength < dist a d + Delta a b c
⊢ dist a d ≤ P'.pathLength
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
h9 : (a₁ :: a₂ :: a₃ :: l).pathLength < dist a d + Delta a b c
⊢ dist a d ≤ P'.pathLength
Tactic:
have : List.Sublist [a, d] P' := by
  rw [← ha₁, List.cons_sublist_cons, List.singleton_sublist]
  have : d ∈ a₃ :: l := by rw [← hPd]; exact List.getLast_mem _
  rw [List.mem_cons, List.mem_cons]
  simp only [this, or_true]
Proof state after:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this✝ : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
h9 : (a₁ :: a₂ :: a₃ :: l).pathLength < dist a d + Delta a b c
this : [a, d].Sublist P'
⊢ dist a d ≤ P'.pathLength
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this✝ : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
h9 : (a₁ :: a₂ :: a₃ :: l).pathLength < dist a d + Delta a b c
this : [a, d].Sublist P'
⊢ dist a d ≤ P'.pathLength
Tactic:
have := List.Sublist.pathLength_sublist this
Proof state after:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this✝¹ : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
h9 : (a₁ :: a₂ :: a₃ :: l).pathLength < dist a d + Delta a b c
this✝ : [a, d].Sublist P'
this : [a, d].pathLength ≤ P'.pathLength
⊢ dist a d ≤ P'.pathLength
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
hP'lt : P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
hPd : (a₃ :: l).getLast ⋯ = d
hP'₁ : NotCollinear a₁ b₁₂ b₂₃
ha₃b₂₃ : a₃ ≠ b₂₃
ha₃b₁₂ : a₃ ≠ b₁₂
hP'₂ : P'.pathLength ≤ [a₁, b, d].pathLength
hP'₃ : List.Chain' (fun x x_1 => x ≠ x_1) P'
hP'ns : SimpleEdges.Adj a₁ b₁₂ ∧ SimpleEdges.Adj b₁₂ b₂₃
this✝¹ : Delta a b c ≤ Delta b₁₂ a₂ b₂₃
h9 : (a₁ :: a₂ :: a₃ :: l).pathLength < dist a d + Delta a b c
this✝ : [a, d].Sublist P'
this : [a, d].pathLength ≤ P'.pathLength
⊢ dist a d ≤ P'.pathLength
Tactic:
rwa [List.pathLength, List.pathLength, add_zero] at this
Proof state after:
no goals
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPd : (a₁ :: a₂ :: a₃ :: l).getLast ⋯ = d
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
⊢ Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
Tactic:
simp only [List.pathLength, Delta]
Proof state after:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPd : (a₁ :: a₂ :: a₃ :: l).getLast ⋯ = d
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
⊢ dist b₁₂ a₂ + dist a₂ b₂₃ - dist b₁₂ b₂₃ =
    dist a₁ a₂ + (dist a₂ a₃ + (a₃ :: l).pathLength) -
      (dist a₁ b₁₂ + (dist b₁₂ b₂₃ + (dist b₂₃ a₃ + (a₃ :: l).pathLength)))
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPd : (a₁ :: a₂ :: a₃ :: l).getLast ⋯ = d
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
⊢ dist b₁₂ a₂ + dist a₂ b₂₃ - dist b₁₂ b₂₃ =
    dist a₁ a₂ + (dist a₂ a₃ + (a₃ :: l).pathLength) -
      (dist a₁ b₁₂ + (dist b₁₂ b₂₃ + (dist b₂₃ a₃ + (a₃ :: l).pathLength)))
Tactic:
linarith [hb₁₂.dist, hb₂₃.dist]
Proof state after:
no goals
Theorem: case1
Proof state before:
V : Type u_1
inst✝² : MetricSpace V
u v w : V
inst✝¹ : Finite V
inst✝ : Nontrivial V
x y z a b c d a₁ a₂ a₃ : V
l : List V
habc : SimpleTriangle a b c
habc_min : ∀ (a' b' c' : V), SimpleTriangle a' b' c' → Delta a b c ≤ Delta a' b' c'
hacd : sbtw a c d
hbd' : b ≠ d
hbd : ¬SimpleEdges.Adj b d
hPmin : ∀ (P' : List V), List.Special a b d P' → (a₁ :: a₂ :: a₃ :: l).pathLength ≤ P'.pathLength
ha₁ : a₁ = a
hα : NotCollinear a₁ a₂ a₃
hPd : (a₁ :: a₂ :: a₃ :: l).getLast ⋯ = d
hPc : List.Chain' (fun x x_1 => x ≠ x_1) (a₁ :: a₂ :: a₃ :: l)
c₁1 : ¬SimpleEdges.Adj a₁ a₂
c₁2 : ¬SimpleEdges.Adj a₂ a₃
b₁₂ : V
hb₁₂ : sbtw a₁ b₁₂ a₂
hba : SimpleEdges.Adj b₁₂ a₂
b₂₃ : V
hb₂₃ : sbtw a₂ b₂₃ a₃
hab : SimpleEdges.Adj a₂ b₂₃
hb : NotCollinear b₁₂ a₂ b₂₃
P' : List V := a₁ :: b₁₂ :: b₂₃ :: a₃ :: l
hP' : Delta b₁₂ a₂ b₂₃ = (a₁ :: a₂ :: a₃ :: l).pathLength - P'.pathLength
hd : 0 < Delta b₁₂ a₂ b₂₃
⊢ P'.pathLength < (a₁ :: a₂ :: a₃ :: l).pathLength
Tactic:
linarith
Proof state after:
no goals