ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Finset.image₂_right_comm
theorem image₂_right_comm {γ : Type*} {u : Finset γ} {f : δ → γ → ε} {g : α → β → δ}
    {f' : α → γ → δ'} {g' : δ' → β → ε} (h_right_comm : ∀ a b c, f (g a b) c = g' (f' a c) b) :
    image₂ f (image₂ g s t) u = image₂ g' (image₂ f' s u) t 
Arguments: {α : Type u_1} {β : Type u_3} {δ : Type u_7} {δ' : Type u_8} {ε : Type u_9} [DecidableEq δ] [DecidableEq δ'] [DecidableEq ε] {s : Finset α} {t : Finset β} {γ : Type u_14} {u : Finset γ} {f : δ → γ → ε} {g : α → β → δ} {f' : α → γ → δ'} {g' : δ' → β → ε} (h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b)
Goal: Finset.image₂ f (Finset.image₂ g s t) u = Finset.image₂ g' (Finset.image₂ f' s u) t
-- Finset.image₂_image₂_image₂_comm
theorem image₂_image₂_image₂_comm {γ δ : Type*} {u : Finset γ} {v : Finset δ} [DecidableEq ζ]
    [DecidableEq ζ'] [DecidableEq ν] {f : ε → ζ → ν} {g : α → β → ε} {h : γ → δ → ζ}
    {f' : ε' → ζ' → ν} {g' : α → γ → ε'} {h' : β → δ → ζ'}
    (h_comm : ∀ a b c d, f (g a b) (h c d) = f' (g' a c) (h' b d)) :
    image₂ f (image₂ g s t) (image₂ h u v) = image₂ f' (image₂ g' s u) (image₂ h' t v) 
Arguments: {α : Type u_1} {β : Type u_3} {ε : Type u_9} {ε' : Type u_10} {ζ : Type u_11} {ζ' : Type u_12} {ν : Type u_13} [DecidableEq ε] [DecidableEq ε'] {s : Finset α} {t : Finset β} {γ : Type u_14} {δ : Type u_15} {u : Finset γ} {v : Finset δ} [DecidableEq ζ] [DecidableEq ζ'] [DecidableEq ν] {f : ε → ζ → ν} {g : α → β → ε} {h : γ → δ → ζ} {f' : ε' → ζ' → ν} {g' : α → γ → ε'} {h' : β → δ → ζ'} (h_comm : ∀ (a : α) (b : β) (c : γ) (d : δ), f (g a b) (h c d) = f' (g' a c) (h' b d))
Goal: Finset.image₂ f (Finset.image₂ g s t) (Finset.image₂ h u v) =
  Finset.image₂ f' (Finset.image₂ g' s u) (Finset.image₂ h' t v)
-- Finset.image_image₂_distrib
theorem image_image₂_distrib {g : γ → δ} {f' : α' → β' → δ} {g₁ : α → α'} {g₂ : β → β'}
    (h_distrib : ∀ a b, g (f a b) = f' (g₁ a) (g₂ b)) :
    (image₂ f s t).image g = image₂ f' (s.image g₁) (t.image g₂) 
Arguments: {α : Type u_1} {α' : Type u_2} {β : Type u_3} {β' : Type u_4} {γ : Type u_5} {δ : Type u_7} [DecidableEq α'] [DecidableEq β'] [DecidableEq γ] [DecidableEq δ] {f : α → β → γ} {s : Finset α} {t : Finset β} {g : γ → δ} {f' : α' → β' → δ} {g₁ : α → α'} {g₂ : β → β'} (h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ a) (g₂ b))
Goal: Finset.image g (Finset.image₂ f s t) = Finset.image₂ f' (Finset.image g₁ s) (Finset.image g₂ t)
-- Finset.image_image₂_distrib_left
theorem image_image₂_distrib_left {g : γ → δ} {f' : α' → β → δ} {g' : α → α'}
    (h_distrib : ∀ a b, g (f a b) = f' (g' a) b) :
    (image₂ f s t).image g = image₂ f' (s.image g') t 
Arguments: {α : Type u_1} {α' : Type u_2} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq α'] [DecidableEq γ] [DecidableEq δ] {f : α → β → γ} {s : Finset α} {t : Finset β} {g : γ → δ} {f' : α' → β → δ} {g' : α → α'} (h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g' a) b)
Goal: Finset.image g (Finset.image₂ f s t) = Finset.image₂ f' (Finset.image g' s) t
-- Finset.image_image₂_distrib_right
theorem image_image₂_distrib_right {g : γ → δ} {f' : α → β' → δ} {g' : β → β'}
    (h_distrib : ∀ a b, g (f a b) = f' a (g' b)) :
    (image₂ f s t).image g = image₂ f' s (t.image g') 
Arguments: {α : Type u_1} {β : Type u_3} {β' : Type u_4} {γ : Type u_5} {δ : Type u_7} [DecidableEq β'] [DecidableEq γ] [DecidableEq δ] {f : α → β → γ} {s : Finset α} {t : Finset β} {g : γ → δ} {f' : α → β' → δ} {g' : β → β'} (h_distrib : ∀ (a : α) (b : β), g (f a b) = f' a (g' b))
Goal: Finset.image g (Finset.image₂ f s t) = Finset.image₂ f' s (Finset.image g' t)
-- Finset.image₂_image_left_comm
theorem image₂_image_left_comm {f : α' → β → γ} {g : α → α'} {f' : α → β → δ} {g' : δ → γ}
    (h_left_comm : ∀ a b, f (g a) b = g' (f' a b)) :
    image₂ f (s.image g) t = (image₂ f' s t).image g' 
Arguments: {α : Type u_1} {α' : Type u_2} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq α'] [DecidableEq γ] [DecidableEq δ] {s : Finset α} {t : Finset β} {f : α' → β → γ} {g : α → α'} {f' : α → β → δ} {g' : δ → γ} (h_left_comm : ∀ (a : α) (b : β), f (g a) b = g' (f' a b))
Goal: Finset.image₂ f (Finset.image g s) t = Finset.image g' (Finset.image₂ f' s t)
-- Finset.image_image₂_right_comm
theorem image_image₂_right_comm {f : α → β' → γ} {g : β → β'} {f' : α → β → δ} {g' : δ → γ}
    (h_right_comm : ∀ a b, f a (g b) = g' (f' a b)) :
    image₂ f s (t.image g) = (image₂ f' s t).image g' 
Arguments: {α : Type u_1} {β : Type u_3} {β' : Type u_4} {γ : Type u_5} {δ : Type u_7} [DecidableEq β'] [DecidableEq γ] [DecidableEq δ] {s : Finset α} {t : Finset β} {f : α → β' → γ} {g : β → β'} {f' : α → β → δ} {g' : δ → γ} (h_right_comm : ∀ (a : α) (b : β), f a (g b) = g' (f' a b))
Goal: Finset.image₂ f s (Finset.image g t) = Finset.image g' (Finset.image₂ f' s t)
-- Finset.image₂_distrib_subset_left
theorem image₂_distrib_subset_left {γ : Type*} {u : Finset γ} {f : α → δ → ε} {g : β → γ → δ}
    {f₁ : α → β → β'} {f₂ : α → γ → γ'} {g' : β' → γ' → ε}
    (h_distrib : ∀ a b c, f a (g b c) = g' (f₁ a b) (f₂ a c)) :
    image₂ f s (image₂ g t u) ⊆ image₂ g' (image₂ f₁ s t) (image₂ f₂ s u) 
Arguments: {α : Type u_1} {β : Type u_3} {β' : Type u_4} {γ' : Type u_6} {δ : Type u_7} {ε : Type u_9} [DecidableEq β'] [DecidableEq γ'] [DecidableEq δ] [DecidableEq ε] {s : Finset α} {t : Finset β} {γ : Type u_14} {u : Finset γ} {f : α → δ → ε} {g : β → γ → δ} {f₁ : α → β → β'} {f₂ : α → γ → γ'} {g' : β' → γ' → ε} (h_distrib : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' (f₁ a b) (f₂ a c))
Goal: Finset.image₂ f s (Finset.image₂ g t u) ⊆ Finset.image₂ g' (Finset.image₂ f₁ s t) (Finset.image₂ f₂ s u)
-- Finset.image₂_distrib_subset_right
theorem image₂_distrib_subset_right {γ : Type*} {u : Finset γ} {f : δ → γ → ε} {g : α → β → δ}
    {f₁ : α → γ → α'} {f₂ : β → γ → β'} {g' : α' → β' → ε}
    (h_distrib : ∀ a b c, f (g a b) c = g' (f₁ a c) (f₂ b c)) :
    image₂ f (image₂ g s t) u ⊆ image₂ g' (image₂ f₁ s u) (image₂ f₂ t u) 
Arguments: {α : Type u_1} {α' : Type u_2} {β : Type u_3} {β' : Type u_4} {δ : Type u_7} {ε : Type u_9} [DecidableEq α'] [DecidableEq β'] [DecidableEq δ] [DecidableEq ε] {s : Finset α} {t : Finset β} {γ : Type u_14} {u : Finset γ} {f : δ → γ → ε} {g : α → β → δ} {f₁ : α → γ → α'} {f₂ : β → γ → β'} {g' : α' → β' → ε} (h_distrib : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f₁ a c) (f₂ b c))
Goal: Finset.image₂ f (Finset.image₂ g s t) u ⊆ Finset.image₂ g' (Finset.image₂ f₁ s u) (Finset.image₂ f₂ t u)
-- Finset.image_image₂_antidistrib
theorem image_image₂_antidistrib {g : γ → δ} {f' : β' → α' → δ} {g₁ : β → β'} {g₂ : α → α'}
    (h_antidistrib : ∀ a b, g (f a b) = f' (g₁ b) (g₂ a)) :
    (image₂ f s t).image g = image₂ f' (t.image g₁) (s.image g₂) 
Arguments: {α : Type u_1} {α' : Type u_2} {β : Type u_3} {β' : Type u_4} {γ : Type u_5} {δ : Type u_7} [DecidableEq α'] [DecidableEq β'] [DecidableEq γ] [DecidableEq δ] {f : α → β → γ} {s : Finset α} {t : Finset β} {g : γ → δ} {f' : β' → α' → δ} {g₁ : β → β'} {g₂ : α → α'} (h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ b) (g₂ a))
Goal: Finset.image g (Finset.image₂ f s t) = Finset.image₂ f' (Finset.image g₁ t) (Finset.image g₂ s)
-- Finset.image_image₂_antidistrib_left
theorem image_image₂_antidistrib_left {g : γ → δ} {f' : β' → α → δ} {g' : β → β'}
    (h_antidistrib : ∀ a b, g (f a b) = f' (g' b) a) :
    (image₂ f s t).image g = image₂ f' (t.image g') s 
Arguments: {α : Type u_1} {β : Type u_3} {β' : Type u_4} {γ : Type u_5} {δ : Type u_7} [DecidableEq β'] [DecidableEq γ] [DecidableEq δ] {f : α → β → γ} {s : Finset α} {t : Finset β} {g : γ → δ} {f' : β' → α → δ} {g' : β → β'} (h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g' b) a)
Goal: Finset.image g (Finset.image₂ f s t) = Finset.image₂ f' (Finset.image g' t) s
-- Finset.image_image₂_antidistrib_right
theorem image_image₂_antidistrib_right {g : γ → δ} {f' : β → α' → δ} {g' : α → α'}
    (h_antidistrib : ∀ a b, g (f a b) = f' b (g' a)) :
    (image₂ f s t).image g = image₂ f' t (s.image g') 
Arguments: {α : Type u_1} {α' : Type u_2} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq α'] [DecidableEq γ] [DecidableEq δ] {f : α → β → γ} {s : Finset α} {t : Finset β} {g : γ → δ} {f' : β → α' → δ} {g' : α → α'} (h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' b (g' a))
Goal: Finset.image g (Finset.image₂ f s t) = Finset.image₂ f' t (Finset.image g' s)
-- Finset.image₂_image_left_anticomm
theorem image₂_image_left_anticomm {f : α' → β → γ} {g : α → α'} {f' : β → α → δ} {g' : δ → γ}
    (h_left_anticomm : ∀ a b, f (g a) b = g' (f' b a)) :
    image₂ f (s.image g) t = (image₂ f' t s).image g' 
Arguments: {α : Type u_1} {α' : Type u_2} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq α'] [DecidableEq γ] [DecidableEq δ] {s : Finset α} {t : Finset β} {f : α' → β → γ} {g : α → α'} {f' : β → α → δ} {g' : δ → γ} (h_left_anticomm : ∀ (a : α) (b : β), f (g a) b = g' (f' b a))
Goal: Finset.image₂ f (Finset.image g s) t = Finset.image g' (Finset.image₂ f' t s)
-- Finset.image_image₂_right_anticomm
theorem image_image₂_right_anticomm {f : α → β' → γ} {g : β → β'} {f' : β → α → δ} {g' : δ → γ}
    (h_right_anticomm : ∀ a b, f a (g b) = g' (f' b a)) :
    image₂ f s (t.image g) = (image₂ f' t s).image g' 
Arguments: {α : Type u_1} {β : Type u_3} {β' : Type u_4} {γ : Type u_5} {δ : Type u_7} [DecidableEq β'] [DecidableEq γ] [DecidableEq δ] {s : Finset α} {t : Finset β} {f : α → β' → γ} {g : β → β'} {f' : β → α → δ} {g' : δ → γ} (h_right_anticomm : ∀ (a : α) (b : β), f a (g b) = g' (f' b a))
Goal: Finset.image₂ f s (Finset.image g t) = Finset.image g' (Finset.image₂ f' t s)
-- Finset.image₂_left_identity
theorem image₂_left_identity {f : α → γ → γ} {a : α} (h : ∀ b, f a b = b) (t : Finset γ) :
    image₂ f {a} t = t 
