(** * Preliminaries *)
(** This file contains definitions and proofs from the Base Library for the ICL lecture. - Version: 3 October 2016 - Author: Gert Smolka, Saarland University - Acknowlegments: Sigurd Schneider, Dominik Kirst, Yannick Forster *)
From Undecidability.L Require Import Tactics.
Require Export Bool Omega List Setoid Morphisms.
Global Set Implicit Arguments.
Global Unset Strict Implicit.
Global Unset Printing Records.
Global Unset Printing Implicit Defensive.
Global Set Regular Subst Tactic.
Hint Extern 4 => exact _.
(** ** Lists *)
Export ListNotations.
Notation "x 'el' A" := (In x A) (at level 70).
Notation "A <<= B" := (incl A B) (at level 70).
Notation "| A |" := (length A) (at level 65).
Hint Extern 4 =>
match goal with
|[ H: ?x el nil |- _ ] => destruct H
end.

(* Specifications: *)
Lemma incl_nil X (A : list X) :
nil <<= A.
Lemma size_induction_dep L (X : L -> Type) (f : forall l, X l -> nat) (p : forall l, X l -> Type) :
(forall l x, (forall l' y, f l' y < f l x -> p l' y) -> p l x) ->
forall l x, p l x.