Library HoTT.Classes.implementations.pointwise
Section contents.
Context `{Funext}.
Context {A B : Type}.
Context `{BJoin : Join B}.
Context `{BMeet : Meet B}.
Context `{BBottom : Bottom B}.
Context `{BTop : Top B}.
Global Instance bot_fun : Bottom (A → B)
:= fun _ ⇒ ⊥.
Global Instance top_fun : Top (A → B)
:= fun _ ⇒ ⊤.
Global Instance join_fun : Join (A → B) :=
fun (f g : A → B) (a : A) ⇒ (f a) ⊔ (g a).
Global Instance meet_fun : Meet (A → B) :=
fun (f g : A → B) (a : A) ⇒ (f a) ⊓ (g a).
Context `{Funext}.
Context {A B : Type}.
Context `{BJoin : Join B}.
Context `{BMeet : Meet B}.
Context `{BBottom : Bottom B}.
Context `{BTop : Top B}.
Global Instance bot_fun : Bottom (A → B)
:= fun _ ⇒ ⊥.
Global Instance top_fun : Top (A → B)
:= fun _ ⇒ ⊤.
Global Instance join_fun : Join (A → B) :=
fun (f g : A → B) (a : A) ⇒ (f a) ⊔ (g a).
Global Instance meet_fun : Meet (A → B) :=
fun (f g : A → B) (a : A) ⇒ (f a) ⊓ (g a).
Try to solve some of the lattice obligations automatically
Create HintDb lattice_hints.
#[local]
Hint Resolve
associativity
absorption
commutativity | 1 : lattice_hints.
Local Ltac reduce_fun := compute; intros; apply path_forall; intro.
Global Instance lattice_fun `{!IsLattice B} : IsLattice (A → B).
Proof.
repeat split; try apply _; reduce_fun.
1,4: apply associativity.
1,3: apply commutativity.
1,2: apply binary_idempotent.
1,2: apply absorption.
Defined.
Instance boundedjoinsemilattice_fun
`{!IsBoundedJoinSemiLattice B} :
IsBoundedJoinSemiLattice (A → B).
Proof.
repeat split; try apply _; reduce_fun.
× apply associativity.
× apply left_identity.
× apply right_identity.
× apply commutativity.
× apply binary_idempotent.
Defined.
Instance boundedmeetsemilattice_fun
`{!IsBoundedMeetSemiLattice B} :
IsBoundedMeetSemiLattice (A → B).
Proof.
repeat split; try apply _; reduce_fun.
× apply associativity.
× apply left_identity.
× apply right_identity.
× apply commutativity.
× apply binary_idempotent.
Defined.
Global Instance boundedlattice_fun
`{!IsBoundedLattice B} : IsBoundedLattice (A → B).
Proof.
repeat split; try apply _; reduce_fun; apply absorption.
Defined.
End contents.
#[export]
Hint Resolve
associativity
absorption
commutativity | 1 : lattice_hints.
#[local]
Hint Resolve
associativity
absorption
commutativity | 1 : lattice_hints.
Local Ltac reduce_fun := compute; intros; apply path_forall; intro.
Global Instance lattice_fun `{!IsLattice B} : IsLattice (A → B).
Proof.
repeat split; try apply _; reduce_fun.
1,4: apply associativity.
1,3: apply commutativity.
1,2: apply binary_idempotent.
1,2: apply absorption.
Defined.
Instance boundedjoinsemilattice_fun
`{!IsBoundedJoinSemiLattice B} :
IsBoundedJoinSemiLattice (A → B).
Proof.
repeat split; try apply _; reduce_fun.
× apply associativity.
× apply left_identity.
× apply right_identity.
× apply commutativity.
× apply binary_idempotent.
Defined.
Instance boundedmeetsemilattice_fun
`{!IsBoundedMeetSemiLattice B} :
IsBoundedMeetSemiLattice (A → B).
Proof.
repeat split; try apply _; reduce_fun.
× apply associativity.
× apply left_identity.
× apply right_identity.
× apply commutativity.
× apply binary_idempotent.
Defined.
Global Instance boundedlattice_fun
`{!IsBoundedLattice B} : IsBoundedLattice (A → B).
Proof.
repeat split; try apply _; reduce_fun; apply absorption.
Defined.
End contents.
#[export]
Hint Resolve
associativity
absorption
commutativity | 1 : lattice_hints.