Arguments: {α : Type u_1} {γ : Type u_5} [DecidableEq γ] {f : α → γ → γ} {a : α} (h : ∀ (b : γ), f a b = b) (t : Finset γ)
Goal: Finset.image₂ f {a} t = t
-- Finset.image₂_right_identity
theorem image₂_right_identity {f : γ → β → γ} {b : β} (h : ∀ a, f a b = a) (s : Finset γ) :
    image₂ f s {b} = s 
Arguments: {β : Type u_3} {γ : Type u_5} [DecidableEq γ] {f : γ → β → γ} {b : β} (h : ∀ (a : γ), f a b = a) (s : Finset γ)
Goal: Finset.image₂ f s {b} = s
-- Finset.card_dvd_card_image₂_right
theorem card_dvd_card_image₂_right (hf : ∀ a ∈ s, Injective (f a))
    (hs : ((fun a => t.image <| f a) '' s).PairwiseDisjoint id) : t.card ∣ (image₂ f s t).card 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} (hf : ∀ a ∈ s, Function.Injective (f a)) (hs : ((fun a => Finset.image (f a) t) '' ↑s).PairwiseDisjoint id)
Goal: t.card ∣ (Finset.image₂ f s t).card
-- Finset.card_dvd_card_image₂_left
theorem card_dvd_card_image₂_left (hf : ∀ b ∈ t, Injective fun a => f a b)
    (ht : ((fun b => s.image fun a => f a b) '' t).PairwiseDisjoint id) :
    s.card ∣ (image₂ f s t).card 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} (hf : ∀ b ∈ t, Function.Injective fun a => f a b) (ht : ((fun b => Finset.image (fun a => f a b) s) '' ↑t).PairwiseDisjoint id)
