[GOAL]
α✝ : Type ?u.229
β✝ : Type ?u.232
γ✝ : Type ?u.235
f✝ : α✝ → β✝ → γ✝
a✝ : Option α✝
b✝ : Option β✝
c : Option γ✝
α β γ : Type u_1
f : α → β → γ
a : Option α
b : Option β
⊢ map₂ f a b = Seq.seq (f <$> a) fun x => b
[PROOFSTEP]
cases a
[GOAL]
case none
α✝ : Type ?u.229
β✝ : Type ?u.232
γ✝ : Type ?u.235
f✝ : α✝ → β✝ → γ✝
a : Option α✝
b✝ : Option β✝
c : Option γ✝
α β γ : Type u_1
f : α → β → γ
b : Option β
⊢ map₂ f none b = Seq.seq (f <$> none) fun x => b
[PROOFSTEP]
rfl
[GOAL]
case some
α✝ : Type ?u.229
β✝ : Type ?u.232
γ✝ : Type ?u.235
f✝ : α✝ → β✝ → γ✝
a : Option α✝
b✝ : Option β✝
c : Option γ✝
α β γ : Type u_1
f : α → β → γ
b : Option β
val✝ : α
⊢ map₂ f (some val✝) b = Seq.seq (f <$> some val✝) fun x => b
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_3
γ : Type u_2
f✝ : α → β → γ
a✝ : Option α
b : Option β
c : Option γ
f : α → β → γ
a : Option α
⊢ map₂ f a none = none
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_1
β : Type u_3
γ : Type u_2
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
⊢ map₂ f none none = none
[PROOFSTEP]
rfl
[GOAL]
case some
α : Type u_1
β : Type u_3
γ : Type u_2
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
val✝ : α
⊢ map₂ f (some val✝) none = none
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_3
γ : Type u_2
f✝ : α → β → γ
a✝ : Option α
b✝ : Option β
c : Option γ
f : α → β → γ
a : Option α
b : β
⊢ map₂ f a (some b) = Option.map (fun a => f a b) a
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_1
β : Type u_3
γ : Type u_2
f✝ : α → β → γ
a : Option α
b✝ : Option β
c : Option γ
f : α → β → γ
b : β
⊢ map₂ f none (some b) = Option.map (fun a => f a b) none
[PROOFSTEP]
rfl
[GOAL]
case some
α : Type u_1
β : Type u_3
γ : Type u_2
f✝ : α → β → γ
a : Option α
b✝ : Option β
c : Option γ
f : α → β → γ
b : β
val✝ : α
⊢ map₂ f (some val✝) (some b) = Option.map (fun a => f a b) (some val✝)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
a : Option α
b : Option β
c✝ : Option γ
c : γ
⊢ c ∈ map₂ f a b ↔ ∃ a' b', a' ∈ a ∧ b' ∈ b ∧ f a' b' = c
[PROOFSTEP]
simp [map₂]
[GOAL]
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
a : Option α
b : Option β
c : Option γ
⊢ map₂ f a b = none ↔ a = none ∨ b = none
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
b : Option β
c : Option γ
⊢ map₂ f none b = none ↔ none = none ∨ b = none
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
b : Option β
c : Option γ
val✝ : α
⊢ map₂ f (some val✝) b = none ↔ some val✝ = none ∨ b = none
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
c : Option γ
⊢ map₂ f none none = none ↔ none = none ∨ none = none
[PROOFSTEP]
simp
[GOAL]
case none.some
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
c : Option γ
val✝ : β
⊢ map₂ f none (some val✝) = none ↔ none = none ∨ some val✝ = none
[PROOFSTEP]
simp
[GOAL]
case some.none
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
c : Option γ
val✝ : α
⊢ map₂ f (some val✝) none = none ↔ some val✝ = none ∨ none = none
[PROOFSTEP]
simp
[GOAL]
case some.some
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
c : Option γ
val✝¹ : α
val✝ : β
⊢ map₂ f (some val✝¹) (some val✝) = none ↔ some val✝¹ = none ∨ some val✝ = none
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β → γ
a✝ : Option α
b✝ : Option β
c : Option γ
f : α → β → γ
a : Option α
b : Option β
⊢ map₂ f a b = map₂ (fun a b => f b a) b a
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β → γ
a : Option α
b✝ : Option β
c : Option γ
f : α → β → γ
b : Option β
⊢ map₂ f none b = map₂ (fun a b => f b a) b none
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β → γ
a : Option α
b✝ : Option β
c : Option γ
f : α → β → γ
b : Option β
val✝ : α
⊢ map₂ f (some val✝) b = map₂ (fun a b => f b a) b (some val✝)
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
⊢ map₂ f none none = map₂ (fun a b => f b a) none none
[PROOFSTEP]
rfl
[GOAL]
case none.some
α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
val✝ : β
⊢ map₂ f none (some val✝) = map₂ (fun a b => f b a) (some val✝) none
[PROOFSTEP]
rfl
[GOAL]
case some.none
α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
val✝ : α
⊢ map₂ f (some val✝) none = map₂ (fun a b => f b a) none (some val✝)
[PROOFSTEP]
rfl
[GOAL]
case some.some
α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
val✝¹ : α
val✝ : β
⊢ map₂ f (some val✝¹) (some val✝) = map₂ (fun a b => f b a) (some val✝) (some val✝¹)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_3
β : Type u_4
γ : Type u_2
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
f : α → β → γ
g : γ → δ
⊢ Option.map g (map₂ f a b) = map₂ (fun a b => g (f a b)) a b
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_3
β : Type u_4
γ : Type u_2
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
f : α → β → γ
g : γ → δ
⊢ Option.map g (map₂ f none b) = map₂ (fun a b => g (f a b)) none b
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_3
β : Type u_4
γ : Type u_2
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
f : α → β → γ
g : γ → δ
val✝ : α
⊢ Option.map g (map₂ f (some val✝) b) = map₂ (fun a b => g (f a b)) (some val✝) b
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_3
β : Type u_4
γ : Type u_2
f✝ : α → β → γ
c : Option γ
δ : Type u_1
f : α → β → γ
g : γ → δ
⊢ Option.map g (map₂ f none none) = map₂ (fun a b => g (f a b)) none none
[PROOFSTEP]
rfl
[GOAL]
case none.some
α : Type u_3
β : Type u_4
γ : Type u_2
f✝ : α → β → γ
c : Option γ
δ : Type u_1
f : α → β → γ
g : γ → δ
val✝ : β
⊢ Option.map g (map₂ f none (some val✝)) = map₂ (fun a b => g (f a b)) none (some val✝)
[PROOFSTEP]
rfl
[GOAL]
case some.none
α : Type u_3
β : Type u_4
γ : Type u_2
f✝ : α → β → γ
c : Option γ
δ : Type u_1
f : α → β → γ
g : γ → δ
val✝ : α
⊢ Option.map g (map₂ f (some val✝) none) = map₂ (fun a b => g (f a b)) (some val✝) none
[PROOFSTEP]
rfl
[GOAL]
case some.some
α : Type u_3
β : Type u_4
γ : Type u_2
f✝ : α → β → γ
c : Option γ
δ : Type u_1
f : α → β → γ
g : γ → δ
val✝¹ : α
val✝ : β
⊢ Option.map g (map₂ f (some val✝¹) (some val✝)) = map₂ (fun a b => g (f a b)) (some val✝¹) (some val✝)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_4
β : Type u_3
γ : Type u_2
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
f : γ → β → δ
g : α → γ
⊢ map₂ f (Option.map g a) b = map₂ (fun a b => f (g a) b) a b
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_4
β : Type u_3
γ : Type u_2
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
f : γ → β → δ
g : α → γ
⊢ map₂ f (Option.map g none) b = map₂ (fun a b => f (g a) b) none b
[PROOFSTEP]
rfl
[GOAL]
case some
α : Type u_4
β : Type u_3
γ : Type u_2
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
f : γ → β → δ
g : α → γ
val✝ : α
⊢ map₂ f (Option.map g (some val✝)) b = map₂ (fun a b => f (g a) b) (some val✝) b
[PROOFSTEP]
rfl
[GOAL]
α : Type u_2
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
f : α → γ → δ
g : β → γ
⊢ map₂ f a (Option.map g b) = map₂ (fun a b => f a (g b)) a b
[PROOFSTEP]
cases b
[GOAL]
case none
α : Type u_2
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
a : Option α
c : Option γ
δ : Type u_1
f : α → γ → δ
g : β → γ
⊢ map₂ f a (Option.map g none) = map₂ (fun a b => f a (g b)) a none
[PROOFSTEP]
rfl
[GOAL]
case some
α : Type u_2
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
a : Option α
c : Option γ
δ : Type u_1
f : α → γ → δ
g : β → γ
val✝ : β
⊢ map₂ f a (Option.map g (some val✝)) = map₂ (fun a b => f a (g b)) a (some val✝)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_2
β : Type u_1
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
x : Option (α × β)
⊢ Option.map (uncurry f) x = map₂ f (Option.map Prod.fst x) (Option.map Prod.snd x)
[PROOFSTEP]
cases x
[GOAL]
case none
α : Type u_2
β : Type u_1
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
⊢ Option.map (uncurry f) none = map₂ f (Option.map Prod.fst none) (Option.map Prod.snd none)
[PROOFSTEP]
rfl
[GOAL]
case some
α : Type u_2
β : Type u_1
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
val✝ : α × β
⊢ Option.map (uncurry f) (some val✝) = map₂ f (Option.map Prod.fst (some val✝)) (Option.map Prod.snd (some val✝))
[PROOFSTEP]
rfl
[GOAL]
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
⊢ map₂ f (map₂ g a b) c = map₂ f' a (map₂ g' b c)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
⊢ map₂ f (map₂ g none b) c = map₂ f' none (map₂ g' b c)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝ : α
⊢ map₂ f (map₂ g (some val✝) b) c = map₂ f' (some val✝) (map₂ g' b c)
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
⊢ map₂ f (map₂ g none none) c = map₂ f' none (map₂ g' none c)
[PROOFSTEP]
cases c
[GOAL]
case none.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝ : β
⊢ map₂ f (map₂ g none (some val✝)) c = map₂ f' none (map₂ g' (some val✝) c)
[PROOFSTEP]
cases c
[GOAL]
case some.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝ : α
⊢ map₂ f (map₂ g (some val✝) none) c = map₂ f' (some val✝) (map₂ g' none c)
[PROOFSTEP]
cases c
[GOAL]
case some.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝¹ : α
val✝ : β
⊢ map₂ f (map₂ g (some val✝¹) (some val✝)) c = map₂ f' (some val✝¹) (map₂ g' (some val✝) c)
[PROOFSTEP]
cases c
[GOAL]
case none.none.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
⊢ map₂ f (map₂ g none none) none = map₂ f' none (map₂ g' none none)
[PROOFSTEP]
simp [h_assoc]
[GOAL]
case none.none.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝ : γ
⊢ map₂ f (map₂ g none none) (some val✝) = map₂ f' none (map₂ g' none (some val✝))
[PROOFSTEP]
simp [h_assoc]
[GOAL]
case none.some.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝ : β
⊢ map₂ f (map₂ g none (some val✝)) none = map₂ f' none (map₂ g' (some val✝) none)
[PROOFSTEP]
simp [h_assoc]
[GOAL]
case none.some.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝¹ : β
val✝ : γ
⊢ map₂ f (map₂ g none (some val✝¹)) (some val✝) = map₂ f' none (map₂ g' (some val✝¹) (some val✝))
[PROOFSTEP]
simp [h_assoc]
[GOAL]
case some.none.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝ : α
⊢ map₂ f (map₂ g (some val✝) none) none = map₂ f' (some val✝) (map₂ g' none none)
[PROOFSTEP]
simp [h_assoc]
[GOAL]
case some.none.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝¹ : α
val✝ : γ
⊢ map₂ f (map₂ g (some val✝¹) none) (some val✝) = map₂ f' (some val✝¹) (map₂ g' none (some val✝))
[PROOFSTEP]
simp [h_assoc]
[GOAL]
case some.some.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝¹ : α
val✝ : β
⊢ map₂ f (map₂ g (some val✝¹) (some val✝)) none = map₂ f' (some val✝¹) (map₂ g' (some val✝) none)
[PROOFSTEP]
simp [h_assoc]
[GOAL]
case some.some.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
ε' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → ε' → ε
g' : β → γ → ε'
h_assoc : ∀ (a : α) (b : β) (c : γ), f (g a b) c = f' a (g' b c)
val✝² : α
val✝¹ : β
val✝ : γ
⊢ map₂ f (map₂ g (some val✝²) (some val✝¹)) (some val✝) = map₂ f' (some val✝²) (map₂ g' (some val✝¹) (some val✝))
[PROOFSTEP]
simp [h_assoc]
[GOAL]
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
a : Option α
b : Option β
c : Option γ
g : β → α → γ
h_comm : ∀ (a : α) (b : β), f a b = g b a
⊢ map₂ f a b = map₂ g b a
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
b : Option β
c : Option γ
g : β → α → γ
h_comm : ∀ (a : α) (b : β), f a b = g b a
⊢ map₂ f none b = map₂ g b none
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
b : Option β
c : Option γ
g : β → α → γ
h_comm : ∀ (a : α) (b : β), f a b = g b a
val✝ : α
⊢ map₂ f (some val✝) b = map₂ g b (some val✝)
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
c : Option γ
g : β → α → γ
h_comm : ∀ (a : α) (b : β), f a b = g b a
⊢ map₂ f none none = map₂ g none none
[PROOFSTEP]
simp [h_comm]
[GOAL]
case none.some
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
c : Option γ
g : β → α → γ
h_comm : ∀ (a : α) (b : β), f a b = g b a
val✝ : β
⊢ map₂ f none (some val✝) = map₂ g (some val✝) none
[PROOFSTEP]
simp [h_comm]
[GOAL]
case some.none
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
c : Option γ
g : β → α → γ
h_comm : ∀ (a : α) (b : β), f a b = g b a
val✝ : α
⊢ map₂ f (some val✝) none = map₂ g none (some val✝)
[PROOFSTEP]
simp [h_comm]
[GOAL]
case some.some
α : Type u_2
β : Type u_3
γ : Type u_1
f : α → β → γ
c : Option γ
g : β → α → γ
h_comm : ∀ (a : α) (b : β), f a b = g b a
val✝¹ : α
val✝ : β
⊢ map₂ f (some val✝¹) (some val✝) = map₂ g (some val✝) (some val✝¹)
[PROOFSTEP]
simp [h_comm]
[GOAL]
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
⊢ map₂ f a (map₂ g b c) = map₂ g' b (map₂ f' a c)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
⊢ map₂ f none (map₂ g b c) = map₂ g' b (map₂ f' none c)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝ : α
⊢ map₂ f (some val✝) (map₂ g b c) = map₂ g' b (map₂ f' (some val✝) c)
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
⊢ map₂ f none (map₂ g none c) = map₂ g' none (map₂ f' none c)
[PROOFSTEP]
cases c
[GOAL]
case none.some
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝ : β
⊢ map₂ f none (map₂ g (some val✝) c) = map₂ g' (some val✝) (map₂ f' none c)
[PROOFSTEP]
cases c
[GOAL]
case some.none
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝ : α
⊢ map₂ f (some val✝) (map₂ g none c) = map₂ g' none (map₂ f' (some val✝) c)
[PROOFSTEP]
cases c
[GOAL]
case some.some
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝¹ : α
val✝ : β
⊢ map₂ f (some val✝¹) (map₂ g (some val✝) c) = map₂ g' (some val✝) (map₂ f' (some val✝¹) c)
[PROOFSTEP]
cases c
[GOAL]
case none.none.none
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
⊢ map₂ f none (map₂ g none none) = map₂ g' none (map₂ f' none none)
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case none.none.some
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝ : γ
⊢ map₂ f none (map₂ g none (some val✝)) = map₂ g' none (map₂ f' none (some val✝))
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case none.some.none
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝ : β
⊢ map₂ f none (map₂ g (some val✝) none) = map₂ g' (some val✝) (map₂ f' none none)
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case none.some.some
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝¹ : β
val✝ : γ
⊢ map₂ f none (map₂ g (some val✝¹) (some val✝)) = map₂ g' (some val✝¹) (map₂ f' none (some val✝))
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case some.none.none
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝ : α
⊢ map₂ f (some val✝) (map₂ g none none) = map₂ g' none (map₂ f' (some val✝) none)
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case some.none.some
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝¹ : α
val✝ : γ
⊢ map₂ f (some val✝¹) (map₂ g none (some val✝)) = map₂ g' none (map₂ f' (some val✝¹) (some val✝))
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case some.some.none
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝¹ : α
val✝ : β
⊢ map₂ f (some val✝¹) (map₂ g (some val✝) none) = map₂ g' (some val✝) (map₂ f' (some val✝¹) none)
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case some.some.some
α : Type u_4
β : Type u_5
γ : Type u_6
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
val✝² : α
val✝¹ : β
val✝ : γ
⊢ map₂ f (some val✝²) (map₂ g (some val✝¹) (some val✝)) = map₂ g' (some val✝¹) (map₂ f' (some val✝²) (some val✝))
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
⊢ map₂ f (map₂ g a b) c = map₂ g' (map₂ f' a c) b
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
⊢ map₂ f (map₂ g none b) c = map₂ g' (map₂ f' none c) b
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝ : α
⊢ map₂ f (map₂ g (some val✝) b) c = map₂ g' (map₂ f' (some val✝) c) b
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
⊢ map₂ f (map₂ g none none) c = map₂ g' (map₂ f' none c) none
[PROOFSTEP]
cases c
[GOAL]
case none.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝ : β
⊢ map₂ f (map₂ g none (some val✝)) c = map₂ g' (map₂ f' none c) (some val✝)
[PROOFSTEP]
cases c
[GOAL]
case some.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝ : α
⊢ map₂ f (map₂ g (some val✝) none) c = map₂ g' (map₂ f' (some val✝) c) none
[PROOFSTEP]
cases c
[GOAL]
case some.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
c : Option γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝¹ : α
val✝ : β
⊢ map₂ f (map₂ g (some val✝¹) (some val✝)) c = map₂ g' (map₂ f' (some val✝¹) c) (some val✝)
[PROOFSTEP]
cases c
[GOAL]
case none.none.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
⊢ map₂ f (map₂ g none none) none = map₂ g' (map₂ f' none none) none
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case none.none.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝ : γ
⊢ map₂ f (map₂ g none none) (some val✝) = map₂ g' (map₂ f' none (some val✝)) none
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case none.some.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝ : β
⊢ map₂ f (map₂ g none (some val✝)) none = map₂ g' (map₂ f' none none) (some val✝)
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case none.some.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝¹ : β
val✝ : γ
⊢ map₂ f (map₂ g none (some val✝¹)) (some val✝) = map₂ g' (map₂ f' none (some val✝)) (some val✝¹)
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case some.none.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝ : α
⊢ map₂ f (map₂ g (some val✝) none) none = map₂ g' (map₂ f' (some val✝) none) none
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case some.none.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝¹ : α
val✝ : γ
⊢ map₂ f (map₂ g (some val✝¹) none) (some val✝) = map₂ g' (map₂ f' (some val✝¹) (some val✝)) none
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case some.some.none
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝¹ : α
val✝ : β
⊢ map₂ f (map₂ g (some val✝¹) (some val✝)) none = map₂ g' (map₂ f' (some val✝¹) none) (some val✝)
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case some.some.some
α : Type u_5
β : Type u_6
γ : Type u_4
f✝ : α → β → γ
δ : Type u_1
ε : Type u_2
δ' : Type u_3
f : δ → γ → ε
g : α → β → δ
f' : α → γ → δ'
g' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), f (g a b) c = g' (f' a c) b
val✝² : α
val✝¹ : β
val✝ : γ
⊢ map₂ f (map₂ g (some val✝²) (some val✝¹)) (some val✝) = map₂ g' (map₂ f' (some val✝²) (some val✝)) (some val✝¹)
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
α' : Type u_2
β' : Type u_3
g : γ → δ
f' : α' → β' → δ
g₁ : α → α'
g₂ : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ a) (g₂ b)
⊢ Option.map g (map₂ f a b) = map₂ f' (Option.map g₁ a) (Option.map g₂ b)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
α' : Type u_2
β' : Type u_3
g : γ → δ
f' : α' → β' → δ
g₁ : α → α'
g₂ : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ a) (g₂ b)
⊢ Option.map g (map₂ f none b) = map₂ f' (Option.map g₁ none) (Option.map g₂ b)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
α' : Type u_2
β' : Type u_3
g : γ → δ
f' : α' → β' → δ
g₁ : α → α'
g₂ : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ a) (g₂ b)
val✝ : α
⊢ Option.map g (map₂ f (some val✝) b) = map₂ f' (Option.map g₁ (some val✝)) (Option.map g₂ b)
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
β' : Type u_3
g : γ → δ
f' : α' → β' → δ
g₁ : α → α'
g₂ : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ a) (g₂ b)
⊢ Option.map g (map₂ f none none) = map₂ f' (Option.map g₁ none) (Option.map g₂ none)
[PROOFSTEP]
simp [h_distrib]
[GOAL]
case none.some
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
β' : Type u_3
g : γ → δ
f' : α' → β' → δ
g₁ : α → α'
g₂ : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ a) (g₂ b)
val✝ : β
⊢ Option.map g (map₂ f none (some val✝)) = map₂ f' (Option.map g₁ none) (Option.map g₂ (some val✝))
[PROOFSTEP]
simp [h_distrib]
[GOAL]
case some.none
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
β' : Type u_3
g : γ → δ
f' : α' → β' → δ
g₁ : α → α'
g₂ : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ a) (g₂ b)
val✝ : α
⊢ Option.map g (map₂ f (some val✝) none) = map₂ f' (Option.map g₁ (some val✝)) (Option.map g₂ none)
[PROOFSTEP]
simp [h_distrib]
[GOAL]
case some.some
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
β' : Type u_3
g : γ → δ
f' : α' → β' → δ
g₁ : α → α'
g₂ : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ a) (g₂ b)
val✝¹ : α
val✝ : β
⊢ Option.map g (map₂ f (some val✝¹) (some val✝)) = map₂ f' (Option.map g₁ (some val✝¹)) (Option.map g₂ (some val✝))
[PROOFSTEP]
simp [h_distrib]
[GOAL]
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : α' → β → δ
g' : α → α'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g' a) b
⊢ Option.map g (map₂ f a b) = map₂ f' (Option.map g' a) b
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : α' → β → δ
g' : α → α'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g' a) b
⊢ Option.map g (map₂ f none b) = map₂ f' (Option.map g' none) b
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : α' → β → δ
g' : α → α'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g' a) b
val✝ : α
⊢ Option.map g (map₂ f (some val✝) b) = map₂ f' (Option.map g' (some val✝)) b
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : α' → β → δ
g' : α → α'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g' a) b
⊢ Option.map g (map₂ f none none) = map₂ f' (Option.map g' none) none
[PROOFSTEP]
simp [h_distrib]
[GOAL]
case none.some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : α' → β → δ
g' : α → α'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g' a) b
val✝ : β
⊢ Option.map g (map₂ f none (some val✝)) = map₂ f' (Option.map g' none) (some val✝)
[PROOFSTEP]
simp [h_distrib]
[GOAL]
case some.none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : α' → β → δ
g' : α → α'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g' a) b
val✝ : α
⊢ Option.map g (map₂ f (some val✝) none) = map₂ f' (Option.map g' (some val✝)) none
[PROOFSTEP]
simp [h_distrib]
[GOAL]
case some.some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : α' → β → δ
g' : α → α'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g' a) b
val✝¹ : α
val✝ : β
⊢ Option.map g (map₂ f (some val✝¹) (some val✝)) = map₂ f' (Option.map g' (some val✝¹)) (some val✝)
[PROOFSTEP]
simp [h_distrib]
[GOAL]
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : α → β' → δ
g' : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' a (g' b)
⊢ Option.map g (map₂ f a b) = map₂ f' a (Option.map g' b)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : α → β' → δ
g' : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' a (g' b)
⊢ Option.map g (map₂ f none b) = map₂ f' none (Option.map g' b)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : α → β' → δ
g' : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' a (g' b)
val✝ : α
⊢ Option.map g (map₂ f (some val✝) b) = map₂ f' (some val✝) (Option.map g' b)
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : α → β' → δ
g' : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' a (g' b)
⊢ Option.map g (map₂ f none none) = map₂ f' none (Option.map g' none)
[PROOFSTEP]
simp [h_distrib]
[GOAL]
case none.some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : α → β' → δ
g' : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' a (g' b)
val✝ : β
⊢ Option.map g (map₂ f none (some val✝)) = map₂ f' none (Option.map g' (some val✝))
[PROOFSTEP]
simp [h_distrib]
[GOAL]
case some.none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : α → β' → δ
g' : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' a (g' b)
val✝ : α
⊢ Option.map g (map₂ f (some val✝) none) = map₂ f' (some val✝) (Option.map g' none)
[PROOFSTEP]
simp [h_distrib]
[GOAL]
case some.some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : α → β' → δ
g' : β → β'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' a (g' b)
val✝¹ : α
val✝ : β
⊢ Option.map g (map₂ f (some val✝¹) (some val✝)) = map₂ f' (some val✝¹) (Option.map g' (some val✝))
[PROOFSTEP]
simp [h_distrib]
[GOAL]
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : α → β → δ
g' : δ → γ
h_left_comm : ∀ (a : α) (b : β), f (g a) b = g' (f' a b)
⊢ map₂ f (Option.map g a) b = Option.map g' (map₂ f' a b)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
b : Option β
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : α → β → δ
g' : δ → γ
h_left_comm : ∀ (a : α) (b : β), f (g a) b = g' (f' a b)
⊢ map₂ f (Option.map g none) b = Option.map g' (map₂ f' none b)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
b : Option β
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : α → β → δ
g' : δ → γ
h_left_comm : ∀ (a : α) (b : β), f (g a) b = g' (f' a b)
val✝ : α
⊢ map₂ f (Option.map g (some val✝)) b = Option.map g' (map₂ f' (some val✝) b)
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : α → β → δ
g' : δ → γ
h_left_comm : ∀ (a : α) (b : β), f (g a) b = g' (f' a b)
⊢ map₂ f (Option.map g none) none = Option.map g' (map₂ f' none none)
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case none.some
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : α → β → δ
g' : δ → γ
h_left_comm : ∀ (a : α) (b : β), f (g a) b = g' (f' a b)
val✝ : β
⊢ map₂ f (Option.map g none) (some val✝) = Option.map g' (map₂ f' none (some val✝))
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case some.none
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : α → β → δ
g' : δ → γ
h_left_comm : ∀ (a : α) (b : β), f (g a) b = g' (f' a b)
val✝ : α
⊢ map₂ f (Option.map g (some val✝)) none = Option.map g' (map₂ f' (some val✝) none)
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
case some.some
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : α → β → δ
g' : δ → γ
h_left_comm : ∀ (a : α) (b : β), f (g a) b = g' (f' a b)
val✝¹ : α
val✝ : β
⊢ map₂ f (Option.map g (some val✝¹)) (some val✝) = Option.map g' (map₂ f' (some val✝¹) (some val✝))
[PROOFSTEP]
simp [h_left_comm]
[GOAL]
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : α → β → δ
g' : δ → γ
h_right_comm : ∀ (a : α) (b : β), f a (g b) = g' (f' a b)
⊢ map₂ f a (Option.map g b) = Option.map g' (map₂ f' a b)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
b : Option β
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : α → β → δ
g' : δ → γ
h_right_comm : ∀ (a : α) (b : β), f a (g b) = g' (f' a b)
⊢ map₂ f none (Option.map g b) = Option.map g' (map₂ f' none b)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
b : Option β
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : α → β → δ
g' : δ → γ
h_right_comm : ∀ (a : α) (b : β), f a (g b) = g' (f' a b)
val✝ : α
⊢ map₂ f (some val✝) (Option.map g b) = Option.map g' (map₂ f' (some val✝) b)
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : α → β → δ
g' : δ → γ
h_right_comm : ∀ (a : α) (b : β), f a (g b) = g' (f' a b)
⊢ map₂ f none (Option.map g none) = Option.map g' (map₂ f' none none)
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case none.some
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : α → β → δ
g' : δ → γ
h_right_comm : ∀ (a : α) (b : β), f a (g b) = g' (f' a b)
val✝ : β
⊢ map₂ f none (Option.map g (some val✝)) = Option.map g' (map₂ f' none (some val✝))
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case some.none
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : α → β → δ
g' : δ → γ
h_right_comm : ∀ (a : α) (b : β), f a (g b) = g' (f' a b)
val✝ : α
⊢ map₂ f (some val✝) (Option.map g none) = Option.map g' (map₂ f' (some val✝) none)
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
case some.some
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : α → β → δ
g' : δ → γ
h_right_comm : ∀ (a : α) (b : β), f a (g b) = g' (f' a b)
val✝¹ : α
val✝ : β
⊢ map₂ f (some val✝¹) (Option.map g (some val✝)) = Option.map g' (map₂ f' (some val✝¹) (some val✝))
[PROOFSTEP]
simp [h_right_comm]
[GOAL]
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
β' : Type u_2
α' : Type u_3
g : γ → δ
f' : β' → α' → δ
g₁ : β → β'
g₂ : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ b) (g₂ a)
⊢ Option.map g (map₂ f a b) = map₂ f' (Option.map g₁ b) (Option.map g₂ a)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
β' : Type u_2
α' : Type u_3
g : γ → δ
f' : β' → α' → δ
g₁ : β → β'
g₂ : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ b) (g₂ a)
⊢ Option.map g (map₂ f none b) = map₂ f' (Option.map g₁ b) (Option.map g₂ none)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
β' : Type u_2
α' : Type u_3
g : γ → δ
f' : β' → α' → δ
g₁ : β → β'
g₂ : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ b) (g₂ a)
val✝ : α
⊢ Option.map g (map₂ f (some val✝) b) = map₂ f' (Option.map g₁ b) (Option.map g₂ (some val✝))
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
α' : Type u_3
g : γ → δ
f' : β' → α' → δ
g₁ : β → β'
g₂ : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ b) (g₂ a)
⊢ Option.map g (map₂ f none none) = map₂ f' (Option.map g₁ none) (Option.map g₂ none)
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
case none.some
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
α' : Type u_3
g : γ → δ
f' : β' → α' → δ
g₁ : β → β'
g₂ : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ b) (g₂ a)
val✝ : β
⊢ Option.map g (map₂ f none (some val✝)) = map₂ f' (Option.map g₁ (some val✝)) (Option.map g₂ none)
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
case some.none
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
α' : Type u_3
g : γ → δ
f' : β' → α' → δ
g₁ : β → β'
g₂ : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ b) (g₂ a)
val✝ : α
⊢ Option.map g (map₂ f (some val✝) none) = map₂ f' (Option.map g₁ none) (Option.map g₂ (some val✝))
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
case some.some
α : Type u_5
β : Type u_6
γ : Type u_4
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
α' : Type u_3
g : γ → δ
f' : β' → α' → δ
g₁ : β → β'
g₂ : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g₁ b) (g₂ a)
val✝¹ : α
val✝ : β
⊢ Option.map g (map₂ f (some val✝¹) (some val✝)) = map₂ f' (Option.map g₁ (some val✝)) (Option.map g₂ (some val✝¹))
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : β' → α → δ
g' : β → β'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g' b) a
⊢ Option.map g (map₂ f a b) = map₂ f' (Option.map g' b) a
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : β' → α → δ
g' : β → β'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g' b) a
⊢ Option.map g (map₂ f none b) = map₂ f' (Option.map g' b) none
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : β' → α → δ
g' : β → β'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g' b) a
val✝ : α
⊢ Option.map g (map₂ f (some val✝) b) = map₂ f' (Option.map g' b) (some val✝)
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : β' → α → δ
g' : β → β'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g' b) a
⊢ Option.map g (map₂ f none none) = map₂ f' (Option.map g' none) none
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
case none.some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : β' → α → δ
g' : β → β'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g' b) a
val✝ : β
⊢ Option.map g (map₂ f none (some val✝)) = map₂ f' (Option.map g' (some val✝)) none
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
case some.none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : β' → α → δ
g' : β → β'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g' b) a
val✝ : α
⊢ Option.map g (map₂ f (some val✝) none) = map₂ f' (Option.map g' none) (some val✝)
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
case some.some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
β' : Type u_2
g : γ → δ
f' : β' → α → δ
g' : β → β'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' (g' b) a
val✝¹ : α
val✝ : β
⊢ Option.map g (map₂ f (some val✝¹) (some val✝)) = map₂ f' (Option.map g' (some val✝)) (some val✝¹)
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
a : Option α
b : Option β
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : β → α' → δ
g' : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' b (g' a)
⊢ Option.map g (map₂ f a b) = map₂ f' b (Option.map g' a)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : β → α' → δ
g' : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' b (g' a)
⊢ Option.map g (map₂ f none b) = map₂ f' b (Option.map g' none)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
b : Option β
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : β → α' → δ
g' : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' b (g' a)
val✝ : α
⊢ Option.map g (map₂ f (some val✝) b) = map₂ f' b (Option.map g' (some val✝))
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : β → α' → δ
g' : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' b (g' a)
⊢ Option.map g (map₂ f none none) = map₂ f' none (Option.map g' none)
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
case none.some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : β → α' → δ
g' : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' b (g' a)
val✝ : β
⊢ Option.map g (map₂ f none (some val✝)) = map₂ f' (some val✝) (Option.map g' none)
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
case some.none
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : β → α' → δ
g' : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' b (g' a)
val✝ : α
⊢ Option.map g (map₂ f (some val✝) none) = map₂ f' none (Option.map g' (some val✝))
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
case some.some
α : Type u_4
β : Type u_5
γ : Type u_3
f : α → β → γ
c : Option γ
δ : Type u_1
α' : Type u_2
g : γ → δ
f' : β → α' → δ
g' : α → α'
h_antidistrib : ∀ (a : α) (b : β), g (f a b) = f' b (g' a)
val✝¹ : α
val✝ : β
⊢ Option.map g (map₂ f (some val✝¹) (some val✝)) = map₂ f' (some val✝) (Option.map g' (some val✝¹))
[PROOFSTEP]
simp [h_antidistrib]
[GOAL]
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : β → α → δ
g' : δ → γ
h_left_anticomm : ∀ (a : α) (b : β), f (g a) b = g' (f' b a)
⊢ map₂ f (Option.map g a) b = Option.map g' (map₂ f' b a)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
b : Option β
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : β → α → δ
g' : δ → γ
h_left_anticomm : ∀ (a : α) (b : β), f (g a) b = g' (f' b a)
⊢ map₂ f (Option.map g none) b = Option.map g' (map₂ f' b none)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
b : Option β
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : β → α → δ
g' : δ → γ
h_left_anticomm : ∀ (a : α) (b : β), f (g a) b = g' (f' b a)
val✝ : α
⊢ map₂ f (Option.map g (some val✝)) b = Option.map g' (map₂ f' b (some val✝))
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : β → α → δ
g' : δ → γ
h_left_anticomm : ∀ (a : α) (b : β), f (g a) b = g' (f' b a)
⊢ map₂ f (Option.map g none) none = Option.map g' (map₂ f' none none)
[PROOFSTEP]
simp [h_left_anticomm]
[GOAL]
case none.some
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : β → α → δ
g' : δ → γ
h_left_anticomm : ∀ (a : α) (b : β), f (g a) b = g' (f' b a)
val✝ : β
⊢ map₂ f (Option.map g none) (some val✝) = Option.map g' (map₂ f' (some val✝) none)
[PROOFSTEP]
simp [h_left_anticomm]
[GOAL]
case some.none
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : β → α → δ
g' : δ → γ
h_left_anticomm : ∀ (a : α) (b : β), f (g a) b = g' (f' b a)
val✝ : α
⊢ map₂ f (Option.map g (some val✝)) none = Option.map g' (map₂ f' none (some val✝))
[PROOFSTEP]
simp [h_left_anticomm]
[GOAL]
case some.some
α : Type u_5
β : Type u_4
γ : Type u_3
f✝ : α → β → γ
c : Option γ
α' : Type u_1
δ : Type u_2
f : α' → β → γ
g : α → α'
f' : β → α → δ
g' : δ → γ
h_left_anticomm : ∀ (a : α) (b : β), f (g a) b = g' (f' b a)
val✝¹ : α
val✝ : β
⊢ map₂ f (Option.map g (some val✝¹)) (some val✝) = Option.map g' (map₂ f' (some val✝) (some val✝¹))
[PROOFSTEP]
simp [h_left_anticomm]
[GOAL]
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : β → α → δ
g' : δ → γ
h_right_anticomm : ∀ (a : α) (b : β), f a (g b) = g' (f' b a)
⊢ map₂ f a (Option.map g b) = Option.map g' (map₂ f' b a)
[PROOFSTEP]
cases a
[GOAL]
case none
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
b : Option β
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : β → α → δ
g' : δ → γ
h_right_anticomm : ∀ (a : α) (b : β), f a (g b) = g' (f' b a)
⊢ map₂ f none (Option.map g b) = Option.map g' (map₂ f' b none)
[PROOFSTEP]
cases b
[GOAL]
case some
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
b : Option β
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : β → α → δ
g' : δ → γ
h_right_anticomm : ∀ (a : α) (b : β), f a (g b) = g' (f' b a)
val✝ : α
⊢ map₂ f (some val✝) (Option.map g b) = Option.map g' (map₂ f' b (some val✝))
[PROOFSTEP]
cases b
[GOAL]
case none.none
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : β → α → δ
g' : δ → γ
h_right_anticomm : ∀ (a : α) (b : β), f a (g b) = g' (f' b a)
⊢ map₂ f none (Option.map g none) = Option.map g' (map₂ f' none none)
[PROOFSTEP]
simp [h_right_anticomm]
[GOAL]
case none.some
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : β → α → δ
g' : δ → γ
h_right_anticomm : ∀ (a : α) (b : β), f a (g b) = g' (f' b a)
val✝ : β
⊢ map₂ f none (Option.map g (some val✝)) = Option.map g' (map₂ f' (some val✝) none)
[PROOFSTEP]
simp [h_right_anticomm]
[GOAL]
case some.none
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : β → α → δ
g' : δ → γ
h_right_anticomm : ∀ (a : α) (b : β), f a (g b) = g' (f' b a)
val✝ : α
⊢ map₂ f (some val✝) (Option.map g none) = Option.map g' (map₂ f' none (some val✝))
[PROOFSTEP]
simp [h_right_anticomm]
[GOAL]
case some.some
α : Type u_4
β : Type u_5
γ : Type u_3
f✝ : α → β → γ
c : Option γ
β' : Type u_1
δ : Type u_2
f : α → β' → γ
g : β → β'
f' : β → α → δ
g' : δ → γ
h_right_anticomm : ∀ (a : α) (b : β), f a (g b) = g' (f' b a)
val✝¹ : α
val✝ : β
⊢ map₂ f (some val✝¹) (Option.map g (some val✝)) = Option.map g' (map₂ f' (some val✝) (some val✝¹))
[PROOFSTEP]
simp [h_right_anticomm]
[GOAL]
α : Type u_2
β : Type u_1
γ : Type ?u.32843
f✝ : α → β → γ
a✝ : Option α
b : Option β
c : Option γ
f : α → β → β
a : α
h : ∀ (b : β), f a b = b
o : Option β
⊢ map₂ f (some a) o = o
[PROOFSTEP]
cases o
[GOAL]
case none
α : Type u_2
β : Type u_1
γ : Type ?u.32843
f✝ : α → β → γ
a✝ : Option α
b : Option β
c : Option γ
f : α → β → β
a : α
h : ∀ (b : β), f a b = b
⊢ map₂ f (some a) none = none
case some
α : Type u_2
β : Type u_1
γ : Type ?u.32843
f✝ : α → β → γ
a✝ : Option α
b : Option β
c : Option γ
f : α → β → β
a : α
h : ∀ (b : β), f a b = b
val✝ : β
⊢ map₂ f (some a) (some val✝) = some val✝
[PROOFSTEP]
exacts [rfl, congr_arg some (h _)]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type ?u.33033
f✝ : α → β → γ
a : Option α
b✝ : Option β
c : Option γ
f : α → β → α
b : β
h : ∀ (a : α), f a b = a
o : Option α
⊢ map₂ f o (some b) = o
[PROOFSTEP]
simp [h, map₂]