Section HENKIN.
#[local] Infix "=~=" := is_similar_to : type_scope.
Context {L : language}.
#[local] Notation L' := (augmented_language L Henkin_constants).
#[local] Notation hatom := (ivar + Henkin_constants)%type.
#[local] Notation hsubst := (hatom -> trm L').
#[local] Existing Instance constant_symbols_sim.
#[local] Existing Instance trm_sim.
#[local] Existing Instance trms_sim.
#[local] Existing Instance frm_sim.
#[local] Existing Instance frms_sim.
#[local] Opaque Nat.mul Nat.div "mod".
Context {enum_frm_L' : isEnumerable (frm L')}.
Fixpoint addHenkin (X : ensemble (frm L')) (n : nat) {struct n} : ensemble (frm L') :=
match n with
| O => X
| S n => E.insert (nth_Henkin_axiom n) (addHenkin X n)
end.

Lemma addHenkin_nth_Henkin_not_occur (X : ensemble (frm L')) k n (p : frm L')
(LE : k <= n)
(HC_free : forall A : frm L', forall c : Henkin_constants, forall IN : A \in X, HC_occurs_in_frm c A = false)
(IN : p \in addHenkin X k)
: HC_occurs_in_frm (nth_Henkin_constant n) p = false.