Goal: s.card ∣ (Finset.image₂ f s t).card
-- Finset.subset_image₂
theorem subset_image₂ {s : Set α} {t : Set β} (hu : ↑u ⊆ image2 f s t) :
    ∃ (s' : Finset α) (t' : Finset β), ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ image₂ f s' t' 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} [DecidableEq γ] {f : α → β → γ} {u : Finset γ} {s : Set α} {t : Set β} (hu : ↑u ⊆ Set.image2 f s t)
Goal: ∃ s' t', ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ Finset.image₂ f s' t'
-- Finset.image₂_inter_union_subset_union
theorem image₂_inter_union_subset_union :
    image₂ f (s ∩ s') (t ∪ t') ⊆ image₂ f s t ∪ image₂ f s' t' 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} [DecidableEq γ] {f : α → β → γ} {s s' : Finset α} {t t' : Finset β} [DecidableEq α] [DecidableEq β]
Goal: Finset.image₂ f (s ∩ s') (t ∪ t') ⊆ Finset.image₂ f s t ∪ Finset.image₂ f s' t'
-- Finset.image₂_union_inter_subset_union
theorem image₂_union_inter_subset_union :
    image₂ f (s ∪ s') (t ∩ t') ⊆ image₂ f s t ∪ image₂ f s' t' 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} [DecidableEq γ] {f : α → β → γ} {s s' : Finset α} {t t' : Finset β} [DecidableEq α] [DecidableEq β]
