Equations
- List.instDecidablePredExists p x✝ = decidable_of_iff' (∃ x ∈ x✝, p x) ⋯
Equations
- List.induction₂' nil_nil nil_cons cons_nil cons_cons [] [] = nil_nil
- List.induction₂' nil_nil nil_cons cons_nil cons_cons [] (y :: ys) = nil_cons y ys
- List.induction₂' nil_nil nil_cons cons_nil cons_cons (x_2 :: xs) [] = cons_nil x_2 xs
- List.induction₂' nil_nil nil_cons cons_nil cons_cons (x_2 :: xs) (y :: ys) = cons_cons x_2 y xs ys (List.induction₂' nil_nil nil_cons cons_nil cons_cons xs ys)
Instances For
Equations
- List.foldlRecOn₂ [] x✝⁵ x✝⁴ x✝³ x✝² x✝¹ x✝ = x✝¹
- List.foldlRecOn₂ (x_7 :: xs) x✝⁵ x✝⁴ x✝³ x✝² x✝¹ x✝ = List.foldlRecOn₂ xs x✝⁵ x✝⁴ (x✝⁵ x✝³ x_7) (x✝⁴ x✝² x_7) (x✝ x✝³ x✝² ⋯ x✝¹) fun (b : β) (c : γ) (x : α) (x_in_l : x ∈ xs) => x✝ b c ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
- List.foldrRecOn₂ [] x✝⁵ x✝⁴ x✝³ x✝² x✝¹ x✝ = x✝¹
Instances For
dropLast_concat_getLast at the panicking accessor. A pass that splits a list into "all but
the last" and "the last" reaches for getLast! rather than carry a non-emptiness proof through
its own code; a proof about that pass still has the proof, and this is what spends it.
Equations
- List.zipper_induction xs [] nil cons = nil xs
- List.zipper_induction xs (x_1 :: xs_1) nil cons = cons xs x_1 xs_1 (List.zipper_induction (xs ++ [x_1]) xs_1 nil cons)
Instances For
A member of the right list has a related member of the left one. Forall₂ is positional, so
this is the projection that forgets the position — what a proof reaches for when it holds one
element of one list and wants some related element of the other, with no interest in where.
A member of the right list has a related member of the left one. Forall₂ is positional, so
this is the projection that forgets the position — what a proof reaches for when it holds one
element of one list and wants some related element of the other, with no interest in where.
Two find?s under a Forall₂ land on related elements. The predicates need not be the
same — they need only agree on related pairs, which is the usual situation: a lookup keyed on a
field both sides preserve.
Forall₂ is positional and find? returns the first match, so the two searches walk the lists
in step and stop at the same index; the induction is that observation.
Two find?s under a Forall₂ land on related elements. The predicates need not be the
same — they need only agree on related pairs, which is the usual situation: a lookup keyed on a
field both sides preserve.
Forall₂ is positional and find? returns the first match, so the two searches walk the lists
in step and stop at the same index; the induction is that observation.
find? lands on the only match. find? returns the first element satisfying the
predicate, so knowing which element it returns generally needs to know where it sits; when the
match is unique that positional information is not needed, and membership is enough.
Two maps under a Forall₂ agree when the two functions agree on related pairs, so the
two mapped lists are equal and anything said about one is said about the other.
A Forall₂ whose left list is an append splits at the same point. Forall₂ is positional,
so the right list has a prefix related to the left one's and a suffix related to the rest, with
nothing about either left tangled up in the other.
- nil {α : Type u_1} {R : α → α → Prop} : RPerm R [] []
- cons {α : Type u_1} {R : α → α → Prop} (x y : α) {xs ys : List α} : R x y → RPerm R xs ys → RPerm R (x :: xs) (y :: ys)
- swap {α : Type u_1} {R : α → α → Prop} (x y : α) {xs : List α} : RPerm R (y :: x :: xs) (x :: y :: xs)
- trans {α : Type u_1} {R : α → α → Prop} {xs ys zs : List α} : RPerm R xs ys → RPerm R ys zs → RPerm R xs zs