Module mathcomp.classical.contra
From mathcomp Require Import ssreflect ssrfun ssrbool eqtype ssrnat seq.From mathcomp Require Import boolp.
Unset SsrOldRewriteGoalsOrder.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Variant move_viewSource code SSource code TSource code := MoveViewSource code of S -> T.
Definition move_viewP
Internals.move_viewP : forall {S T : Type}, Internals.move_view S T -> S -> T Internals.move_viewP is not universe polymorphic Arguments Internals.move_viewP {S T}%_type_scope mv _ Internals.move_viewP is transparent Expands to: Constant mathcomp.classical.contra.Internals.move_viewP Declared in library mathcomp.classical.contra, line 64, characters 11-21
Source code {SSource code TSource code} mvSource code : S -> T := let: MoveView v := mv in v.
Hint View for move/ move_viewP|2.
Variant equivTSource code SSource code TSource code := EquivTSource code of S -> T & T -> S.
Definition equivT_refl
Internals.equivT_refl : forall S : Type, Internals.equivT S S Internals.equivT_refl is not universe polymorphic Arguments Internals.equivT_refl S%_type_scope Internals.equivT_refl is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_refl Declared in library mathcomp.classical.contra, line 73, characters 11-22
Source code SSource code : equivT S S := EquivT id id.
Definition equivT_transl
Internals.equivT_transl : forall {S T U : Type}, Internals.equivT S T -> Internals.equivT S U -> Internals.equivT T U Internals.equivT_transl is not universe polymorphic Arguments Internals.equivT_transl {S T U}%_type_scope _ _ Internals.equivT_transl is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_transl Declared in library mathcomp.classical.contra, line 74, characters 11-24
Source code {SSource code TSource code USource code} : equivT S T -> equivT S U -> equivT T U :=
fun (stSource code : equivT S T) (suSource code : equivT S U) =>
let: EquivT S_T T_S := st in
let: EquivT S_U U_S := su in
EquivT (S_U \o T_S) (S_T \o U_S).
Definition equivT_sym
Internals.equivT_sym : forall {S T : Type}, Internals.equivT S T -> Internals.equivT T S Internals.equivT_sym is not universe polymorphic Arguments Internals.equivT_sym {S T}%_type_scope _ Internals.equivT_sym is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_sym Declared in library mathcomp.classical.contra, line 79, characters 11-21
Source code {SSource code TSource code} : equivT S T -> equivT T S :=
equivT_transl^~ (equivT_refl S).
Definition equivT_trans
Internals.equivT_trans : forall {S T U : Type}, Internals.equivT S T -> Internals.equivT T U -> Internals.equivT S U Internals.equivT_trans is not universe polymorphic Arguments Internals.equivT_trans {S T U}%_type_scope _ _ Internals.equivT_trans is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_trans Declared in library mathcomp.classical.contra, line 81, characters 11-23
Source code {SSource code TSource code USource code} : equivT S T -> equivT T U -> equivT S U :=
equivT_transl \o equivT_sym.
Definition equivT_transr
Internals.equivT_transr : forall {S T U : Type}, Internals.equivT S T -> Internals.equivT U S -> Internals.equivT U T Internals.equivT_transr is not universe polymorphic Arguments Internals.equivT_transr {S T U}%_type_scope eqST _ Internals.equivT_transr is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_transr Declared in library mathcomp.classical.contra, line 83, characters 11-24
Source code {SSource code TSource code USource code} eqSTSource code : equivT U S -> equivT U T :=
equivT_trans^~ eqST.
Definition equivT_Prop
Internals.equivT_Prop : forall P Q : Prop, Internals.equivT P Q <-> Internals.equivT P Q Internals.equivT_Prop is not universe polymorphic Arguments Internals.equivT_Prop (P Q)%_type_scope Internals.equivT_Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_Prop Declared in library mathcomp.classical.contra, line 85, characters 11-22
Source code (PSource code QSource code : Prop) : (equivT P Q) <-> (equivT P Q).
Proof.
Internals.equivT_LR : forall {S T : Type}, Internals.equivT S T -> S -> T Internals.equivT_LR is not universe polymorphic Arguments Internals.equivT_LR {S T}%_type_scope eq _ Internals.equivT_LR is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_LR Declared in library mathcomp.classical.contra, line 87, characters 11-20
Source code {SSource code TSource code} (eqSource code : equivT S T) : S -> T :=
let: EquivT S_T _ := eq in S_T.
Definition equivT_RL
Internals.equivT_RL : forall {S T : Type}, Internals.equivT S T -> T -> S Internals.equivT_RL is not universe polymorphic Arguments Internals.equivT_RL {S T}%_type_scope eq _ Internals.equivT_RL is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_RL Declared in library mathcomp.classical.contra, line 89, characters 11-20
Source code {SSource code TSource code} (eqSource code : equivT S T) : T -> S :=
let: EquivT _ T_S := eq in T_S.
Hint View for move/ equivT_LR|2 equivT_RL|2.
Hint View for apply/ equivT_RL|2 equivT_LR|2.
Structure forallSortSource code ASource code :=
ForallSort {forall_sortSource code :> Type; _ : (A -> forall_sort) -> forall_sort}.
Notation mkForallSortSource code A S := (@ForallSort A S (fun TSource code => forall xSource code, T x)).
Polymorphic Definition TypeForall
Internals.TypeForall@{u u0} : forall A : Type, Internals.forallSort A Internals.TypeForall is universe polymorphic Arguments Internals.TypeForall A%_type_scope Internals.TypeForall is transparent Expands to: Constant mathcomp.classical.contra.Internals.TypeForall Declared in library mathcomp.classical.contra, line 127, characters 23-33
Source code (SSource code := Type) (ASource code : S) := mkForallSort A S.
Canonical TypeForall.
Canonical PropForall
Internals.PropForall : forall A : Type, Internals.forallSort A Internals.PropForall is not universe polymorphic Arguments Internals.PropForall A%_type_scope Internals.PropForall is transparent Expands to: Constant mathcomp.classical.contra.Internals.PropForall Declared in library mathcomp.classical.contra, line 130, characters 10-20
Source code ASource code := mkForallSort A Prop.
Canonical SetForall
Internals.SetForall : forall A : Set, Internals.forallSort A Internals.SetForall is not universe polymorphic Arguments Internals.SetForall A%_type_scope Internals.SetForall is transparent Expands to: Constant mathcomp.classical.contra.Internals.SetForall Declared in library mathcomp.classical.contra, line 134, characters 10-19
Source code (ASource code : Set) := mkForallSort A Set.
Definition Forall
Internals.Forall : forall {A : Type} {S : Internals.forallSort A}, (A -> Internals.forall_sort S) -> Internals.forall_sort S Internals.Forall is not universe polymorphic Arguments Internals.Forall {A}%_type_scope {S} _%_function_scope Internals.Forall is transparent Expands to: Constant mathcomp.classical.contra.Internals.Forall Declared in library mathcomp.classical.contra, line 136, characters 11-17
Source code {ASource code} {SSource code : forallSort A} :=
let: ForallSort _ F := S return (A -> S) -> S in F.
Notation "\Forall x .. z , T"Source code :=
(Forall (fun xSource code => .. (Forall (fun zSource code => T)) ..))
(at level 200, x binder, z binder, T at level 200,
format "'[hv' '\Forall' '[' x .. z , ']' '/ ' T ']'") : type_scope.
Tactic Notation "ForallI" ssrpatternarg(pat) :=
let F := fresh "F" in ssrmatching.ssrpattern pat => F;
case: F / (@erefl _ F : Forall _ = _).
Tactic Notation "ForallI" := ForallI (forall xSource code, _).
Structure wrappedPropSource code := WrapProp {unwrap_PropSource code :> Prop}.
Definition wrap4Prop
Internals.wrap4Prop : Prop -> Internals.wrappedProp Internals.wrap4Prop is not universe polymorphic Arguments Internals.wrap4Prop unwrap_Prop%_type_scope Internals.wrap4Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap4Prop Declared in library mathcomp.classical.contra, line 172, characters 11-20
Source code := WrapProp.
Definition wrap3Prop
Internals.wrap3Prop : Prop -> Internals.wrappedProp Internals.wrap3Prop is not universe polymorphic Arguments Internals.wrap3Prop unwrap_Prop%_type_scope Internals.wrap3Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap3Prop Declared in library mathcomp.classical.contra, line 173, characters 11-20
Source code := wrap4Prop.
Definition wrap2Prop
Internals.wrap2Prop : Prop -> Internals.wrappedProp Internals.wrap2Prop is not universe polymorphic Arguments Internals.wrap2Prop unwrap_Prop%_type_scope Internals.wrap2Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap2Prop Declared in library mathcomp.classical.contra, line 174, characters 11-20
Source code := wrap3Prop.
Canonical wrap1Prop
Internals.wrap1Prop : Prop -> Internals.wrappedProp Internals.wrap1Prop is not universe polymorphic Arguments Internals.wrap1Prop P%_type_scope Internals.wrap1Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap1Prop Declared in library mathcomp.classical.contra, line 175, characters 10-19
Source code PSource code := wrap2Prop P.
Polymorphic Structure wrappedTypeSource code@{i} := WrapType {unwrap_TypeSource code :> Type@{i}}.
Polymorphic Definition wrap4Type
Internals.wrap4Type@{i} : Type -> Internals.wrappedType Internals.wrap4Type is universe polymorphic Arguments Internals.wrap4Type unwrap_Type%_type_scope Internals.wrap4Type is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap4Type Declared in library mathcomp.classical.contra, line 178, characters 23-32
Source code@{i} := WrapType@{i}.
Polymorphic Definition wrap3Type
Internals.wrap3Type@{i} : Type -> Internals.wrappedType Internals.wrap3Type is universe polymorphic Arguments Internals.wrap3Type unwrap_Type%_type_scope Internals.wrap3Type is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap3Type Declared in library mathcomp.classical.contra, line 179, characters 23-32
Source code@{i} := wrap4Type@{i}.
Polymorphic Definition wrap2Type
Internals.wrap2Type@{i} : Type -> Internals.wrappedType Internals.wrap2Type is universe polymorphic Arguments Internals.wrap2Type unwrap_Type%_type_scope Internals.wrap2Type is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap2Type Declared in library mathcomp.classical.contra, line 180, characters 23-32
Source code@{i} := wrap3Type@{i}.
Polymorphic Definition wrap1Type
Internals.wrap1Type@{i} : Type -> Internals.wrappedType Internals.wrap1Type is universe polymorphic Arguments Internals.wrap1Type T%_type_scope Internals.wrap1Type is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap1Type Declared in library mathcomp.classical.contra, line 181, characters 23-32
Source code@{i} (TSource code : Type@{i}) := wrap2Type T.
Canonical wrap1Type.
Lemma generic_forall_extensionalitySource code {ASource code} {SSource code : forallSort A} {PSource code QSource code : A -> S} :
P =1 Q -> Forall P = Forall Q.
Proof.
Structure negatedPropSource code (trivialSource code : bool) nPSource code :=
NegatedProp {negated_PropSource code :> wrappedProp; _ : (~ negated_Prop) = nP}.
Structure properNegatedPropSource code nPSource code := ProperNegatedProp {
proper_negated_PropSource code :> Prop; _ : (~ proper_negated_Prop) = nP}.
Local Notation nPropSource code t nP P := (unwrap_Prop (@negated_Prop t nP P)).
Local Notation nPredSource code t nP P x := (nProp t (nP x) (P x)).
Local Notation pnPropSource code nP P := (@proper_negated_Prop nP P).
Lemma lax_notESource code {tSource code nPSource code} PSource code : (~ nProp t nP P) = nP
Proof.
- mathcomp.analysis.topology_theory.metric_structure
- mathcomp.classical.wochoice
Source code {tSource code nPSource code PSource code} : ~ nProp t nP P -> nP
Proof.
Internals.lax_notI : forall {t : bool} {nP : Prop} (P : Internals.negatedProp t nP), Internals.unwrap_Prop (Internals.negated_Prop P) = (~ nP) Internals.lax_notI is not universe polymorphic Arguments Internals.lax_notI {t}%_bool_scope {nP}%_type_scope P Internals.lax_notI is transparent Expands to: Constant mathcomp.classical.contra.Internals.lax_notI Declared in library mathcomp.classical.contra, line 270, characters 11-19
Source code {tSource code nPSource code} PSource code : nProp t nP P = (~ nP) := canRL notK (lax_notE P).
#[warn(note="A different `notE` used to be provided by `boolp.v` before MathComp-Analysis 1.15.0.")]
Definition notE
Internals.notE : forall {nP : Prop} (P : Internals.negatedProp false nP), (~ Internals.unwrap_Prop (Internals.negated_Prop P)) = nP Internals.notE is not universe polymorphic Arguments Internals.notE {nP}%_type_scope P Internals.notE is transparent Expands to: Constant mathcomp.classical.contra.Internals.notE Declared in library mathcomp.classical.contra, line 273, characters 11-15
Source code {nPSource code} PSource code : (~ nProp false nP P) = nP := lax_notE P.
#[warn(note="A different `notP` used to be provided by `boolp.v` before MathComp-Analysis 1.15.0.")]
Definition notP
Internals.notP : forall {nP : Prop} {P : Internals.negatedProp false nP}, Internals.move_view (~ Internals.unwrap_Prop (Internals.negated_Prop P)) nP Internals.notP is not universe polymorphic Arguments Internals.notP {nP}%_type_scope {P} Internals.notP is transparent Expands to: Constant mathcomp.classical.contra.Internals.notP Declared in library mathcomp.classical.contra, line 275, characters 11-15
Source code {nPSource code PSource code} := MoveView (@lax_notP false nP P).
Fact proper_nPropPSource code nPSource code PSource code : (~ pnProp nP P) = nP
Proof.
Internals.notI : forall {nP : Prop} (P : Internals.properNegatedProp nP), Internals.proper_negated_Prop P = (~ nP) Internals.notI is not universe polymorphic Arguments Internals.notI {nP}%_type_scope P Internals.notI is transparent Expands to: Constant mathcomp.classical.contra.Internals.notI Declared in library mathcomp.classical.contra, line 278, characters 11-15
Source code {nPSource code} PSource code : pnProp nP P = (~ nP) := canRL notK (proper_nPropP P).
Internals.proper_nProp : forall [nP : Prop], Internals.properNegatedProp nP -> Internals.negatedProp false nP Internals.proper_nProp is not universe polymorphic Arguments Internals.proper_nProp [nP]%_type_scope P Internals.proper_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.proper_nProp Declared in library mathcomp.classical.contra, line 281, characters 10-22
Source code nPSource code PSource code :=
@NegatedProp false nP (wrap1Prop (pnProp nP P)) (proper_nPropP P).
Internals.trivial_nProp : forall P : Prop, Internals.negatedProp true (~ P) Internals.trivial_nProp is not universe polymorphic Arguments Internals.trivial_nProp P%_type_scope Internals.trivial_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.trivial_nProp Declared in library mathcomp.classical.contra, line 287, characters 10-23
Source code PSource code := @NegatedProp true (~ P) (wrap3Prop P) erefl.
Canonical True_nProp
Internals.True_nProp : Internals.properNegatedProp False Internals.True_nProp is not universe polymorphic Internals.True_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.True_nProp Declared in library mathcomp.classical.contra, line 291, characters 10-20
Source code := @ProperNegatedProp False True notB.1.
Canonical False_nProp
Internals.False_nProp : Internals.properNegatedProp True Internals.False_nProp is not universe polymorphic Internals.False_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.False_nProp Declared in library mathcomp.classical.contra, line 292, characters 10-21
Source code := @ProperNegatedProp True False notB.2.
Canonical not_nProp
Internals.not_nProp : forall P : Prop, Internals.properNegatedProp P Internals.not_nProp is not universe polymorphic Arguments Internals.not_nProp P%_type_scope Internals.not_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.not_nProp Declared in library mathcomp.classical.contra, line 293, characters 10-19
Source code PSource code := @ProperNegatedProp P (~ P) (notK P).
Fact and_nPropPSource code PSource code tQSource code nQSource code QSource code : (~ (P /\ nProp tQ nQ Q)) = (P -> nQ).
Canonical and_nProp
Internals.and_nProp : forall (P : Prop) [tQ : bool] [nQ : Prop], Internals.negatedProp tQ nQ -> Internals.properNegatedProp (P -> nQ) Internals.and_nProp is not universe polymorphic Arguments Internals.and_nProp P%_type_scope [tQ]%_bool_scope [nQ]%_type_scope Q Internals.and_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and_nProp Declared in library mathcomp.classical.contra, line 297, characters 10-19
Source code PSource code tQSource code nQSource code QSource code :=
ProperNegatedProp (@and_nPropP P tQ nQ Q).
Fact and3_nPropPSource code PSource code QSource code tRSource code nRSource code RSource code : (~ [/\ P, Q & nProp tR nR R]) = (P -> Q -> nR).
Canonical and3_nProp
Internals.and3_nProp : forall (P Q : Prop) [tR : bool] [nR : Prop], Internals.negatedProp tR nR -> Internals.properNegatedProp (P -> Q -> nR) Internals.and3_nProp is not universe polymorphic Arguments Internals.and3_nProp (P Q)%_type_scope [tR]%_bool_scope [nR]%_type_scope R Internals.and3_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and3_nProp Declared in library mathcomp.classical.contra, line 302, characters 10-20
Source code PSource code QSource code tRSource code nRSource code RSource code :=
ProperNegatedProp (@and3_nPropP P Q tR nR R).
Fact and4_nPropPSource code PSource code QSource code RSource code tSSource code nSSource code SSource code :
(~ [/\ P, Q, R & nProp tS nS S]) = (P -> Q -> R -> nS).
Canonical and4_nProp
Internals.and4_nProp : forall (P Q R : Prop) [tS : bool] [nS : Prop], Internals.negatedProp tS nS -> Internals.properNegatedProp (P -> Q -> R -> nS) Internals.and4_nProp is not universe polymorphic Arguments Internals.and4_nProp (P Q R)%_type_scope [tS]%_bool_scope [nS]%_type_scope S Internals.and4_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and4_nProp Declared in library mathcomp.classical.contra, line 308, characters 10-20
Source code PSource code QSource code RSource code tSSource code nSSource code SSource code :=
ProperNegatedProp (@and4_nPropP P Q R tS nS S).
Fact and5_nPropPSource code PSource code QSource code RSource code SSource code tTSource code nTSource code TSource code :
(~ [/\ P, Q, R, S & nProp tT nT T]) = (P -> Q -> R -> S -> nT).
Canonical and5_nProp
Internals.and5_nProp : forall (P Q R S : Prop) [tT : bool] [nT : Prop], Internals.negatedProp tT nT -> Internals.properNegatedProp (P -> Q -> R -> S -> nT) Internals.and5_nProp is not universe polymorphic Arguments Internals.and5_nProp (P Q R S)%_type_scope [tT]%_bool_scope [nT]%_type_scope T Internals.and5_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and5_nProp Declared in library mathcomp.classical.contra, line 314, characters 10-20
Source code PSource code QSource code RSource code SSource code tTSource code nTSource code TSource code :=
ProperNegatedProp (@and5_nPropP P Q R S tT nT T).
Fact or_nPropPSource code tPSource code nPSource code PSource code tQSource code nQSource code QSource code :
(~ (nProp tP nP P \/ nProp tQ nQ Q)) = (nP /\ nQ).
Canonical or_nProp
Internals.or_nProp : forall [tP : bool] [nP : Prop], Internals.negatedProp tP nP -> forall [tQ : bool] [nQ : Prop], Internals.negatedProp tQ nQ -> Internals.properNegatedProp (nP /\ nQ) Internals.or_nProp is not universe polymorphic Arguments Internals.or_nProp [tP]%_bool_scope [nP]%_type_scope P [tQ]%_bool_scope [nQ]%_type_scope Q Internals.or_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.or_nProp Declared in library mathcomp.classical.contra, line 320, characters 10-18
Source code tPSource code nPSource code PSource code tQSource code nQSource code QSource code :=
ProperNegatedProp (@or_nPropP tP nP P tQ nQ Q).
Fact or3_nPropPSource code tPSource code nPSource code PSource code tQSource code nQSource code QSource code tRSource code nRSource code RSource code :
(~ [\/ nProp tP nP P, nProp tQ nQ Q | nProp tR nR R]) = [/\ nP, nQ & nR].
Canonical or3_nProp
Internals.or3_nProp : forall [tP : bool] [nP : Prop], Internals.negatedProp tP nP -> forall [tQ : bool] [nQ : Prop], Internals.negatedProp tQ nQ -> forall [tR : bool] [nR : Prop], Internals.negatedProp tR nR -> Internals.properNegatedProp [/\ nP, nQ & nR] Internals.or3_nProp is not universe polymorphic Arguments Internals.or3_nProp [tP]%_bool_scope [nP]%_type_scope P [tQ]%_bool_scope [nQ]%_type_scope Q [tR]%_bool_scope [nR]%_type_scope R Internals.or3_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.or3_nProp Declared in library mathcomp.classical.contra, line 326, characters 10-19
Source code tPSource code nPSource code PSource code tQSource code nQSource code QSource code tRSource code nRSource code RSource code :=
ProperNegatedProp (@or3_nPropP tP nP P tQ nQ Q tR nR R).
Fact or4_nPropPSource code tPSource code nPSource code PSource code tQSource code nQSource code QSource code tRSource code nRSource code RSource code tSSource code nSSource code SSource code :
(~ [\/ nProp tP nP P, nProp tQ nQ Q, nProp tR nR R | nProp tS nS S])
= [/\ nP, nQ, nR & nS].
Canonical or4_nProp
Internals.or4_nProp : forall [tP : bool] [nP : Prop], Internals.negatedProp tP nP -> forall [tQ : bool] [nQ : Prop], Internals.negatedProp tQ nQ -> forall [tR : bool] [nR : Prop], Internals.negatedProp tR nR -> forall [tS : bool] [nS : Prop], Internals.negatedProp tS nS -> Internals.properNegatedProp [/\ nP, nQ, nR & nS] Internals.or4_nProp is not universe polymorphic Arguments Internals.or4_nProp [tP]%_bool_scope [nP]%_type_scope P [tQ]%_bool_scope [nQ]%_type_scope Q [tR]%_bool_scope [nR]%_type_scope R [tS]%_bool_scope [nS]%_type_scope S Internals.or4_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.or4_nProp Declared in library mathcomp.classical.contra, line 333, characters 10-19
Source code tPSource code nPSource code PSource code tQSource code nQSource code QSource code tRSource code nRSource code RSource code tSSource code nSSource code SSource code :=
ProperNegatedProp (@or4_nPropP tP nP P tQ nQ Q tR nR R tS nS S).
Notation and_defSource code binary P Q PQ := (PQ = if binary then P /\ Q else Q)%type.
Structure andRHSSource code binarySource code PSource code QSource code PQSource code :=
AndRHS {and_RHSSource code :> Prop; _ : (P /\ and_RHS) = PQ; _ : and_def binary P Q PQ}.
Canonical unary_and_rhs
Internals.unary_and_rhs : forall P : Prop, Internals.andRHS false P P P Internals.unary_and_rhs is not universe polymorphic Arguments Internals.unary_and_rhs P%_type_scope Internals.unary_and_rhs is transparent Expands to: Constant mathcomp.classical.contra.Internals.unary_and_rhs Declared in library mathcomp.classical.contra, line 347, characters 10-23
Source code PSource code := @AndRHS false P P P True (andB.1.2 P) erefl.
Canonical binary_and_rhs
Internals.binary_and_rhs : forall P Q : Prop, Internals.andRHS true P Q (P /\ Q) Internals.binary_and_rhs is not universe polymorphic Arguments Internals.binary_and_rhs (P Q)%_type_scope Internals.binary_and_rhs is transparent Expands to: Constant mathcomp.classical.contra.Internals.binary_and_rhs Declared in library mathcomp.classical.contra, line 348, characters 10-24
Source code PSource code QSource code := @AndRHS true P Q (P /\ Q) Q erefl erefl.
Fact imply_nPropPSource code bSource code PSource code nQSource code PnQSource code tRSource code (nRSource code : andRHS b P nQ PnQ) RSource code :
(~ (P -> nProp tR nR R)) = PnQ.
Canonical imply_nProp
Internals.imply_nProp : forall [b : bool] [P nQ PnQ : Prop] [tR : bool] [nR : Internals.andRHS b P nQ PnQ], Internals.negatedProp tR (Internals.and_RHS nR) -> Internals.properNegatedProp PnQ Internals.imply_nProp is not universe polymorphic Arguments Internals.imply_nProp [b]%_bool_scope [P nQ PnQ]%_type_scope [tR]%_bool_scope [nR] R Internals.imply_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.imply_nProp Declared in library mathcomp.classical.contra, line 353, characters 10-21
Source code bSource code PSource code nQSource code PnQSource code tRSource code nRSource code RSource code :=
ProperNegatedProp (@imply_nPropP b P nQ PnQ tR nR R).
Fact exists_nPropPSource code ASource code tPSource code nPSource code PSource code :
(~ exists xSource code : A, nPred tP nP P x) = (forall xSource code : A, nP x).
Proof.
Internals.exists_nProp : forall [A : Type] [tP : bool] [nP : A -> Prop], (forall x : A, Internals.negatedProp tP (nP x)) -> Internals.properNegatedProp (forall x : A, nP x) Internals.exists_nProp is not universe polymorphic Arguments Internals.exists_nProp [A]%_type_scope [tP]%_bool_scope [nP]%_function_scope P%_function_scope Internals.exists_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.exists_nProp Declared in library mathcomp.classical.contra, line 362, characters 10-22
Source code ASource code tPSource code nPSource code PSource code :=
ProperNegatedProp (@exists_nPropP A tP nP P).
Fact exists2_nPropPSource code ASource code PSource code tQSource code nQSource code QSource code :
(~ exists2 xSource code : A, P x & nPred tQ nQ Q x) = (forall xSource code : A, P x -> nQ x).
Canonical exists2_nProp
Internals.exists2_nProp : forall [A : Type] (P : A -> Prop) [tQ : bool] [nQ : A -> Prop], (forall x : A, Internals.negatedProp tQ (nQ x)) -> Internals.properNegatedProp (forall x : A, P x -> nQ x) Internals.exists2_nProp is not universe polymorphic Arguments Internals.exists2_nProp [A]%_type_scope P%_function_scope [tQ]%_bool_scope [nQ]%_function_scope Q%_function_scope Internals.exists2_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.exists2_nProp Declared in library mathcomp.classical.contra, line 368, characters 10-23
Source code ASource code PSource code tQSource code nQSource code QSource code :=
ProperNegatedProp (@exists2_nPropP A P tQ nQ Q).
Fact inhabited_nPropPSource code TSource code : (~ inhabited T) = (T -> False).
Proof.
Internals.inhabited_nProp : forall T : Type, Internals.properNegatedProp (T -> False) Internals.inhabited_nProp is not universe polymorphic Arguments Internals.inhabited_nProp T%_type_scope Internals.inhabited_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.inhabited_nProp Declared in library mathcomp.classical.contra, line 373, characters 10-25
Source code TSource code := ProperNegatedProp (inhabited_nPropP T).
Structure negatedForallBodySource code boundedSource code PSource code nQSource code tRSource code nRSource code := NegatedForallBody {
negated_forall_bodySource code :> negatedProp tR nR; _ : and_def bounded P nQ nR}.
Structure properNegatedForallBodySource code bSource code PSource code nQSource code nRSource code := ProperNegatedForallBody {
proper_negated_forall_bodySource code :> properNegatedProp nR; _ : and_def b P nQ nR}.
Notation nBodySource code b P nQ t nR x := (negatedForallBody b (P x) (nQ x) t (nR x)).
Fact forall_nPropPSource code ASource code bSource code PSource code nQSource code tRSource code nRSource code (RSource code : forall xSource code, nBody b P nQ tR nR x) :
(~ forall xSource code : A, R x) = if b then exists2 xSource code, P x & nQ x else exists xSource code, nQ x.
Proof.
apply/generic_forall_extensionality=> x; rewrite if_arg lax_notI.
by case: (R x) => _ <-.
Qed.
Internals.forall_nProp : forall [A : Type] [b : bool] [P nQ : A -> Prop] [tR : bool] [nR : A -> Prop], (forall x : A, Internals.negatedForallBody b (P x) (nQ x) tR (nR x)) -> Internals.negatedProp false (if b then exists2 x : A, P x & nQ x else exists x : A, nQ x) Internals.forall_nProp is not universe polymorphic Arguments Internals.forall_nProp [A]%_type_scope [b]%_bool_scope [P nQ]%_function_scope [tR]%_bool_scope [nR]%_function_scope R%_function_scope Internals.forall_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.forall_nProp Declared in library mathcomp.classical.contra, line 409, characters 10-22
Source code ASource code bSource code PSource code nQSource code tRSource code nRSource code (RSource code : forall xSource code, nBody b P nQ tR nR x) :=
@NegatedProp false _ (wrap2Prop (forall xSource code : A, R x)) (forall_nPropP R).
Fact proper_nBodyPSource code bSource code PSource code nQSource code nRSource code :
properNegatedForallBody b P nQ nR -> and_def b P nQ nR.
Proof.
Internals.proper_nBody : forall [b : bool] [P nQ nR : Prop], Internals.properNegatedForallBody b P nQ nR -> Internals.negatedForallBody b P nQ false nR Internals.proper_nBody is not universe polymorphic Arguments Internals.proper_nBody [b]%_bool_scope [P nQ nR]%_type_scope R Internals.proper_nBody is transparent Expands to: Constant mathcomp.classical.contra.Internals.proper_nBody Declared in library mathcomp.classical.contra, line 415, characters 10-22
Source code bSource code PSource code nQSource code nRSource code RSource code :=
let def_nRSource code := @proper_nBodyP b P nQ nR R in
@NegatedForallBody b P nQ false nR (proper_nProp R) def_nR.
Canonical nonproper_nBody
Internals.nonproper_nBody : forall [tP : bool] [nP : Prop], Internals.negatedProp tP nP -> Internals.negatedForallBody false True nP tP nP Internals.nonproper_nBody is not universe polymorphic Arguments Internals.nonproper_nBody [tP]%_bool_scope [nP]%_type_scope P Internals.nonproper_nBody is transparent Expands to: Constant mathcomp.classical.contra.Internals.nonproper_nBody Declared in library mathcomp.classical.contra, line 418, characters 10-25
Source code tPSource code nPSource code PSource code :=
@NegatedForallBody false True nP tP nP P erefl.
Fact andRHS_defSource code bSource code PSource code QSource code PQSource code : andRHS b P Q PQ -> and_def b P Q PQ.
Proof.
Internals.bounded_nBody : forall [b : bool] [P nQ PnQ : Prop] [tR : bool] [nR : Internals.andRHS b P nQ PnQ], Internals.negatedProp tR (Internals.and_RHS nR) -> Internals.properNegatedForallBody b P nQ PnQ Internals.bounded_nBody is not universe polymorphic Arguments Internals.bounded_nBody [b]%_bool_scope [P nQ PnQ]%_type_scope [tR]%_bool_scope [nR] R Internals.bounded_nBody is transparent Expands to: Constant mathcomp.classical.contra.Internals.bounded_nBody Declared in library mathcomp.classical.contra, line 423, characters 10-23
Source code bSource code PSource code nQSource code PnQSource code tRSource code nRSource code RSource code :=
ProperNegatedForallBody (@imply_nProp b P nQ PnQ tR nR R) (andRHS_def nR).
Canonical unbounded_nBody
Internals.unbounded_nBody : forall [nQ : Prop], Internals.properNegatedProp nQ -> Internals.properNegatedForallBody false True nQ nQ Internals.unbounded_nBody is not universe polymorphic Arguments Internals.unbounded_nBody [nQ]%_type_scope Q Internals.unbounded_nBody is transparent Expands to: Constant mathcomp.classical.contra.Internals.unbounded_nBody Declared in library mathcomp.classical.contra, line 425, characters 10-25
Source code nQSource code QSource code :=
@ProperNegatedForallBody false True nQ nQ Q erefl.
Structure negatedBoolSource code nPSource code :=
NegatedBool {negated_boolSource code :> bool; _ : (~ negated_bool) = nP}.
Structure positedBoolSource code PSource code :=
PositedBool {posited_boolSource code :> bool; _ : is_true posited_bool = P}.
Local Fact is_true_nPropPSource code nPSource code (bSource code : negatedBool nP) : (~ b) = nP.
Proof.
Internals.is_true_nProp : forall [nP : Prop], Internals.negatedBool nP -> Internals.properNegatedProp nP Internals.is_true_nProp is not universe polymorphic Arguments Internals.is_true_nProp [nP]%_type_scope b Internals.is_true_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.is_true_nProp Declared in library mathcomp.classical.contra, line 448, characters 10-23
Source code nPSource code bSource code := ProperNegatedProp (@is_true_nPropP nP b).
Local Fact true_negPSource code : (~ true) = False
Proof.
Proof.
Proof.
Proof.
Internals.true_neg : Internals.negatedBool False Internals.true_neg is not universe polymorphic Internals.true_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.true_neg Declared in library mathcomp.classical.contra, line 454, characters 10-18
Source code := NegatedBool true_negP.
Canonical true_pos
Internals.true_pos : Internals.positedBool True Internals.true_pos is not universe polymorphic Internals.true_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.true_pos Declared in library mathcomp.classical.contra, line 455, characters 10-18
Source code := PositedBool true_posP.
Canonical false_neg
Internals.false_neg : Internals.negatedBool True Internals.false_neg is not universe polymorphic Internals.false_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.false_neg Declared in library mathcomp.classical.contra, line 456, characters 10-19
Source code := NegatedBool false_negP.
Canonical false_pos
Internals.false_pos : Internals.positedBool False Internals.false_pos is not universe polymorphic Internals.false_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.false_pos Declared in library mathcomp.classical.contra, line 457, characters 10-19
Source code := PositedBool false_posP.
Local Fact id_negPSource code (bSource code : bool) : (~ b) = ~~ b
Proof.
Internals.id_neg : forall b : bool, Internals.negatedBool (~~ b) Internals.id_neg is not universe polymorphic Arguments Internals.id_neg b%_bool_scope Internals.id_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.id_neg Declared in library mathcomp.classical.contra, line 460, characters 10-16
Source code bSource code := NegatedBool (id_negP b).
Canonical id_pos
Internals.id_pos : forall b : bool, Internals.positedBool b Internals.id_pos is not universe polymorphic Arguments Internals.id_pos b%_bool_scope Internals.id_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.id_pos Declared in library mathcomp.classical.contra, line 461, characters 10-16
Source code (bSource code : bool) := @PositedBool b b erefl.
Local Fact negb_negPSource code PSource code (bSource code : positedBool P) : (~ ~~ b) = P.
Proof.
Internals.negb_neg : forall [P : Prop], Internals.positedBool P -> Internals.negatedBool P Internals.negb_neg is not universe polymorphic Arguments Internals.negb_neg [P]%_type_scope b Internals.negb_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.negb_neg Declared in library mathcomp.classical.contra, line 465, characters 10-18
Source code PSource code bSource code := NegatedBool (@negb_negP P b).
Local Fact negb_posPSource code nPSource code (bSource code : negatedBool nP) : (~~ b = nP :> Prop).
Proof.
Internals.negb_pos : forall [nP : Prop], Internals.negatedBool nP -> Internals.positedBool nP Internals.negb_pos is not universe polymorphic Arguments Internals.negb_pos [nP]%_type_scope b Internals.negb_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.negb_pos Declared in library mathcomp.classical.contra, line 468, characters 10-18
Source code nPSource code bSource code := PositedBool (@negb_posP nP b).
Structure negatedLeqLHSSource code nSource code lt_nmSource code :=
NegatedLeqLHS {negated_leq_LHSSource code :> nat; _ : (n < negated_leq_LHS) = lt_nm}.
Canonical neg_ltn_LHS
Internals.neg_ltn_LHS : forall n m : nat, Internals.negatedLeqLHS n (n <= m) Internals.neg_ltn_LHS is not universe polymorphic Arguments Internals.neg_ltn_LHS (n m)%_nat_scope Internals.neg_ltn_LHS is transparent Expands to: Constant mathcomp.classical.contra.Internals.neg_ltn_LHS Declared in library mathcomp.classical.contra, line 479, characters 10-21
Source code nSource code mSource code := @NegatedLeqLHS n (n <= m) m.+1 erefl.
Canonical neg_leq_LHS
Internals.neg_leq_LHS : forall n m : nat, Internals.negatedLeqLHS n (n < m) Internals.neg_leq_LHS is not universe polymorphic Arguments Internals.neg_leq_LHS (n m)%_nat_scope Internals.neg_leq_LHS is transparent Expands to: Constant mathcomp.classical.contra.Internals.neg_leq_LHS Declared in library mathcomp.classical.contra, line 480, characters 10-21
Source code nSource code mSource code := @NegatedLeqLHS n (n < m) m erefl.
Local Fact leq_negPSource code nSource code lt_nmSource code (mSource code : negatedLeqLHS n lt_nm) : (~ m <= n) = lt_nm.
Canonical leq_neg
Internals.leq_neg : forall [n : nat] [lt_nm : bool], Internals.negatedLeqLHS n lt_nm -> Internals.negatedBool lt_nm Internals.leq_neg is not universe polymorphic Arguments Internals.leq_neg [n]%_nat_scope [lt_nm]%_bool_scope m Internals.leq_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.leq_neg Declared in library mathcomp.classical.contra, line 484, characters 10-17
Source code nSource code lt_nmSource code mSource code := NegatedBool (@leq_negP n lt_nm m).
Structure neqRHSSource code nPSource code TSource code xSource code :=
NeqRHS {neq_RHSSource code :> wrapped T; _ : (x <> unwrap neq_RHS) = nP}.
Structure boolNeqRHSSource code nPSource code (xSource code : bool) :=
BoolNeqRHS {bool_neq_RHSSource code; _ : (x <> bool_neq_RHS) = nP}.
Local Fact eq_nPropPSource code nPSource code TSource code xSource code (ySource code : neqRHS nP x) : (x <> unwrap y :> T) = nP.
Proof.
Internals.eq_nProp : forall [nP : Prop] [T : Type] [x : T], Internals.neqRHS nP x -> Internals.properNegatedProp nP Internals.eq_nProp is not universe polymorphic Arguments Internals.eq_nProp [nP T]%_type_scope [x] y Internals.eq_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.eq_nProp Declared in library mathcomp.classical.contra, line 505, characters 10-18
Source code nPSource code TSource code xSource code ySource code := ProperNegatedProp (@eq_nPropP nP T x y).
Local Fact bool_neqPSource code nPSource code xSource code ySource code : (x <> @bool_neq_RHS nP x y) = nP.
Proof.
Internals.bool_neq : forall [nP : Prop] [x : bool], Internals.boolNeqRHS nP x -> Internals.neqRHS nP x Internals.bool_neq is not universe polymorphic Arguments Internals.bool_neq [nP]%_type_scope [x]%_bool_scope y Internals.bool_neq is transparent Expands to: Constant mathcomp.classical.contra.Internals.bool_neq Declared in library mathcomp.classical.contra, line 509, characters 10-18
Source code nPSource code xSource code ySource code := @NeqRHS nP bool x (wrap _) (@bool_neqP nP x y).
Canonical true_neq
Internals.true_neq : forall [nP : Prop] (b : Internals.negatedBool nP), Internals.boolNeqRHS nP (Internals.negated_bool b) Internals.true_neq is not universe polymorphic Arguments Internals.true_neq [nP]%_type_scope b Internals.true_neq is transparent Expands to: Constant mathcomp.classical.contra.Internals.true_neq Declared in library mathcomp.classical.contra, line 510, characters 10-18
Source code nPSource code bSource code := BoolNeqRHS (@is_true_nPropP nP b).
Local Fact false_neqPSource code PSource code (bSource code : positedBool P) : (b <> false :> bool) = P.
Proof.
Internals.false_neq : forall [P : Prop] (b : Internals.positedBool P), Internals.boolNeqRHS P (Internals.posited_bool b) Internals.false_neq is not universe polymorphic Arguments Internals.false_neq [P]%_type_scope b Internals.false_neq is transparent Expands to: Constant mathcomp.classical.contra.Internals.false_neq Declared in library mathcomp.classical.contra, line 513, characters 10-19
Source code PSource code bSource code := BoolNeqRHS (@false_neqP P b).
Local Fact eqType_neqPSource code (TSource code : eqType) (xSource code ySource code : T) : (x <> y) = (x != y).
Proof.
Internals.eqType_neq : forall [T : eqType] (x y : T), Internals.neqRHS (x != y) x Internals.eqType_neq is not universe polymorphic Arguments Internals.eqType_neq [T] x y Internals.eqType_neq is transparent Expands to: Constant mathcomp.classical.contra.Internals.eqType_neq Declared in library mathcomp.classical.contra, line 517, characters 10-20
Source code (TSource code : eqType) xSource code ySource code :=
@NeqRHS (x != y) T x (Wrap y) (eqType_neqP x y).
Local Fact eq_op_posPSource code (TSource code : eqType) xSource code ySource code : (x == y :> T : Prop) = (x = y).
Proof.
Internals.eq_op_pos : forall [T : eqType] (x y : T), Internals.positedBool (x = y) Internals.eq_op_pos is not universe polymorphic Arguments Internals.eq_op_pos [T] x y Internals.eq_op_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.eq_op_pos Declared in library mathcomp.classical.contra, line 521, characters 10-19
Source code TSource code xSource code ySource code := PositedBool (@eq_op_posP T x y).
Structure witnessedTypeSource code PSource code := WitnessedType {
witnessed_TypeSource code :> wrappedType; _ : inhabited witnessed_Type = P}.
Structure properWitnessedTypeSource code PSource code := ProperWitnessedType {
proper_witnessed_TypeSource code :> Type; _ : inhabited proper_witnessed_Type = P}.
Local Notation wTypeSource code P T := (unwrap_Type (@witnessed_Type P T)).
Local Notation wTyconSource code P T x := (wType (P x) (T x)).
Lemma witnessedType_introSource code {PSource code : Prop} TSource code : P -> wType P T.
Proof.
Lemma witnessedType_elimSource code {PSource code} TSource code : wType P T -> P.
Proof.
Local Fact eq_inhabitedSource code TSource code (PSource code : Prop) : (T -> P) -> (P -> T) -> inhabited T = P.
Proof.
Internals.Prop_wType : forall P : Prop, Internals.witnessedType P Internals.Prop_wType is not universe polymorphic Arguments Internals.Prop_wType P%_type_scope Internals.Prop_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.Prop_wType Declared in library mathcomp.classical.contra, line 568, characters 10-20
Source code PSource code :=
@WitnessedType P (wrap1Type P) (eq_inhabited (@id P) id).
Proof.
Internals.proper_wType : forall [P : Prop], Internals.properWitnessedType P -> Internals.witnessedType P Internals.proper_wType is not universe polymorphic Arguments Internals.proper_wType [P]%_type_scope T Internals.proper_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.proper_wType Declared in library mathcomp.classical.contra, line 575, characters 10-22
Source code PSource code TSource code :=
@WitnessedType P (wrap2Type _) (@proper_wTypeP P T).
inhabited (forall xSource code : A, wTycon P T x) = (forall xSource code : A, P x) .
Proof.
Internals.forall_wType : forall [A : Type] [P : A -> Prop], (forall x : A, Internals.witnessedType (P x)) -> Internals.witnessedType (forall x : A, P x) Internals.forall_wType is not universe polymorphic Arguments Internals.forall_wType [A]%_type_scope [P]%_function_scope T%_function_scope Internals.forall_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.forall_wType Declared in library mathcomp.classical.contra, line 582, characters 10-22
Source code ASource code PSource code TSource code :=
@WitnessedType _ (wrap3Type _) (@forall_wTypeP A P T).
Internals.inhabited_wType : forall T : Type, Internals.witnessedType (inhabited T) Internals.inhabited_wType is not universe polymorphic Arguments Internals.inhabited_wType T%_type_scope Internals.inhabited_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.inhabited_wType Declared in library mathcomp.classical.contra, line 586, characters 10-25
Source code TSource code := @WitnessedType (inhabited T) (wrap4Type T) erefl.
Local Fact void_wTypePSource code : inhabited void = False
Proof.
Internals.void_wType : Internals.properWitnessedType False Internals.void_wType is not universe polymorphic Internals.void_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.void_wType Declared in library mathcomp.classical.contra, line 591, characters 10-20
Source code := ProperWitnessedType void_wTypeP.
Local Fact unit_wTypePSource code : inhabited unit = True
Proof.
Internals.unit_wType : Internals.properWitnessedType True Internals.unit_wType is not universe polymorphic Internals.unit_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.unit_wType Declared in library mathcomp.classical.contra, line 594, characters 10-20
Source code := ProperWitnessedType unit_wTypeP.
Local Fact pair_wTypePSource code PSource code QSource code SSource code TSource code : inhabited (wType P S * wType Q T) = (P /\ Q).
Canonical pair_wType
Internals.pair_wType : forall [P Q : Prop], Internals.witnessedType P -> Internals.witnessedType Q -> Internals.properWitnessedType (P /\ Q) Internals.pair_wType is not universe polymorphic Arguments Internals.pair_wType [P Q]%_type_scope S T Internals.pair_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.pair_wType Declared in library mathcomp.classical.contra, line 598, characters 10-20
Source code PSource code QSource code SSource code TSource code := ProperWitnessedType (@pair_wTypeP P Q S T).
Local Fact sum_wTypePSource code PSource code QSource code SSource code TSource code : inhabited (wType P S + wType Q T) = (P \/ Q).
Canonical sum_wType
Internals.sum_wType : forall [P Q : Prop], Internals.witnessedType P -> Internals.witnessedType Q -> Internals.properWitnessedType (P \/ Q) Internals.sum_wType is not universe polymorphic Arguments Internals.sum_wType [P Q]%_type_scope S T Internals.sum_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sum_wType Declared in library mathcomp.classical.contra, line 602, characters 10-19
Source code PSource code QSource code SSource code TSource code := ProperWitnessedType (@sum_wTypeP P Q S T).
Local Fact sumbool_wTypePSource code PSource code QSource code : inhabited ({P} + {Q}) = (P \/ Q).
Proof.
Internals.sumbool_wType : forall P Q : Prop, Internals.properWitnessedType (P \/ Q) Internals.sumbool_wType is not universe polymorphic Arguments Internals.sumbool_wType (P Q)%_type_scope Internals.sumbool_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sumbool_wType Declared in library mathcomp.classical.contra, line 606, characters 10-23
Source code PSource code QSource code := ProperWitnessedType (@sumbool_wTypeP P Q).
Local Fact sumor_wTypePSource code PSource code QSource code TSource code : inhabited (wType P T + {Q}) = (P \/ Q).
Canonical sumor_wType
Internals.sumor_wType : forall [P : Prop] (Q : Prop), Internals.witnessedType P -> Internals.properWitnessedType (P \/ Q) Internals.sumor_wType is not universe polymorphic Arguments Internals.sumor_wType [P]%_type_scope Q%_type_scope T Internals.sumor_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sumor_wType Declared in library mathcomp.classical.contra, line 610, characters 10-21
Source code PSource code QSource code TSource code := ProperWitnessedType (@sumor_wTypeP P Q T).
Local Fact sig1_wTypePSource code TSource code PSource code : inhabited {xSource code : T | P x} = (exists xSource code : T, P x).
Proof.
Internals.sig1_wType : forall [T : Type] (P : T -> Prop), Internals.properWitnessedType (exists x : T, P x) Internals.sig1_wType is not universe polymorphic Arguments Internals.sig1_wType [T]%_type_scope P%_function_scope Internals.sig1_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sig1_wType Declared in library mathcomp.classical.contra, line 614, characters 10-20
Source code TSource code PSource code := ProperWitnessedType (@sig1_wTypeP T P).
Local Fact sig2_wTypePSource code TSource code PSource code QSource code :
inhabited {xSource code : T | P x & Q x} = exists2 xSource code : T, P x & Q x.
Proof.
Internals.sig2_wType : forall [T : Type] (P Q : T -> Prop), Internals.properWitnessedType (exists2 x : T, P x & Q x) Internals.sig2_wType is not universe polymorphic Arguments Internals.sig2_wType [T]%_type_scope (P Q)%_function_scope Internals.sig2_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sig2_wType Declared in library mathcomp.classical.contra, line 619, characters 10-20
Source code TSource code PSource code QSource code := ProperWitnessedType (@sig2_wTypeP T P Q).
Local Fact sigT_wTypePSource code ASource code PSource code TSource code :
inhabited {xSource code : A & wTycon P T x} = (exists xSource code : A, P x).
Canonical sigT_wType
Internals.sigT_wType : forall [A : Type] [P : A -> Prop], (forall x : A, Internals.witnessedType (P x)) -> Internals.properWitnessedType (exists x : A, P x) Internals.sigT_wType is not universe polymorphic Arguments Internals.sigT_wType [A]%_type_scope [P]%_function_scope T%_function_scope Internals.sigT_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sigT_wType Declared in library mathcomp.classical.contra, line 624, characters 10-20
Source code ASource code PSource code TSource code := ProperWitnessedType (@sigT_wTypeP A P T).
Local Fact sigT2_wTypePSource code ASource code PSource code QSource code SSource code TSource code :
inhabited {xSource code : A & wTycon P S x & wTycon Q T x} = (exists2 xSource code : A, P x & Q x).
Canonical sigT2_wType
Internals.sigT2_wType : forall [A : Type] [P Q : A -> Prop], (forall x : A, Internals.witnessedType (P x)) -> (forall x : A, Internals.witnessedType (Q x)) -> Internals.properWitnessedType (exists2 x : A, P x & Q x) Internals.sigT2_wType is not universe polymorphic Arguments Internals.sigT2_wType [A]%_type_scope [P Q]%_function_scope (S T)%_function_scope Internals.sigT2_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sigT2_wType Declared in library mathcomp.classical.contra, line 629, characters 10-21
Source code ASource code PSource code QSource code SSource code TSource code :=
ProperWitnessedType (@sigT2_wTypeP A P Q S T).
Structure witnessPropSource code (trivialSource code : bool) (P0Source code : Prop) (TSource code : Type) :=
WitnessProp {witness_PropSource code :> wrappedProp; _ : witness_Prop -> T * P0}.
Structure properWitnessPropSource code TSource code :=
ProperWitnessProp {proper_witness_PropSource code :> Prop; _ : proper_witness_Prop -> T}.
Local Notation wPropSource code t T P0 P := (unwrap_Prop (@witness_Prop t P0 T P)).
Local Notation wPredSource code t T P0 P x := (wProp t (T x) (P0 x) (P x)).
Local Fact wPropPSource code tSource code TSource code P0Source code PSource code : wProp t T P0 P -> T * P0
Proof.
- mathcomp.analysis.functional_analysis.hahn_banach_theorem
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.metric_structure
- mathcomp.analysis.topology_theory.topology_structure
- mathcomp.analysis.topology_theory.num_topology
- mathcomp.analysis.derive
- mathcomp.analysis.sequences
- mathcomp.reals.reals
- mathcomp.classical.wochoice
Source code {tSource code TSource code P0Source code PSource code} : move_view (wProp t T P0 P) T.
Proof.
Internals.witness : forall {T : Type} {P0 : Prop} {P : Internals.witnessProp false P0 T}, Internals.move_view (Internals.unwrap_Prop (Internals.witness_Prop P)) T Internals.witness is not universe polymorphic Arguments Internals.witness {T P0}%_type_scope {P} Internals.witness is transparent Expands to: Constant mathcomp.classical.contra.Internals.witness Declared in library mathcomp.classical.contra, line 691, characters 11-18
Source code {TSource code P0Source code PSource code} := @lax_witness false T P0 P.
Proof.
Internals.proper_wProp : forall [T : Type], Internals.properWitnessProp T -> Internals.witnessProp false True T Internals.proper_wProp is not universe polymorphic Arguments Internals.proper_wProp [T]%_type_scope P Internals.proper_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.proper_wProp Declared in library mathcomp.classical.contra, line 697, characters 10-22
Source code TSource code PSource code := WitnessProp false (@proper_wPropP T P).
wrap2Prop (forall xSource code : A, wPred false T P0 P x) -> (forall xSource code, T x) * True.
Proof.
Internals.forall_wProp : forall [A : Type] [T : A -> Type] [P0 : A -> Prop], (forall x : A, Internals.witnessProp false (P0 x) (T x)) -> Internals.witnessProp false True (forall x : A, T x) Internals.forall_wProp is not universe polymorphic Arguments Internals.forall_wProp [A]%_type_scope [T P0]%_function_scope P%_function_scope Internals.forall_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.forall_wProp Declared in library mathcomp.classical.contra, line 704, characters 10-22
Source code ASource code TSource code P0Source code PSource code := WitnessProp false (@forall_wPropP A T P0 P).
Internals.trivial_wProp : forall P : Prop, Internals.witnessProp true P P Internals.trivial_wProp is not universe polymorphic Arguments Internals.trivial_wProp P%_type_scope Internals.trivial_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.trivial_wProp Declared in library mathcomp.classical.contra, line 707, characters 10-23
Source code PSource code :=
WitnessProp true (fun pSource code : wrap3Prop P => (p, p) : P * P).
Canonical inhabited_wProp
Internals.inhabited_wProp : forall T : Type, Internals.properWitnessProp T Internals.inhabited_wProp is not universe polymorphic Arguments Internals.inhabited_wProp T%_type_scope Internals.inhabited_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.inhabited_wProp Declared in library mathcomp.classical.contra, line 712, characters 10-25
Source code TSource code := ProperWitnessProp (@inhabited_witness T).
Structure nandBoolSource code bSource code := NandBool {nand_boolSource code :> bool; _ : ~~ (nand_bool && b)}.
Canonical nand_false_bool
Internals.nand_false_bool : forall b : bool, Internals.nandBool b Internals.nand_false_bool is not universe polymorphic Arguments Internals.nand_false_bool b%_bool_scope Internals.nand_false_bool is transparent Expands to: Constant mathcomp.classical.contra.Internals.nand_false_bool Declared in library mathcomp.classical.contra, line 724, characters 10-25
Source code bSource code := @NandBool b false isT.
Canonical nand_true_bool
Internals.nand_true_bool : Internals.nandBool false Internals.nand_true_bool is not universe polymorphic Internals.nand_true_bool is transparent Expands to: Constant mathcomp.classical.contra.Internals.nand_true_bool Declared in library mathcomp.classical.contra, line 725, characters 10-24
Source code := @NandBool false true isT.
Local Fact and_wPropPSource code sSource code SSource code P0Source code PSource code (tSource code : nandBool s) TSource code Q0Source code QSource code :
wProp s S P0 P /\ wProp t T Q0 Q -> S * T.
Proof.
Internals.and_wProp : forall [s : bool] [S : Type] [P0 : Prop], Internals.witnessProp s P0 S -> forall [t : Internals.nandBool s] [T : Type] [Q0 : Prop], Internals.witnessProp (Internals.nand_bool t) Q0 T -> Internals.properWitnessProp (S * T) Internals.and_wProp is not universe polymorphic Arguments Internals.and_wProp [s]%_bool_scope [S P0]%_type_scope P [t] [T Q0]%_type_scope Q Internals.and_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and_wProp Declared in library mathcomp.classical.contra, line 730, characters 10-19
Source code sSource code SSource code P0Source code PSource code tSource code TSource code Q0Source code QSource code :=
ProperWitnessProp (@and_wPropP s S P0 P t T Q0 Q).
Local Fact or_wPropPSource code sSource code SSource code P0Source code PSource code tSource code TSource code Q0Source code QSource code :
wProp s S P0 P \/ wProp t T Q0 Q ->
if t then if s then {P0} + {Q0} : Type else S + {Q0} else S + T : Type.
Canonical or_wProp
Internals.or_wProp : forall [s : bool] [S : Type] [P0 : Prop], Internals.witnessProp s P0 S -> forall [t : bool] [T : Type] [Q0 : Prop], Internals.witnessProp t Q0 T -> Internals.properWitnessProp (if t then if s then {P0} + {Q0} : Type else S + {Q0} else S + T : Type) Internals.or_wProp is not universe polymorphic Arguments Internals.or_wProp [s]%_bool_scope [S P0]%_type_scope P [t]%_bool_scope [T Q0]%_type_scope Q Internals.or_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.or_wProp Declared in library mathcomp.classical.contra, line 742, characters 10-18
Source code sSource code SSource code P0Source code PSource code tSource code TSource code Q0Source code QSource code :=
ProperWitnessProp (@or_wPropP s S P0 P t T Q0 Q).
Local Fact exists_wPropPSource code ASource code tSource code TSource code P0Source code PSource code :
(exists xSource code : A, wPred t T P0 P x) -> if t then {xSource code | P0 x} else {xSource code & T x}.
Canonical exists_wProp
Internals.exists_wProp : forall [A : Type] [t : bool] [T : A -> Type] [P0 : A -> Prop], (forall x : A, Internals.witnessProp t (P0 x) (T x)) -> Internals.properWitnessProp (if t then {x : A | P0 x} else {x : A & T x}) Internals.exists_wProp is not universe polymorphic Arguments Internals.exists_wProp [A]%_type_scope [t]%_bool_scope [T P0]%_function_scope P%_function_scope Internals.exists_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.exists_wProp Declared in library mathcomp.classical.contra, line 748, characters 10-22
Source code ASource code tSource code TSource code P0Source code PSource code :=
ProperWitnessProp (@exists_wPropP A t T P0 P).
Local Fact exists2_wPropPSource code ASource code sSource code SSource code P0Source code PSource code tSource code TSource code Q0Source code QSource code (stSource code := if s then t else false) :
(exists2 xSource code : A, wPred s S P0 P x & wPred t T Q0 Q x) ->
if st then {xSource code | P0 x & Q0 x} else {xSource code : A & S x & T x}.
Canonical exists2_wProp
Internals.exists2_wProp : forall [A : Type] [s : bool] [S : A -> Type] [P0 : A -> Prop], (forall x : A, Internals.witnessProp s (P0 x) (S x)) -> forall [t : bool] [T : A -> Type] [Q0 : A -> Prop], (forall x : A, Internals.witnessProp t (Q0 x) (T x)) -> Internals.properWitnessProp (if if s then t else false then {x : A | P0 x & Q0 x} else {x : A & S x & T x}) Internals.exists2_wProp is not universe polymorphic Arguments Internals.exists2_wProp [A]%_type_scope [s]%_bool_scope [S P0]%_function_scope P%_function_scope [t]%_bool_scope [T Q0]%_function_scope Q%_function_scope Internals.exists2_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.exists2_wProp Declared in library mathcomp.classical.contra, line 757, characters 10-23
Source code ASource code sSource code SSource code P0Source code PSource code tSource code TSource code Q0Source code QSource code :=
ProperWitnessProp (@exists2_wPropP A s S P0 P t T Q0 Q).
Local Fact push_goal_copySource code {TSource code} : ((T -> T) -> T) -> T
Proof.
Proof.
Local Fact absurdWSource code {SSource code TSource code} : (S -> False) -> S -> T
Proof.
Local Fact contra_TypeSource code {PSource code QSource code SSource code TSource code} : (~ Q -> ~ P) -> wType P S -> wType Q T.
Local Fact contra_notPSource code tPSource code tQSource code (nPSource code nQSource code : Prop) PSource code QSource code :
(nP -> nQ) -> (~ nProp tP nP P -> ~ nProp tQ nQ Q).
Proof.
End Internals.
Import Internals.
#[warnings="-user-warn"] Definition notP
notP : forall {nP : Prop} {P : negatedProp false nP}, move_view (~ P) nP notP is not universe polymorphic Arguments notP {nP}%_type_scope {P} notP is transparent Expands to: Constant mathcomp.classical.contra.Internals.notP Declared in library mathcomp.classical.contra, line 275, characters 11-15
Used by
- mathcomp.classical.wochoice
Source code := @Internals.notP.
Hint View for move/ move_viewP|2.
Hint View for move/ Internals.equivT_LR|2 Internals.equivT_RL|2.
Hint View for apply/ Internals.equivT_RL|2 Internals.equivT_LR|2.
Export (canonicals) Internals.
Lemma assume_notSource code {PSource code} : (~ P -> P) -> P
Ltac assume_not :=
apply: Internals.push_goal_copy; apply: Internals.assume_not_with
=> /Internals.lax_notP-/Internals.lax_witness.
Ltac absurd_not := assume_not; apply: Internals.absurdW.
Ltac contrapose :=
apply: Internals.contra_Type;
apply: Internals.contra_notP => /Internals.lax_witness.
Tactic Notation "contra" := contrapose.
Tactic Notation "contra" ":" constr(H) := move: (H); contra.
Tactic Notation "contra" ":" ident(H) := move: H; contra.
Tactic Notation "contra" ":" "{" hyp_list(Hs) "}" constr(H) :=
contra: (H); clear Hs.
Tactic Notation "contra" ":" "{" hyp_list(Hs) "}" ident(H) :=
contra: H; clear Hs.
Tactic Notation "contra" ":" "{" "-" "}" constr(H) := contra: (H).
Lemma absurdSource code TSource code : False -> T
Proof.
Tactic Notation (at level 0) "absurd" constr(P) := have []: ~ P.
Tactic Notation "absurd" ":" constr(H) := absurd; contra: (H) => _.
Tactic Notation "absurd" ":" ident(H) := absurd; contra: H => _.
Tactic Notation "absurd" ":" "{" hyp_list(Hs) "}" constr(H) :=
absurd: (H) => _; clear Hs.
Tactic Notation "absurd" ":" "{" hyp_list(Hs) "}" ident(H) :=
absurd: H => _; clear Hs.