Goal: Finset.image₂ f (s ∪ s') (t ∩ t') ⊆ Finset.image₂ f s t ∪ Finset.image₂ f s' t'
-- Finset.image₂_inter_union_subset
theorem image₂_inter_union_subset {f : α → α → β} {s t : Finset α} (hf : ∀ a b, f a b = f b a) :
    image₂ f (s ∩ t) (s ∪ t) ⊆ image₂ f s t 
Arguments: {α : Type u_1} {β : Type u_3} [DecidableEq α] [DecidableEq β] {f : α → α → β} {s t : Finset α} (hf : ∀ (a b : α), f a b = f b a)
Goal: Finset.image₂ f (s ∩ t) (s ∪ t) ⊆ Finset.image₂ f s t
-- Finset.image₂_union_inter_subset
theorem image₂_union_inter_subset {f : α → α → β} {s t : Finset α} (hf : ∀ a b, f a b = f b a) :
    image₂ f (s ∪ t) (s ∩ t) ⊆ image₂ f s t 
Arguments: {α : Type u_1} {β : Type u_3} [DecidableEq α] [DecidableEq β] {f : α → α → β} {s t : Finset α} (hf : ∀ (a b : α), f a b = f b a)
Goal: Finset.image₂ f (s ∪ t) (s ∩ t) ⊆ Finset.image₂ f s t
-- Finset.sup'_image₂_le
@[simp (default + 1)] -- otherwise `simp` doesn't use `forall_image₂_iff`
lemma sup'_image₂_le {g : γ → δ} {a : δ} (h : (image₂ f s t).Nonempty) :
    sup' (image₂ f s t) h g ≤ a ↔ ∀ x ∈ s, ∀ y ∈ t, g (f x y) ≤ a 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} [SemilatticeSup δ] {g : γ → δ} {a : δ} (h : (Finset.image₂ f s t).Nonempty)
