This type of template is very easy to express in Coq, although setting up the infrastructure for this can take some effort.
First, we define a sentence that expresses that all the sentences in the list are equivalent:
Require Import Coq.Lists.List. Import ListNotations.
Definition all_equivalent (Ps : list Prop) : Prop :=
forall n m : nat, nth n Ps False -> nth m Ps True.
: , , , . ( , , . .) ; .
Fixpoint all_equivalent'_aux
(first current : Prop) (rest : list Prop) : Prop :=
match rest with
| [] => current -> first
| P :: rest' => (current -> P) /\ all_equivalent'_aux first P rest'
end.
Definition all_equivalent' (Ps : list Prop) : Prop :=
match Ps with
| first :: second :: rest =>
(first -> second) /\ all_equivalent' first second rest
| _ => True
end.
, , :
Lemma all_equivalentP Ps : all_equivalent' Ps -> all_equivalent Ps.
, , , , . , , .