Documentation

Mathlib.Data.List.Palindrome

Palindromes #

This module defines palindromes, lists which are equal to their reverse.

The main result is the Palindrome inductive type, and its associated Palindrome.rec induction principle. Also provided are conversions to and from other equivalent definitions.

References #

Tags #

palindrome, reverse, induction

inductive List.Palindrome {α : Type u_1} :
List αProp

Palindrome l asserts that l is a palindrome. This is defined inductively:

  • The empty list is a palindrome;
  • A list with one element is a palindrome;
  • Adding the same element to both ends of a palindrome results in a bigger palindrome.
  • nil: ∀ {α : Type u_1}, [].Palindrome
  • singleton: ∀ {α : Type u_1} (x : α), [x].Palindrome
  • cons_concat: ∀ {α : Type u_1} (x : α) {l : List α}, l.Palindrome(x :: (l ++ [x])).Palindrome
Instances For
    theorem List.Palindrome.reverse_eq {α : Type u_1} {l : List α} (p : l.Palindrome) :
    l.reverse = l
    theorem List.Palindrome.of_reverse_eq {α : Type u_1} {l : List α} :
    l.reverse = ll.Palindrome
    theorem List.Palindrome.iff_reverse_eq {α : Type u_1} {l : List α} :
    l.Palindrome l.reverse = l
    theorem List.Palindrome.append_reverse {α : Type u_1} (l : List α) :
    (l ++ l.reverse).Palindrome
    theorem List.Palindrome.map {α : Type u_1} {β : Type u_2} {l : List α} (f : αβ) (p : l.Palindrome) :
    (List.map f l).Palindrome