Goal: (Finset.image₂ f s t).sup' h g ≤ a ↔ ∀ x ∈ s, ∀ y ∈ t, g (f x y) ≤ a
-- Finset.sup'_image₂_left
lemma sup'_image₂_left (g : γ → δ) (h : (image₂ f s t).Nonempty) :
    sup' (image₂ f s t) h g =
      sup' s h.of_image₂_left fun x ↦ sup' t h.of_image₂_right (g <| f x ·) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} [SemilatticeSup δ] (g : γ → δ) (h : (Finset.image₂ f s t).Nonempty)
Goal: (Finset.image₂ f s t).sup' h g = s.sup' ⋯ fun x => t.sup' ⋯ fun x_1 => g (f x x_1)
-- Finset.sup'_image₂_right
lemma sup'_image₂_right (g : γ → δ) (h : (image₂ f s t).Nonempty) :
    sup' (image₂ f s t) h g =
      sup' t h.of_image₂_right fun y ↦ sup' s h.of_image₂_left (g <| f · y) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} [SemilatticeSup δ] (g : γ → δ) (h : (Finset.image₂ f s t).Nonempty)
Goal: (Finset.image₂ f s t).sup' h g = t.sup' ⋯ fun y => s.sup' ⋯ fun x => g (f x y)
-- Finset.sup_image₂_le
@[simp (default + 1)] -- otherwise `simp` doesn't use `forall_image₂_iff`
lemma sup_image₂_le {g : γ → δ} {a : δ} :
    sup (image₂ f s t) g ≤ a ↔ ∀ x ∈ s, ∀ y ∈ t, g (f x y) ≤ a 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} [SemilatticeSup δ] [OrderBot δ] {g : γ → δ} {a : δ}
Goal: (Finset.image₂ f s t).sup g ≤ a ↔ ∀ x ∈ s, ∀ y ∈ t, g (f x y) ≤ a
-- Finset.sup_image₂_left
lemma sup_image₂_left (g : γ → δ) : sup (image₂ f s t) g = sup s fun x ↦ sup t (g <| f x ·) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} (s : Finset α) (t : Finset β) [SemilatticeSup δ] [OrderBot δ] (g : γ → δ)
Goal: (Finset.image₂ f s t).sup g = s.sup fun x => t.sup fun x_1 => g (f x x_1)
-- Finset.sup_image₂_right
lemma sup_image₂_right (g : γ → δ) : sup (image₂ f s t) g = sup t fun y ↦ sup s (g <| f · y) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} (s : Finset α) (t : Finset β) [SemilatticeSup δ] [OrderBot δ] (g : γ → δ)
Goal: (Finset.image₂ f s t).sup g = t.sup fun y => s.sup fun x => g (f x y)
-- Finset.le_inf'_image₂
@[simp (default + 1)] -- otherwise `simp` doesn't use `forall_image₂_iff`
lemma le_inf'_image₂ {g : γ → δ} {a : δ} (h : (image₂ f s t).Nonempty) :
    a ≤ inf' (image₂ f s t) h g ↔ ∀ x ∈ s, ∀ y ∈ t, a ≤ g (f x y) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} [SemilatticeInf δ] {g : γ → δ} {a : δ} (h : (Finset.image₂ f s t).Nonempty)
Goal: a ≤ (Finset.image₂ f s t).inf' h g ↔ ∀ x ∈ s, ∀ y ∈ t, a ≤ g (f x y)
-- Finset.inf'_image₂_left
lemma inf'_image₂_left (g : γ → δ) (h : (image₂ f s t).Nonempty) :
    inf' (image₂ f s t) h g =
      inf' s h.of_image₂_left fun x ↦ inf' t h.of_image₂_right (g <| f x ·) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} [SemilatticeInf δ] (g : γ → δ) (h : (Finset.image₂ f s t).Nonempty)
Goal: (Finset.image₂ f s t).inf' h g = s.inf' ⋯ fun x => t.inf' ⋯ fun x_1 => g (f x x_1)
-- Finset.inf'_image₂_right
lemma inf'_image₂_right (g : γ → δ) (h : (image₂ f s t).Nonempty) :
    inf' (image₂ f s t) h g =
      inf' t h.of_image₂_right fun y ↦ inf' s h.of_image₂_left (g <| f · y) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} [SemilatticeInf δ] (g : γ → δ) (h : (Finset.image₂ f s t).Nonempty)
Goal: (Finset.image₂ f s t).inf' h g = t.inf' ⋯ fun y => s.inf' ⋯ fun x => g (f x y)
-- Finset.le_inf_image₂
@[simp (default + 1)] -- otherwise `simp` doesn't use `forall_image₂_iff`
lemma le_inf_image₂ {g : γ → δ} {a : δ} :
    a ≤ inf (image₂ f s t) g ↔ ∀ x ∈ s, ∀ y ∈ t, a ≤ g (f x y) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} {s : Finset α} {t : Finset β} [SemilatticeInf δ] [OrderTop δ] {g : γ → δ} {a : δ}
Goal: a ≤ (Finset.image₂ f s t).inf g ↔ ∀ x ∈ s, ∀ y ∈ t, a ≤ g (f x y)
-- Finset.inf_image₂_left
lemma inf_image₂_left (g : γ → δ) : inf (image₂ f s t) g = inf s fun x ↦ inf t (g ∘ f x) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} (s : Finset α) (t : Finset β) [SemilatticeInf δ] [OrderTop δ] (g : γ → δ)
Goal: (Finset.image₂ f s t).inf g = s.inf fun x => t.inf (g ∘ f x)
-- Finset.inf_image₂_right
lemma inf_image₂_right (g : γ → δ) : inf (image₂ f s t) g = inf t fun y ↦ inf s (g <| f · y) 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} {δ : Type u_7} [DecidableEq γ] {f : α → β → γ} (s : Finset α) (t : Finset β) [SemilatticeInf δ] [OrderTop δ] (g : γ → δ)
Goal: (Finset.image₂ f s t).inf g = t.inf fun y => s.inf fun x => g (f x y)
-- Fintype.piFinset_image₂
lemma piFinset_image₂ (f : ∀ i, α i → β i → γ i) (s : ∀ i, Finset (α i)) (t : ∀ i, Finset (β i)) :
    piFinset (fun i ↦ image₂ (f i) (s i) (t i)) =
      image₂ (fun a b i ↦ f _ (a i) (b i)) (piFinset s) (piFinset t) 
Arguments: {ι : Type u_14} {α : ι → Type u_15} {β : ι → Type u_16} {γ : ι → Type u_17} [DecidableEq ι] [Fintype ι] [(i : ι) → DecidableEq (γ i)] (f : (i : ι) → α i → β i → γ i) (s : (i : ι) → Finset (α i)) (t : (i : ι) → Finset (β i))
Goal: (Fintype.piFinset fun i => Finset.image₂ (f i) (s i) (t i)) =
  Finset.image₂ (fun a b i => f i (a i) (b i)) (Fintype.piFinset s) (Fintype.piFinset t)
-- Set.toFinset_image2
@[simp]
theorem toFinset_image2 (f : α → β → γ) (s : Set α) (t : Set β) [Fintype s] [Fintype t]
    [Fintype (image2 f s t)] : (image2 f s t).toFinset = Finset.image₂ f s.toFinset t.toFinset 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} [DecidableEq γ] (f : α → β → γ) (s : Set α) (t : Set β) [Fintype ↑s] [Fintype ↑t] [Fintype ↑(Set.image2 f s t)]
Goal: (Set.image2 f s t).toFinset = Finset.image₂ f s.toFinset t.toFinset
-- Set.Finite.toFinset_image2
theorem Finite.toFinset_image2 (f : α → β → γ) (hs : s.Finite) (ht : t.Finite)
    (hf := hs.image2 f ht) : hf.toFinset = Finset.image₂ f hs.toFinset ht.toFinset 
Arguments: {α : Type u_1} {β : Type u_3} {γ : Type u_5} [DecidableEq γ] {s : Set α} {t : Set β} (f : α → β → γ) (hs : s.Finite) (ht : t.Finite) (hf : (Set.image2 f s t).Finite := ⋯)
Goal: Set.Finite.toFinset hf = Finset.image₂ f hs.toFinset ht.toFinset
-- TypeVec.Arrow.ext
@[ext]
theorem Arrow.ext {α β : TypeVec n} (f g : α ⟹ β) :
    (∀ i, f i = g i) → f = g 
Arguments: {n : ℕ} {α : TypeVec.{u_1} n} {β : TypeVec.{u_2} n} (f g : α.Arrow β)
Goal: (∀ (i : Fin2 n), f i = g i) → f = g
-- TypeVec.id_comp
@[simp]
theorem id_comp {α β : TypeVec n} (f : α ⟹ β) : id ⊚ f = f 
Arguments: {n : ℕ} {α : TypeVec.{u_1} n} {β : TypeVec.{u_2} n} (f : α.Arrow β)
Goal: TypeVec.comp TypeVec.id f = f
-- TypeVec.comp_id
@[simp]
theorem comp_id {α β : TypeVec n} (f : α ⟹ β) : f ⊚ id = f 
Arguments: {n : ℕ} {α : TypeVec.{u_1} n} {β : TypeVec.{u_2} n} (f : α.Arrow β)
Goal: TypeVec.comp f TypeVec.id = f
-- TypeVec.comp_assoc
theorem comp_assoc {α β γ δ : TypeVec n} (h : γ ⟹ δ) (g : β ⟹ γ) (f : α ⟹ β) :
    (h ⊚ g) ⊚ f = h ⊚ g ⊚ f 
Arguments: {n : ℕ} {α : TypeVec.{u_1} n} {β : TypeVec.{u_2} n} {γ : TypeVec.{u_3} n} {δ : TypeVec.{u_4} n} (h : γ.Arrow δ) (g : β.Arrow γ) (f : α.Arrow β)
Goal: TypeVec.comp (TypeVec.comp h g) f = TypeVec.comp h (TypeVec.comp g f)
-- TypeVec.drop_append1
theorem drop_append1 {α : TypeVec n} {β : Type*} {i : Fin2 n} : drop (append1 α β) i = α i 
Arguments: {n : ℕ} {α : TypeVec.{u_1} n} {β : Type u_1} {i : Fin2 n}
Goal: (α ::: β).drop i = α i
-- TypeVec.drop_append1'
theorem drop_append1' {α : TypeVec n} {β : Type*} : drop (append1 α β) = α 
Arguments: {n : ℕ} {α : TypeVec.{u_1} n} {β : Type u_1}
Goal: (α ::: β).drop = α
-- TypeVec.last_append1
theorem last_append1 {α : TypeVec n} {β : Type*} : last (append1 α β) = β 
Arguments: {n : ℕ} {α : TypeVec.{u_1} n} {β : Type u_1}
Goal: (α ::: β).last = β
-- TypeVec.append1_drop_last
@[simp]
theorem append1_drop_last (α : TypeVec (n + 1)) : append1 (drop α) (last α) = α 
Arguments: {n : ℕ} (α : TypeVec.{u_1} (n + 1))
Goal: α.drop ::: α.last = α
-- TypeVec.append1_cases_append1
@[simp]
theorem append1_cases_append1 {C : TypeVec (n + 1) → Sort u} (H : ∀ α β, C (append1 α β)) (α β) :
    @append1Cases _ C H (append1 α β) = H α β 
Arguments: {n : ℕ} {C : TypeVec.{u_1} (n + 1) → Sort u} (H : (α : TypeVec.{u_1} n) → (β : Type u_1) → C (α ::: β)) (α : TypeVec.{u_1} n) (β : Type u_1)
Goal: TypeVec.append1Cases H (α ::: β) = H α β
-- TypeVec.eq_of_drop_last_eq
theorem eq_of_drop_last_eq {α β : TypeVec (n + 1)} {f g : α ⟹ β} (h₀ : dropFun f = dropFun g)
    (h₁ : lastFun f = lastFun g) : f = g 
Arguments: {n : ℕ} {α : TypeVec.{u_1} (n + 1)} {β : TypeVec.{u_2} (n + 1)} {f g : α.Arrow β} (h₀ : TypeVec.dropFun f = TypeVec.dropFun g) (h₁ : TypeVec.lastFun f = TypeVec.lastFun g)
Goal: f = g
-- TypeVec.dropFun_splitFun
@[simp]
theorem dropFun_splitFun {α α' : TypeVec (n + 1)} (f : drop α ⟹ drop α') (g : last α → last α') :
    dropFun (splitFun f g) = f 
Arguments: {n : ℕ} {α : TypeVec.{u_1} (n + 1)} {α' : TypeVec.{u_2} (n + 1)} (f : α.drop.Arrow α'.drop) (g : α.last → α'.last)
Goal: TypeVec.dropFun (TypeVec.splitFun f g) = f
-- TypeVec.lastFun_splitFun
@[simp]
theorem lastFun_splitFun {α α' : TypeVec (n + 1)} (f : drop α ⟹ drop α') (g : last α → last α') :
    lastFun (splitFun f g) = g 
Arguments: {n : ℕ} {α : TypeVec.{u_1} (n + 1)} {α' : TypeVec.{u_2} (n + 1)} (f : α.drop.Arrow α'.drop) (g : α.last → α'.last)
Goal: TypeVec.lastFun (TypeVec.splitFun f g) = g
-- TypeVec.dropFun_appendFun
@[simp]
theorem dropFun_appendFun {α α' : TypeVec n} {β β' : Type*} (f : α ⟹ α') (g : β → β') :
    dropFun (f ::: g) = f 
Arguments: {n : ℕ} {α : TypeVec.{u_1} n} {α' : TypeVec.{u_2} n} {β : Type u_1} {β' : Type u_2} (f : α.Arrow α') (g : β → β')
Goal: TypeVec.dropFun (f ::: g) = f
-- TypeVec.lastFun_appendFun
@[simp]
theorem lastFun_appendFun {α α' : TypeVec n} {β β' : Type*} (f : α ⟹ α') (g : β → β') :
    lastFun (f ::: g) = g 
Arguments: {n : ℕ} {α : TypeVec.{u_1} n} {α' : TypeVec.{u_2} n} {β : Type u_1} {β' : Type u_2} (f : α.Arrow α') (g : β → β')
Goal: TypeVec.lastFun (f ::: g) = g
-- TypeVec.split_dropFun_lastFun
theorem split_dropFun_lastFun {α α' : TypeVec (n + 1)} (f : α ⟹ α') :
    splitFun (dropFun f) (lastFun f) = f 
Arguments: {n : ℕ} {α : TypeVec.{u_1} (n + 1)} {α' : TypeVec.{u_2} (n + 1)} (f : α.Arrow α')
Goal: TypeVec.splitFun (TypeVec.dropFun f) (TypeVec.lastFun f) = f